From 2de5936e5af170f3fe2a069d6378032ce9a6e35e Mon Sep 17 00:00:00 2001 From: alexchao26 Date: Sat, 9 Nov 2019 16:55:00 -0500 Subject: [PATCH 01/10] some bug fixes. still have the big one of modifying entrypoint and port number to go --- README.md | 11 +- package-lock.json | 2171 +---------------- package.json | 6 +- src/extension.ts | 50 +- .../{findEntryPoint.ts => parseConfigFile.ts} | 14 +- .../client/readFileSendReqAndWriteResponse.ts | 9 +- src/modules/server/checkForRunningServer.ts | 38 +- 7 files changed, 184 insertions(+), 2115 deletions(-) rename src/modules/client/{findEntryPoint.ts => parseConfigFile.ts} (78%) diff --git a/README.md b/README.md index 1d3ed98..099b30e 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,12 @@ # graphquill README -hi world the actual extension is a bit more interesting... +Design Specifications: + +# VS Code Extension Commands + 1. GraphQuill: Activate + 2. GraphQuill: Deactivate + 3. GraphQuill: Toggle (Start/Stop) + 4. GraphQuill: Create Config File + +# Explainations for each Extension Command + 1. \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index bb81d02..86026c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -164,11 +164,6 @@ } } }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, "acorn": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", @@ -202,14 +197,6 @@ "uri-js": "^4.2.2" } }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "requires": { - "string-width": "^2.0.0" - } - }, "ansi-colors": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", @@ -228,35 +215,18 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "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" } }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, "arg": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.1.tgz", @@ -282,21 +252,6 @@ "commander": "^2.11.0" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "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==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, "array-includes": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", @@ -307,22 +262,12 @@ "es-abstract": "^1.7.0" } }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "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=" - }, "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -335,16 +280,6 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, "axobject-query": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", @@ -357,113 +292,19 @@ "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==", - "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=", - "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==", - "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==", - "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==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - } + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "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==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -476,38 +317,12 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "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==", - "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" - } - }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" - }, "chai": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", @@ -526,6 +341,7 @@ "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", @@ -544,56 +360,6 @@ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "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.1" - } - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" - }, - "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==", - "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=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" - }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -654,19 +420,11 @@ } } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, "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==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -674,7 +432,8 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, "commander": { "version": "2.20.3", @@ -682,28 +441,11 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "confusing-browser-globals": { "version": "1.0.9", @@ -717,39 +459,6 @@ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "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=" - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" - }, "damerau-levenshtein": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", @@ -760,6 +469,7 @@ "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" }, @@ -767,7 +477,8 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, @@ -777,11 +488,6 @@ "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=" - }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -791,11 +497,6 @@ "type-detect": "^4.0.0" } }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -811,43 +512,6 @@ "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==", - "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==", - "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==", - "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==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", @@ -863,19 +527,6 @@ "esutils": "^2.0.2" } }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "requires": { - "is-obj": "^1.0.0" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -938,7 +589,8 @@ "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=" + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, "eslint": { "version": "6.6.0", @@ -1303,79 +955,6 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "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": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "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==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -1387,65 +966,6 @@ "tmp": "^0.0.33" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "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=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.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==", - "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==", - "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==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", @@ -1482,27 +1002,6 @@ "flat-cache": "^2.0.1" } }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -1546,545 +1045,41 @@ "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", "dev": true }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": 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, - "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, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": 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, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": 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, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": 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, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": 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, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": 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, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": 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, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": 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 - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": 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 - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "glob": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", - "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==", - "dev": 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 + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": 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 + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "glob": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", + "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2094,61 +1089,17 @@ "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=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "requires": { - "ini": "^1.3.4" - } - }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, "graceful-fs": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true }, "growl": { "version": "1.10.5", @@ -2168,7 +1119,8 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, "has-symbols": { "version": "1.0.0", @@ -2176,35 +1128,6 @@ "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=", - "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=", - "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=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -2263,11 +1186,6 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" - }, "import-fresh": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", @@ -2278,15 +1196,11 @@ "resolve-from": "^4.0.0" } }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" - }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true }, "inflight": { "version": "1.0.6", @@ -2301,12 +1215,8 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "inquirer": { "version": "7.0.0", @@ -2363,185 +1273,51 @@ } } }, - "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=", - "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=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "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=", - "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==" - }, "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "requires": { - "ci-info": "^1.5.0" - } - }, - "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=", - "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=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "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==", - "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==" - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "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=" + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "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==", + "dev": true, "requires": { "is-extglob": "^2.1.1" } }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "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=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - }, - "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=", - "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==", - "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-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" - }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", @@ -2551,16 +1327,6 @@ "has": "^1.0.1" } }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, "is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", @@ -2570,25 +1336,17 @@ "has-symbols": "^1.0.0" } }, - "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==" - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, "js-tokens": { "version": "4.0.0", @@ -2628,19 +1386,6 @@ "object.assign": "^4.1.0" } }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "requires": { - "package-json": "^4.0.0" - } - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -2711,67 +1456,12 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "requires": { - "pify": "^3.0.0" - } - }, "make-error": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", "dev": true }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "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" - } - }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -2782,34 +1472,11 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "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==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -2935,7 +1602,8 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, "mute-stream": { "version": "0.0.8", @@ -2943,30 +1611,6 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "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" - } - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -2994,31 +1638,6 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" }, - "nodemon": { - "version": "1.19.4", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.19.4.tgz", - "integrity": "sha512-VGPaqQBNk193lrJFotBU8nvWZPqEZY2eIzymy2jjY0fJ9qIsxA0sxQ8ATPl0gZC645gijYEc1jtZvpS8QWzJGQ==", - "requires": { - "chokidar": "^2.1.8", - "debug": "^3.2.6", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", - "semver": "^5.7.1", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.2", - "update-notifier": "^2.5.0" - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "requires": { - "abbrev": "1" - } - }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -3031,53 +1650,12 @@ "validate-npm-package-license": "^3.0.1" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, - "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=", - "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=", - "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=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, + "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-inspect": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", @@ -3090,14 +1668,6 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "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=", - "requires": { - "isobject": "^3.0.0" - } - }, "object.assign": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", @@ -3144,14 +1714,6 @@ "es-abstract": "^1.5.1" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - } - }, "object.values": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", @@ -3202,11 +1764,6 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -3231,17 +1788,6 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3260,16 +1806,6 @@ "error-ex": "^1.2.0" } }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -3279,17 +1815,14 @@ "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=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true }, "path-parse": { "version": "1.0.6", @@ -3320,11 +1853,6 @@ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", "dev": true }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -3334,27 +1862,12 @@ "find-up": "^2.1.0" } }, - "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=" - }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -3372,16 +1885,6 @@ "react-is": "^16.8.1" } }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "pstree.remy": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz", - "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==" - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -3394,17 +1897,6 @@ "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==", "dev": true }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, "react-is": { "version": "16.11.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.11.0.tgz", @@ -3432,83 +1924,18 @@ "read-pkg": "^2.0.0" } }, - "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==", - "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" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, "regenerator-runtime": { "version": "0.13.3", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", "dev": true }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, - "registry-auth-token": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "requires": { - "rc": "^1.0.1" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -3536,11 +1963,6 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -3551,11 +1973,6 @@ "signal-exit": "^3.0.2" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -3583,19 +2000,6 @@ "tslib": "^1.9.0" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -3605,15 +2009,8 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "requires": { - "semver": "^5.0.3" - } + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true }, "set-blocking": { "version": "2.0.0", @@ -3621,31 +2018,11 @@ "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==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -3653,12 +2030,14 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true }, "slice-ansi": { "version": "2.1.0", @@ -3671,128 +2050,6 @@ "is-fullwidth-code-point": "^2.0.0" } }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "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": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^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==", - "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=", - "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==", - "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==", - "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==", - "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==", - "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=", - "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=" - }, - "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==", - "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-support": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", @@ -3811,11 +2068,6 @@ } } }, - "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=" - }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -3848,43 +2100,17 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, - "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==", - "requires": { - "extend-shallow": "^3.0.0" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "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=", - "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=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "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" @@ -3910,18 +2136,11 @@ "function-bind": "^1.1.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==", - "requires": { - "safe-buffer": "~5.1.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" } @@ -3932,20 +2151,17 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, "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=" + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "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" } @@ -3996,14 +2212,6 @@ } } }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "requires": { - "execa": "^0.7.0" - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4016,11 +2224,6 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -4030,52 +2233,6 @@ "os-tmpdir": "~1.0.2" } }, - "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=", - "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=", - "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==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "requires": { - "nopt": "~1.0.10" - } - }, "ts-node": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.4.1.tgz", @@ -4139,106 +2296,6 @@ "integrity": "sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==", "dev": true }, - "undefsafe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", - "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", - "requires": { - "debug": "^2.2.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "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==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "requires": { - "crypto-random-string": "^1.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=", - "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=", - "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=", - "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=" - } - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -4248,29 +2305,6 @@ "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "requires": { - "prepend-http": "^1.0.1" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, "v8-compile-cache": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", @@ -4302,6 +2336,7 @@ "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" } @@ -4321,14 +2356,6 @@ "string-width": "^1.0.2 || 2" } }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "requires": { - "string-width": "^2.1.1" - } - }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -4395,32 +2422,12 @@ "mkdirp": "^0.5.1" } }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" - }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, "yargs": { "version": "13.3.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", diff --git a/package.json b/package.json index 09a2197..abc3a10 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,8 @@ { "name": "graphquill", "displayName": "GraphQuill", - "description": "", + "description": "Welcome to a new era of GraphQL API devleopment.", + "icon": "./out/graphquill-logo.png", "publisher": "sproutdeveloping", "version": "0.4.0", "repository": { @@ -73,7 +74,6 @@ "vscode-test": "^1.2.0" }, "dependencies": { - "node-fetch": "^2.6.0", - "nodemon": "^1.19.4" + "node-fetch": "^2.6.0" } } diff --git a/src/extension.ts b/src/extension.ts index 60c2dfd..9bd1494 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -27,7 +27,7 @@ const checkForRunningServer = require('./modules/server/checkForRunningServer.js // require in file that finds root directory const findRootDirectory = require('./modules/client/findRootDirectory.js'); // require in file that returns entryPoint when given the root path -const findEntryPoint = require('./modules/client/findEntryPoint.js'); +const parseConfigFile = require('./modules/client/parseConfigFile.js'); // require in file that finds port# const findPortNumber = require('./modules/client/findPortNumber.js'); @@ -53,14 +53,18 @@ export function activate(context: vscode.ExtensionContext) { // set rootPath and entryPoint to a string of the path to the server startup file (has app.listen) const rootPath = findRootDirectory(); - const entryPoint = findEntryPoint(rootPath); - console.log('rootpath is', rootPath); - console.log('entry point is', entryPoint); + // ! make these mutable and re-check for them where needed... + const { entryPoint, allowServerTimeoutConfigSetting } = parseConfigFile(rootPath); + // console.log('rootpath is', rootPath); + // console.log('entry point is', entryPoint); + // console.log('allowerServerTimeout Config Setting is', allowServerTimeoutConfigSetting); + // ! make these mutable and re-check for them where needed... // set portNumber to a string const portNumber = findPortNumber(entryPoint); - console.log('port number is', portNumber); + // console.log('port number is', portNumber); + // boolean to track if the server has been successfully turned on by the user let serverTurnedOnByGraphQuill = false; /** ********************************************************************************************** @@ -77,34 +81,46 @@ export function activate(context: vscode.ExtensionContext) { return null; } + // show output channel + gqChannel.show(true); + // Check ONCE if the port is open // will resolve to a true or false value const serverOnFromUser = await checkForRunningServer(portNumber, true); console.log('--serverOnFromUser after once check is:', serverOnFromUser); - + // trigger serverOn if the user does not already have the server running if (!serverOnFromUser) { serverOn(entryPoint); - serverTurnedOnByGraphQuill = await checkForRunningServer(portNumber, false); + + // await this function that will return true or false based on if the server has been started + // false: if starting the server is longer than the time allotted in the config file (defaults + // to 3 seconds) + serverTurnedOnByGraphQuill = await checkForRunningServer(portNumber, + false, // once setting is false + allowServerTimeoutConfigSetting); // allowServerTCS is either a time in ms or undefined + + // if it is false, that means there was an error starting the server if (!serverTurnedOnByGraphQuill) { - // if this call resolves to false, that means there was an error starting the server - // send a message to the user to check their server file - // TODO - // break out - return null; + // console.log('server is taking too long to startup'); + + // give feedback to user that port didn't start + gqChannel.append(`The server is taking too long to startup (>${allowServerTimeoutConfigSetting / 1000} seconds).\nTo increase this time, update the "serverStartupTimeAllowed" setting in the graphquill.config.js file.`); + + // break out, and just in case I'm going to try to kill the port if it did open + // otherwise we could get runaway node processes... + return setTimeout(() => serverOff(portNumber), 5000); } } if (serverOnFromUser || serverTurnedOnByGraphQuill) { // update isOnToggle (refers to state of GraphQuill extension running or not) isOnToggle = true; - // show output channel - gqChannel.show(true); // get the fileName of the open file when the extension is FIRST fired const currOpenEditorPath: string = vscode.window.activeTextEditor!.document.fileName; // send that request from the currentopeneditor - readFileSendReqAndWriteResponse(currOpenEditorPath, gqChannel, portNumber); + readFileSendReqAndWriteResponse(currOpenEditorPath, gqChannel, portNumber, rootPath); // initialize the save listener here to clear the channel and resend new requests saveListener = vscode.workspace.onDidSaveTextDocument((event) => { @@ -114,7 +130,7 @@ export function activate(context: vscode.ExtensionContext) { gqChannel.clear(); // send the filename and channel to the readFileSRAWR function - readFileSendReqAndWriteResponse(event.fileName, gqChannel, portNumber); + readFileSendReqAndWriteResponse(event.fileName, gqChannel, portNumber, rootPath); }); } @@ -200,7 +216,7 @@ export function activate(context: vscode.ExtensionContext) { // if it does not already exist, write to a new file fs.writeFileSync(graphQuillConfigPath, // string to populate the file with - 'module.exports = {\n // change "./server/index.js" to the relative path from the root directory to\n // the file that starts your server\n entry: \'./server/index.js\',\n};\n', + 'module.exports = {\n // change "./server/index.js" to the relative path from the root directory to\n // the file that starts your server\n entry: \'./server/index.js\',\n\n // to increase the amount of time allowed for the server to startup, add a time\n // in milliseconds (integer) to the "serverStartupTimeAllowed"\n // serverStartupTimeAllowed: 5000,\n};\n', 'utf-8'); // open the file in vscode diff --git a/src/modules/client/findEntryPoint.ts b/src/modules/client/parseConfigFile.ts similarity index 78% rename from src/modules/client/findEntryPoint.ts rename to src/modules/client/parseConfigFile.ts index 766bbdc..ae83048 100644 --- a/src/modules/client/findEntryPoint.ts +++ b/src/modules/client/parseConfigFile.ts @@ -4,7 +4,7 @@ /** * @author : Alex Chao - * @function : return the entryPoint path in a string + * @function : return an object with the entryPoint and the allowServerTimeoutConfigSetting * @param : none * @returns : an array with the root directory AND the entryPoint strings * @changelog : ##WHOEVER CHANGES THE FILE, date, details @@ -17,18 +17,22 @@ import * as vscode from 'vscode'; const fs = require('fs'); const path = require('path'); -function findEntryPoint(rootPath: string) { +function parseConfigFile(rootPath: string) { // find config file in root directory const gqConfigFilePath = `${rootPath}/graphquill.config.js`; let entryPoint : string; + let allowServerTimeoutConfigSetting : number|undefined; + if (fs.existsSync(gqConfigFilePath)) { // if the config file exists, require it in (will come in as an object) const configObject = require(`${gqConfigFilePath}`); // set the entry point to the absolute path (root + relative entry path) - // todo this won't work if the path needs to resolve... add path.resolve into this? entryPoint = path.resolve(rootPath, configObject.entry); + + // set the servertimeout config setting + allowServerTimeoutConfigSetting = configObject.serverStartupTimeAllowed; } else { // default it to the current open editor if there is not a config file entryPoint = vscode.window.activeTextEditor!.document.fileName; @@ -38,7 +42,7 @@ function findEntryPoint(rootPath: string) { } // return the array with the two results, to be destrucutred when the function is invoked - return entryPoint; + return { entryPoint, allowServerTimeoutConfigSetting }; } -module.exports = findEntryPoint; +module.exports = parseConfigFile; diff --git a/src/modules/client/readFileSendReqAndWriteResponse.ts b/src/modules/client/readFileSendReqAndWriteResponse.ts index 2483886..c509e98 100644 --- a/src/modules/client/readFileSendReqAndWriteResponse.ts +++ b/src/modules/client/readFileSendReqAndWriteResponse.ts @@ -39,10 +39,15 @@ function readFileSendReqAndWriteResponse( filePath: string, channel: vscode.OutputChannel, portNumber: string, + rootPath: string, // passing the root path in to control the function def. injection ) { // console.log('inreadFile: ', filePath); + + // parse the contents of the entire filePath file to a string const copy = fs.readFileSync(filePath).toString(); - if (!copy.includes('function graphQuill')) { + // check if the file is within the root directory, otherwise we don't want to inject the + // function defintion + if (filePath.includes(rootPath) && !copy.includes('function graphQuill')) { const newFile = `function graphQuill() {}\n\n${copy}`; fs.writeFileSync(filePath, newFile); } @@ -110,7 +115,7 @@ function readFileSendReqAndWriteResponse( // then send response back to vscode output channel // console.log('parsed queries are', result); // TODO match these up with the correct queries when there are multiple within a single file - channel.append(`GraphQuill Queries are:\n${result.filter((e : string|Error) => (typeof e === 'string' ? e.length : 0))}\n`); + channel.append(`GraphQuill Queries are:\n${result.filter((e : string|Error) => (typeof e === 'string' ? e.length : false))}\n`); channel.show(true); } }); diff --git a/src/modules/server/checkForRunningServer.ts b/src/modules/server/checkForRunningServer.ts index 6b4e5e4..0d1b6f8 100644 --- a/src/modules/server/checkForRunningServer.ts +++ b/src/modules/server/checkForRunningServer.ts @@ -2,7 +2,7 @@ * @module : checkForRunningServer.ts * @author : Alex Chao * @function : uses child process and lsof to check if a port is currently running - * @param : pass in an instance of a terminal????? + * @param : * @changelog : ##WHOEVER CHANGES THE FILE, date, details * * */ @@ -15,7 +15,11 @@ const childProcess = require('child_process'); // todo remove this rule when the funciton is done... // eslint-disable-next-line no-unused-vars -const checkForRunningServer = (portNumber: string, once: boolean) => { +const checkForRunningServer = ( + portNumber: string, + once: boolean, + allowServerTimeoutConfigSetting: number|undefined, +) => { console.log('CHECK FOR RUNNING SERVER IS RUNNINGGGGGG'); // moved this line into the serverOn file so that each time serverOn is called @@ -52,6 +56,10 @@ const checkForRunningServer = (portNumber: string, once: boolean) => { return new Promise((resolve) => { let numRuns = 0; + let timeoutId: NodeJS.Timer; + // A set interval callback that will write a command to the terminal every 200ms, then check + // if the portOpen boolean has been changed (it is actually changed in the on-data listener + // above). Promise will resolve when the portOpen variable is true const intervalWriteBash = setInterval(() => { bashTerminal.stdin.write(`lsof -i :${portNumber}\n`); // console.log('inside promise-- portOpen boolean', portOpen); @@ -61,7 +69,8 @@ const checkForRunningServer = (portNumber: string, once: boolean) => { if (portOpen) { // clear set intervals clearInterval(intervalWriteBash); - // clearInterval(consoleShit); + // clear the timeoutId if it's + if (timeoutId) clearTimeout(timeoutId); // end terminal session bashTerminal.stdin.end(); @@ -90,11 +99,30 @@ const checkForRunningServer = (portNumber: string, once: boolean) => { resolve(portOpen); } + // increment numRuns for the once conditional test numRuns += 1; + }, 200); // Run every 200ms + + // TODO default setTimeout after 2.5 seconds + // default/base case to resolve promise if the server hasn't started in 3 seconds + // This means the server is either spinning up too slowly or there is an error n the user's + // server starting file. In either case we want to return false for the next piece of middleware + if (!once) { + // only create this default timeout if this function was invoked with once === false + timeoutId = setTimeout(() => { + console.log('timeout of checkForRunningServer'); + // clear set intervals + clearInterval(intervalWriteBash); + // clearInterval(consoleShit); + + // end terminal session + bashTerminal.stdin.end(); - // TODO default setTimeout after 2.5 seconds - }, 200); + // resolve the promise + resolve(false); + }, allowServerTimeoutConfigSetting || 3000); // default the allowed server timeout to 3 sec. + } }); // this message pops up to the user upon completion of the command From d8a1b1698347d8d1c49a572071f16c8967d9280a Mon Sep 17 00:00:00 2001 From: alexchao26 Date: Sun, 10 Nov 2019 21:49:36 -0500 Subject: [PATCH 02/10] webpack added. I hope I didn't break anything... --- .vscode/launch.json | 2 +- .vscodeignore | 4 +- dist/extension.js | 2771 +++++++++++ dist/extension.js.map | 1 + package-lock.json | 4431 ++++++++++++++++- package.json | 12 +- src/extension.ts | 126 +- src/modules/client/extractQueries.ts | 4 +- src/modules/client/findRootDirectory.ts | 2 +- src/modules/client/parseConfigFile.ts | 13 +- src/modules/client/parseQuery.ts | 41 - .../client/readFileSendReqAndWriteResponse.ts | 5 +- src/modules/server/checkForRunningServer.ts | 57 +- webpack.config.js | 43 + 14 files changed, 7264 insertions(+), 248 deletions(-) create mode 100644 dist/extension.js create mode 100644 dist/extension.js.map create mode 100644 webpack.config.js diff --git a/.vscode/launch.json b/.vscode/launch.json index 412ef8a..a61c4df 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -44,7 +44,7 @@ "outFiles": [ "${workspaceFolder}/out/test/**/*.js" ], - "preLaunchTask": "npm: watch" + "preLaunchTask": "npm: test-compile" } ] } diff --git a/.vscodeignore b/.vscodeignore index ed3f9d3..9ad24ad 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -1,10 +1,10 @@ .vscode/** .vscode-test/** -out/test/** +out/** src/** +.eslintrc .gitignore vsc-extension-quickstart.md **/tsconfig.json -**/tslint.json **/*.map **/*.ts \ No newline at end of file diff --git a/dist/extension.js b/dist/extension.js new file mode 100644 index 0000000..9870425 --- /dev/null +++ b/dist/extension.js @@ -0,0 +1,2771 @@ +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; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // 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 = "./src/extension.ts"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./node_modules/node-fetch/lib/index.mjs": +/*!***********************************************!*\ + !*** ./node_modules/node-fetch/lib/index.mjs ***! + \***********************************************/ +/*! exports provided: default, Headers, Request, Response, FetchError */ +/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Headers", function() { return Headers; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Request", function() { return Request; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Response", function() { return Response; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FetchError", function() { return FetchError; }); +/* harmony import */ var stream__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! stream */ "stream"); +/* harmony import */ var http__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! http */ "http"); +/* harmony import */ var url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! url */ "url"); +/* harmony import */ var https__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! https */ "https"); +/* harmony import */ var zlib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! zlib */ "zlib"); + + + + + + +// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js + +// fix for "Readable" isn't a named export issue +const Readable = stream__WEBPACK_IMPORTED_MODULE_0__.Readable; + +const BUFFER = Symbol('buffer'); +const TYPE = Symbol('type'); + +class Blob { + constructor() { + this[TYPE] = ''; + + const blobParts = arguments[0]; + const options = arguments[1]; + + const buffers = []; + let size = 0; + + if (blobParts) { + const a = blobParts; + const length = Number(a.length); + for (let i = 0; i < length; i++) { + const element = a[i]; + let buffer; + if (element instanceof Buffer) { + buffer = element; + } else if (ArrayBuffer.isView(element)) { + buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength); + } else if (element instanceof ArrayBuffer) { + buffer = Buffer.from(element); + } else if (element instanceof Blob) { + buffer = element[BUFFER]; + } else { + buffer = Buffer.from(typeof element === 'string' ? element : String(element)); + } + size += buffer.length; + buffers.push(buffer); + } + } + + this[BUFFER] = Buffer.concat(buffers); + + let type = options && options.type !== undefined && String(options.type).toLowerCase(); + if (type && !/[^\u0020-\u007E]/.test(type)) { + this[TYPE] = type; + } + } + get size() { + return this[BUFFER].length; + } + get type() { + return this[TYPE]; + } + text() { + return Promise.resolve(this[BUFFER].toString()); + } + arrayBuffer() { + const buf = this[BUFFER]; + const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); + return Promise.resolve(ab); + } + stream() { + const readable = new Readable(); + readable._read = function () {}; + readable.push(this[BUFFER]); + readable.push(null); + return readable; + } + toString() { + return '[object Blob]'; + } + slice() { + const size = this.size; + + const start = arguments[0]; + const end = arguments[1]; + let relativeStart, relativeEnd; + if (start === undefined) { + relativeStart = 0; + } else if (start < 0) { + relativeStart = Math.max(size + start, 0); + } else { + relativeStart = Math.min(start, size); + } + if (end === undefined) { + relativeEnd = size; + } else if (end < 0) { + relativeEnd = Math.max(size + end, 0); + } else { + relativeEnd = Math.min(end, size); + } + const span = Math.max(relativeEnd - relativeStart, 0); + + const buffer = this[BUFFER]; + const slicedBuffer = buffer.slice(relativeStart, relativeStart + span); + const blob = new Blob([], { type: arguments[2] }); + blob[BUFFER] = slicedBuffer; + return blob; + } +} + +Object.defineProperties(Blob.prototype, { + size: { enumerable: true }, + type: { enumerable: true }, + slice: { enumerable: true } +}); + +Object.defineProperty(Blob.prototype, Symbol.toStringTag, { + value: 'Blob', + writable: false, + enumerable: false, + configurable: true +}); + +/** + * fetch-error.js + * + * FetchError interface for operational errors + */ + +/** + * Create FetchError instance + * + * @param String message Error message for human + * @param String type Error type for machine + * @param String systemError For Node.js system error + * @return FetchError + */ +function FetchError(message, type, systemError) { + Error.call(this, message); + + this.message = message; + this.type = type; + + // when err.type is `system`, err.code contains system error code + if (systemError) { + this.code = this.errno = systemError.code; + } + + // hide custom error implementation details from end-users + Error.captureStackTrace(this, this.constructor); +} + +FetchError.prototype = Object.create(Error.prototype); +FetchError.prototype.constructor = FetchError; +FetchError.prototype.name = 'FetchError'; + +let convert; +try { + convert = require('encoding').convert; +} catch (e) {} + +const INTERNALS = Symbol('Body internals'); + +// fix an issue where "PassThrough" isn't a named export for node <10 +const PassThrough = stream__WEBPACK_IMPORTED_MODULE_0__.PassThrough; + +/** + * Body mixin + * + * Ref: https://fetch.spec.whatwg.org/#body + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ +function Body(body) { + var _this = this; + + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref$size = _ref.size; + + let size = _ref$size === undefined ? 0 : _ref$size; + var _ref$timeout = _ref.timeout; + let timeout = _ref$timeout === undefined ? 0 : _ref$timeout; + + if (body == null) { + // body is undefined or null + body = null; + } else if (isURLSearchParams(body)) { + // body is a URLSearchParams + body = Buffer.from(body.toString()); + } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { + // body is ArrayBuffer + body = Buffer.from(body); + } else if (ArrayBuffer.isView(body)) { + // body is ArrayBufferView + body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); + } else if (body instanceof stream__WEBPACK_IMPORTED_MODULE_0__) ; else { + // none of the above + // coerce to string then buffer + body = Buffer.from(String(body)); + } + this[INTERNALS] = { + body, + disturbed: false, + error: null + }; + this.size = size; + this.timeout = timeout; + + if (body instanceof stream__WEBPACK_IMPORTED_MODULE_0__) { + body.on('error', function (err) { + const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err); + _this[INTERNALS].error = error; + }); + } +} + +Body.prototype = { + get body() { + return this[INTERNALS].body; + }, + + get bodyUsed() { + return this[INTERNALS].disturbed; + }, + + /** + * Decode response as ArrayBuffer + * + * @return Promise + */ + arrayBuffer() { + return consumeBody.call(this).then(function (buf) { + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); + }); + }, + + /** + * Return raw response as Blob + * + * @return Promise + */ + blob() { + let ct = this.headers && this.headers.get('content-type') || ''; + return consumeBody.call(this).then(function (buf) { + return Object.assign( + // Prevent copying + new Blob([], { + type: ct.toLowerCase() + }), { + [BUFFER]: buf + }); + }); + }, + + /** + * Decode response as json + * + * @return Promise + */ + json() { + var _this2 = this; + + return consumeBody.call(this).then(function (buffer) { + try { + return JSON.parse(buffer.toString()); + } catch (err) { + return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json')); + } + }); + }, + + /** + * Decode response as text + * + * @return Promise + */ + text() { + return consumeBody.call(this).then(function (buffer) { + return buffer.toString(); + }); + }, + + /** + * Decode response as buffer (non-spec api) + * + * @return Promise + */ + buffer() { + return consumeBody.call(this); + }, + + /** + * Decode response as text, while automatically detecting the encoding and + * trying to decode to UTF-8 (non-spec api) + * + * @return Promise + */ + textConverted() { + var _this3 = this; + + return consumeBody.call(this).then(function (buffer) { + return convertBody(buffer, _this3.headers); + }); + } +}; + +// In browsers, all properties are enumerable. +Object.defineProperties(Body.prototype, { + body: { enumerable: true }, + bodyUsed: { enumerable: true }, + arrayBuffer: { enumerable: true }, + blob: { enumerable: true }, + json: { enumerable: true }, + text: { enumerable: true } +}); + +Body.mixIn = function (proto) { + for (const name of Object.getOwnPropertyNames(Body.prototype)) { + // istanbul ignore else: future proof + if (!(name in proto)) { + const desc = Object.getOwnPropertyDescriptor(Body.prototype, name); + Object.defineProperty(proto, name, desc); + } + } +}; + +/** + * Consume and convert an entire Body to a Buffer. + * + * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body + * + * @return Promise + */ +function consumeBody() { + var _this4 = this; + + if (this[INTERNALS].disturbed) { + return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`)); + } + + this[INTERNALS].disturbed = true; + + if (this[INTERNALS].error) { + return Body.Promise.reject(this[INTERNALS].error); + } + + let body = this.body; + + // body is null + if (body === null) { + return Body.Promise.resolve(Buffer.alloc(0)); + } + + // body is blob + if (isBlob(body)) { + body = body.stream(); + } + + // body is buffer + if (Buffer.isBuffer(body)) { + return Body.Promise.resolve(body); + } + + // istanbul ignore if: should never happen + if (!(body instanceof stream__WEBPACK_IMPORTED_MODULE_0__)) { + return Body.Promise.resolve(Buffer.alloc(0)); + } + + // body is stream + // get ready to actually consume the body + let accum = []; + let accumBytes = 0; + let abort = false; + + return new Body.Promise(function (resolve, reject) { + let resTimeout; + + // allow timeout on slow response body + if (_this4.timeout) { + resTimeout = setTimeout(function () { + abort = true; + reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout')); + }, _this4.timeout); + } + + // handle stream errors + body.on('error', function (err) { + if (err.name === 'AbortError') { + // if the request was aborted, reject with this Error + abort = true; + reject(err); + } else { + // other errors, such as incorrect content-encoding + reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err)); + } + }); + + body.on('data', function (chunk) { + if (abort || chunk === null) { + return; + } + + if (_this4.size && accumBytes + chunk.length > _this4.size) { + abort = true; + reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size')); + return; + } + + accumBytes += chunk.length; + accum.push(chunk); + }); + + body.on('end', function () { + if (abort) { + return; + } + + clearTimeout(resTimeout); + + try { + resolve(Buffer.concat(accum, accumBytes)); + } catch (err) { + // handle streams that have accumulated too much data (issue #414) + reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err)); + } + }); + }); +} + +/** + * Detect buffer encoding and convert to target encoding + * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding + * + * @param Buffer buffer Incoming buffer + * @param String encoding Target encoding + * @return String + */ +function convertBody(buffer, headers) { + if (typeof convert !== 'function') { + throw new Error('The package `encoding` must be installed to use the textConverted() function'); + } + + const ct = headers.get('content-type'); + let charset = 'utf-8'; + let res, str; + + // header + if (ct) { + res = /charset=([^;]*)/i.exec(ct); + } + + // no charset in content type, peek at response body for at most 1024 bytes + str = buffer.slice(0, 1024).toString(); + + // html5 + if (!res && str) { + res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined; + + this[MAP] = Object.create(null); + + if (init instanceof Headers) { + const rawHeaders = init.raw(); + const headerNames = Object.keys(rawHeaders); + + for (const headerName of headerNames) { + for (const value of rawHeaders[headerName]) { + this.append(headerName, value); + } + } + + return; + } + + // We don't worry about converting prop to ByteString here as append() + // will handle it. + if (init == null) ; else if (typeof init === 'object') { + const method = init[Symbol.iterator]; + if (method != null) { + if (typeof method !== 'function') { + throw new TypeError('Header pairs must be iterable'); + } + + // sequence> + // Note: per spec we have to first exhaust the lists then process them + const pairs = []; + for (const pair of init) { + if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') { + throw new TypeError('Each header pair must be iterable'); + } + pairs.push(Array.from(pair)); + } + + for (const pair of pairs) { + if (pair.length !== 2) { + throw new TypeError('Each header pair must be a name/value tuple'); + } + this.append(pair[0], pair[1]); + } + } else { + // record + for (const key of Object.keys(init)) { + const value = init[key]; + this.append(key, value); + } + } + } else { + throw new TypeError('Provided initializer must be an object'); + } + } + + /** + * Return combined header value given name + * + * @param String name Header name + * @return Mixed + */ + get(name) { + name = `${name}`; + validateName(name); + const key = find(this[MAP], name); + if (key === undefined) { + return null; + } + + return this[MAP][key].join(', '); + } + + /** + * Iterate over all headers + * + * @param Function callback Executed for each item with parameters (value, name, thisArg) + * @param Boolean thisArg `this` context for callback function + * @return Void + */ + forEach(callback) { + let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; + + let pairs = getHeaders(this); + let i = 0; + while (i < pairs.length) { + var _pairs$i = pairs[i]; + const name = _pairs$i[0], + value = _pairs$i[1]; + + callback.call(thisArg, value, name, this); + pairs = getHeaders(this); + i++; + } + } + + /** + * Overwrite header values given name + * + * @param String name Header name + * @param String value Header value + * @return Void + */ + set(name, value) { + name = `${name}`; + value = `${value}`; + validateName(name); + validateValue(value); + const key = find(this[MAP], name); + this[MAP][key !== undefined ? key : name] = [value]; + } + + /** + * Append a value onto existing header + * + * @param String name Header name + * @param String value Header value + * @return Void + */ + append(name, value) { + name = `${name}`; + value = `${value}`; + validateName(name); + validateValue(value); + const key = find(this[MAP], name); + if (key !== undefined) { + this[MAP][key].push(value); + } else { + this[MAP][name] = [value]; + } + } + + /** + * Check for header name existence + * + * @param String name Header name + * @return Boolean + */ + has(name) { + name = `${name}`; + validateName(name); + return find(this[MAP], name) !== undefined; + } + + /** + * Delete all header values given name + * + * @param String name Header name + * @return Void + */ + delete(name) { + name = `${name}`; + validateName(name); + const key = find(this[MAP], name); + if (key !== undefined) { + delete this[MAP][key]; + } + } + + /** + * Return raw headers (non-spec api) + * + * @return Object + */ + raw() { + return this[MAP]; + } + + /** + * Get an iterator on keys. + * + * @return Iterator + */ + keys() { + return createHeadersIterator(this, 'key'); + } + + /** + * Get an iterator on values. + * + * @return Iterator + */ + values() { + return createHeadersIterator(this, 'value'); + } + + /** + * Get an iterator on entries. + * + * This is the default iterator of the Headers object. + * + * @return Iterator + */ + [Symbol.iterator]() { + return createHeadersIterator(this, 'key+value'); + } +} +Headers.prototype.entries = Headers.prototype[Symbol.iterator]; + +Object.defineProperty(Headers.prototype, Symbol.toStringTag, { + value: 'Headers', + writable: false, + enumerable: false, + configurable: true +}); + +Object.defineProperties(Headers.prototype, { + get: { enumerable: true }, + forEach: { enumerable: true }, + set: { enumerable: true }, + append: { enumerable: true }, + has: { enumerable: true }, + delete: { enumerable: true }, + keys: { enumerable: true }, + values: { enumerable: true }, + entries: { enumerable: true } +}); + +function getHeaders(headers) { + let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value'; + + const keys = Object.keys(headers[MAP]).sort(); + return keys.map(kind === 'key' ? function (k) { + return k.toLowerCase(); + } : kind === 'value' ? function (k) { + return headers[MAP][k].join(', '); + } : function (k) { + return [k.toLowerCase(), headers[MAP][k].join(', ')]; + }); +} + +const INTERNAL = Symbol('internal'); + +function createHeadersIterator(target, kind) { + const iterator = Object.create(HeadersIteratorPrototype); + iterator[INTERNAL] = { + target, + kind, + index: 0 + }; + return iterator; +} + +const HeadersIteratorPrototype = Object.setPrototypeOf({ + next() { + // istanbul ignore if + if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { + throw new TypeError('Value of `this` is not a HeadersIterator'); + } + + var _INTERNAL = this[INTERNAL]; + const target = _INTERNAL.target, + kind = _INTERNAL.kind, + index = _INTERNAL.index; + + const values = getHeaders(target, kind); + const len = values.length; + if (index >= len) { + return { + value: undefined, + done: true + }; + } + + this[INTERNAL].index = index + 1; + + return { + value: values[index], + done: false + }; + } +}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))); + +Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { + value: 'HeadersIterator', + writable: false, + enumerable: false, + configurable: true +}); + +/** + * Export the Headers object in a form that Node.js can consume. + * + * @param Headers headers + * @return Object + */ +function exportNodeCompatibleHeaders(headers) { + const obj = Object.assign({ __proto__: null }, headers[MAP]); + + // http.request() only supports string as Host header. This hack makes + // specifying custom Host header possible. + const hostHeaderKey = find(headers[MAP], 'Host'); + if (hostHeaderKey !== undefined) { + obj[hostHeaderKey] = obj[hostHeaderKey][0]; + } + + return obj; +} + +/** + * Create a Headers object from an object of headers, ignoring those that do + * not conform to HTTP grammar productions. + * + * @param Object obj Object of headers + * @return Headers + */ +function createHeadersLenient(obj) { + const headers = new Headers(); + for (const name of Object.keys(obj)) { + if (invalidTokenRegex.test(name)) { + continue; + } + if (Array.isArray(obj[name])) { + for (const val of obj[name]) { + if (invalidHeaderCharRegex.test(val)) { + continue; + } + if (headers[MAP][name] === undefined) { + headers[MAP][name] = [val]; + } else { + headers[MAP][name].push(val); + } + } + } else if (!invalidHeaderCharRegex.test(obj[name])) { + headers[MAP][name] = [obj[name]]; + } + } + return headers; +} + +const INTERNALS$1 = Symbol('Response internals'); + +// fix an issue where "STATUS_CODES" aren't a named export for node <10 +const STATUS_CODES = http__WEBPACK_IMPORTED_MODULE_1__.STATUS_CODES; + +/** + * Response class + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ +class Response { + constructor() { + let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + Body.call(this, body, opts); + + const status = opts.status || 200; + const headers = new Headers(opts.headers); + + if (body != null && !headers.has('Content-Type')) { + const contentType = extractContentType(body); + if (contentType) { + headers.append('Content-Type', contentType); + } + } + + this[INTERNALS$1] = { + url: opts.url, + status, + statusText: opts.statusText || STATUS_CODES[status], + headers, + counter: opts.counter + }; + } + + get url() { + return this[INTERNALS$1].url || ''; + } + + get status() { + return this[INTERNALS$1].status; + } + + /** + * Convenience property representing if the request ended normally + */ + get ok() { + return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300; + } + + get redirected() { + return this[INTERNALS$1].counter > 0; + } + + get statusText() { + return this[INTERNALS$1].statusText; + } + + get headers() { + return this[INTERNALS$1].headers; + } + + /** + * Clone this response + * + * @return Response + */ + clone() { + return new Response(clone(this), { + url: this.url, + status: this.status, + statusText: this.statusText, + headers: this.headers, + ok: this.ok, + redirected: this.redirected + }); + } +} + +Body.mixIn(Response.prototype); + +Object.defineProperties(Response.prototype, { + url: { enumerable: true }, + status: { enumerable: true }, + ok: { enumerable: true }, + redirected: { enumerable: true }, + statusText: { enumerable: true }, + headers: { enumerable: true }, + clone: { enumerable: true } +}); + +Object.defineProperty(Response.prototype, Symbol.toStringTag, { + value: 'Response', + writable: false, + enumerable: false, + configurable: true +}); + +const INTERNALS$2 = Symbol('Request internals'); + +// fix an issue where "format", "parse" aren't a named export for node <10 +const parse_url = url__WEBPACK_IMPORTED_MODULE_2__.parse; +const format_url = url__WEBPACK_IMPORTED_MODULE_2__.format; + +const streamDestructionSupported = 'destroy' in stream__WEBPACK_IMPORTED_MODULE_0__.Readable.prototype; + +/** + * Check if a value is an instance of Request. + * + * @param Mixed input + * @return Boolean + */ +function isRequest(input) { + return typeof input === 'object' && typeof input[INTERNALS$2] === 'object'; +} + +function isAbortSignal(signal) { + const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal); + return !!(proto && proto.constructor.name === 'AbortSignal'); +} + +/** + * Request class + * + * @param Mixed input Url or Request instance + * @param Object init Custom options + * @return Void + */ +class Request { + constructor(input) { + let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + let parsedURL; + + // normalize input + if (!isRequest(input)) { + if (input && input.href) { + // in order to support Node.js' Url objects; though WHATWG's URL objects + // will fall into this branch also (since their `toString()` will return + // `href` property anyway) + parsedURL = parse_url(input.href); + } else { + // coerce input to a string before attempting to parse + parsedURL = parse_url(`${input}`); + } + input = {}; + } else { + parsedURL = parse_url(input.url); + } + + let method = init.method || input.method || 'GET'; + method = method.toUpperCase(); + + if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) { + throw new TypeError('Request with GET/HEAD method cannot have body'); + } + + let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null; + + Body.call(this, inputBody, { + timeout: init.timeout || input.timeout || 0, + size: init.size || input.size || 0 + }); + + const headers = new Headers(init.headers || input.headers || {}); + + if (inputBody != null && !headers.has('Content-Type')) { + const contentType = extractContentType(inputBody); + if (contentType) { + headers.append('Content-Type', contentType); + } + } + + let signal = isRequest(input) ? input.signal : null; + if ('signal' in init) signal = init.signal; + + if (signal != null && !isAbortSignal(signal)) { + throw new TypeError('Expected signal to be an instanceof AbortSignal'); + } + + this[INTERNALS$2] = { + method, + redirect: init.redirect || input.redirect || 'follow', + headers, + parsedURL, + signal + }; + + // node-fetch-only options + this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20; + this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true; + this.counter = init.counter || input.counter || 0; + this.agent = init.agent || input.agent; + } + + get method() { + return this[INTERNALS$2].method; + } + + get url() { + return format_url(this[INTERNALS$2].parsedURL); + } + + get headers() { + return this[INTERNALS$2].headers; + } + + get redirect() { + return this[INTERNALS$2].redirect; + } + + get signal() { + return this[INTERNALS$2].signal; + } + + /** + * Clone this request + * + * @return Request + */ + clone() { + return new Request(this); + } +} + +Body.mixIn(Request.prototype); + +Object.defineProperty(Request.prototype, Symbol.toStringTag, { + value: 'Request', + writable: false, + enumerable: false, + configurable: true +}); + +Object.defineProperties(Request.prototype, { + method: { enumerable: true }, + url: { enumerable: true }, + headers: { enumerable: true }, + redirect: { enumerable: true }, + clone: { enumerable: true }, + signal: { enumerable: true } +}); + +/** + * Convert a Request to Node.js http request options. + * + * @param Request A Request instance + * @return Object The options object to be passed to http.request + */ +function getNodeRequestOptions(request) { + const parsedURL = request[INTERNALS$2].parsedURL; + const headers = new Headers(request[INTERNALS$2].headers); + + // fetch step 1.3 + if (!headers.has('Accept')) { + headers.set('Accept', '*/*'); + } + + // Basic fetch + if (!parsedURL.protocol || !parsedURL.hostname) { + throw new TypeError('Only absolute URLs are supported'); + } + + if (!/^https?:$/.test(parsedURL.protocol)) { + throw new TypeError('Only HTTP(S) protocols are supported'); + } + + if (request.signal && request.body instanceof stream__WEBPACK_IMPORTED_MODULE_0__.Readable && !streamDestructionSupported) { + throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8'); + } + + // HTTP-network-or-cache fetch steps 2.4-2.7 + let contentLengthValue = null; + if (request.body == null && /^(POST|PUT)$/i.test(request.method)) { + contentLengthValue = '0'; + } + if (request.body != null) { + const totalBytes = getTotalBytes(request); + if (typeof totalBytes === 'number') { + contentLengthValue = String(totalBytes); + } + } + if (contentLengthValue) { + headers.set('Content-Length', contentLengthValue); + } + + // HTTP-network-or-cache fetch step 2.11 + if (!headers.has('User-Agent')) { + headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)'); + } + + // HTTP-network-or-cache fetch step 2.15 + if (request.compress && !headers.has('Accept-Encoding')) { + headers.set('Accept-Encoding', 'gzip,deflate'); + } + + let agent = request.agent; + if (typeof agent === 'function') { + agent = agent(parsedURL); + } + + if (!headers.has('Connection') && !agent) { + headers.set('Connection', 'close'); + } + + // HTTP-network fetch step 4.2 + // chunked encoding is handled by Node.js + + return Object.assign({}, parsedURL, { + method: request.method, + headers: exportNodeCompatibleHeaders(headers), + agent + }); +} + +/** + * abort-error.js + * + * AbortError interface for cancelled requests + */ + +/** + * Create AbortError instance + * + * @param String message Error message for human + * @return AbortError + */ +function AbortError(message) { + Error.call(this, message); + + this.type = 'aborted'; + this.message = message; + + // hide custom error implementation details from end-users + Error.captureStackTrace(this, this.constructor); +} + +AbortError.prototype = Object.create(Error.prototype); +AbortError.prototype.constructor = AbortError; +AbortError.prototype.name = 'AbortError'; + +// fix an issue where "PassThrough", "resolve" aren't a named export for node <10 +const PassThrough$1 = stream__WEBPACK_IMPORTED_MODULE_0__.PassThrough; +const resolve_url = url__WEBPACK_IMPORTED_MODULE_2__.resolve; + +/** + * Fetch function + * + * @param Mixed url Absolute url or Request instance + * @param Object opts Fetch options + * @return Promise + */ +function fetch(url, opts) { + + // allow custom promise + if (!fetch.Promise) { + throw new Error('native promise missing, set fetch.Promise to your favorite alternative'); + } + + Body.Promise = fetch.Promise; + + // wrap http.request into fetch + return new fetch.Promise(function (resolve, reject) { + // build request object + const request = new Request(url, opts); + const options = getNodeRequestOptions(request); + + const send = (options.protocol === 'https:' ? https__WEBPACK_IMPORTED_MODULE_3__ : http__WEBPACK_IMPORTED_MODULE_1__).request; + const signal = request.signal; + + let response = null; + + const abort = function abort() { + let error = new AbortError('The user aborted a request.'); + reject(error); + if (request.body && request.body instanceof stream__WEBPACK_IMPORTED_MODULE_0__.Readable) { + request.body.destroy(error); + } + if (!response || !response.body) return; + response.body.emit('error', error); + }; + + if (signal && signal.aborted) { + abort(); + return; + } + + const abortAndFinalize = function abortAndFinalize() { + abort(); + finalize(); + }; + + // send request + const req = send(options); + let reqTimeout; + + if (signal) { + signal.addEventListener('abort', abortAndFinalize); + } + + function finalize() { + req.abort(); + if (signal) signal.removeEventListener('abort', abortAndFinalize); + clearTimeout(reqTimeout); + } + + if (request.timeout) { + req.once('socket', function (socket) { + reqTimeout = setTimeout(function () { + reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout')); + finalize(); + }, request.timeout); + }); + } + + req.on('error', function (err) { + reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); + finalize(); + }); + + req.on('response', function (res) { + clearTimeout(reqTimeout); + + const headers = createHeadersLenient(res.headers); + + // HTTP fetch step 5 + if (fetch.isRedirect(res.statusCode)) { + // HTTP fetch step 5.2 + const location = headers.get('Location'); + + // HTTP fetch step 5.3 + const locationURL = location === null ? null : resolve_url(request.url, location); + + // HTTP fetch step 5.5 + switch (request.redirect) { + case 'error': + reject(new FetchError(`redirect mode is set to error: ${request.url}`, 'no-redirect')); + finalize(); + return; + case 'manual': + // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL. + if (locationURL !== null) { + // handle corrupted header + try { + headers.set('Location', locationURL); + } catch (err) { + // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request + reject(err); + } + } + break; + case 'follow': + // HTTP-redirect fetch step 2 + if (locationURL === null) { + break; + } + + // HTTP-redirect fetch step 5 + if (request.counter >= request.follow) { + reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect')); + finalize(); + return; + } + + // HTTP-redirect fetch step 6 (counter increment) + // Create a new Request object. + const requestOpts = { + headers: new Headers(request.headers), + follow: request.follow, + counter: request.counter + 1, + agent: request.agent, + compress: request.compress, + method: request.method, + body: request.body, + signal: request.signal, + timeout: request.timeout + }; + + // HTTP-redirect fetch step 9 + if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { + reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); + finalize(); + return; + } + + // HTTP-redirect fetch step 11 + if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') { + requestOpts.method = 'GET'; + requestOpts.body = undefined; + requestOpts.headers.delete('content-length'); + } + + // HTTP-redirect fetch step 15 + resolve(fetch(new Request(locationURL, requestOpts))); + finalize(); + return; + } + } + + // prepare response + res.once('end', function () { + if (signal) signal.removeEventListener('abort', abortAndFinalize); + }); + let body = res.pipe(new PassThrough$1()); + + const response_options = { + url: request.url, + status: res.statusCode, + statusText: res.statusMessage, + headers: headers, + size: request.size, + timeout: request.timeout, + counter: request.counter + }; + + // HTTP-network fetch step 12.1.1.3 + const codings = headers.get('Content-Encoding'); + + // HTTP-network fetch step 12.1.1.4: handle content codings + + // in following scenarios we ignore compression support + // 1. compression support is disabled + // 2. HEAD request + // 3. no Content-Encoding header + // 4. no content response (204) + // 5. content not modified response (304) + if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) { + response = new Response(body, response_options); + resolve(response); + return; + } + + // For Node v6+ + // Be less strict when decoding compressed responses, since sometimes + // servers send slightly invalid responses that are still accepted + // by common browsers. + // Always using Z_SYNC_FLUSH is what cURL does. + const zlibOptions = { + flush: zlib__WEBPACK_IMPORTED_MODULE_4__.Z_SYNC_FLUSH, + finishFlush: zlib__WEBPACK_IMPORTED_MODULE_4__.Z_SYNC_FLUSH + }; + + // for gzip + if (codings == 'gzip' || codings == 'x-gzip') { + body = body.pipe(zlib__WEBPACK_IMPORTED_MODULE_4__.createGunzip(zlibOptions)); + response = new Response(body, response_options); + resolve(response); + return; + } + + // for deflate + if (codings == 'deflate' || codings == 'x-deflate') { + // handle the infamous raw deflate response from old servers + // a hack for old IIS and Apache servers + const raw = res.pipe(new PassThrough$1()); + raw.once('data', function (chunk) { + // see http://stackoverflow.com/questions/37519828 + if ((chunk[0] & 0x0F) === 0x08) { + body = body.pipe(zlib__WEBPACK_IMPORTED_MODULE_4__.createInflate()); + } else { + body = body.pipe(zlib__WEBPACK_IMPORTED_MODULE_4__.createInflateRaw()); + } + response = new Response(body, response_options); + resolve(response); + }); + return; + } + + // for br + if (codings == 'br' && typeof zlib__WEBPACK_IMPORTED_MODULE_4__.createBrotliDecompress === 'function') { + body = body.pipe(zlib__WEBPACK_IMPORTED_MODULE_4__.createBrotliDecompress()); + response = new Response(body, response_options); + resolve(response); + return; + } + + // otherwise, use response as-is + response = new Response(body, response_options); + resolve(response); + }); + + writeToStream(req, request); + }); +} +/** + * Redirect code matching + * + * @param Number code Status code + * @return Boolean + */ +fetch.isRedirect = function (code) { + return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; +}; + +// expose Promise +fetch.Promise = global.Promise; + +/* harmony default export */ __webpack_exports__["default"] = (fetch); + + + +/***/ }), + +/***/ "./src/extension.ts": +/*!**************************!*\ + !*** ./src/extension.ts ***! + \**************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +/** + * @author : Austin Ruby, Alex Chao, Ed Greenberg + * @function : activate extension + * @changelog : Ed Greenberg, November 5th, 2019, added flexible query file detection + * @changelog : Alex Chao, Nov. 5th-10th 2019... Lots of changes... server listener added + * - config file setup command made + * - config file option to allow for a longer time for the graphql server to startup + * ! I propose we add the PORT number to config file + * - updating variables in the event of changes in the config files + * @changelog : ## Austin? + * * */ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +// eslint-disable-next-line import/no-unresolved +const vscode = __webpack_require__(/*! vscode */ "vscode"); +// only needed for creating the config file +const fs = __webpack_require__(/*! fs */ "fs"); +/* eslint-disable import/no-unresolved */ +const readFileSendReqAndWriteResponse = __webpack_require__(/*! ./modules/client/readFileSendReqAndWriteResponse */ "./src/modules/client/readFileSendReqAndWriteResponse.ts"); +const serverOn = __webpack_require__(/*! ./modules/server/serverOn */ "./src/modules/server/serverOn.ts"); +const serverOff = __webpack_require__(/*! ./modules/server/serverOff */ "./src/modules/server/serverOff.ts"); +// require in new function that checks for a running server +const checkForRunningServer = __webpack_require__(/*! ./modules/server/checkForRunningServer */ "./src/modules/server/checkForRunningServer.ts"); +// require in file that finds root directory +const findRootDirectory = __webpack_require__(/*! ./modules/client/findRootDirectory */ "./src/modules/client/findRootDirectory.ts"); +// require in file that returns entryPoint when given the root path +const parseConfigFile = __webpack_require__(/*! ./modules/client/parseConfigFile */ "./src/modules/client/parseConfigFile.ts"); +// require in file that finds port# +const findPortNumber = __webpack_require__(/*! ./modules/client/findPortNumber */ "./src/modules/client/findPortNumber.ts"); +// this method is called when your extension is activated +// your extension is activated the very first time the command is executed +function activate(context) { + // * These are some variables that I need to pass between different commands, so they're in + // * a higher scope + // this ChannelRef variable will be used to pass the output channel between separate function defs + // let graphQuillChannelRef: vscode.OutputChannel; + const gqChannel = vscode.window.createOutputChannel('GraphQuill'); + // a toggle variable that will is true when the server is on + let isOnToggle = false; + // a disposable variable to get rid of the save event listener + let saveListener; + // set rootPath and entryPoint to a string of the path to the server startup file (has app.listen) + const rootPath = findRootDirectory(); + // putting these variables in the global scope with the expectation that they will be set upon + // activating the extension. I'm moving them to be able to manage "live" changes + let entryPoint; + let allowServerTimeoutConfigSetting; + // set portNumber to a string. It is going to be set in the activation command + let portNumber; + // boolean to track if the server has been successfully turned on by the user + let serverTurnedOnByGraphQuill = false; + /** ********************************************************************************************** + * * The command must be defined in package.json under contributes/commands AND activation events + * Now provide the implementation of the command with registerCommand + * The commandId parameter must match the command field in package.json + * * This is the first GraphQuill option in the command palette for activating GraphQuill + *********************************************************************************************** */ + const disposableActivateGraphQuill = vscode.commands.registerCommand('extension.activateGraphQuill', () => __awaiter(this, void 0, void 0, function* () { + if (isOnToggle) { + // if server is already running, break out of function by returning null + console.log('Server is already running'); + vscode.window.showInformationMessage('GraphQuill is already active'); + return null; + } + // show output channel + gqChannel.show(true); + // parse the config file (this is important in case if there were any changes) + let parseResult = parseConfigFile(rootPath); + entryPoint = parseResult.entryPoint; + allowServerTimeoutConfigSetting = parseResult.allowServerTimeoutConfigSetting; + // if the entryPoint is falsey, break out of the function and tell the + // user to create a config file + if (!entryPoint) { + gqChannel.append('The config file was not found, please use the Create GraphQuill Config File Command to make one.'); + // break out of this execution context + return null; + } + // set the portNumber (in the higher scope so it can be used in the deactivate function) + portNumber = findPortNumber(entryPoint); + // Check ONCE if the port is open (also this does not need the third param) + // will resolve to a true or false value + const serverOnFromUser = yield checkForRunningServer(portNumber, true); + // console.log('--serverOnFromUser after once check is:', serverOnFromUser); + // trigger serverOn if the user does not already have the server running + if (!serverOnFromUser) { + // start up the user's server + serverOn(entryPoint); + // give user feedback that server is starting up + gqChannel.clear(); + gqChannel.append('The server is starting up...'); + // await this function that will return true or false based on if the server has been started + // false: if starting the server is longer than the time allotted in the config file (defaults + // to 3 seconds) + serverTurnedOnByGraphQuill = yield checkForRunningServer(portNumber, + // once setting is false, so the returned promise will only resolve when the server has + // started OR the timeout (next variable or 3sec) is reached + false, + // allowServerT.C.S. is either a time in milliseconds that defaults to 3000 + allowServerTimeoutConfigSetting); + // if it is false, that means there was an error starting the server + // notify the user & end the thread of execution + if (!serverTurnedOnByGraphQuill) { + // console.log('server is taking too long to startup'); + // give feedback to user that port didn't start (and the specified timeout config setting, + // defaults to 3 seconds) + gqChannel.clear(); + gqChannel.append(`The server is taking too long to startup (>${(allowServerTimeoutConfigSetting || 3000) / 1000} seconds).\nTo increase this time, update the "serverStartupTimeAllowed" setting in the graphquill.config.js file.`); + // break out, and just in case I'm going to try to kill the port if it did open + // otherwise we could get runaway node processes... + return setTimeout(() => serverOff(portNumber), 5000); + } + } + // if the server is on from either the user or graphquill, continue + // send first query & setup on save listener + if (serverOnFromUser || serverTurnedOnByGraphQuill) { + // update isOnToggle (refers to state of GraphQuill extension running or not) + isOnToggle = true; + // clear any other stuff off of the channel (e.g. previous error message) + gqChannel.clear(); + // get the fileName of the open file when the extension is FIRST fired + const currOpenEditorPath = vscode.window.activeTextEditor.document.fileName; + // send that request from the currentopeneditor + readFileSendReqAndWriteResponse(currOpenEditorPath, gqChannel, portNumber, rootPath); + // initialize the save listener here to clear the channel and resend new requests + saveListener = vscode.workspace.onDidSaveTextDocument((event) => { + // console.log('save event!!!', event); + // clear the graphQuill channel + gqChannel.clear(); + // re-parse the config file (in case the user made a change) + parseResult = parseConfigFile(rootPath); + entryPoint = parseResult.entryPoint; + allowServerTimeoutConfigSetting = parseResult.allowServerTimeoutConfigSetting; + if (!entryPoint) { + gqChannel.append('The config file was not found, please use the Create GraphQuill Config File Command to make one.'); + // break out of this execution context + return null; + } + // ! I really think we should add the port number to the config file to specify to the user + // ! That the port number SHUOLD not be changed... + // TODO this seems very redundant... but I'm blanking on how to make this dynamic + // TODO update if the user changes their server file... + // on each save... reparse for a portNumber in case if it was changed + portNumber = findPortNumber(entryPoint); + // send the filename and channel to the readFileSRAWR function + readFileSendReqAndWriteResponse(event.fileName, gqChannel, portNumber, rootPath); + // satisfying linter + return null; + }); + } + // to satisfy typescript linter... + return null; + })); + // push it to the subscriptions + context.subscriptions.push(disposableActivateGraphQuill); + /** ************************************************************************** + * * Second GraphQuill option in the command palette (Cmd Shift P) for deactivating graphquill + ************************************************************************** */ + const disposableDisableGraphQuill = vscode.commands.registerCommand('extension.deactivateGraphQuill', () => { + // console.log('--deactivate functionality triggered'); + // check isontoggle boolean + if (!isOnToggle) { + // server is already off + console.log('server is already off'); + vscode.window.showInformationMessage('GraphQuill is already off'); + return null; + } + // change toggle boolean + isOnToggle = false; + // dispose of the onDidSaveTextDocument event listener + if (saveListener) + saveListener.dispose(); + // close/hide GraphQuill channel + gqChannel.hide(); + gqChannel.clear(); + console.log('in deactivate, the server turned on by graphquill boolean is: ', serverTurnedOnByGraphQuill); + // invoke server off in this function + return setTimeout(() => (serverTurnedOnByGraphQuill && serverOff(portNumber)), 1); + }); + // push it into the subscriptions + context.subscriptions.push(disposableDisableGraphQuill); + /** ************************************************************************** + * * Third GraphQuill option in command palette to toggle graphquill extension + ************************************************************************** */ + const disposableToggleGraphQuill = vscode.commands.registerCommand('extension.toggleGraphQuill', () => { + // console.log('--toggle triggered!'); + // if the toggle boolean is false, then start the extension, otherwise end it... + if (!isOnToggle) { + // console.log('--toggle starting extension'); + // using the built in execute command and passing in a string of the command to trigger + vscode.commands.executeCommand('extension.activateGraphQuill'); + } + else { + // console.log('--toggle stopping the extension'); + vscode.commands.executeCommand('extension.deactivateGraphQuill'); + } + // just to make the linter happy... + return null; + }); + // push it to the subscriptions + context.subscriptions.push(disposableToggleGraphQuill); + /** ************************************************************************** + * * Fourth GraphQuill option in command palette to CREATE A CONFIG FILE + ************************************************************************** */ + const disposableCreateConfigFile = vscode.commands.registerCommand('extension.createConfigFile', () => { + // console.log('--config file setup triggered'); + // check if the root directory already has a graphquill.config.json file + const graphQuillConfigPath = `${rootPath}/graphquill.config.js`; + if (fs.existsSync(graphQuillConfigPath)) { + vscode.window.showInformationMessage(`A GraphQuill configuration file already exists at ${graphQuillConfigPath}`); + // exit out + return null; + } + // if it does not already exist, write to a new file + fs.writeFileSync(graphQuillConfigPath, + // string to populate the file with + 'module.exports = {\n // change "./server/index.js" to the relative path from the root directory to\n // the file that starts your server\n entry: \'./server/index.js\',\n\n // to increase the amount of time allowed for the server to startup, add a time\n // in milliseconds (integer) to the "serverStartupTimeAllowed"\n // serverStartupTimeAllowed: 5000,\n};\n', 'utf-8'); + // open the file in vscode + vscode.workspace.openTextDocument(graphQuillConfigPath).then((doc) => { + // apparently openTextDocument doesn't mean it's visible... + vscode.window.showTextDocument(doc); + }); + return null; + }); + // push it to the subscriptions + context.subscriptions.push(disposableCreateConfigFile); +} +exports.activate = activate; +// this method is called when your extension is deactivated +function deactivate() { + // deactivate must return a promise if cleanup operations are async. + // turn the server off if vscode is closed (tested via lsof in terminal) + // console.log('---deactive function called!!'); + // executing the deactivateGQ command seems to achieve a similar effect & is nice because it has + // access to the portNumber variable + vscode.commands.executeCommand('extension.deactivateGraphQuill'); + // return setTimeout(() => serverOff(3000), 1); +} +exports.deactivate = deactivate; + + +/***/ }), + +/***/ "./src/modules/client sync recursive ^.*$": +/*!**************************************!*\ + !*** ./src/modules/client sync ^.*$ ***! + \**************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var map = { + "./checkQueryBrackets": "./src/modules/client/checkQueryBrackets.ts", + "./checkQueryBrackets.ts": "./src/modules/client/checkQueryBrackets.ts", + "./extractQueries": "./src/modules/client/extractQueries.ts", + "./extractQueries.ts": "./src/modules/client/extractQueries.ts", + "./findPortNumber": "./src/modules/client/findPortNumber.ts", + "./findPortNumber.ts": "./src/modules/client/findPortNumber.ts", + "./findRootDirectory": "./src/modules/client/findRootDirectory.ts", + "./findRootDirectory.ts": "./src/modules/client/findRootDirectory.ts", + "./parseConfigFile": "./src/modules/client/parseConfigFile.ts", + "./parseConfigFile.ts": "./src/modules/client/parseConfigFile.ts", + "./parseQuery": "./src/modules/client/parseQuery.ts", + "./parseQuery.ts": "./src/modules/client/parseQuery.ts", + "./readFileSendReqAndWriteResponse": "./src/modules/client/readFileSendReqAndWriteResponse.ts", + "./readFileSendReqAndWriteResponse.ts": "./src/modules/client/readFileSendReqAndWriteResponse.ts" +}; + + +function webpackContext(req) { + var id = webpackContextResolve(req); + return __webpack_require__(id); +} +function webpackContextResolve(req) { + if(!__webpack_require__.o(map, req)) { + var e = new Error("Cannot find module '" + req + "'"); + e.code = 'MODULE_NOT_FOUND'; + throw e; + } + return map[req]; +} +webpackContext.keys = function webpackContextKeys() { + return Object.keys(map); +}; +webpackContext.resolve = webpackContextResolve; +module.exports = webpackContext; +webpackContext.id = "./src/modules/client sync recursive ^.*$"; + +/***/ }), + +/***/ "./src/modules/client/checkQueryBrackets.ts": +/*!**************************************************!*\ + !*** ./src/modules/client/checkQueryBrackets.ts ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +/** + * @module : parser.ts + * @author : Austin Ruby + * @function : parse string for instances of 'graphQuill' and extract content + * within parens immediately following each instance + * @changelog : Ed Greenberg, November 4th, 2019, rewrote to remove enum bug + * @changelog : ##WHOEVER CHANGES THE FILE, date, details + * * */ +// check if parens are balanced for parsed query strings +// if they're balanced, return original query string +// if they're not, return error message with imbalanced bracket/s +function checkQueryBrackets(queryString) { + const stack = []; // the core of the function... + // ...where detected opening brackets will be pushed in and pop off when the parser finds a mate + const validatedSoFar = []; // a running copy of the query + const openings = '{[('; // list of opening brackets + const closings = '}])'; // list of closing brackets + // eslint-disable-next-line no-restricted-syntax + for (const el of queryString) { // loop the query + if (openings.includes(el)) + stack.push(el); // if query el is opening bracket, add el to stack + if (closings.includes(el)) { + if (stack[stack.length - 1] === openings[closings.indexOf(el)]) + stack.pop(); + // if top of stack mates a new closing bracket, we are good, can reduce stack and keep going + else + break; + // if the top of stack does not mate closing bracket, we stop loop and skip to declaring error + } + validatedSoFar.push(el); // helping keep running copy of query + } + return stack.length === 0 // this will be zero if all query brackets have matches + ? queryString.slice(1, queryString.length - 1) // this substring is sent ahead if validated + : new Error(`${`The following character makes the query unbalanced: ${stack[stack.length - 1]}\n` + + 'The portion of the query that ran before the unbalance was detected was:\n'}${validatedSoFar.join('')}\n\n`); // ...otherwise, we report an error +} +module.exports = checkQueryBrackets; + + +/***/ }), + +/***/ "./src/modules/client/extractQueries.ts": +/*!**********************************************!*\ + !*** ./src/modules/client/extractQueries.ts ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +/* eslint-disable import/no-unresolved */ +// import { builtinModules } from 'module'; +Object.defineProperty(exports, "__esModule", { value: true }); +const parseQuery_1 = __webpack_require__(/*! ./parseQuery */ "./src/modules/client/parseQuery.ts"); +const useCheckQueryBrackets = __webpack_require__(/*! ./checkQueryBrackets */ "./src/modules/client/checkQueryBrackets.ts"); +// given file path, read file at path and parse for instances of 'graphQuill' +function extractQueries(string) { + // console.log(string); + // define text to search for in file + const gq = 'graphQuill'; + const queriesArr = []; + // iterate over string + for (let i = 0; i < string.length; i += 1) { + // if current slice of string is 'graphQuill' + // then push evaluated result of parseQueries passing in + // string sliced from current char to end into queriesArr + if (string.slice(i, i + gq.length) === gq) { + queriesArr.push(parseQuery_1.default(string.slice(i + gq.length))); + } + } + // after finding all instances of 'graphQuill' and parsing out query strings, + // map queries to new array full of either valid queries of errors + const validatedQueriesArr = queriesArr.map((queryString) => (useCheckQueryBrackets(queryString))); + // console.log('queriesArr: ', queriesArr); + // console.log('validatedQueriesArr: ', validatedQueriesArr); + return validatedQueriesArr; +} // given file path, read file at path and parse for instances of 'graphQuill' +module.exports = extractQueries; + + +/***/ }), + +/***/ "./src/modules/client/findPortNumber.ts": +/*!**********************************************!*\ + !*** ./src/modules/client/findPortNumber.ts ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +/** + * @author : Alex Chao + * @function : return the portNumber as a string + * @param: entryPoint + * @returns: portNumber as a string + * @changelog : ##WHOEVER CHANGES THE FILE, date, details + * * */ +const fs = __webpack_require__(/*! fs */ "fs"); +function findPortNumber(entryPoint) { + // this is a blocking (synchronous) call to the active file, populating 'data' as a string + const data = fs.readFileSync(entryPoint, 'utf8'); + // to stop a localhost, we must first identify a port, and 'app.listen(' is + // a special string in the active file that is likely to be adjacent to the port number + const lookup = data.search(/app.listen\(/); + // this next segment is edge case handling for if the port number + // is separated from the start parentheses by some number of spaces + let displace = 0; + while (data[lookup + displace + 11] === ' ') { + displace += 1; + } + // return the port number (accounting for the offsetting per the edge case) + return data.slice(lookup + 11 + displace, lookup + 15 + displace); +} +module.exports = findPortNumber; + + +/***/ }), + +/***/ "./src/modules/client/findRootDirectory.ts": +/*!*************************************************!*\ + !*** ./src/modules/client/findRootDirectory.ts ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +/** + * @author : Alex Chao Nov 7th, 2019. Modularized + * @function : return the root directory path in a string + * @param : none + * @returns : string of the root directory + * @changelog : ##WHOEVER CHANGES THE FILE, date, details + * * */ +Object.defineProperty(exports, "__esModule", { value: true }); +// eslint-disable-next-line import/no-unresolved +const vscode = __webpack_require__(/*! vscode */ "vscode"); +const path = __webpack_require__(/*! path */ "path"); +const fs = __webpack_require__(/*! fs */ "fs"); +function findRootDirectory() { + // identify entryPoint for the file that starts the server + // search for root directory by finding the package.json file + let root = path.dirname(vscode.window.activeTextEditor.document.fileName); + while (!fs.existsSync(`${root}/package.json`)) { + root = path.dirname(root); + } + return root; +} +module.exports = findRootDirectory; + + +/***/ }), + +/***/ "./src/modules/client/parseConfigFile.ts": +/*!***********************************************!*\ + !*** ./src/modules/client/parseConfigFile.ts ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +/* eslint-disable no-unused-vars */ +// these rules are disabled for the weird require that is inside of the function +/* eslint-disable global-require */ +/* eslint-disable import/no-dynamic-require */ +Object.defineProperty(exports, "__esModule", { value: true }); +// const path = require('path'); +const fs = __webpack_require__(/*! fs */ "fs"); +const path = __webpack_require__(/*! path */ "path"); +function parseConfigFile(rootPath) { + // find config file in root directory + const gqConfigFilePath = `${rootPath}/graphquill.config.js`; + // ! a cached version of this file will be stored here, so future invocations that are trying + // to get results of an updated config file, will appear to not have been changed + delete __webpack_require__.c[gqConfigFilePath]; + let entryPoint; + let allowServerTimeoutConfigSetting; + if (fs.existsSync(gqConfigFilePath)) { + // if the config file exists, require it in (will come in as an object) + const configObject = __webpack_require__("./src/modules/client sync recursive ^.*$")(`${gqConfigFilePath}`); + // console.log('config object in parseconfigfile.ts', configObject); + // set the entry point to the absolute path (root + relative entry path) + entryPoint = path.resolve(rootPath, configObject.entry); + // set the servertimeout config setting + allowServerTimeoutConfigSetting = configObject.serverStartupTimeAllowed; + } + else { + // default it to the current open editor if there is not a config file + entryPoint = ''; + // ! This will be handled in the outer extension.ts file to notify the user and break out of + // ! the thread of execution at the same time + // notify user that config file was not found and current file is being used as the entry point + // vscode.window.showInformationMessage('graphquill.config.js file was not found. + // Please use the Create GraphQuill Config File Command to create one'); + } + // return the array with the two results, to be destrucutred when the function is invoked + return { entryPoint, allowServerTimeoutConfigSetting }; +} +module.exports = parseConfigFile; + + +/***/ }), + +/***/ "./src/modules/client/parseQuery.ts": +/*!******************************************!*\ + !*** ./src/modules/client/parseQuery.ts ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +/** + * @author : Austin Ruby + * @function : parse and validate query + * @changelog : Ed Greenberg, November 5th, 2019, created ability to return unbalanced parens + * @changelog : ##WHOEVER CHANGES THE FILE, date, details + * * */ +Object.defineProperty(exports, "__esModule", { value: true }); +// add characters to string while within parentheses +function parseQuery(input) { + let queryString = ''; // string to be checked for balanced parens + let passedQueryString = ''; // string to be passed along + let closer = false; // trip to prevent passed along string from overwriting + let openParensCount = 0; // balanced parens validation tool + let closeParensCount = 0; // balanced parens valaidation tool + let index = 0; // helps loop through input + const stack = []; // helps determine when query should be passed along + while (index < input.length) { // loop input + if (input[index] === '(') { // check open parens + openParensCount += 1; // increment relevant counter + stack.push(input[index]); // add to stack + } + else if (input[index] === ')') { // check closed parens + if (stack.length === 0) { // if stack is empty and we have a closed, we have a problem + return 'unbalanced parens'; + } + closeParensCount += 1; // increment relevant counter + stack.pop(); // closed parens eliminates open parens on stack + } + queryString += input[index]; // feed current character in loop to preliminary result string + if (stack.length === 0 && closer === false) { // first time we hit empty stack... + passedQueryString = queryString; // create result stack; + closer = true; + } + index += 1; + } + return openParensCount === closeParensCount ? passedQueryString : 'unbalanced parens'; +} +exports.default = parseQuery; + + +/***/ }), + +/***/ "./src/modules/client/readFileSendReqAndWriteResponse.ts": +/*!***************************************************************!*\ + !*** ./src/modules/client/readFileSendReqAndWriteResponse.ts ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// for requiring in .js files +/* eslint-disable import/no-unresolved */ +Object.defineProperty(exports, "__esModule", { value: true }); +const fetch = __webpack_require__(/*! node-fetch */ "./node_modules/node-fetch/lib/index.mjs"); +const fs = __webpack_require__(/*! fs */ "fs"); +const extractQueries = __webpack_require__(/*! ./extractQueries */ "./src/modules/client/extractQueries.ts"); +// checkQueryBrackets used to be here +// parseQuery used to be here +// extractQueries was here +// parent function to read file, +// call helper functions to parse out query string, +// send request to GraphQL API, +// and return response to output channel +function readFileSendReqAndWriteResponse(filePath, channel, portNumber, rootPath) { + // console.log('inreadFile: ', filePath); + // parse the contents of the entire filePath file to a string + const copy = fs.readFileSync(filePath).toString(); + // check if the file is within the root directory, otherwise we don't want to inject the + // function defintion + if (filePath.includes(rootPath) && !copy.includes('function graphQuill')) { + const newFile = `function graphQuill() {}\n\n${copy}`; + fs.writeFileSync(filePath, newFile); + } + // read user's file + fs.readFile(filePath, (err, data) => { + if (err) { + console.log(err); + } + else { + // if no error, convert data to string and pass into gQParser to pull out query/ies + const result = extractQueries(data.toString()); + // send post request to API/graphql + setTimeout(() => { + // console.log('IN SET TIMEOUT'); + // handle multiple queries in file... + // the additional quotes need to be parsed off + const queriesWithoutQuotes = result.filter( + // callback to remove empty string queries (i.e. the function def of graphQuill) + (e) => (typeof e === 'string' && e.length)).map((query) => ( + // should all be strings... + typeof query === 'string' && query.slice(1, query.length - 1))); + console.log('--JUST THE QUERIES', queriesWithoutQuotes); + // TODO pair up the requests and responses. Right now the responses are coming in a random + // TODO order because of async fetches + // TODO MAKE THIS A PROMISE ALL? or does it not matter because the for loop will send off + // TODO all of the fetches simultaneously and just append responses on as they come in... + // console.log('query w/o quotes is', queryMinusQuotes); + queriesWithoutQuotes.forEach((query) => { + // send the fetch to the correct port (passed in as a variable) + fetch(`http://localhost:${portNumber}/graphql`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ query }), + }) + .then((response) => response.json()) + .then((thing) => { + console.log('printed: ', thing); + // append any graphql response to the output channel + channel.append(`\n${JSON.stringify(thing, null, 2)}`); // may need to stringify to send + channel.show(true); + }) + .catch((error) => { + console.log('fetch catch error: ', error, typeof error, error.constructor.name); + // print any errors to the output channel + channel.append(`ERROR!!!\n${JSON.stringify(error, null, 2)}`); + }); + }); + // only append this string to the output channel once + channel.append('Responses are:'); + }, 1); // TODO BIG UX FIX NEEDED HERE + // then send response back to vscode output channel + // console.log('parsed queries are', result); + // TODO match these up with the correct queries when there are multiple within a single file + channel.append(`GraphQuill Queries are:\n${result.filter((e) => (typeof e === 'string' ? e.length : false))}\n`); + channel.show(true); + } + }); +} +module.exports = readFileSendReqAndWriteResponse; + + +/***/ }), + +/***/ "./src/modules/server/checkForRunningServer.ts": +/*!*****************************************************!*\ + !*** ./src/modules/server/checkForRunningServer.ts ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +/** + * @module : checkForRunningServer.ts + * @author : Alex Chao, Nov 7th, 2019 + * @function : uses child process and lsof to check if a port is currently running + * @param : portNumber, string + * @param : once: boolean, true if the function should check if the port is open right when the + * function is run. OR false if the function should wait for the server to start before resolving + * @param : allowServerTimeoutConfigSetting: number, user input from config file to determine how + * long to wait for the server to start. Defaults to 3000 (milliseconds) + * @returns : a boolean, true if the server has started, false if it has not started + * @changelog : ##WHOEVER CHANGES THE FILE, date, details + * * */ +// eslint-disable-next-line import/no-unresolved +// import * as vscode from 'vscode'; +// const path = require('path'); +// const fs = require('fs'); +const childProcess = __webpack_require__(/*! child_process */ "child_process"); +const checkForRunningServer = (portNumber, once, allowServerTimeoutConfigSetting = 3000) => { + console.log('CHECK FOR RUNNING SERVER IS RUNNINGGGGGG'); + // console.log(portNumber, once, allowServerTimeoutConfigSetting); + // moved this line into the serverOn file so that each time serverOn is called + // a new child process is started. This is critical to being able to toggle + // GraphQuill on and off + let portOpen = false; + let allTerminalText; + const bashTerminal = childProcess.spawn('bash'); + // next, we activate two terminal methods to give us + // feedback on whether we sucessfully used a child process + // note the Typescript (: any) used to handle unknown data inputs + bashTerminal.stdout.on('data', (data) => { + // console.log(`--stdout from terminal: ${data}`); + console.log('terminal has printed some data...'); + allTerminalText = data.toString(); + portOpen = allTerminalText.includes('node'); + // console.log('allterminal text', allTerminalText); + // console.log('---data type is', data.constructor.name); + }); + // log what the exit code is in the extension terminal + bashTerminal.on('exit', (code) => { + console.log(`checkForRunningServer child process exited with code ${code}`); + // console.log('--exit code type is', code.constructor.name); + }); + // just below is the real core of the function, the child process: + // checks if the port is active with the `lsof -i :${portNumber}\n` command + // IMPORTANT: code will not run without the '\n' component--the CLI needs this + return new Promise((resolve) => { + let numRuns = 0; + let timeoutId; + // A set interval callback that will write a command to the terminal every 200ms, then check + // if the portOpen boolean has been changed (it is actually changed in the on-data listener + // above). Promise will resolve when the portOpen variable is true + const intervalLsofToBash = setInterval(() => { + bashTerminal.stdin.write(`lsof -i :${portNumber}\n`); + // console.log('inside promise-- portOpen boolean', portOpen); + // console.log('inside promise-- allTerminalText', allTerminalText); + // if the port is open, resolve the promise, return some value... + if (portOpen) { + // clear set intervals + clearInterval(intervalLsofToBash); + // clear the timeoutId + if (timeoutId) + clearTimeout(timeoutId); + // end terminal session + bashTerminal.stdin.end(); + console.log('port is open!'); + // resolve promise + // return a confirmed status + resolve(true); + } + // if once param was set to true, we only want to check if the server is "immediately" on, so + // check if once is true, and numRuns is greater than one, then resolve the promise with the + // result of portOpen + if (once && numRuns > 1) { + console.log('---once conditional triggered, result is:', portOpen); + // clear set intervals + clearInterval(intervalLsofToBash); + // clear the timeoutId + if (timeoutId) + clearTimeout(timeoutId); + // end terminal session + bashTerminal.stdin.end(); + resolve(portOpen); + } + // increment numRuns for the once conditional test + numRuns += 1; + }, 200); // Run every 200ms + // default/base case to resolve promise if the server hasn't started in 3 seconds + // This means the server is either spinning up too slowly or there is an error in the user's + // server starting file. In either case we want to return false + if (!once) { + // only create this default timeout if this function was invoked with once === false + timeoutId = setTimeout(() => { + console.log('timeout of checkForRunningServer'); + // clear set intervals + clearInterval(intervalLsofToBash); + // end terminal session + bashTerminal.stdin.end(); + // resolve the promise + resolve(false); + }, allowServerTimeoutConfigSetting); // default allowed time is 3 sec. + } + }); +}; +module.exports = checkForRunningServer; + + +/***/ }), + +/***/ "./src/modules/server/serverOff.ts": +/*!*****************************************!*\ + !*** ./src/modules/server/serverOff.ts ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +/** + * @module : serverOff.ts + * @author : Ed Greenberg + * @function : turn off server + * @changelog : Ed Greenberg, November 5th, 2019, rewrote to open port on server/index.js + * @changelog : ##WHOEVER CHANGES THE FILE, date, details + * * */ +Object.defineProperty(exports, "__esModule", { value: true }); +// eslint-disable-next-line import/no-unresolved +const vscode = __webpack_require__(/*! vscode */ "vscode"); +const fs = __webpack_require__(/*! fs */ "fs"); +const path = __webpack_require__(/*! path */ "path"); +const childProcess = __webpack_require__(/*! child_process */ "child_process"); +// spawn a new child process that will be used to close the open port +const serverOff = (portNumber) => { + console.log('in serveroff function file'); + // this one also had to be pulled into serverOff so that a new child process is started to + // kill the server port + const terminal2 = childProcess.spawn('bash'); + // we find the root directory by looking up from the active file + // ...until we detect a folder with package.json + let root = path.dirname(vscode.window.activeTextEditor.document.fileName); + while (!fs.existsSync(`${root}/package.json`)) { + root = path.dirname(root); + console.log('a root grows: ', root); + } + // const temp = vscode.window.activeTextEditor!.document.fileName; + // write any data/outputs from the terminal to the extension console + terminal2.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + // on terminal exit, print the exit code + terminal2.on('exit', (code) => { + console.log(`terminal2 child process exited with code ${code}`); + }); + // // this is a blocking (synchronous) call to the active file, populating 'data' as a string + // const data = fs.readFileSync(`${root}/server/index.js`, 'utf8'); + // // to stop a localhost, we must first identify a port, and 'app.listen(' is + // // a special string in the active file that is likely to be adjacent to the port number + // const lookup = data.search(/app.listen\(/); + // // this next segment is edge case handling for if the port number + // // is separated from the start parentheses by some number of spaces + // let displace = 0; + // while (data[lookup + displace + 11] === ' ') { + // displace += 1; + // } + // // in target, we slice the port out of the array (offsetting as required by the edge case test) + // // eslint-disable-next-line no-unused-vars + // const target = data.slice(lookup + 11 + displace, lookup + 15 + displace); + // ? I don't think these need to be delayed... just kill the process + // in the core of our function, we run a special command that finds and kills the port specified + // setTimeout(() => { + // terminal2.stdin.write(`kill $(lsof -t -i:${target})\n`); + terminal2.stdin.write(`kill $(lsof -t -i:${portNumber})\n`); + terminal2.stdin.end(); + // }, 1); + vscode.window.showInformationMessage('GraphQuill has been turned off'); +}; +module.exports = serverOff; + + +/***/ }), + +/***/ "./src/modules/server/serverOn.ts": +/*!****************************************!*\ + !*** ./src/modules/server/serverOn.ts ***! + \****************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +/** + * @module : serverOn.ts + * @author : Ed Greenberg + * @function : turn on server + * @changelog : Ed Greenberg, November 5th, 2019, rewrote to open port on server/index.js + * @changelog : ##WHOEVER CHANGES THE FILE, date, details + * * */ +Object.defineProperty(exports, "__esModule", { value: true }); +// eslint-disable-next-line import/no-unresolved +const vscode = __webpack_require__(/*! vscode */ "vscode"); +// const path = require('path'); +// const fs = require('fs'); +const childProcess = __webpack_require__(/*! child_process */ "child_process"); +const serverOn = (entryPoint) => { + // moved this line into the serverOn file so that each time serverOn is called + // a new child process is started. This is critical to being able to toggle + // GraphQuill on and off + const terminal = childProcess.spawn('bash'); + // we find the root directory by looking up from the active file + // ...until we detect a folder with package.json + // let root = path.dirname(vscode.window.activeTextEditor!.document.fileName); + // while (!fs.existsSync(`${root}/package.json`)) { + // root = path.dirname(root); + // console.log('a root grows: ', root); + // } + // next, we activate two terminal methods to give us + // feedback on whether we sucessfully used a child process + // note the Typescript (: any) used to handle unknown data inputs + terminal.stdout.on('data', (data) => { + // todo add validation, if there is an error that is logged here, it's coming from node + // todo and should be piped to the channel as well + // todo this may require passing in the channel to the serverOn function... + console.log(`stdout from terminal: ${data}`); + // console.log('---data type is', data.constructor.name); + }); + // log what the exit code is in the extension terminal + terminal.on('exit', (code) => { + console.log(`child process exited with code ${code}`); + // console.log('--exit code type is', code.constructor.name); + }); + // just below is the real core of the function, the child process: + // we write to a new terminal to run the index.js file in the folder specified by base + // IMPORTANT: code will not run without the '\n' component--the CLI needs this + // explicit return command + return new Promise((resolve) => { + // console.log('inside promise'); + setTimeout(() => { + // console.log('root: ', root); + console.log('Sending stdin (node command) to terminal'); + // this seems to take some time to spin up the server and + // throws an error with the timing of a fetch + // terminal.stdin.write(`node ${root}/server/index.js\n`); + terminal.stdin.write(`node ${entryPoint}\n`); + console.log('Ending terminal session'); + terminal.stdin.end(); + // resolve promise + resolve(); + console.log('just resolved'); + vscode.window.showInformationMessage('GraphQuill Activated'); + }, 1); + }); + // this message pops up to the user upon completion of the command +}; +module.exports = serverOn; + + +/***/ }), + +/***/ "child_process": +/*!********************************!*\ + !*** external "child_process" ***! + \********************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("child_process"); + +/***/ }), + +/***/ "fs": +/*!*********************!*\ + !*** external "fs" ***! + \*********************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("fs"); + +/***/ }), + +/***/ "http": +/*!***********************!*\ + !*** external "http" ***! + \***********************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("http"); + +/***/ }), + +/***/ "https": +/*!************************!*\ + !*** external "https" ***! + \************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("https"); + +/***/ }), + +/***/ "path": +/*!***********************!*\ + !*** external "path" ***! + \***********************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("path"); + +/***/ }), + +/***/ "stream": +/*!*************************!*\ + !*** external "stream" ***! + \*************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("stream"); + +/***/ }), + +/***/ "url": +/*!**********************!*\ + !*** external "url" ***! + \**********************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("url"); + +/***/ }), + +/***/ "vscode": +/*!*************************!*\ + !*** external "vscode" ***! + \*************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("vscode"); + +/***/ }), + +/***/ "zlib": +/*!***********************!*\ + !*** external "zlib" ***! + \***********************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("zlib"); + +/***/ }) + +/******/ }); +//# sourceMappingURL=extension.js.map \ No newline at end of file diff --git a/dist/extension.js.map b/dist/extension.js.map new file mode 100644 index 0000000..10e19a4 --- /dev/null +++ b/dist/extension.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../webpack/bootstrap",".././node_modules/node-fetch/lib/index.mjs",".././src/extension.ts",".././src/modules/client sync ^.*$",".././src/modules/client/checkQueryBrackets.ts",".././src/modules/client/extractQueries.ts",".././src/modules/client/findPortNumber.ts",".././src/modules/client/findRootDirectory.ts",".././src/modules/client/parseConfigFile.ts",".././src/modules/client/parseQuery.ts",".././src/modules/client/readFileSendReqAndWriteResponse.ts",".././src/modules/server/checkForRunningServer.ts",".././src/modules/server/serverOff.ts",".././src/modules/server/serverOn.ts","../external \"child_process\"","../external \"fs\"","../external \"http\"","../external \"https\"","../external \"path\"","../external \"stream\"","../external \"url\"","../external \"vscode\"","../external \"zlib\""],"names":[],"mappings":";;QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4B;AACJ;AACF;AACI;AACF;;AAExB;;AAEA;AACA,iBAAiB,mCAAM;;AAEvB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;AACA;;AAEA;AACA,QAAQ,mBAAmB;AAC3B,QAAQ,mBAAmB;AAC3B,SAAS;AACT,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA,oBAAoB,mCAAM;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kFAAkF;AAClF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE,yBAAyB,kCAAkC;AAC7D;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE,0BAA0B,mCAAM,GAAG;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,mCAAM;AAC3B;AACA,iHAAiH,UAAU,IAAI,YAAY;AAC3I;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ,+EAA+E,WAAW,WAAW,YAAY;AACjH;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,QAAQ,mBAAmB;AAC3B,YAAY,mBAAmB;AAC/B,eAAe,mBAAmB;AAClC,QAAQ,mBAAmB;AAC3B,QAAQ,mBAAmB;AAC3B,QAAQ;AACR,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qEAAqE,SAAS;AAC9E;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,mCAAM;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,oEAAoE,WAAW,SAAS,eAAe;AACvG,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,yEAAyE,WAAW,IAAI,YAAY;AACpG;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA,6CAA6C,WAAW,eAAe,YAAY;AACnF;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,IAAI;AACJ;AACA,4EAA4E,WAAW,IAAI,YAAY;AACvG;AACA,GAAG;AACH,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAY,EAAE;AACd,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,mCAAM;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,qBAAqB;AACrB,EAAE;AACF;AACA,4CAA4C;AAC5C,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA,8BAA8B,WAAW,mBAAmB;AAC5D,EAAE,0BAA0B,mCAAM;AAClC;AACA;AACA;AACA,EAAE;AACF;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,WAAW,KAAK;AAChB;AACA,yBAAyB,KAAK;AAC9B;AACA;;AAEA;AACA,YAAY,MAAM;AAClB;AACA,yBAAyB,MAAM;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,OAAO,mBAAmB;AAC1B,WAAW,mBAAmB;AAC9B,OAAO,mBAAmB;AAC1B,UAAU,mBAAmB;AAC7B,OAAO,mBAAmB;AAC1B,UAAU,mBAAmB;AAC7B,QAAQ,mBAAmB;AAC3B,UAAU,mBAAmB;AAC7B,WAAW;AACX,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA,EAAE;AACF;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAkB;;AAE9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,qBAAqB,iCAAI;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA,OAAO,mBAAmB;AAC1B,UAAU,mBAAmB;AAC7B,MAAM,mBAAmB;AACzB,cAAc,mBAAmB;AACjC,cAAc,mBAAmB;AACjC,WAAW,mBAAmB;AAC9B,SAAS;AACT,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA,kBAAkB,gCAAG;AACrB,mBAAmB,gCAAG;;AAEtB,gDAAgD,mCAAM;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA,IAAI;AACJ;AACA,6BAA6B,MAAM;AACnC;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH,iEAAiE;;AAEjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,UAAU,mBAAmB;AAC7B,OAAO,mBAAmB;AAC1B,WAAW,mBAAmB;AAC9B,YAAY,mBAAmB;AAC/B,SAAS,mBAAmB;AAC5B,UAAU;AACV,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+CAA+C,mCAAM;AACrD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,wBAAwB;AACxB;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB,mCAAM;AAC5B,oBAAoB,gCAAG;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gDAAgD,kCAAK,GAAG,iCAAI;AAC5D;;AAEA;;AAEA;AACA;AACA;AACA,+CAA+C,mCAAM;AACrD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kDAAkD,YAAY;AAC9D;AACA,KAAK;AACL,IAAI;AACJ;;AAEA;AACA,uCAAuC,YAAY,mBAAmB,YAAY;AAClF;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,8DAA8D,YAAY;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6DAA6D,YAAY;AACzE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iCAAI;AACf,iBAAiB,iCAAI;AACrB;;AAEA;AACA;AACA,qBAAqB,iCAAI;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iCAAI;AAC3B,MAAM;AACN,uBAAuB,iCAAI;AAC3B;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,iCAAiC,iCAAI;AACrC,qBAAqB,iCAAI;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEe,oEAAK,EAAC;AAC6B;;;;;;;;;;;;;;AC9lDlD;;;;;;;;;;OAUO;;;;;;;;;;;AAEP,gDAAgD;AAChD,2DAAiC;AAEjC,2CAA2C;AAC3C,MAAM,EAAE,GAAG,mBAAO,CAAC,cAAI,CAAC,CAAC;AAGzB,yCAAyC;AACzC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","file":"extension.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 \t\t}\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// 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, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\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\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/extension.ts\");\n","import Stream from 'stream';\nimport http from 'http';\nimport Url from 'url';\nimport https from 'https';\nimport zlib from 'zlib';\n\n// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js\n\n// fix for \"Readable\" isn't a named export issue\nconst Readable = Stream.Readable;\n\nconst BUFFER = Symbol('buffer');\nconst TYPE = Symbol('type');\n\nclass Blob {\n\tconstructor() {\n\t\tthis[TYPE] = '';\n\n\t\tconst blobParts = arguments[0];\n\t\tconst options = arguments[1];\n\n\t\tconst buffers = [];\n\t\tlet size = 0;\n\n\t\tif (blobParts) {\n\t\t\tconst a = blobParts;\n\t\t\tconst length = Number(a.length);\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tconst element = a[i];\n\t\t\t\tlet buffer;\n\t\t\t\tif (element instanceof Buffer) {\n\t\t\t\t\tbuffer = element;\n\t\t\t\t} else if (ArrayBuffer.isView(element)) {\n\t\t\t\t\tbuffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);\n\t\t\t\t} else if (element instanceof ArrayBuffer) {\n\t\t\t\t\tbuffer = Buffer.from(element);\n\t\t\t\t} else if (element instanceof Blob) {\n\t\t\t\t\tbuffer = element[BUFFER];\n\t\t\t\t} else {\n\t\t\t\t\tbuffer = Buffer.from(typeof element === 'string' ? element : String(element));\n\t\t\t\t}\n\t\t\t\tsize += buffer.length;\n\t\t\t\tbuffers.push(buffer);\n\t\t\t}\n\t\t}\n\n\t\tthis[BUFFER] = Buffer.concat(buffers);\n\n\t\tlet type = options && options.type !== undefined && String(options.type).toLowerCase();\n\t\tif (type && !/[^\\u0020-\\u007E]/.test(type)) {\n\t\t\tthis[TYPE] = type;\n\t\t}\n\t}\n\tget size() {\n\t\treturn this[BUFFER].length;\n\t}\n\tget type() {\n\t\treturn this[TYPE];\n\t}\n\ttext() {\n\t\treturn Promise.resolve(this[BUFFER].toString());\n\t}\n\tarrayBuffer() {\n\t\tconst buf = this[BUFFER];\n\t\tconst ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\treturn Promise.resolve(ab);\n\t}\n\tstream() {\n\t\tconst readable = new Readable();\n\t\treadable._read = function () {};\n\t\treadable.push(this[BUFFER]);\n\t\treadable.push(null);\n\t\treturn readable;\n\t}\n\ttoString() {\n\t\treturn '[object Blob]';\n\t}\n\tslice() {\n\t\tconst size = this.size;\n\n\t\tconst start = arguments[0];\n\t\tconst end = arguments[1];\n\t\tlet relativeStart, relativeEnd;\n\t\tif (start === undefined) {\n\t\t\trelativeStart = 0;\n\t\t} else if (start < 0) {\n\t\t\trelativeStart = Math.max(size + start, 0);\n\t\t} else {\n\t\t\trelativeStart = Math.min(start, size);\n\t\t}\n\t\tif (end === undefined) {\n\t\t\trelativeEnd = size;\n\t\t} else if (end < 0) {\n\t\t\trelativeEnd = Math.max(size + end, 0);\n\t\t} else {\n\t\t\trelativeEnd = Math.min(end, size);\n\t\t}\n\t\tconst span = Math.max(relativeEnd - relativeStart, 0);\n\n\t\tconst buffer = this[BUFFER];\n\t\tconst slicedBuffer = buffer.slice(relativeStart, relativeStart + span);\n\t\tconst blob = new Blob([], { type: arguments[2] });\n\t\tblob[BUFFER] = slicedBuffer;\n\t\treturn blob;\n\t}\n}\n\nObject.defineProperties(Blob.prototype, {\n\tsize: { enumerable: true },\n\ttype: { enumerable: true },\n\tslice: { enumerable: true }\n});\n\nObject.defineProperty(Blob.prototype, Symbol.toStringTag, {\n\tvalue: 'Blob',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * fetch-error.js\n *\n * FetchError interface for operational errors\n */\n\n/**\n * Create FetchError instance\n *\n * @param String message Error message for human\n * @param String type Error type for machine\n * @param String systemError For Node.js system error\n * @return FetchError\n */\nfunction FetchError(message, type, systemError) {\n Error.call(this, message);\n\n this.message = message;\n this.type = type;\n\n // when err.type is `system`, err.code contains system error code\n if (systemError) {\n this.code = this.errno = systemError.code;\n }\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nFetchError.prototype = Object.create(Error.prototype);\nFetchError.prototype.constructor = FetchError;\nFetchError.prototype.name = 'FetchError';\n\nlet convert;\ntry {\n\tconvert = require('encoding').convert;\n} catch (e) {}\n\nconst INTERNALS = Symbol('Body internals');\n\n// fix an issue where \"PassThrough\" isn't a named export for node <10\nconst PassThrough = Stream.PassThrough;\n\n/**\n * Body mixin\n *\n * Ref: https://fetch.spec.whatwg.org/#body\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nfunction Body(body) {\n\tvar _this = this;\n\n\tvar _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n\t _ref$size = _ref.size;\n\n\tlet size = _ref$size === undefined ? 0 : _ref$size;\n\tvar _ref$timeout = _ref.timeout;\n\tlet timeout = _ref$timeout === undefined ? 0 : _ref$timeout;\n\n\tif (body == null) {\n\t\t// body is undefined or null\n\t\tbody = null;\n\t} else if (isURLSearchParams(body)) {\n\t\t// body is a URLSearchParams\n\t\tbody = Buffer.from(body.toString());\n\t} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\n\t\t// body is ArrayBuffer\n\t\tbody = Buffer.from(body);\n\t} else if (ArrayBuffer.isView(body)) {\n\t\t// body is ArrayBufferView\n\t\tbody = Buffer.from(body.buffer, body.byteOffset, body.byteLength);\n\t} else if (body instanceof Stream) ; else {\n\t\t// none of the above\n\t\t// coerce to string then buffer\n\t\tbody = Buffer.from(String(body));\n\t}\n\tthis[INTERNALS] = {\n\t\tbody,\n\t\tdisturbed: false,\n\t\terror: null\n\t};\n\tthis.size = size;\n\tthis.timeout = timeout;\n\n\tif (body instanceof Stream) {\n\t\tbody.on('error', function (err) {\n\t\t\tconst error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);\n\t\t\t_this[INTERNALS].error = error;\n\t\t});\n\t}\n}\n\nBody.prototype = {\n\tget body() {\n\t\treturn this[INTERNALS].body;\n\t},\n\n\tget bodyUsed() {\n\t\treturn this[INTERNALS].disturbed;\n\t},\n\n\t/**\n * Decode response as ArrayBuffer\n *\n * @return Promise\n */\n\tarrayBuffer() {\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\t});\n\t},\n\n\t/**\n * Return raw response as Blob\n *\n * @return Promise\n */\n\tblob() {\n\t\tlet ct = this.headers && this.headers.get('content-type') || '';\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn Object.assign(\n\t\t\t// Prevent copying\n\t\t\tnew Blob([], {\n\t\t\t\ttype: ct.toLowerCase()\n\t\t\t}), {\n\t\t\t\t[BUFFER]: buf\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n * Decode response as json\n *\n * @return Promise\n */\n\tjson() {\n\t\tvar _this2 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(buffer.toString());\n\t\t\t} catch (err) {\n\t\t\t\treturn Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n * Decode response as text\n *\n * @return Promise\n */\n\ttext() {\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn buffer.toString();\n\t\t});\n\t},\n\n\t/**\n * Decode response as buffer (non-spec api)\n *\n * @return Promise\n */\n\tbuffer() {\n\t\treturn consumeBody.call(this);\n\t},\n\n\t/**\n * Decode response as text, while automatically detecting the encoding and\n * trying to decode to UTF-8 (non-spec api)\n *\n * @return Promise\n */\n\ttextConverted() {\n\t\tvar _this3 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn convertBody(buffer, _this3.headers);\n\t\t});\n\t}\n};\n\n// In browsers, all properties are enumerable.\nObject.defineProperties(Body.prototype, {\n\tbody: { enumerable: true },\n\tbodyUsed: { enumerable: true },\n\tarrayBuffer: { enumerable: true },\n\tblob: { enumerable: true },\n\tjson: { enumerable: true },\n\ttext: { enumerable: true }\n});\n\nBody.mixIn = function (proto) {\n\tfor (const name of Object.getOwnPropertyNames(Body.prototype)) {\n\t\t// istanbul ignore else: future proof\n\t\tif (!(name in proto)) {\n\t\t\tconst desc = Object.getOwnPropertyDescriptor(Body.prototype, name);\n\t\t\tObject.defineProperty(proto, name, desc);\n\t\t}\n\t}\n};\n\n/**\n * Consume and convert an entire Body to a Buffer.\n *\n * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body\n *\n * @return Promise\n */\nfunction consumeBody() {\n\tvar _this4 = this;\n\n\tif (this[INTERNALS].disturbed) {\n\t\treturn Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));\n\t}\n\n\tthis[INTERNALS].disturbed = true;\n\n\tif (this[INTERNALS].error) {\n\t\treturn Body.Promise.reject(this[INTERNALS].error);\n\t}\n\n\tlet body = this.body;\n\n\t// body is null\n\tif (body === null) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is blob\n\tif (isBlob(body)) {\n\t\tbody = body.stream();\n\t}\n\n\t// body is buffer\n\tif (Buffer.isBuffer(body)) {\n\t\treturn Body.Promise.resolve(body);\n\t}\n\n\t// istanbul ignore if: should never happen\n\tif (!(body instanceof Stream)) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is stream\n\t// get ready to actually consume the body\n\tlet accum = [];\n\tlet accumBytes = 0;\n\tlet abort = false;\n\n\treturn new Body.Promise(function (resolve, reject) {\n\t\tlet resTimeout;\n\n\t\t// allow timeout on slow response body\n\t\tif (_this4.timeout) {\n\t\t\tresTimeout = setTimeout(function () {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));\n\t\t\t}, _this4.timeout);\n\t\t}\n\n\t\t// handle stream errors\n\t\tbody.on('error', function (err) {\n\t\t\tif (err.name === 'AbortError') {\n\t\t\t\t// if the request was aborted, reject with this Error\n\t\t\t\tabort = true;\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\t// other errors, such as incorrect content-encoding\n\t\t\t\treject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\n\t\tbody.on('data', function (chunk) {\n\t\t\tif (abort || chunk === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (_this4.size && accumBytes + chunk.length > _this4.size) {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\taccumBytes += chunk.length;\n\t\t\taccum.push(chunk);\n\t\t});\n\n\t\tbody.on('end', function () {\n\t\t\tif (abort) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclearTimeout(resTimeout);\n\n\t\t\ttry {\n\t\t\t\tresolve(Buffer.concat(accum, accumBytes));\n\t\t\t} catch (err) {\n\t\t\t\t// handle streams that have accumulated too much data (issue #414)\n\t\t\t\treject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect buffer encoding and convert to target encoding\n * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding\n *\n * @param Buffer buffer Incoming buffer\n * @param String encoding Target encoding\n * @return String\n */\nfunction convertBody(buffer, headers) {\n\tif (typeof convert !== 'function') {\n\t\tthrow new Error('The package `encoding` must be installed to use the textConverted() function');\n\t}\n\n\tconst ct = headers.get('content-type');\n\tlet charset = 'utf-8';\n\tlet res, str;\n\n\t// header\n\tif (ct) {\n\t\tres = /charset=([^;]*)/i.exec(ct);\n\t}\n\n\t// no charset in content type, peek at response body for at most 1024 bytes\n\tstr = buffer.slice(0, 1024).toString();\n\n\t// html5\n\tif (!res && str) {\n\t\tres = / 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n\t\tthis[MAP] = Object.create(null);\n\n\t\tif (init instanceof Headers) {\n\t\t\tconst rawHeaders = init.raw();\n\t\t\tconst headerNames = Object.keys(rawHeaders);\n\n\t\t\tfor (const headerName of headerNames) {\n\t\t\t\tfor (const value of rawHeaders[headerName]) {\n\t\t\t\t\tthis.append(headerName, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// We don't worry about converting prop to ByteString here as append()\n\t\t// will handle it.\n\t\tif (init == null) ; else if (typeof init === 'object') {\n\t\t\tconst method = init[Symbol.iterator];\n\t\t\tif (method != null) {\n\t\t\t\tif (typeof method !== 'function') {\n\t\t\t\t\tthrow new TypeError('Header pairs must be iterable');\n\t\t\t\t}\n\n\t\t\t\t// sequence>\n\t\t\t\t// Note: per spec we have to first exhaust the lists then process them\n\t\t\t\tconst pairs = [];\n\t\t\t\tfor (const pair of init) {\n\t\t\t\t\tif (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be iterable');\n\t\t\t\t\t}\n\t\t\t\t\tpairs.push(Array.from(pair));\n\t\t\t\t}\n\n\t\t\t\tfor (const pair of pairs) {\n\t\t\t\t\tif (pair.length !== 2) {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be a name/value tuple');\n\t\t\t\t\t}\n\t\t\t\t\tthis.append(pair[0], pair[1]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// record\n\t\t\t\tfor (const key of Object.keys(init)) {\n\t\t\t\t\tconst value = init[key];\n\t\t\t\t\tthis.append(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('Provided initializer must be an object');\n\t\t}\n\t}\n\n\t/**\n * Return combined header value given name\n *\n * @param String name Header name\n * @return Mixed\n */\n\tget(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this[MAP][key].join(', ');\n\t}\n\n\t/**\n * Iterate over all headers\n *\n * @param Function callback Executed for each item with parameters (value, name, thisArg)\n * @param Boolean thisArg `this` context for callback function\n * @return Void\n */\n\tforEach(callback) {\n\t\tlet thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\tlet pairs = getHeaders(this);\n\t\tlet i = 0;\n\t\twhile (i < pairs.length) {\n\t\t\tvar _pairs$i = pairs[i];\n\t\t\tconst name = _pairs$i[0],\n\t\t\t value = _pairs$i[1];\n\n\t\t\tcallback.call(thisArg, value, name, this);\n\t\t\tpairs = getHeaders(this);\n\t\t\ti++;\n\t\t}\n\t}\n\n\t/**\n * Overwrite header values given name\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tset(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tthis[MAP][key !== undefined ? key : name] = [value];\n\t}\n\n\t/**\n * Append a value onto existing header\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tappend(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tthis[MAP][key].push(value);\n\t\t} else {\n\t\t\tthis[MAP][name] = [value];\n\t\t}\n\t}\n\n\t/**\n * Check for header name existence\n *\n * @param String name Header name\n * @return Boolean\n */\n\thas(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\treturn find(this[MAP], name) !== undefined;\n\t}\n\n\t/**\n * Delete all header values given name\n *\n * @param String name Header name\n * @return Void\n */\n\tdelete(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tdelete this[MAP][key];\n\t\t}\n\t}\n\n\t/**\n * Return raw headers (non-spec api)\n *\n * @return Object\n */\n\traw() {\n\t\treturn this[MAP];\n\t}\n\n\t/**\n * Get an iterator on keys.\n *\n * @return Iterator\n */\n\tkeys() {\n\t\treturn createHeadersIterator(this, 'key');\n\t}\n\n\t/**\n * Get an iterator on values.\n *\n * @return Iterator\n */\n\tvalues() {\n\t\treturn createHeadersIterator(this, 'value');\n\t}\n\n\t/**\n * Get an iterator on entries.\n *\n * This is the default iterator of the Headers object.\n *\n * @return Iterator\n */\n\t[Symbol.iterator]() {\n\t\treturn createHeadersIterator(this, 'key+value');\n\t}\n}\nHeaders.prototype.entries = Headers.prototype[Symbol.iterator];\n\nObject.defineProperty(Headers.prototype, Symbol.toStringTag, {\n\tvalue: 'Headers',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Headers.prototype, {\n\tget: { enumerable: true },\n\tforEach: { enumerable: true },\n\tset: { enumerable: true },\n\tappend: { enumerable: true },\n\thas: { enumerable: true },\n\tdelete: { enumerable: true },\n\tkeys: { enumerable: true },\n\tvalues: { enumerable: true },\n\tentries: { enumerable: true }\n});\n\nfunction getHeaders(headers) {\n\tlet kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';\n\n\tconst keys = Object.keys(headers[MAP]).sort();\n\treturn keys.map(kind === 'key' ? function (k) {\n\t\treturn k.toLowerCase();\n\t} : kind === 'value' ? function (k) {\n\t\treturn headers[MAP][k].join(', ');\n\t} : function (k) {\n\t\treturn [k.toLowerCase(), headers[MAP][k].join(', ')];\n\t});\n}\n\nconst INTERNAL = Symbol('internal');\n\nfunction createHeadersIterator(target, kind) {\n\tconst iterator = Object.create(HeadersIteratorPrototype);\n\titerator[INTERNAL] = {\n\t\ttarget,\n\t\tkind,\n\t\tindex: 0\n\t};\n\treturn iterator;\n}\n\nconst HeadersIteratorPrototype = Object.setPrototypeOf({\n\tnext() {\n\t\t// istanbul ignore if\n\t\tif (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {\n\t\t\tthrow new TypeError('Value of `this` is not a HeadersIterator');\n\t\t}\n\n\t\tvar _INTERNAL = this[INTERNAL];\n\t\tconst target = _INTERNAL.target,\n\t\t kind = _INTERNAL.kind,\n\t\t index = _INTERNAL.index;\n\n\t\tconst values = getHeaders(target, kind);\n\t\tconst len = values.length;\n\t\tif (index >= len) {\n\t\t\treturn {\n\t\t\t\tvalue: undefined,\n\t\t\t\tdone: true\n\t\t\t};\n\t\t}\n\n\t\tthis[INTERNAL].index = index + 1;\n\n\t\treturn {\n\t\t\tvalue: values[index],\n\t\t\tdone: false\n\t\t};\n\t}\n}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));\n\nObject.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {\n\tvalue: 'HeadersIterator',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * Export the Headers object in a form that Node.js can consume.\n *\n * @param Headers headers\n * @return Object\n */\nfunction exportNodeCompatibleHeaders(headers) {\n\tconst obj = Object.assign({ __proto__: null }, headers[MAP]);\n\n\t// http.request() only supports string as Host header. This hack makes\n\t// specifying custom Host header possible.\n\tconst hostHeaderKey = find(headers[MAP], 'Host');\n\tif (hostHeaderKey !== undefined) {\n\t\tobj[hostHeaderKey] = obj[hostHeaderKey][0];\n\t}\n\n\treturn obj;\n}\n\n/**\n * Create a Headers object from an object of headers, ignoring those that do\n * not conform to HTTP grammar productions.\n *\n * @param Object obj Object of headers\n * @return Headers\n */\nfunction createHeadersLenient(obj) {\n\tconst headers = new Headers();\n\tfor (const name of Object.keys(obj)) {\n\t\tif (invalidTokenRegex.test(name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(obj[name])) {\n\t\t\tfor (const val of obj[name]) {\n\t\t\t\tif (invalidHeaderCharRegex.test(val)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (headers[MAP][name] === undefined) {\n\t\t\t\t\theaders[MAP][name] = [val];\n\t\t\t\t} else {\n\t\t\t\t\theaders[MAP][name].push(val);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (!invalidHeaderCharRegex.test(obj[name])) {\n\t\t\theaders[MAP][name] = [obj[name]];\n\t\t}\n\t}\n\treturn headers;\n}\n\nconst INTERNALS$1 = Symbol('Response internals');\n\n// fix an issue where \"STATUS_CODES\" aren't a named export for node <10\nconst STATUS_CODES = http.STATUS_CODES;\n\n/**\n * Response class\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nclass Response {\n\tconstructor() {\n\t\tlet body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tlet opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tBody.call(this, body, opts);\n\n\t\tconst status = opts.status || 200;\n\t\tconst headers = new Headers(opts.headers);\n\n\t\tif (body != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(body);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tthis[INTERNALS$1] = {\n\t\t\turl: opts.url,\n\t\t\tstatus,\n\t\t\tstatusText: opts.statusText || STATUS_CODES[status],\n\t\t\theaders,\n\t\t\tcounter: opts.counter\n\t\t};\n\t}\n\n\tget url() {\n\t\treturn this[INTERNALS$1].url || '';\n\t}\n\n\tget status() {\n\t\treturn this[INTERNALS$1].status;\n\t}\n\n\t/**\n * Convenience property representing if the request ended normally\n */\n\tget ok() {\n\t\treturn this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;\n\t}\n\n\tget redirected() {\n\t\treturn this[INTERNALS$1].counter > 0;\n\t}\n\n\tget statusText() {\n\t\treturn this[INTERNALS$1].statusText;\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$1].headers;\n\t}\n\n\t/**\n * Clone this response\n *\n * @return Response\n */\n\tclone() {\n\t\treturn new Response(clone(this), {\n\t\t\turl: this.url,\n\t\t\tstatus: this.status,\n\t\t\tstatusText: this.statusText,\n\t\t\theaders: this.headers,\n\t\t\tok: this.ok,\n\t\t\tredirected: this.redirected\n\t\t});\n\t}\n}\n\nBody.mixIn(Response.prototype);\n\nObject.defineProperties(Response.prototype, {\n\turl: { enumerable: true },\n\tstatus: { enumerable: true },\n\tok: { enumerable: true },\n\tredirected: { enumerable: true },\n\tstatusText: { enumerable: true },\n\theaders: { enumerable: true },\n\tclone: { enumerable: true }\n});\n\nObject.defineProperty(Response.prototype, Symbol.toStringTag, {\n\tvalue: 'Response',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nconst INTERNALS$2 = Symbol('Request internals');\n\n// fix an issue where \"format\", \"parse\" aren't a named export for node <10\nconst parse_url = Url.parse;\nconst format_url = Url.format;\n\nconst streamDestructionSupported = 'destroy' in Stream.Readable.prototype;\n\n/**\n * Check if a value is an instance of Request.\n *\n * @param Mixed input\n * @return Boolean\n */\nfunction isRequest(input) {\n\treturn typeof input === 'object' && typeof input[INTERNALS$2] === 'object';\n}\n\nfunction isAbortSignal(signal) {\n\tconst proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);\n\treturn !!(proto && proto.constructor.name === 'AbortSignal');\n}\n\n/**\n * Request class\n *\n * @param Mixed input Url or Request instance\n * @param Object init Custom options\n * @return Void\n */\nclass Request {\n\tconstructor(input) {\n\t\tlet init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tlet parsedURL;\n\n\t\t// normalize input\n\t\tif (!isRequest(input)) {\n\t\t\tif (input && input.href) {\n\t\t\t\t// in order to support Node.js' Url objects; though WHATWG's URL objects\n\t\t\t\t// will fall into this branch also (since their `toString()` will return\n\t\t\t\t// `href` property anyway)\n\t\t\t\tparsedURL = parse_url(input.href);\n\t\t\t} else {\n\t\t\t\t// coerce input to a string before attempting to parse\n\t\t\t\tparsedURL = parse_url(`${input}`);\n\t\t\t}\n\t\t\tinput = {};\n\t\t} else {\n\t\t\tparsedURL = parse_url(input.url);\n\t\t}\n\n\t\tlet method = init.method || input.method || 'GET';\n\t\tmethod = method.toUpperCase();\n\n\t\tif ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {\n\t\t\tthrow new TypeError('Request with GET/HEAD method cannot have body');\n\t\t}\n\n\t\tlet inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;\n\n\t\tBody.call(this, inputBody, {\n\t\t\ttimeout: init.timeout || input.timeout || 0,\n\t\t\tsize: init.size || input.size || 0\n\t\t});\n\n\t\tconst headers = new Headers(init.headers || input.headers || {});\n\n\t\tif (inputBody != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(inputBody);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tlet signal = isRequest(input) ? input.signal : null;\n\t\tif ('signal' in init) signal = init.signal;\n\n\t\tif (signal != null && !isAbortSignal(signal)) {\n\t\t\tthrow new TypeError('Expected signal to be an instanceof AbortSignal');\n\t\t}\n\n\t\tthis[INTERNALS$2] = {\n\t\t\tmethod,\n\t\t\tredirect: init.redirect || input.redirect || 'follow',\n\t\t\theaders,\n\t\t\tparsedURL,\n\t\t\tsignal\n\t\t};\n\n\t\t// node-fetch-only options\n\t\tthis.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;\n\t\tthis.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;\n\t\tthis.counter = init.counter || input.counter || 0;\n\t\tthis.agent = init.agent || input.agent;\n\t}\n\n\tget method() {\n\t\treturn this[INTERNALS$2].method;\n\t}\n\n\tget url() {\n\t\treturn format_url(this[INTERNALS$2].parsedURL);\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$2].headers;\n\t}\n\n\tget redirect() {\n\t\treturn this[INTERNALS$2].redirect;\n\t}\n\n\tget signal() {\n\t\treturn this[INTERNALS$2].signal;\n\t}\n\n\t/**\n * Clone this request\n *\n * @return Request\n */\n\tclone() {\n\t\treturn new Request(this);\n\t}\n}\n\nBody.mixIn(Request.prototype);\n\nObject.defineProperty(Request.prototype, Symbol.toStringTag, {\n\tvalue: 'Request',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Request.prototype, {\n\tmethod: { enumerable: true },\n\turl: { enumerable: true },\n\theaders: { enumerable: true },\n\tredirect: { enumerable: true },\n\tclone: { enumerable: true },\n\tsignal: { enumerable: true }\n});\n\n/**\n * Convert a Request to Node.js http request options.\n *\n * @param Request A Request instance\n * @return Object The options object to be passed to http.request\n */\nfunction getNodeRequestOptions(request) {\n\tconst parsedURL = request[INTERNALS$2].parsedURL;\n\tconst headers = new Headers(request[INTERNALS$2].headers);\n\n\t// fetch step 1.3\n\tif (!headers.has('Accept')) {\n\t\theaders.set('Accept', '*/*');\n\t}\n\n\t// Basic fetch\n\tif (!parsedURL.protocol || !parsedURL.hostname) {\n\t\tthrow new TypeError('Only absolute URLs are supported');\n\t}\n\n\tif (!/^https?:$/.test(parsedURL.protocol)) {\n\t\tthrow new TypeError('Only HTTP(S) protocols are supported');\n\t}\n\n\tif (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {\n\t\tthrow new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');\n\t}\n\n\t// HTTP-network-or-cache fetch steps 2.4-2.7\n\tlet contentLengthValue = null;\n\tif (request.body == null && /^(POST|PUT)$/i.test(request.method)) {\n\t\tcontentLengthValue = '0';\n\t}\n\tif (request.body != null) {\n\t\tconst totalBytes = getTotalBytes(request);\n\t\tif (typeof totalBytes === 'number') {\n\t\t\tcontentLengthValue = String(totalBytes);\n\t\t}\n\t}\n\tif (contentLengthValue) {\n\t\theaders.set('Content-Length', contentLengthValue);\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.11\n\tif (!headers.has('User-Agent')) {\n\t\theaders.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.15\n\tif (request.compress && !headers.has('Accept-Encoding')) {\n\t\theaders.set('Accept-Encoding', 'gzip,deflate');\n\t}\n\n\tlet agent = request.agent;\n\tif (typeof agent === 'function') {\n\t\tagent = agent(parsedURL);\n\t}\n\n\tif (!headers.has('Connection') && !agent) {\n\t\theaders.set('Connection', 'close');\n\t}\n\n\t// HTTP-network fetch step 4.2\n\t// chunked encoding is handled by Node.js\n\n\treturn Object.assign({}, parsedURL, {\n\t\tmethod: request.method,\n\t\theaders: exportNodeCompatibleHeaders(headers),\n\t\tagent\n\t});\n}\n\n/**\n * abort-error.js\n *\n * AbortError interface for cancelled requests\n */\n\n/**\n * Create AbortError instance\n *\n * @param String message Error message for human\n * @return AbortError\n */\nfunction AbortError(message) {\n Error.call(this, message);\n\n this.type = 'aborted';\n this.message = message;\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nAbortError.prototype = Object.create(Error.prototype);\nAbortError.prototype.constructor = AbortError;\nAbortError.prototype.name = 'AbortError';\n\n// fix an issue where \"PassThrough\", \"resolve\" aren't a named export for node <10\nconst PassThrough$1 = Stream.PassThrough;\nconst resolve_url = Url.resolve;\n\n/**\n * Fetch function\n *\n * @param Mixed url Absolute url or Request instance\n * @param Object opts Fetch options\n * @return Promise\n */\nfunction fetch(url, opts) {\n\n\t// allow custom promise\n\tif (!fetch.Promise) {\n\t\tthrow new Error('native promise missing, set fetch.Promise to your favorite alternative');\n\t}\n\n\tBody.Promise = fetch.Promise;\n\n\t// wrap http.request into fetch\n\treturn new fetch.Promise(function (resolve, reject) {\n\t\t// build request object\n\t\tconst request = new Request(url, opts);\n\t\tconst options = getNodeRequestOptions(request);\n\n\t\tconst send = (options.protocol === 'https:' ? https : http).request;\n\t\tconst signal = request.signal;\n\n\t\tlet response = null;\n\n\t\tconst abort = function abort() {\n\t\t\tlet error = new AbortError('The user aborted a request.');\n\t\t\treject(error);\n\t\t\tif (request.body && request.body instanceof Stream.Readable) {\n\t\t\t\trequest.body.destroy(error);\n\t\t\t}\n\t\t\tif (!response || !response.body) return;\n\t\t\tresponse.body.emit('error', error);\n\t\t};\n\n\t\tif (signal && signal.aborted) {\n\t\t\tabort();\n\t\t\treturn;\n\t\t}\n\n\t\tconst abortAndFinalize = function abortAndFinalize() {\n\t\t\tabort();\n\t\t\tfinalize();\n\t\t};\n\n\t\t// send request\n\t\tconst req = send(options);\n\t\tlet reqTimeout;\n\n\t\tif (signal) {\n\t\t\tsignal.addEventListener('abort', abortAndFinalize);\n\t\t}\n\n\t\tfunction finalize() {\n\t\t\treq.abort();\n\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\tclearTimeout(reqTimeout);\n\t\t}\n\n\t\tif (request.timeout) {\n\t\t\treq.once('socket', function (socket) {\n\t\t\t\treqTimeout = setTimeout(function () {\n\t\t\t\t\treject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));\n\t\t\t\t\tfinalize();\n\t\t\t\t}, request.timeout);\n\t\t\t});\n\t\t}\n\n\t\treq.on('error', function (err) {\n\t\t\treject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));\n\t\t\tfinalize();\n\t\t});\n\n\t\treq.on('response', function (res) {\n\t\t\tclearTimeout(reqTimeout);\n\n\t\t\tconst headers = createHeadersLenient(res.headers);\n\n\t\t\t// HTTP fetch step 5\n\t\t\tif (fetch.isRedirect(res.statusCode)) {\n\t\t\t\t// HTTP fetch step 5.2\n\t\t\t\tconst location = headers.get('Location');\n\n\t\t\t\t// HTTP fetch step 5.3\n\t\t\t\tconst locationURL = location === null ? null : resolve_url(request.url, location);\n\n\t\t\t\t// HTTP fetch step 5.5\n\t\t\t\tswitch (request.redirect) {\n\t\t\t\t\tcase 'error':\n\t\t\t\t\t\treject(new FetchError(`redirect mode is set to error: ${request.url}`, 'no-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase 'manual':\n\t\t\t\t\t\t// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.\n\t\t\t\t\t\tif (locationURL !== null) {\n\t\t\t\t\t\t\t// handle corrupted header\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\theaders.set('Location', locationURL);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\t// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request\n\t\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'follow':\n\t\t\t\t\t\t// HTTP-redirect fetch step 2\n\t\t\t\t\t\tif (locationURL === null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 5\n\t\t\t\t\t\tif (request.counter >= request.follow) {\n\t\t\t\t\t\t\treject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 6 (counter increment)\n\t\t\t\t\t\t// Create a new Request object.\n\t\t\t\t\t\tconst requestOpts = {\n\t\t\t\t\t\t\theaders: new Headers(request.headers),\n\t\t\t\t\t\t\tfollow: request.follow,\n\t\t\t\t\t\t\tcounter: request.counter + 1,\n\t\t\t\t\t\t\tagent: request.agent,\n\t\t\t\t\t\t\tcompress: request.compress,\n\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\tbody: request.body,\n\t\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t\t\ttimeout: request.timeout\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 9\n\t\t\t\t\t\tif (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {\n\t\t\t\t\t\t\treject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 11\n\t\t\t\t\t\tif (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {\n\t\t\t\t\t\t\trequestOpts.method = 'GET';\n\t\t\t\t\t\t\trequestOpts.body = undefined;\n\t\t\t\t\t\t\trequestOpts.headers.delete('content-length');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 15\n\t\t\t\t\t\tresolve(fetch(new Request(locationURL, requestOpts)));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// prepare response\n\t\t\tres.once('end', function () {\n\t\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\t});\n\t\t\tlet body = res.pipe(new PassThrough$1());\n\n\t\t\tconst response_options = {\n\t\t\t\turl: request.url,\n\t\t\t\tstatus: res.statusCode,\n\t\t\t\tstatusText: res.statusMessage,\n\t\t\t\theaders: headers,\n\t\t\t\tsize: request.size,\n\t\t\t\ttimeout: request.timeout,\n\t\t\t\tcounter: request.counter\n\t\t\t};\n\n\t\t\t// HTTP-network fetch step 12.1.1.3\n\t\t\tconst codings = headers.get('Content-Encoding');\n\n\t\t\t// HTTP-network fetch step 12.1.1.4: handle content codings\n\n\t\t\t// in following scenarios we ignore compression support\n\t\t\t// 1. compression support is disabled\n\t\t\t// 2. HEAD request\n\t\t\t// 3. no Content-Encoding header\n\t\t\t// 4. no content response (204)\n\t\t\t// 5. content not modified response (304)\n\t\t\tif (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For Node v6+\n\t\t\t// Be less strict when decoding compressed responses, since sometimes\n\t\t\t// servers send slightly invalid responses that are still accepted\n\t\t\t// by common browsers.\n\t\t\t// Always using Z_SYNC_FLUSH is what cURL does.\n\t\t\tconst zlibOptions = {\n\t\t\t\tflush: zlib.Z_SYNC_FLUSH,\n\t\t\t\tfinishFlush: zlib.Z_SYNC_FLUSH\n\t\t\t};\n\n\t\t\t// for gzip\n\t\t\tif (codings == 'gzip' || codings == 'x-gzip') {\n\t\t\t\tbody = body.pipe(zlib.createGunzip(zlibOptions));\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for deflate\n\t\t\tif (codings == 'deflate' || codings == 'x-deflate') {\n\t\t\t\t// handle the infamous raw deflate response from old servers\n\t\t\t\t// a hack for old IIS and Apache servers\n\t\t\t\tconst raw = res.pipe(new PassThrough$1());\n\t\t\t\traw.once('data', function (chunk) {\n\t\t\t\t\t// see http://stackoverflow.com/questions/37519828\n\t\t\t\t\tif ((chunk[0] & 0x0F) === 0x08) {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflate());\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflateRaw());\n\t\t\t\t\t}\n\t\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\t\tresolve(response);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for br\n\t\t\tif (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {\n\t\t\t\tbody = body.pipe(zlib.createBrotliDecompress());\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// otherwise, use response as-is\n\t\t\tresponse = new Response(body, response_options);\n\t\t\tresolve(response);\n\t\t});\n\n\t\twriteToStream(req, request);\n\t});\n}\n/**\n * Redirect code matching\n *\n * @param Number code Status code\n * @return Boolean\n */\nfetch.isRedirect = function (code) {\n\treturn code === 301 || code === 302 || code === 303 || code === 307 || code === 308;\n};\n\n// expose Promise\nfetch.Promise = global.Promise;\n\nexport default fetch;\nexport { Headers, Request, Response, FetchError };\n","/**\n * @author : Austin Ruby, Alex Chao, Ed Greenberg\n * @function : activate extension\n * @changelog : Ed Greenberg, November 5th, 2019, added flexible query file detection\n * @changelog : Alex Chao, Nov. 5th-10th 2019... Lots of changes... server listener added\n * - config file setup command made\n * - config file option to allow for a longer time for the graphql server to startup\n * ! I propose we add the PORT number to config file\n * - updating variables in the event of changes in the config files\n * @changelog : ## Austin?\n * * */\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\n// only needed for creating the config file\nconst fs = require('fs');\n\n\n/* eslint-disable import/no-unresolved */\nconst readFileSendReqAndWriteResponse = require('./modules/client/readFileSendReqAndWriteResponse');\nconst serverOn = require('./modules/server/serverOn');\nconst serverOff = require('./modules/server/serverOff');\n\n// require in new function that checks for a running server\nconst checkForRunningServer = require('./modules/server/checkForRunningServer');\n\n// require in file that finds root directory\nconst findRootDirectory = require('./modules/client/findRootDirectory');\n// require in file that returns entryPoint when given the root path\nconst parseConfigFile = require('./modules/client/parseConfigFile');\n// require in file that finds port#\nconst findPortNumber = require('./modules/client/findPortNumber');\n\n\n// this method is called when your extension is activated\n// your extension is activated the very first time the command is executed\nexport function activate(context: vscode.ExtensionContext) {\n // * These are some variables that I need to pass between different commands, so they're in\n // * a higher scope\n // this ChannelRef variable will be used to pass the output channel between separate function defs\n // let graphQuillChannelRef: vscode.OutputChannel;\n const gqChannel = vscode.window.createOutputChannel('GraphQuill');\n\n // a toggle variable that will is true when the server is on\n let isOnToggle = false;\n\n // a disposable variable to get rid of the save event listener\n let saveListener: vscode.Disposable;\n\n // set rootPath and entryPoint to a string of the path to the server startup file (has app.listen)\n const rootPath = findRootDirectory();\n\n // putting these variables in the global scope with the expectation that they will be set upon\n // activating the extension. I'm moving them to be able to manage \"live\" changes\n let entryPoint: string;\n let allowServerTimeoutConfigSetting: number;\n\n // set portNumber to a string. It is going to be set in the activation command\n let portNumber: string;\n\n // boolean to track if the server has been successfully turned on by the user\n let serverTurnedOnByGraphQuill = false;\n\n /** **********************************************************************************************\n * * The command must be defined in package.json under contributes/commands AND activation events\n * Now provide the implementation of the command with registerCommand\n * The commandId parameter must match the command field in package.json\n * * This is the first GraphQuill option in the command palette for activating GraphQuill\n *********************************************************************************************** */\n const disposableActivateGraphQuill = vscode.commands.registerCommand('extension.activateGraphQuill', async () => {\n if (isOnToggle) {\n // if server is already running, break out of function by returning null\n console.log('Server is already running');\n vscode.window.showInformationMessage('GraphQuill is already active');\n return null;\n }\n\n // show output channel\n gqChannel.show(true);\n\n // parse the config file (this is important in case if there were any changes)\n let parseResult = parseConfigFile(rootPath);\n entryPoint = parseResult.entryPoint;\n allowServerTimeoutConfigSetting = parseResult.allowServerTimeoutConfigSetting;\n\n // if the entryPoint is falsey, break out of the function and tell the\n // user to create a config file\n if (!entryPoint) {\n gqChannel.append('The config file was not found, please use the Create GraphQuill Config File Command to make one.');\n // break out of this execution context\n return null;\n }\n\n // set the portNumber (in the higher scope so it can be used in the deactivate function)\n portNumber = findPortNumber(entryPoint);\n\n // Check ONCE if the port is open (also this does not need the third param)\n // will resolve to a true or false value\n const serverOnFromUser = await checkForRunningServer(portNumber, true);\n // console.log('--serverOnFromUser after once check is:', serverOnFromUser);\n\n // trigger serverOn if the user does not already have the server running\n if (!serverOnFromUser) {\n // start up the user's server\n serverOn(entryPoint);\n\n // give user feedback that server is starting up\n gqChannel.clear();\n gqChannel.append('The server is starting up...');\n\n // await this function that will return true or false based on if the server has been started\n // false: if starting the server is longer than the time allotted in the config file (defaults\n // to 3 seconds)\n serverTurnedOnByGraphQuill = await checkForRunningServer(portNumber,\n // once setting is false, so the returned promise will only resolve when the server has\n // started OR the timeout (next variable or 3sec) is reached\n false,\n // allowServerT.C.S. is either a time in milliseconds that defaults to 3000\n allowServerTimeoutConfigSetting);\n\n // if it is false, that means there was an error starting the server\n // notify the user & end the thread of execution\n if (!serverTurnedOnByGraphQuill) {\n // console.log('server is taking too long to startup');\n\n // give feedback to user that port didn't start (and the specified timeout config setting,\n // defaults to 3 seconds)\n gqChannel.clear();\n gqChannel.append(`The server is taking too long to startup (>${(allowServerTimeoutConfigSetting || 3000) / 1000} seconds).\\nTo increase this time, update the \"serverStartupTimeAllowed\" setting in the graphquill.config.js file.`);\n\n // break out, and just in case I'm going to try to kill the port if it did open\n // otherwise we could get runaway node processes...\n return setTimeout(() => serverOff(portNumber), 5000);\n }\n }\n\n // if the server is on from either the user or graphquill, continue\n // send first query & setup on save listener\n if (serverOnFromUser || serverTurnedOnByGraphQuill) {\n // update isOnToggle (refers to state of GraphQuill extension running or not)\n isOnToggle = true;\n\n // clear any other stuff off of the channel (e.g. previous error message)\n gqChannel.clear();\n\n // get the fileName of the open file when the extension is FIRST fired\n const currOpenEditorPath: string = vscode.window.activeTextEditor!.document.fileName;\n // send that request from the currentopeneditor\n readFileSendReqAndWriteResponse(currOpenEditorPath, gqChannel, portNumber, rootPath);\n\n // initialize the save listener here to clear the channel and resend new requests\n saveListener = vscode.workspace.onDidSaveTextDocument((event) => {\n // console.log('save event!!!', event);\n\n // clear the graphQuill channel\n gqChannel.clear();\n\n // re-parse the config file (in case the user made a change)\n parseResult = parseConfigFile(rootPath);\n entryPoint = parseResult.entryPoint;\n allowServerTimeoutConfigSetting = parseResult.allowServerTimeoutConfigSetting;\n\n if (!entryPoint) {\n gqChannel.append('The config file was not found, please use the Create GraphQuill Config File Command to make one.');\n // break out of this execution context\n return null;\n }\n\n // ! I really think we should add the port number to the config file to specify to the user\n // ! That the port number SHUOLD not be changed...\n // TODO this seems very redundant... but I'm blanking on how to make this dynamic\n // TODO update if the user changes their server file...\n // on each save... reparse for a portNumber in case if it was changed\n portNumber = findPortNumber(entryPoint);\n\n // send the filename and channel to the readFileSRAWR function\n readFileSendReqAndWriteResponse(event.fileName, gqChannel, portNumber, rootPath);\n\n // satisfying linter\n return null;\n });\n }\n\n // to satisfy typescript linter...\n return null;\n });\n\n // push it to the subscriptions\n context.subscriptions.push(disposableActivateGraphQuill);\n\n\n /** **************************************************************************\n * * Second GraphQuill option in the command palette (Cmd Shift P) for deactivating graphquill\n ************************************************************************** */\n const disposableDisableGraphQuill = vscode.commands.registerCommand('extension.deactivateGraphQuill', () => {\n // console.log('--deactivate functionality triggered');\n\n // check isontoggle boolean\n if (!isOnToggle) {\n // server is already off\n console.log('server is already off');\n vscode.window.showInformationMessage('GraphQuill is already off');\n\n return null;\n }\n\n // change toggle boolean\n isOnToggle = false;\n\n // dispose of the onDidSaveTextDocument event listener\n if (saveListener) saveListener.dispose();\n\n // close/hide GraphQuill channel\n gqChannel.hide();\n gqChannel.clear();\n\n console.log('in deactivate, the server turned on by graphquill boolean is: ', serverTurnedOnByGraphQuill);\n // invoke server off in this function\n return setTimeout(() => (serverTurnedOnByGraphQuill && serverOff(portNumber)), 1);\n });\n\n // push it into the subscriptions\n context.subscriptions.push(disposableDisableGraphQuill);\n\n\n /** **************************************************************************\n * * Third GraphQuill option in command palette to toggle graphquill extension\n ************************************************************************** */\n const disposableToggleGraphQuill = vscode.commands.registerCommand('extension.toggleGraphQuill', () => {\n // console.log('--toggle triggered!');\n\n // if the toggle boolean is false, then start the extension, otherwise end it...\n if (!isOnToggle) {\n // console.log('--toggle starting extension');\n // using the built in execute command and passing in a string of the command to trigger\n vscode.commands.executeCommand('extension.activateGraphQuill');\n } else {\n // console.log('--toggle stopping the extension');\n vscode.commands.executeCommand('extension.deactivateGraphQuill');\n }\n\n // just to make the linter happy...\n return null;\n });\n\n // push it to the subscriptions\n context.subscriptions.push(disposableToggleGraphQuill);\n\n /** **************************************************************************\n * * Fourth GraphQuill option in command palette to CREATE A CONFIG FILE\n ************************************************************************** */\n const disposableCreateConfigFile = vscode.commands.registerCommand('extension.createConfigFile', () => {\n // console.log('--config file setup triggered');\n\n // check if the root directory already has a graphquill.config.json file\n const graphQuillConfigPath = `${rootPath}/graphquill.config.js`;\n if (fs.existsSync(graphQuillConfigPath)) {\n vscode.window.showInformationMessage(`A GraphQuill configuration file already exists at ${graphQuillConfigPath}`);\n // exit out\n return null;\n }\n\n // if it does not already exist, write to a new file\n fs.writeFileSync(graphQuillConfigPath,\n // string to populate the file with\n 'module.exports = {\\n // change \"./server/index.js\" to the relative path from the root directory to\\n // the file that starts your server\\n entry: \\'./server/index.js\\',\\n\\n // to increase the amount of time allowed for the server to startup, add a time\\n // in milliseconds (integer) to the \"serverStartupTimeAllowed\"\\n // serverStartupTimeAllowed: 5000,\\n};\\n',\n 'utf-8');\n\n // open the file in vscode\n vscode.workspace.openTextDocument(graphQuillConfigPath).then((doc) => {\n // apparently openTextDocument doesn't mean it's visible...\n vscode.window.showTextDocument(doc);\n });\n\n return null;\n });\n\n // push it to the subscriptions\n context.subscriptions.push(disposableCreateConfigFile);\n}\n\n\n// this method is called when your extension is deactivated\nexport function deactivate() {\n // deactivate must return a promise if cleanup operations are async.\n // turn the server off if vscode is closed (tested via lsof in terminal)\n\n // console.log('---deactive function called!!');\n\n // executing the deactivateGQ command seems to achieve a similar effect & is nice because it has\n // access to the portNumber variable\n vscode.commands.executeCommand('extension.deactivateGraphQuill');\n // return setTimeout(() => serverOff(3000), 1);\n}\n","var map = {\n\t\"./checkQueryBrackets\": \"./src/modules/client/checkQueryBrackets.ts\",\n\t\"./checkQueryBrackets.ts\": \"./src/modules/client/checkQueryBrackets.ts\",\n\t\"./extractQueries\": \"./src/modules/client/extractQueries.ts\",\n\t\"./extractQueries.ts\": \"./src/modules/client/extractQueries.ts\",\n\t\"./findPortNumber\": \"./src/modules/client/findPortNumber.ts\",\n\t\"./findPortNumber.ts\": \"./src/modules/client/findPortNumber.ts\",\n\t\"./findRootDirectory\": \"./src/modules/client/findRootDirectory.ts\",\n\t\"./findRootDirectory.ts\": \"./src/modules/client/findRootDirectory.ts\",\n\t\"./parseConfigFile\": \"./src/modules/client/parseConfigFile.ts\",\n\t\"./parseConfigFile.ts\": \"./src/modules/client/parseConfigFile.ts\",\n\t\"./parseQuery\": \"./src/modules/client/parseQuery.ts\",\n\t\"./parseQuery.ts\": \"./src/modules/client/parseQuery.ts\",\n\t\"./readFileSendReqAndWriteResponse\": \"./src/modules/client/readFileSendReqAndWriteResponse.ts\",\n\t\"./readFileSendReqAndWriteResponse.ts\": \"./src/modules/client/readFileSendReqAndWriteResponse.ts\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src/modules/client sync recursive ^.*$\";","/**\n * @module : parser.ts\n * @author : Austin Ruby\n * @function : parse string for instances of 'graphQuill' and extract content\n * within parens immediately following each instance\n * @changelog : Ed Greenberg, November 4th, 2019, rewrote to remove enum bug\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n\n// check if parens are balanced for parsed query strings\n// if they're balanced, return original query string\n// if they're not, return error message with imbalanced bracket/s\nfunction checkQueryBrackets(queryString: string) {\n const stack: string[] = []; // the core of the function...\n // ...where detected opening brackets will be pushed in and pop off when the parser finds a mate\n const validatedSoFar: string[] = []; // a running copy of the query\n const openings: string = '{[('; // list of opening brackets\n const closings: string = '}])'; // list of closing brackets\n\n\n // eslint-disable-next-line no-restricted-syntax\n for (const el of queryString) { // loop the query\n if (openings.includes(el)) stack.push(el); // if query el is opening bracket, add el to stack\n if (closings.includes(el)) {\n if (stack[stack.length - 1] === openings[closings.indexOf(el)]) stack.pop();\n // if top of stack mates a new closing bracket, we are good, can reduce stack and keep going\n else break;\n // if the top of stack does not mate closing bracket, we stop loop and skip to declaring error\n }\n validatedSoFar.push(el); // helping keep running copy of query\n }\n\n\n return stack.length === 0 // this will be zero if all query brackets have matches\n ? queryString.slice(1, queryString.length - 1) // this substring is sent ahead if validated\n : new Error(`${`The following character makes the query unbalanced: ${stack[stack.length - 1]}\\n`\n + 'The portion of the query that ran before the unbalance was detected was:\\n'}${\n validatedSoFar.join('')}\\n\\n`); // ...otherwise, we report an error\n}\n\nmodule.exports = checkQueryBrackets;\n","/* eslint-disable import/no-unresolved */\n// import { builtinModules } from 'module';\n\nimport parseQuery from './parseQuery';\n\nconst useCheckQueryBrackets = require('./checkQueryBrackets');\n\n// given file path, read file at path and parse for instances of 'graphQuill'\nfunction extractQueries(string: string) {\n // console.log(string);\n // define text to search for in file\n const gq: string = 'graphQuill';\n const queriesArr: string[] = [];\n // iterate over string\n for (let i: number = 0; i < string.length; i += 1) {\n // if current slice of string is 'graphQuill'\n // then push evaluated result of parseQueries passing in\n // string sliced from current char to end into queriesArr\n if (string.slice(i, i + gq.length) === gq) {\n queriesArr.push(parseQuery(string.slice(i + gq.length)));\n }\n }\n\n // after finding all instances of 'graphQuill' and parsing out query strings,\n // map queries to new array full of either valid queries of errors\n const validatedQueriesArr: (string | Error)[] = queriesArr.map((queryString) => (\n useCheckQueryBrackets(queryString)));\n // console.log('queriesArr: ', queriesArr);\n // console.log('validatedQueriesArr: ', validatedQueriesArr);\n return validatedQueriesArr;\n}// given file path, read file at path and parse for instances of 'graphQuill'\n\nmodule.exports = extractQueries;\n","/**\n * @author : Alex Chao\n * @function : return the portNumber as a string\n * @param: entryPoint\n * @returns: portNumber as a string\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\nconst fs = require('fs');\n\nfunction findPortNumber(entryPoint: string) {\n // this is a blocking (synchronous) call to the active file, populating 'data' as a string\n const data = fs.readFileSync(entryPoint, 'utf8');\n\n // to stop a localhost, we must first identify a port, and 'app.listen(' is\n // a special string in the active file that is likely to be adjacent to the port number\n const lookup = data.search(/app.listen\\(/);\n\n // this next segment is edge case handling for if the port number\n // is separated from the start parentheses by some number of spaces\n let displace = 0;\n while (data[lookup + displace + 11] === ' ') {\n displace += 1;\n }\n\n // return the port number (accounting for the offsetting per the edge case)\n return data.slice(lookup + 11 + displace, lookup + 15 + displace);\n}\n\nmodule.exports = findPortNumber;\n","/**\n * @author : Alex Chao Nov 7th, 2019. Modularized\n * @function : return the root directory path in a string\n * @param : none\n * @returns : string of the root directory\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\nconst path = require('path');\nconst fs = require('fs');\n\nfunction findRootDirectory() {\n // identify entryPoint for the file that starts the server\n // search for root directory by finding the package.json file\n let root = path.dirname(vscode.window.activeTextEditor!.document.fileName);\n while (!fs.existsSync(`${root}/package.json`)) {\n root = path.dirname(root);\n }\n\n return root;\n}\n\nmodule.exports = findRootDirectory;\n","/* eslint-disable no-unused-vars */\n// these rules are disabled for the weird require that is inside of the function\n/* eslint-disable global-require */\n/* eslint-disable import/no-dynamic-require */\n\n/**\n * @author : Alex Chao\n * @function : return an object with the entryPoint and the allowServerTimeoutConfigSetting\n * @param : none\n * @returns : an array with the root directory AND the entryPoint strings\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\n// const path = require('path');\nconst fs = require('fs');\nconst path = require('path');\n\nfunction parseConfigFile(rootPath: string) {\n // find config file in root directory\n const gqConfigFilePath = `${rootPath}/graphquill.config.js`;\n\n // ! a cached version of this file will be stored here, so future invocations that are trying\n // to get results of an updated config file, will appear to not have been changed\n delete require.cache[gqConfigFilePath];\n\n let entryPoint : string;\n let allowServerTimeoutConfigSetting : number|undefined;\n\n if (fs.existsSync(gqConfigFilePath)) {\n // if the config file exists, require it in (will come in as an object)\n const configObject = require(`${gqConfigFilePath}`);\n // console.log('config object in parseconfigfile.ts', configObject);\n\n // set the entry point to the absolute path (root + relative entry path)\n entryPoint = path.resolve(rootPath, configObject.entry);\n\n // set the servertimeout config setting\n allowServerTimeoutConfigSetting = configObject.serverStartupTimeAllowed;\n } else {\n // default it to the current open editor if there is not a config file\n entryPoint = '';\n\n // ! This will be handled in the outer extension.ts file to notify the user and break out of\n // ! the thread of execution at the same time\n // notify user that config file was not found and current file is being used as the entry point\n // vscode.window.showInformationMessage('graphquill.config.js file was not found.\n // Please use the Create GraphQuill Config File Command to create one');\n }\n\n // return the array with the two results, to be destrucutred when the function is invoked\n return { entryPoint, allowServerTimeoutConfigSetting };\n}\n\nmodule.exports = parseConfigFile;\n","/**\n * @author : Austin Ruby\n * @function : parse and validate query\n * @changelog : Ed Greenberg, November 5th, 2019, created ability to return unbalanced parens\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n\n// add characters to string while within parentheses\nexport default function parseQuery(input: string) {\n let queryString: string = ''; // string to be checked for balanced parens\n let passedQueryString: string = ''; // string to be passed along\n let closer: boolean = false; // trip to prevent passed along string from overwriting\n let openParensCount: number = 0; // balanced parens validation tool\n let closeParensCount: number = 0; // balanced parens valaidation tool\n let index: number = 0; // helps loop through input\n const stack: string[] = []; // helps determine when query should be passed along\n while (index < input.length) { // loop input\n if (input[index] === '(') { // check open parens\n openParensCount += 1; // increment relevant counter\n stack.push(input[index]); // add to stack\n } else if (input[index] === ')') { // check closed parens\n if (stack.length === 0) { // if stack is empty and we have a closed, we have a problem\n return 'unbalanced parens';\n }\n closeParensCount += 1; // increment relevant counter\n stack.pop(); // closed parens eliminates open parens on stack\n }\n queryString += input[index]; // feed current character in loop to preliminary result string\n if (stack.length === 0 && closer === false) { // first time we hit empty stack...\n passedQueryString = queryString; // create result stack;\n closer = true;\n }\n index += 1;\n }\n return openParensCount === closeParensCount ? passedQueryString : 'unbalanced parens';\n}\n","// for requiring in .js files\n/* eslint-disable import/no-unresolved */\n\n// for vscode module being dumb\n/* eslint-disable no-unused-vars */\n\n/**\n * @module : readFileSendReqAndWriteResponse.ts\n * @author : Austin Ruby\n * @function : parse string for instances of 'graphQuill' and extract content\n * within parens immediately following each instance\n * @changelog : Ed Greenberg, November 5th, 2019, copy out boilerplate function invocation\n * to query file if not present\n * @changelog : Alex Chao, November 5th, 2019, merge conflict handling and server additions\n * @changelog : Alex Chao, November 6th, 2019, dynamic port number for fetching, coming from\n * the extension.ts file\n * * */\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\nconst fetch = require('node-fetch');\nconst fs = require('fs');\n\nconst extractQueries = require('./extractQueries');\n\n// checkQueryBrackets used to be here\n// parseQuery used to be here\n// extractQueries was here\n\n// parent function to read file,\n// call helper functions to parse out query string,\n// send request to GraphQL API,\n// and return response to output channel\nfunction readFileSendReqAndWriteResponse(\n filePath: string,\n channel: vscode.OutputChannel,\n portNumber: string,\n rootPath: string, // passing the root path in to control the function def. injection\n) {\n // console.log('inreadFile: ', filePath);\n\n // parse the contents of the entire filePath file to a string\n const copy = fs.readFileSync(filePath).toString();\n // check if the file is within the root directory, otherwise we don't want to inject the\n // function defintion\n if (filePath.includes(rootPath) && !copy.includes('function graphQuill')) {\n const newFile = `function graphQuill() {}\\n\\n${copy}`;\n fs.writeFileSync(filePath, newFile);\n }\n\n // read user's file\n fs.readFile(filePath, (err: Error, data: Buffer) => {\n if (err) {\n console.log(err);\n } else {\n // if no error, convert data to string and pass into gQParser to pull out query/ies\n const result: (string | Error)[] = extractQueries(data.toString());\n\n // send post request to API/graphql\n\n setTimeout(() => {\n // console.log('IN SET TIMEOUT');\n\n // handle multiple queries in file...\n // the additional quotes need to be parsed off\n const queriesWithoutQuotes: (string|false)[] = result.filter(\n // callback to remove empty string queries (i.e. the function def of graphQuill)\n (e: string|Error) => (typeof e === 'string' && e.length),\n ).map(\n (query: string|Error) => (\n // should all be strings...\n typeof query === 'string' && query.slice(1, query.length - 1)\n ),\n );\n\n console.log('--JUST THE QUERIES', queriesWithoutQuotes);\n\n\n // TODO pair up the requests and responses. Right now the responses are coming in a random\n // TODO order because of async fetches\n\n // TODO MAKE THIS A PROMISE ALL? or does it not matter because the for loop will send off\n // TODO all of the fetches simultaneously and just append responses on as they come in...\n // console.log('query w/o quotes is', queryMinusQuotes);\n queriesWithoutQuotes.forEach((query) => {\n // send the fetch to the correct port (passed in as a variable)\n fetch(`http://localhost:${portNumber}/graphql`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ query }),\n })\n .then((response: Response) => response.json())\n .then((thing: Object) => {\n console.log('printed: ', thing);\n // append any graphql response to the output channel\n channel.append(`\\n${JSON.stringify(thing, null, 2)}`); // may need to stringify to send\n channel.show(true);\n })\n .catch((error: Error) => {\n console.log('fetch catch error: ', error, typeof error, error.constructor.name);\n\n // print any errors to the output channel\n channel.append(`ERROR!!!\\n${JSON.stringify(error, null, 2)}`);\n });\n });\n\n // only append this string to the output channel once\n channel.append('Responses are:');\n }, 1); // TODO BIG UX FIX NEEDED HERE\n\n // then send response back to vscode output channel\n // console.log('parsed queries are', result);\n // TODO match these up with the correct queries when there are multiple within a single file\n channel.append(`GraphQuill Queries are:\\n${result.filter((e : string|Error) => (typeof e === 'string' ? e.length : false))}\\n`);\n channel.show(true);\n }\n });\n}\n\nmodule.exports = readFileSendReqAndWriteResponse;\n","/**\n * @module : checkForRunningServer.ts\n * @author : Alex Chao, Nov 7th, 2019\n * @function : uses child process and lsof to check if a port is currently running\n * @param : portNumber, string\n * @param : once: boolean, true if the function should check if the port is open right when the\n * function is run. OR false if the function should wait for the server to start before resolving\n * @param : allowServerTimeoutConfigSetting: number, user input from config file to determine how\n * long to wait for the server to start. Defaults to 3000 (milliseconds)\n * @returns : a boolean, true if the server has started, false if it has not started\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n// eslint-disable-next-line import/no-unresolved\n// import * as vscode from 'vscode';\n\n// const path = require('path');\n// const fs = require('fs');\nconst childProcess = require('child_process');\n\nconst checkForRunningServer = (\n portNumber: string,\n once: boolean,\n allowServerTimeoutConfigSetting = 3000,\n) => {\n console.log('CHECK FOR RUNNING SERVER IS RUNNINGGGGGG');\n // console.log(portNumber, once, allowServerTimeoutConfigSetting);\n // moved this line into the serverOn file so that each time serverOn is called\n // a new child process is started. This is critical to being able to toggle\n // GraphQuill on and off\n let portOpen = false;\n let allTerminalText: string;\n const bashTerminal = childProcess.spawn('bash');\n\n // next, we activate two terminal methods to give us\n // feedback on whether we sucessfully used a child process\n // note the Typescript (: any) used to handle unknown data inputs\n bashTerminal.stdout.on('data', (data: Buffer) => {\n // console.log(`--stdout from terminal: ${data}`);\n console.log('terminal has printed some data...');\n allTerminalText = data.toString();\n portOpen = allTerminalText.includes('node');\n // console.log('allterminal text', allTerminalText);\n // console.log('---data type is', data.constructor.name);\n });\n\n // log what the exit code is in the extension terminal\n bashTerminal.on('exit', (code: Number) => {\n console.log(`checkForRunningServer child process exited with code ${code}`);\n // console.log('--exit code type is', code.constructor.name);\n });\n\n // just below is the real core of the function, the child process:\n // checks if the port is active with the `lsof -i :${portNumber}\\n` command\n // IMPORTANT: code will not run without the '\\n' component--the CLI needs this\n return new Promise((resolve) => {\n let numRuns = 0;\n let timeoutId: NodeJS.Timer;\n // A set interval callback that will write a command to the terminal every 200ms, then check\n // if the portOpen boolean has been changed (it is actually changed in the on-data listener\n // above). Promise will resolve when the portOpen variable is true\n const intervalLsofToBash = setInterval(() => {\n bashTerminal.stdin.write(`lsof -i :${portNumber}\\n`);\n // console.log('inside promise-- portOpen boolean', portOpen);\n // console.log('inside promise-- allTerminalText', allTerminalText);\n\n // if the port is open, resolve the promise, return some value...\n if (portOpen) {\n // clear set intervals\n clearInterval(intervalLsofToBash);\n\n // clear the timeoutId\n if (timeoutId) clearTimeout(timeoutId);\n\n // end terminal session\n bashTerminal.stdin.end();\n\n console.log('port is open!');\n\n // resolve promise\n // return a confirmed status\n resolve(true);\n }\n\n // if once param was set to true, we only want to check if the server is \"immediately\" on, so\n // check if once is true, and numRuns is greater than one, then resolve the promise with the\n // result of portOpen\n if (once && numRuns > 1) {\n console.log('---once conditional triggered, result is:', portOpen);\n // clear set intervals\n clearInterval(intervalLsofToBash);\n\n // clear the timeoutId\n if (timeoutId) clearTimeout(timeoutId);\n\n // end terminal session\n bashTerminal.stdin.end();\n\n resolve(portOpen);\n }\n\n // increment numRuns for the once conditional test\n numRuns += 1;\n }, 200); // Run every 200ms\n\n // default/base case to resolve promise if the server hasn't started in 3 seconds\n // This means the server is either spinning up too slowly or there is an error in the user's\n // server starting file. In either case we want to return false\n if (!once) {\n // only create this default timeout if this function was invoked with once === false\n timeoutId = setTimeout(() => {\n console.log('timeout of checkForRunningServer');\n // clear set intervals\n clearInterval(intervalLsofToBash);\n\n // end terminal session\n bashTerminal.stdin.end();\n\n // resolve the promise\n resolve(false);\n }, allowServerTimeoutConfigSetting); // default allowed time is 3 sec.\n }\n });\n};\n\nmodule.exports = checkForRunningServer;\n","/**\n * @module : serverOff.ts\n * @author : Ed Greenberg\n * @function : turn off server\n * @changelog : Ed Greenberg, November 5th, 2019, rewrote to open port on server/index.js\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\nconst fs = require('fs');\nconst path = require('path');\nconst childProcess = require('child_process');\n\n// spawn a new child process that will be used to close the open port\n\nconst serverOff = (portNumber: Number) => {\n console.log('in serveroff function file');\n // this one also had to be pulled into serverOff so that a new child process is started to\n // kill the server port\n const terminal2 = childProcess.spawn('bash');\n\n // we find the root directory by looking up from the active file\n // ...until we detect a folder with package.json\n let root = path.dirname(vscode.window.activeTextEditor!.document.fileName);\n while (!fs.existsSync(`${root}/package.json`)) {\n root = path.dirname(root);\n console.log('a root grows: ', root);\n }\n\n // const temp = vscode.window.activeTextEditor!.document.fileName;\n\n // write any data/outputs from the terminal to the extension console\n terminal2.stdout.on('data', (data: Buffer) => {\n console.log(`stdout: ${data}`);\n });\n\n // on terminal exit, print the exit code\n terminal2.on('exit', (code: Number) => {\n console.log(`terminal2 child process exited with code ${code}`);\n });\n\n // // this is a blocking (synchronous) call to the active file, populating 'data' as a string\n // const data = fs.readFileSync(`${root}/server/index.js`, 'utf8');\n\n // // to stop a localhost, we must first identify a port, and 'app.listen(' is\n // // a special string in the active file that is likely to be adjacent to the port number\n // const lookup = data.search(/app.listen\\(/);\n\n // // this next segment is edge case handling for if the port number\n // // is separated from the start parentheses by some number of spaces\n // let displace = 0;\n // while (data[lookup + displace + 11] === ' ') {\n // displace += 1;\n // }\n\n // // in target, we slice the port out of the array (offsetting as required by the edge case test)\n // // eslint-disable-next-line no-unused-vars\n // const target = data.slice(lookup + 11 + displace, lookup + 15 + displace);\n\n // ? I don't think these need to be delayed... just kill the process\n // in the core of our function, we run a special command that finds and kills the port specified\n // setTimeout(() => {\n // terminal2.stdin.write(`kill $(lsof -t -i:${target})\\n`);\n terminal2.stdin.write(`kill $(lsof -t -i:${portNumber})\\n`);\n terminal2.stdin.end();\n // }, 1);\n\n vscode.window.showInformationMessage('GraphQuill has been turned off');\n};\n\nmodule.exports = serverOff;\n","/**\n * @module : serverOn.ts\n * @author : Ed Greenberg\n * @function : turn on server\n * @changelog : Ed Greenberg, November 5th, 2019, rewrote to open port on server/index.js\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\n// const path = require('path');\n// const fs = require('fs');\nconst childProcess = require('child_process');\n\n\nconst serverOn = (entryPoint: string) => {\n // moved this line into the serverOn file so that each time serverOn is called\n // a new child process is started. This is critical to being able to toggle\n // GraphQuill on and off\n const terminal = childProcess.spawn('bash');\n\n // we find the root directory by looking up from the active file\n // ...until we detect a folder with package.json\n // let root = path.dirname(vscode.window.activeTextEditor!.document.fileName);\n // while (!fs.existsSync(`${root}/package.json`)) {\n // root = path.dirname(root);\n // console.log('a root grows: ', root);\n // }\n\n // next, we activate two terminal methods to give us\n // feedback on whether we sucessfully used a child process\n // note the Typescript (: any) used to handle unknown data inputs\n terminal.stdout.on('data', (data: Buffer) => {\n // todo add validation, if there is an error that is logged here, it's coming from node\n // todo and should be piped to the channel as well\n // todo this may require passing in the channel to the serverOn function...\n console.log(`stdout from terminal: ${data}`);\n // console.log('---data type is', data.constructor.name);\n });\n\n // log what the exit code is in the extension terminal\n terminal.on('exit', (code: Number) => {\n console.log(`child process exited with code ${code}`);\n // console.log('--exit code type is', code.constructor.name);\n });\n\n // just below is the real core of the function, the child process:\n // we write to a new terminal to run the index.js file in the folder specified by base\n // IMPORTANT: code will not run without the '\\n' component--the CLI needs this\n // explicit return command\n return new Promise((resolve) => {\n // console.log('inside promise');\n setTimeout(() => {\n // console.log('root: ', root);\n console.log('Sending stdin (node command) to terminal');\n\n // this seems to take some time to spin up the server and\n // throws an error with the timing of a fetch\n // terminal.stdin.write(`node ${root}/server/index.js\\n`);\n terminal.stdin.write(`node ${entryPoint}\\n`);\n console.log('Ending terminal session');\n terminal.stdin.end();\n\n // resolve promise\n resolve();\n console.log('just resolved');\n\n vscode.window.showInformationMessage('GraphQuill Activated');\n }, 1);\n });\n\n // this message pops up to the user upon completion of the command\n};\n\nmodule.exports = serverOn;\n","module.exports = require(\"child_process\");","module.exports = require(\"fs\");","module.exports = require(\"http\");","module.exports = require(\"https\");","module.exports = require(\"path\");","module.exports = require(\"stream\");","module.exports = require(\"url\");","module.exports = require(\"vscode\");","module.exports = require(\"zlib\");"],"sourceRoot":""} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 86026c1..abe3566 100644 --- a/package-lock.json +++ b/package-lock.json @@ -164,6 +164,194 @@ } } }, + "@webassemblyjs/ast": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "mamacro": "^0.0.3" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, "acorn": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", @@ -197,6 +385,18 @@ "uri-js": "^4.2.2" } }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", + "dev": true + }, "ansi-colors": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", @@ -227,6 +427,136 @@ "color-convert": "^1.9.0" } }, + "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" + }, + "dependencies": { + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "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" + } + } + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + } + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, "arg": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.1.tgz", @@ -252,6 +582,24 @@ "commander": "^2.11.0" } }, + "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-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-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-includes": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", @@ -262,12 +610,62 @@ "es-abstract": "^1.7.0" } }, + "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 + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "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 + }, "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -280,6 +678,18 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "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 + }, "axobject-query": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", @@ -295,6 +705,91 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, + "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" + } + } + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bluebird": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", + "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -305,18 +800,167 @@ "concat-map": "0.0.1" } }, + "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" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, "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 }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, "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 }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "cacache": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "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" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -360,18 +1004,155 @@ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "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.1" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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-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" + } + } + } + }, + "chownr": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", + "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "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" + } + } + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, @@ -420,6 +1201,16 @@ } } }, + "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-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -441,24 +1232,161 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "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=", "dev": true }, + "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" + } + }, "confusing-browser-globals": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz", "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==", "dev": true }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, "contains-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "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 + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, "damerau-levenshtein": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", @@ -488,6 +1416,12 @@ "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 + }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -512,12 +1446,80 @@ "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" + } + } + } + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "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 + }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -527,12 +1529,80 @@ "esutils": "^2.0.2" } }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "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" + } + }, + "elliptic": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", + "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, "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 }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", + "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + } + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -955,66 +2025,433 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "figures": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", - "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "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": { - "flat-cache": "^2.0.1" + "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": { + "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" + } + }, + "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" + } + }, + "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" + } + } } }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "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": { - "locate-path": "^2.0.0" + "homedir-polyfill": "^1.0.1" } }, - "flat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "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" + }, + "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" + } + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + } + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true + }, + "figures": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", + "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "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" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "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 + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "dependencies": { + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "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" + } + } + } + }, + "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" + } + }, + "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" + } + } + } + }, + "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" @@ -1028,29 +2465,624 @@ } } }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "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" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "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" + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.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": "4.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "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.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "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.6", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "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.7.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", @@ -1075,6 +3107,21 @@ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "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.5", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", @@ -1089,6 +3136,62 @@ "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" + }, + "dependencies": { + "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" + } + } + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + }, + "dependencies": { + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + } + } + }, + "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" + } + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -1107,26 +3210,98 @@ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "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-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "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": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "function-bind": "^1.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "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-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } }, "he": { "version": "1.2.0", @@ -1134,6 +3309,26 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "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.5", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", @@ -1161,6 +3356,12 @@ } } }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, "https-proxy-agent": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", @@ -1180,6 +3381,18 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -1196,12 +3409,82 @@ "resolve-from": "^4.0.0" } }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "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 + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } + } + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1218,6 +3501,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, "inquirer": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.0.tgz", @@ -1273,24 +3562,116 @@ } } }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "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.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, + "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.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "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.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "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", @@ -1312,6 +3693,21 @@ "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 + }, + "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", @@ -1327,6 +3723,12 @@ "has": "^1.0.1" } }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, "is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", @@ -1336,6 +3738,18 @@ "has-symbols": "^1.0.0" } }, + "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 + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -1348,6 +3762,12 @@ "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": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -1364,6 +3784,12 @@ "esprima": "^4.0.0" } }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -1376,6 +3802,15 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, "jsx-ast-utils": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz", @@ -1386,6 +3821,21 @@ "object.assign": "^4.1.0" } }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -1416,51 +3866,169 @@ } } }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true + }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "dev": true + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "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-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" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" } }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "lodash.unescape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", - "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", "dev": true, "requires": { - "chalk": "^2.0.1" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", "dev": true, "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "braces": "^3.0.1", + "picomatch": "^2.0.5" } }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", - "dev": true + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } }, "mimic-fn": { "version": "2.1.0", @@ -1468,6 +4036,18 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -1477,6 +4057,51 @@ "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "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.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -1599,6 +4224,20 @@ } } }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -1611,12 +4250,44 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "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" + } + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -1638,6 +4309,45 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -1650,12 +4360,58 @@ "validate-npm-package-license": "^3.0.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 + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, "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.6.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", @@ -1668,6 +4424,15 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "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", @@ -1714,6 +4479,15 @@ "es-abstract": "^1.5.1" } }, + "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.values": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", @@ -1758,12 +4532,47 @@ "wordwrap": "~1.0.0" } }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, "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 }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -1788,6 +4597,23 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -1797,6 +4623,20 @@ "callsites": "^3.0.0" } }, + "parse-asn1": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", + "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -1806,6 +4646,30 @@ "error-ex": "^1.2.0" } }, + "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 + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "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", @@ -1853,6 +4717,31 @@ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", "dev": true }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picomatch": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", + "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -1862,18 +4751,42 @@ "find-up": "^2.1.0" } }, + "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 + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, "prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", @@ -1885,18 +4798,102 @@ "react-is": "^16.8.1" } }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "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": { + "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" + } + } + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, "ramda": { "version": "0.26.1", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==", "dev": true }, + "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" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, "react-is": { "version": "16.11.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.11.0.tgz", @@ -1924,18 +4921,177 @@ "read-pkg": "^2.0.0" } }, + "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" + } + }, + "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": { + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "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" + } + } + } + }, + "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" + } + }, + "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" + } + } + } + }, "regenerator-runtime": { "version": "0.13.3", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", "dev": true }, + "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" + } + }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, + "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.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "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 + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -1957,12 +5113,58 @@ "path-parse": "^1.0.6" } }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -1973,6 +5175,12 @@ "signal-exit": "^3.0.2" } }, + "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.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -1982,6 +5190,16 @@ "glob": "^7.1.3" } }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -1991,6 +5209,15 @@ "is-promise": "^2.1.0" } }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, "rxjs": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", @@ -2000,24 +5227,95 @@ "tslib": "^1.9.0" } }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "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 }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, + "serialize-javascript": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", + "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", + "dev": true + }, "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" + }, + "dependencies": { + "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" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -2050,6 +5348,147 @@ "is-fullwidth-code-point": "^2.0.0" } }, + "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": { + "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" + } + }, + "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" + } + }, + "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" + } + } + } + }, + "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-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "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-support": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", @@ -2068,6 +5507,12 @@ } } }, + "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 + }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -2100,12 +5545,90 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, + "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" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "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-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "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": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -2136,6 +5659,15 @@ "function-bind": "^1.1.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" + } + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -2151,6 +5683,12 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -2212,6 +5750,56 @@ } } }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.0.tgz", + "integrity": "sha512-oDG16n2WKm27JO8h4y/w3iqBGAOSCtq7k8dRmrn4Wf9NouL0b2WpMHGChFGZq4nFAQy1FsNJrVQHfurXOSTmOA==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "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 + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", + "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.7.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.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 + } + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -2224,13 +5812,100 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "~1.0.2" + "os-tmpdir": "~1.0.2" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "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" + } + }, + "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" + } + }, + "ts-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-6.2.1.tgz", + "integrity": "sha512-Dd9FekWuABGgjE1g0TlQJ+4dFUfYGbYcs52/HQObE0ZmUNjQlmLAS7xXsSzy23AMaMwipsx5sNHvoEpT2CZq1g==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^1.0.2", + "micromatch": "^4.0.0", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "ts-node": { @@ -2269,6 +5944,12 @@ "tslib": "^1.8.1" } }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -2290,12 +5971,94 @@ "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", "dev": true }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, "typescript": { "version": "3.6.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.4.tgz", "integrity": "sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==", "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-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "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 + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -2305,6 +6068,59 @@ "punycode": "^2.1.0" } }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "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": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "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 + }, "v8-compile-cache": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", @@ -2321,6 +6137,12 @@ "spdx-expression-parse": "^3.0.0" } }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, "vscode-test": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.2.0.tgz", @@ -2332,6 +6154,348 @@ "rimraf": "^2.6.3" } }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + } + }, + "webpack": { + "version": "4.41.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.2.tgz", + "integrity": "sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.2.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.1", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "acorn": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", + "dev": true + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "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" + } + } + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "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" + } + }, + "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" + } + } + } + }, + "webpack-cli": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.10.tgz", + "integrity": "sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg==", + "dev": true, + "requires": { + "chalk": "2.4.2", + "cross-spawn": "6.0.5", + "enhanced-resolve": "4.1.0", + "findup-sync": "3.0.0", + "global-modules": "2.0.0", + "import-local": "2.0.0", + "interpret": "1.2.0", + "loader-utils": "1.2.3", + "supports-color": "6.1.0", + "v8-compile-cache": "2.0.3", + "yargs": "13.2.4" + }, + "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 + }, + "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 + }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" + } + }, + "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" + } + }, + "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" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "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 + }, + "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" + } + }, + "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" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "v8-compile-cache": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", + "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", + "dev": true + }, + "yargs": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", + "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "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.0" + } + } + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "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 + } + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -2362,6 +6526,15 @@ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", @@ -2422,12 +6595,24 @@ "mkdirp": "^0.5.1" } }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, "yargs": { "version": "13.3.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", diff --git a/package.json b/package.json index abc3a10..3e6a053 100644 --- a/package.json +++ b/package.json @@ -43,8 +43,11 @@ ] }, "scripts": { - "vscode:prepublish": "npm run compile", - "compile": "tsc -p ./", + "vscode:prepublish": "webpack --mode production", + "webpack": "webpack --mode development", + "webpack-dev": "webpack --mode development --watch", + "test-compile": "tsc -p ./", + "compile": "tsc -p ./", "watch": "tsc -watch -p ./", "pretest": "npm run compile", "test": "node ./out/test/runTest.js", @@ -69,9 +72,12 @@ "eslint-plugin-react-hooks": "^1.7.0", "glob": "^7.1.4", "mocha": "^6.1.4", + "ts-loader": "^6.2.1", "ts-node": "^8.4.1", "typescript": "^3.3.1", - "vscode-test": "^1.2.0" + "vscode-test": "^1.2.0", + "webpack": "^4.41.2", + "webpack-cli": "^3.3.10" }, "dependencies": { "node-fetch": "^2.6.0" diff --git a/src/extension.ts b/src/extension.ts index 9bd1494..20dbf56 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -2,11 +2,14 @@ * @author : Austin Ruby, Alex Chao, Ed Greenberg * @function : activate extension * @changelog : Ed Greenberg, November 5th, 2019, added flexible query file detection - * @changelog : ##WHOEVER CHANGES THE FILE, date, details + * @changelog : Alex Chao, Nov. 5th-10th 2019... Lots of changes... server listener added + * - config file setup command made + * - config file option to allow for a longer time for the graphql server to startup + * ! I propose we add the PORT number to config file + * - updating variables in the event of changes in the config files + * @changelog : ## Austin? * * */ -// The module 'vscode' contains the VS Code extensibility API -// Import the module and reference it with the alias vscode in your code below // eslint-disable-next-line import/no-unresolved import * as vscode from 'vscode'; @@ -15,30 +18,24 @@ const fs = require('fs'); /* eslint-disable import/no-unresolved */ -const readFileSendReqAndWriteResponse = require('./modules/client/readFileSendReqAndWriteResponse.js'); -const serverOn = require('./modules/server/serverOn.js'); -const serverOff = require('./modules/server/serverOff.js'); - -// TODO checkforrunningserver commented out for now -// require in new file -const checkForRunningServer = require('./modules/server/checkForRunningServer.js'); +const readFileSendReqAndWriteResponse = require('./modules/client/readFileSendReqAndWriteResponse'); +const serverOn = require('./modules/server/serverOn'); +const serverOff = require('./modules/server/serverOff'); +// require in new function that checks for a running server +const checkForRunningServer = require('./modules/server/checkForRunningServer'); // require in file that finds root directory -const findRootDirectory = require('./modules/client/findRootDirectory.js'); +const findRootDirectory = require('./modules/client/findRootDirectory'); // require in file that returns entryPoint when given the root path -const parseConfigFile = require('./modules/client/parseConfigFile.js'); +const parseConfigFile = require('./modules/client/parseConfigFile'); // require in file that finds port# -const findPortNumber = require('./modules/client/findPortNumber.js'); +const findPortNumber = require('./modules/client/findPortNumber'); // this method is called when your extension is activated // your extension is activated the very first time the command is executed export function activate(context: vscode.ExtensionContext) { - // Use the console to output diagnostic information (console.log) and errors (console.error) - // This line of code will only be executed once when your extension is activated - console.log('GraphQuill Extension has started\n'); - // * These are some variables that I need to pass between different commands, so they're in // * a higher scope // this ChannelRef variable will be used to pass the output channel between separate function defs @@ -53,16 +50,14 @@ export function activate(context: vscode.ExtensionContext) { // set rootPath and entryPoint to a string of the path to the server startup file (has app.listen) const rootPath = findRootDirectory(); - // ! make these mutable and re-check for them where needed... - const { entryPoint, allowServerTimeoutConfigSetting } = parseConfigFile(rootPath); - // console.log('rootpath is', rootPath); - // console.log('entry point is', entryPoint); - // console.log('allowerServerTimeout Config Setting is', allowServerTimeoutConfigSetting); - // ! make these mutable and re-check for them where needed... - // set portNumber to a string - const portNumber = findPortNumber(entryPoint); - // console.log('port number is', portNumber); + // putting these variables in the global scope with the expectation that they will be set upon + // activating the extension. I'm moving them to be able to manage "live" changes + let entryPoint: string; + let allowServerTimeoutConfigSetting: number; + + // set portNumber to a string. It is going to be set in the activation command + let portNumber: string; // boolean to track if the server has been successfully turned on by the user let serverTurnedOnByGraphQuill = false; @@ -84,28 +79,55 @@ export function activate(context: vscode.ExtensionContext) { // show output channel gqChannel.show(true); - // Check ONCE if the port is open + // parse the config file (this is important in case if there were any changes) + let parseResult = parseConfigFile(rootPath); + entryPoint = parseResult.entryPoint; + allowServerTimeoutConfigSetting = parseResult.allowServerTimeoutConfigSetting; + + // if the entryPoint is falsey, break out of the function and tell the + // user to create a config file + if (!entryPoint) { + gqChannel.append('The config file was not found, please use the Create GraphQuill Config File Command to make one.'); + // break out of this execution context + return null; + } + + // set the portNumber (in the higher scope so it can be used in the deactivate function) + portNumber = findPortNumber(entryPoint); + + // Check ONCE if the port is open (also this does not need the third param) // will resolve to a true or false value const serverOnFromUser = await checkForRunningServer(portNumber, true); - console.log('--serverOnFromUser after once check is:', serverOnFromUser); + // console.log('--serverOnFromUser after once check is:', serverOnFromUser); // trigger serverOn if the user does not already have the server running if (!serverOnFromUser) { + // start up the user's server serverOn(entryPoint); + // give user feedback that server is starting up + gqChannel.clear(); + gqChannel.append('The server is starting up...'); + // await this function that will return true or false based on if the server has been started // false: if starting the server is longer than the time allotted in the config file (defaults // to 3 seconds) serverTurnedOnByGraphQuill = await checkForRunningServer(portNumber, - false, // once setting is false - allowServerTimeoutConfigSetting); // allowServerTCS is either a time in ms or undefined + // once setting is false, so the returned promise will only resolve when the server has + // started OR the timeout (next variable or 3sec) is reached + false, + // allowServerT.C.S. is either a time in milliseconds that defaults to 3000 + allowServerTimeoutConfigSetting); // if it is false, that means there was an error starting the server + // notify the user & end the thread of execution if (!serverTurnedOnByGraphQuill) { // console.log('server is taking too long to startup'); - // give feedback to user that port didn't start - gqChannel.append(`The server is taking too long to startup (>${allowServerTimeoutConfigSetting / 1000} seconds).\nTo increase this time, update the "serverStartupTimeAllowed" setting in the graphquill.config.js file.`); + // give feedback to user that port didn't start (and the specified timeout config setting, + // defaults to 3 seconds) + gqChannel.clear(); + gqChannel.append(`The server is taking too long to startup (>${(allowServerTimeoutConfigSetting || 3000) / 1000} seconds).\nTo increase this time, update the "serverStartupTimeAllowed" setting in the graphquill.config.js file.`); // break out, and just in case I'm going to try to kill the port if it did open // otherwise we could get runaway node processes... @@ -113,10 +135,15 @@ export function activate(context: vscode.ExtensionContext) { } } + // if the server is on from either the user or graphquill, continue + // send first query & setup on save listener if (serverOnFromUser || serverTurnedOnByGraphQuill) { // update isOnToggle (refers to state of GraphQuill extension running or not) isOnToggle = true; + // clear any other stuff off of the channel (e.g. previous error message) + gqChannel.clear(); + // get the fileName of the open file when the extension is FIRST fired const currOpenEditorPath: string = vscode.window.activeTextEditor!.document.fileName; // send that request from the currentopeneditor @@ -124,13 +151,34 @@ export function activate(context: vscode.ExtensionContext) { // initialize the save listener here to clear the channel and resend new requests saveListener = vscode.workspace.onDidSaveTextDocument((event) => { - console.log('save event!!!', event); + // console.log('save event!!!', event); // clear the graphQuill channel gqChannel.clear(); + // re-parse the config file (in case the user made a change) + parseResult = parseConfigFile(rootPath); + entryPoint = parseResult.entryPoint; + allowServerTimeoutConfigSetting = parseResult.allowServerTimeoutConfigSetting; + + if (!entryPoint) { + gqChannel.append('The config file was not found, please use the Create GraphQuill Config File Command to make one.'); + // break out of this execution context + return null; + } + + // ! I really think we should add the port number to the config file to specify to the user + // ! That the port number SHUOLD not be changed... + // TODO this seems very redundant... but I'm blanking on how to make this dynamic + // TODO update if the user changes their server file... + // on each save... reparse for a portNumber in case if it was changed + portNumber = findPortNumber(entryPoint); + // send the filename and channel to the readFileSRAWR function readFileSendReqAndWriteResponse(event.fileName, gqChannel, portNumber, rootPath); + + // satisfying linter + return null; }); } @@ -184,11 +232,11 @@ export function activate(context: vscode.ExtensionContext) { // if the toggle boolean is false, then start the extension, otherwise end it... if (!isOnToggle) { - console.log('--toggle starting extension'); + // console.log('--toggle starting extension'); // using the built in execute command and passing in a string of the command to trigger vscode.commands.executeCommand('extension.activateGraphQuill'); } else { - console.log('--toggle stopping the extension'); + // console.log('--toggle stopping the extension'); vscode.commands.executeCommand('extension.deactivateGraphQuill'); } @@ -203,10 +251,10 @@ export function activate(context: vscode.ExtensionContext) { * * Fourth GraphQuill option in command palette to CREATE A CONFIG FILE ************************************************************************** */ const disposableCreateConfigFile = vscode.commands.registerCommand('extension.createConfigFile', () => { - console.log('--config file setup triggered'); + // console.log('--config file setup triggered'); - const graphQuillConfigPath = `${rootPath}/graphquill.config.js`; // check if the root directory already has a graphquill.config.json file + const graphQuillConfigPath = `${rootPath}/graphquill.config.js`; if (fs.existsSync(graphQuillConfigPath)) { vscode.window.showInformationMessage(`A GraphQuill configuration file already exists at ${graphQuillConfigPath}`); // exit out @@ -232,12 +280,14 @@ export function activate(context: vscode.ExtensionContext) { context.subscriptions.push(disposableCreateConfigFile); } + // this method is called when your extension is deactivated export function deactivate() { // deactivate must return a promise if cleanup operations are async. // turn the server off if vscode is closed (tested via lsof in terminal) - console.log('---deactive function called!!'); + // console.log('---deactive function called!!'); + // executing the deactivateGQ command seems to achieve a similar effect & is nice because it has // access to the portNumber variable vscode.commands.executeCommand('extension.deactivateGraphQuill'); diff --git a/src/modules/client/extractQueries.ts b/src/modules/client/extractQueries.ts index 48c4ad2..bd28310 100644 --- a/src/modules/client/extractQueries.ts +++ b/src/modules/client/extractQueries.ts @@ -1,9 +1,9 @@ /* eslint-disable import/no-unresolved */ // import { builtinModules } from 'module'; -import parseQuery from './parseQuery.js'; +import parseQuery from './parseQuery'; -const useCheckQueryBrackets = require('./checkQueryBrackets.js'); +const useCheckQueryBrackets = require('./checkQueryBrackets'); // given file path, read file at path and parse for instances of 'graphQuill' function extractQueries(string: string) { diff --git a/src/modules/client/findRootDirectory.ts b/src/modules/client/findRootDirectory.ts index 39c1e2d..11ee09b 100644 --- a/src/modules/client/findRootDirectory.ts +++ b/src/modules/client/findRootDirectory.ts @@ -1,5 +1,5 @@ /** - * @author : Alex Chao + * @author : Alex Chao Nov 7th, 2019. Modularized * @function : return the root directory path in a string * @param : none * @returns : string of the root directory diff --git a/src/modules/client/parseConfigFile.ts b/src/modules/client/parseConfigFile.ts index ae83048..4d6dff9 100644 --- a/src/modules/client/parseConfigFile.ts +++ b/src/modules/client/parseConfigFile.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-unused-vars */ // these rules are disabled for the weird require that is inside of the function /* eslint-disable global-require */ /* eslint-disable import/no-dynamic-require */ @@ -21,12 +22,17 @@ function parseConfigFile(rootPath: string) { // find config file in root directory const gqConfigFilePath = `${rootPath}/graphquill.config.js`; + // ! a cached version of this file will be stored here, so future invocations that are trying + // to get results of an updated config file, will appear to not have been changed + delete require.cache[gqConfigFilePath]; + let entryPoint : string; let allowServerTimeoutConfigSetting : number|undefined; if (fs.existsSync(gqConfigFilePath)) { // if the config file exists, require it in (will come in as an object) const configObject = require(`${gqConfigFilePath}`); + // console.log('config object in parseconfigfile.ts', configObject); // set the entry point to the absolute path (root + relative entry path) entryPoint = path.resolve(rootPath, configObject.entry); @@ -35,10 +41,13 @@ function parseConfigFile(rootPath: string) { allowServerTimeoutConfigSetting = configObject.serverStartupTimeAllowed; } else { // default it to the current open editor if there is not a config file - entryPoint = vscode.window.activeTextEditor!.document.fileName; + entryPoint = ''; + // ! This will be handled in the outer extension.ts file to notify the user and break out of + // ! the thread of execution at the same time // notify user that config file was not found and current file is being used as the entry point - vscode.window.showInformationMessage(`graphquill.config.js file was not found. ${entryPoint} is being used as the server starting file`); + // vscode.window.showInformationMessage('graphquill.config.js file was not found. + // Please use the Create GraphQuill Config File Command to create one'); } // return the array with the two results, to be destrucutred when the function is invoked diff --git a/src/modules/client/parseQuery.ts b/src/modules/client/parseQuery.ts index 17f4691..83a3187 100644 --- a/src/modules/client/parseQuery.ts +++ b/src/modules/client/parseQuery.ts @@ -35,44 +35,3 @@ export default function parseQuery(input: string) { } return openParensCount === closeParensCount ? passedQueryString : 'unbalanced parens'; } - -// export default parseQuery; - - -// working... -// add characters to string while within parentheses -// export default function parseQuery(input: string) { - -// parserQuery(input); - -// // initialize queryString to return once stack is empty -// let queryString: string = ''; -// // initialize open and close parens -// const openParen: string = '('; -// const closeParen: string = ')'; -// // initialize stack to push/pop open parens to/from -// const stack: string[] = []; -// // initialize index to point to current char in string -// let index: number = 0; -// // iterate over input string at least once, while there are parens in the stack -// // and index hasn't reached the end of the input string -// do { -// const currentChar: string = input[index]; -// // if current char is open paren, push to stack -// // if current char is close paren, pop off of stack -// if (currentChar === openParen) { -// stack.push(currentChar); -// } else if (currentChar === closeParen) { -// if (!stack.length) return 'unbalanced parens'; // unreachable line of code - Ed fix this -// too? -// stack.pop(); -// } -// // add current char to queryString and increment index before next iteration of loop -// queryString += currentChar; -// index += 1; -// } while (stack.length && index < input.length); -// console.log('start query string'); -// console.log(queryString); -// console.log('end query string'); -// return queryString; -// } diff --git a/src/modules/client/readFileSendReqAndWriteResponse.ts b/src/modules/client/readFileSendReqAndWriteResponse.ts index c509e98..1c6bb79 100644 --- a/src/modules/client/readFileSendReqAndWriteResponse.ts +++ b/src/modules/client/readFileSendReqAndWriteResponse.ts @@ -4,7 +4,6 @@ // for vscode module being dumb /* eslint-disable no-unused-vars */ - /** * @module : readFileSendReqAndWriteResponse.ts * @author : Austin Ruby @@ -23,9 +22,7 @@ import * as vscode from 'vscode'; const fetch = require('node-fetch'); const fs = require('fs'); -// const checkQueryBrackets = require('./checkQueryBrackets.js'); -// const parseQuery = require('./parseQuery.js'); -const extractQueries = require('./extractQueries.js'); +const extractQueries = require('./extractQueries'); // checkQueryBrackets used to be here // parseQuery used to be here diff --git a/src/modules/server/checkForRunningServer.ts b/src/modules/server/checkForRunningServer.ts index 0d1b6f8..92d553f 100644 --- a/src/modules/server/checkForRunningServer.ts +++ b/src/modules/server/checkForRunningServer.ts @@ -1,8 +1,13 @@ /** * @module : checkForRunningServer.ts - * @author : Alex Chao + * @author : Alex Chao, Nov 7th, 2019 * @function : uses child process and lsof to check if a port is currently running - * @param : + * @param : portNumber, string + * @param : once: boolean, true if the function should check if the port is open right when the + * function is run. OR false if the function should wait for the server to start before resolving + * @param : allowServerTimeoutConfigSetting: number, user input from config file to determine how + * long to wait for the server to start. Defaults to 3000 (milliseconds) + * @returns : a boolean, true if the server has started, false if it has not started * @changelog : ##WHOEVER CHANGES THE FILE, date, details * * */ @@ -13,15 +18,13 @@ // const fs = require('fs'); const childProcess = require('child_process'); -// todo remove this rule when the funciton is done... -// eslint-disable-next-line no-unused-vars const checkForRunningServer = ( portNumber: string, once: boolean, - allowServerTimeoutConfigSetting: number|undefined, + allowServerTimeoutConfigSetting = 3000, ) => { console.log('CHECK FOR RUNNING SERVER IS RUNNINGGGGGG'); - + // console.log(portNumber, once, allowServerTimeoutConfigSetting); // moved this line into the serverOn file so that each time serverOn is called // a new child process is started. This is critical to being able to toggle // GraphQuill on and off @@ -48,19 +51,15 @@ const checkForRunningServer = ( }); // just below is the real core of the function, the child process: - // we write to a new terminal to run the index.js file in the folder specified by base + // checks if the port is active with the `lsof -i :${portNumber}\n` command // IMPORTANT: code will not run without the '\n' component--the CLI needs this - // explicit return command - // // ! ONCE - // bashTerminal.stdin.write(`lsof -i :${portNumber}\n`); - return new Promise((resolve) => { let numRuns = 0; let timeoutId: NodeJS.Timer; // A set interval callback that will write a command to the terminal every 200ms, then check // if the portOpen boolean has been changed (it is actually changed in the on-data listener // above). Promise will resolve when the portOpen variable is true - const intervalWriteBash = setInterval(() => { + const intervalLsofToBash = setInterval(() => { bashTerminal.stdin.write(`lsof -i :${portNumber}\n`); // console.log('inside promise-- portOpen boolean', portOpen); // console.log('inside promise-- allTerminalText', allTerminalText); @@ -68,8 +67,9 @@ const checkForRunningServer = ( // if the port is open, resolve the promise, return some value... if (portOpen) { // clear set intervals - clearInterval(intervalWriteBash); - // clear the timeoutId if it's + clearInterval(intervalLsofToBash); + + // clear the timeoutId if (timeoutId) clearTimeout(timeoutId); // end terminal session @@ -82,17 +82,16 @@ const checkForRunningServer = ( resolve(true); } - // ? This may be unreachable code depending on how the event loop lines up for the on data - // ? command changing the portOpen variable (i.e. the conditional above for if (portOpen) may - // ? be triggered without this ever triggereing - // if once was set to true, we only want to check if the server is "immediately" on, so - // check if once is true, and numRuns is greater than one, then resolve the promise with - // the result of portOpen + // if once param was set to true, we only want to check if the server is "immediately" on, so + // check if once is true, and numRuns is greater than one, then resolve the promise with the + // result of portOpen if (once && numRuns > 1) { - console.log('---once conditional triggered, result will be:', portOpen); + console.log('---once conditional triggered, result is:', portOpen); // clear set intervals - clearInterval(intervalWriteBash); - // clearInterval(consoleShit); + clearInterval(intervalLsofToBash); + + // clear the timeoutId + if (timeoutId) clearTimeout(timeoutId); // end terminal session bashTerminal.stdin.end(); @@ -104,28 +103,24 @@ const checkForRunningServer = ( numRuns += 1; }, 200); // Run every 200ms - // TODO default setTimeout after 2.5 seconds // default/base case to resolve promise if the server hasn't started in 3 seconds - // This means the server is either spinning up too slowly or there is an error n the user's - // server starting file. In either case we want to return false for the next piece of middleware + // This means the server is either spinning up too slowly or there is an error in the user's + // server starting file. In either case we want to return false if (!once) { // only create this default timeout if this function was invoked with once === false timeoutId = setTimeout(() => { console.log('timeout of checkForRunningServer'); // clear set intervals - clearInterval(intervalWriteBash); - // clearInterval(consoleShit); + clearInterval(intervalLsofToBash); // end terminal session bashTerminal.stdin.end(); // resolve the promise resolve(false); - }, allowServerTimeoutConfigSetting || 3000); // default the allowed server timeout to 3 sec. + }, allowServerTimeoutConfigSetting); // default allowed time is 3 sec. } }); - - // this message pops up to the user upon completion of the command }; module.exports = checkForRunningServer; diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..80fe529 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,43 @@ +// eslint-disable +//@ts-check + +'use strict'; + +const path = require('path'); + +/**@type {import('webpack').Configuration}*/ + +const config = { + target: 'node', // vscode extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/ + + entry: './src/extension.ts', // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ + output: { + // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ + path: path.resolve(__dirname, 'dist'), + filename: 'extension.js', + libraryTarget: 'commonjs2', + devtoolModuleFilenameTemplate: '../[resource-path]' + }, + devtool: 'source-map', + externals: { + vscode: 'commonjs vscode' // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ + }, + resolve: { + // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader + extensions: ['.ts', '.js'] + }, + module: { + rules: [ + { + test: /\.ts$/, + exclude: /node_modules/, + use: [ + { + loader: 'ts-loader' + } + ] + } + ] + } +}; +module.exports = config; \ No newline at end of file From 08bd2b03590c160dc491f9652043a07346d65ad7 Mon Sep 17 00:00:00 2001 From: alexchao26 Date: Sun, 10 Nov 2019 21:53:02 -0500 Subject: [PATCH 03/10] webpack test production compile --- .gitignore | 3 + dist/extension.js | 2771 +---------------------------------------- dist/extension.js.map | 2 +- 3 files changed, 5 insertions(+), 2771 deletions(-) diff --git a/.gitignore b/.gitignore index 20d3c63..dd0b33a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,9 @@ node_modules .vscode-test/ *.vsix +# webpack output files +dist/ + # Logs logs *.log diff --git a/dist/extension.js b/dist/extension.js index 9870425..ebd58ac 100644 --- a/dist/extension.js +++ b/dist/extension.js @@ -1,2771 +1,2 @@ -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; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // 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 = "./src/extension.ts"); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ "./node_modules/node-fetch/lib/index.mjs": -/*!***********************************************!*\ - !*** ./node_modules/node-fetch/lib/index.mjs ***! - \***********************************************/ -/*! exports provided: default, Headers, Request, Response, FetchError */ -/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Headers", function() { return Headers; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Request", function() { return Request; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Response", function() { return Response; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FetchError", function() { return FetchError; }); -/* harmony import */ var stream__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! stream */ "stream"); -/* harmony import */ var http__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! http */ "http"); -/* harmony import */ var url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! url */ "url"); -/* harmony import */ var https__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! https */ "https"); -/* harmony import */ var zlib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! zlib */ "zlib"); - - - - - - -// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js - -// fix for "Readable" isn't a named export issue -const Readable = stream__WEBPACK_IMPORTED_MODULE_0__.Readable; - -const BUFFER = Symbol('buffer'); -const TYPE = Symbol('type'); - -class Blob { - constructor() { - this[TYPE] = ''; - - const blobParts = arguments[0]; - const options = arguments[1]; - - const buffers = []; - let size = 0; - - if (blobParts) { - const a = blobParts; - const length = Number(a.length); - for (let i = 0; i < length; i++) { - const element = a[i]; - let buffer; - if (element instanceof Buffer) { - buffer = element; - } else if (ArrayBuffer.isView(element)) { - buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength); - } else if (element instanceof ArrayBuffer) { - buffer = Buffer.from(element); - } else if (element instanceof Blob) { - buffer = element[BUFFER]; - } else { - buffer = Buffer.from(typeof element === 'string' ? element : String(element)); - } - size += buffer.length; - buffers.push(buffer); - } - } - - this[BUFFER] = Buffer.concat(buffers); - - let type = options && options.type !== undefined && String(options.type).toLowerCase(); - if (type && !/[^\u0020-\u007E]/.test(type)) { - this[TYPE] = type; - } - } - get size() { - return this[BUFFER].length; - } - get type() { - return this[TYPE]; - } - text() { - return Promise.resolve(this[BUFFER].toString()); - } - arrayBuffer() { - const buf = this[BUFFER]; - const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - return Promise.resolve(ab); - } - stream() { - const readable = new Readable(); - readable._read = function () {}; - readable.push(this[BUFFER]); - readable.push(null); - return readable; - } - toString() { - return '[object Blob]'; - } - slice() { - const size = this.size; - - const start = arguments[0]; - const end = arguments[1]; - let relativeStart, relativeEnd; - if (start === undefined) { - relativeStart = 0; - } else if (start < 0) { - relativeStart = Math.max(size + start, 0); - } else { - relativeStart = Math.min(start, size); - } - if (end === undefined) { - relativeEnd = size; - } else if (end < 0) { - relativeEnd = Math.max(size + end, 0); - } else { - relativeEnd = Math.min(end, size); - } - const span = Math.max(relativeEnd - relativeStart, 0); - - const buffer = this[BUFFER]; - const slicedBuffer = buffer.slice(relativeStart, relativeStart + span); - const blob = new Blob([], { type: arguments[2] }); - blob[BUFFER] = slicedBuffer; - return blob; - } -} - -Object.defineProperties(Blob.prototype, { - size: { enumerable: true }, - type: { enumerable: true }, - slice: { enumerable: true } -}); - -Object.defineProperty(Blob.prototype, Symbol.toStringTag, { - value: 'Blob', - writable: false, - enumerable: false, - configurable: true -}); - -/** - * fetch-error.js - * - * FetchError interface for operational errors - */ - -/** - * Create FetchError instance - * - * @param String message Error message for human - * @param String type Error type for machine - * @param String systemError For Node.js system error - * @return FetchError - */ -function FetchError(message, type, systemError) { - Error.call(this, message); - - this.message = message; - this.type = type; - - // when err.type is `system`, err.code contains system error code - if (systemError) { - this.code = this.errno = systemError.code; - } - - // hide custom error implementation details from end-users - Error.captureStackTrace(this, this.constructor); -} - -FetchError.prototype = Object.create(Error.prototype); -FetchError.prototype.constructor = FetchError; -FetchError.prototype.name = 'FetchError'; - -let convert; -try { - convert = require('encoding').convert; -} catch (e) {} - -const INTERNALS = Symbol('Body internals'); - -// fix an issue where "PassThrough" isn't a named export for node <10 -const PassThrough = stream__WEBPACK_IMPORTED_MODULE_0__.PassThrough; - -/** - * Body mixin - * - * Ref: https://fetch.spec.whatwg.org/#body - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -function Body(body) { - var _this = this; - - var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - _ref$size = _ref.size; - - let size = _ref$size === undefined ? 0 : _ref$size; - var _ref$timeout = _ref.timeout; - let timeout = _ref$timeout === undefined ? 0 : _ref$timeout; - - if (body == null) { - // body is undefined or null - body = null; - } else if (isURLSearchParams(body)) { - // body is a URLSearchParams - body = Buffer.from(body.toString()); - } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { - // body is ArrayBuffer - body = Buffer.from(body); - } else if (ArrayBuffer.isView(body)) { - // body is ArrayBufferView - body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); - } else if (body instanceof stream__WEBPACK_IMPORTED_MODULE_0__) ; else { - // none of the above - // coerce to string then buffer - body = Buffer.from(String(body)); - } - this[INTERNALS] = { - body, - disturbed: false, - error: null - }; - this.size = size; - this.timeout = timeout; - - if (body instanceof stream__WEBPACK_IMPORTED_MODULE_0__) { - body.on('error', function (err) { - const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err); - _this[INTERNALS].error = error; - }); - } -} - -Body.prototype = { - get body() { - return this[INTERNALS].body; - }, - - get bodyUsed() { - return this[INTERNALS].disturbed; - }, - - /** - * Decode response as ArrayBuffer - * - * @return Promise - */ - arrayBuffer() { - return consumeBody.call(this).then(function (buf) { - return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - }); - }, - - /** - * Return raw response as Blob - * - * @return Promise - */ - blob() { - let ct = this.headers && this.headers.get('content-type') || ''; - return consumeBody.call(this).then(function (buf) { - return Object.assign( - // Prevent copying - new Blob([], { - type: ct.toLowerCase() - }), { - [BUFFER]: buf - }); - }); - }, - - /** - * Decode response as json - * - * @return Promise - */ - json() { - var _this2 = this; - - return consumeBody.call(this).then(function (buffer) { - try { - return JSON.parse(buffer.toString()); - } catch (err) { - return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json')); - } - }); - }, - - /** - * Decode response as text - * - * @return Promise - */ - text() { - return consumeBody.call(this).then(function (buffer) { - return buffer.toString(); - }); - }, - - /** - * Decode response as buffer (non-spec api) - * - * @return Promise - */ - buffer() { - return consumeBody.call(this); - }, - - /** - * Decode response as text, while automatically detecting the encoding and - * trying to decode to UTF-8 (non-spec api) - * - * @return Promise - */ - textConverted() { - var _this3 = this; - - return consumeBody.call(this).then(function (buffer) { - return convertBody(buffer, _this3.headers); - }); - } -}; - -// In browsers, all properties are enumerable. -Object.defineProperties(Body.prototype, { - body: { enumerable: true }, - bodyUsed: { enumerable: true }, - arrayBuffer: { enumerable: true }, - blob: { enumerable: true }, - json: { enumerable: true }, - text: { enumerable: true } -}); - -Body.mixIn = function (proto) { - for (const name of Object.getOwnPropertyNames(Body.prototype)) { - // istanbul ignore else: future proof - if (!(name in proto)) { - const desc = Object.getOwnPropertyDescriptor(Body.prototype, name); - Object.defineProperty(proto, name, desc); - } - } -}; - -/** - * Consume and convert an entire Body to a Buffer. - * - * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body - * - * @return Promise - */ -function consumeBody() { - var _this4 = this; - - if (this[INTERNALS].disturbed) { - return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`)); - } - - this[INTERNALS].disturbed = true; - - if (this[INTERNALS].error) { - return Body.Promise.reject(this[INTERNALS].error); - } - - let body = this.body; - - // body is null - if (body === null) { - return Body.Promise.resolve(Buffer.alloc(0)); - } - - // body is blob - if (isBlob(body)) { - body = body.stream(); - } - - // body is buffer - if (Buffer.isBuffer(body)) { - return Body.Promise.resolve(body); - } - - // istanbul ignore if: should never happen - if (!(body instanceof stream__WEBPACK_IMPORTED_MODULE_0__)) { - return Body.Promise.resolve(Buffer.alloc(0)); - } - - // body is stream - // get ready to actually consume the body - let accum = []; - let accumBytes = 0; - let abort = false; - - return new Body.Promise(function (resolve, reject) { - let resTimeout; - - // allow timeout on slow response body - if (_this4.timeout) { - resTimeout = setTimeout(function () { - abort = true; - reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout')); - }, _this4.timeout); - } - - // handle stream errors - body.on('error', function (err) { - if (err.name === 'AbortError') { - // if the request was aborted, reject with this Error - abort = true; - reject(err); - } else { - // other errors, such as incorrect content-encoding - reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err)); - } - }); - - body.on('data', function (chunk) { - if (abort || chunk === null) { - return; - } - - if (_this4.size && accumBytes + chunk.length > _this4.size) { - abort = true; - reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size')); - return; - } - - accumBytes += chunk.length; - accum.push(chunk); - }); - - body.on('end', function () { - if (abort) { - return; - } - - clearTimeout(resTimeout); - - try { - resolve(Buffer.concat(accum, accumBytes)); - } catch (err) { - // handle streams that have accumulated too much data (issue #414) - reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err)); - } - }); - }); -} - -/** - * Detect buffer encoding and convert to target encoding - * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding - * - * @param Buffer buffer Incoming buffer - * @param String encoding Target encoding - * @return String - */ -function convertBody(buffer, headers) { - if (typeof convert !== 'function') { - throw new Error('The package `encoding` must be installed to use the textConverted() function'); - } - - const ct = headers.get('content-type'); - let charset = 'utf-8'; - let res, str; - - // header - if (ct) { - res = /charset=([^;]*)/i.exec(ct); - } - - // no charset in content type, peek at response body for at most 1024 bytes - str = buffer.slice(0, 1024).toString(); - - // html5 - if (!res && str) { - res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined; - - this[MAP] = Object.create(null); - - if (init instanceof Headers) { - const rawHeaders = init.raw(); - const headerNames = Object.keys(rawHeaders); - - for (const headerName of headerNames) { - for (const value of rawHeaders[headerName]) { - this.append(headerName, value); - } - } - - return; - } - - // We don't worry about converting prop to ByteString here as append() - // will handle it. - if (init == null) ; else if (typeof init === 'object') { - const method = init[Symbol.iterator]; - if (method != null) { - if (typeof method !== 'function') { - throw new TypeError('Header pairs must be iterable'); - } - - // sequence> - // Note: per spec we have to first exhaust the lists then process them - const pairs = []; - for (const pair of init) { - if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') { - throw new TypeError('Each header pair must be iterable'); - } - pairs.push(Array.from(pair)); - } - - for (const pair of pairs) { - if (pair.length !== 2) { - throw new TypeError('Each header pair must be a name/value tuple'); - } - this.append(pair[0], pair[1]); - } - } else { - // record - for (const key of Object.keys(init)) { - const value = init[key]; - this.append(key, value); - } - } - } else { - throw new TypeError('Provided initializer must be an object'); - } - } - - /** - * Return combined header value given name - * - * @param String name Header name - * @return Mixed - */ - get(name) { - name = `${name}`; - validateName(name); - const key = find(this[MAP], name); - if (key === undefined) { - return null; - } - - return this[MAP][key].join(', '); - } - - /** - * Iterate over all headers - * - * @param Function callback Executed for each item with parameters (value, name, thisArg) - * @param Boolean thisArg `this` context for callback function - * @return Void - */ - forEach(callback) { - let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; - - let pairs = getHeaders(this); - let i = 0; - while (i < pairs.length) { - var _pairs$i = pairs[i]; - const name = _pairs$i[0], - value = _pairs$i[1]; - - callback.call(thisArg, value, name, this); - pairs = getHeaders(this); - i++; - } - } - - /** - * Overwrite header values given name - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - set(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find(this[MAP], name); - this[MAP][key !== undefined ? key : name] = [value]; - } - - /** - * Append a value onto existing header - * - * @param String name Header name - * @param String value Header value - * @return Void - */ - append(name, value) { - name = `${name}`; - value = `${value}`; - validateName(name); - validateValue(value); - const key = find(this[MAP], name); - if (key !== undefined) { - this[MAP][key].push(value); - } else { - this[MAP][name] = [value]; - } - } - - /** - * Check for header name existence - * - * @param String name Header name - * @return Boolean - */ - has(name) { - name = `${name}`; - validateName(name); - return find(this[MAP], name) !== undefined; - } - - /** - * Delete all header values given name - * - * @param String name Header name - * @return Void - */ - delete(name) { - name = `${name}`; - validateName(name); - const key = find(this[MAP], name); - if (key !== undefined) { - delete this[MAP][key]; - } - } - - /** - * Return raw headers (non-spec api) - * - * @return Object - */ - raw() { - return this[MAP]; - } - - /** - * Get an iterator on keys. - * - * @return Iterator - */ - keys() { - return createHeadersIterator(this, 'key'); - } - - /** - * Get an iterator on values. - * - * @return Iterator - */ - values() { - return createHeadersIterator(this, 'value'); - } - - /** - * Get an iterator on entries. - * - * This is the default iterator of the Headers object. - * - * @return Iterator - */ - [Symbol.iterator]() { - return createHeadersIterator(this, 'key+value'); - } -} -Headers.prototype.entries = Headers.prototype[Symbol.iterator]; - -Object.defineProperty(Headers.prototype, Symbol.toStringTag, { - value: 'Headers', - writable: false, - enumerable: false, - configurable: true -}); - -Object.defineProperties(Headers.prototype, { - get: { enumerable: true }, - forEach: { enumerable: true }, - set: { enumerable: true }, - append: { enumerable: true }, - has: { enumerable: true }, - delete: { enumerable: true }, - keys: { enumerable: true }, - values: { enumerable: true }, - entries: { enumerable: true } -}); - -function getHeaders(headers) { - let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value'; - - const keys = Object.keys(headers[MAP]).sort(); - return keys.map(kind === 'key' ? function (k) { - return k.toLowerCase(); - } : kind === 'value' ? function (k) { - return headers[MAP][k].join(', '); - } : function (k) { - return [k.toLowerCase(), headers[MAP][k].join(', ')]; - }); -} - -const INTERNAL = Symbol('internal'); - -function createHeadersIterator(target, kind) { - const iterator = Object.create(HeadersIteratorPrototype); - iterator[INTERNAL] = { - target, - kind, - index: 0 - }; - return iterator; -} - -const HeadersIteratorPrototype = Object.setPrototypeOf({ - next() { - // istanbul ignore if - if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { - throw new TypeError('Value of `this` is not a HeadersIterator'); - } - - var _INTERNAL = this[INTERNAL]; - const target = _INTERNAL.target, - kind = _INTERNAL.kind, - index = _INTERNAL.index; - - const values = getHeaders(target, kind); - const len = values.length; - if (index >= len) { - return { - value: undefined, - done: true - }; - } - - this[INTERNAL].index = index + 1; - - return { - value: values[index], - done: false - }; - } -}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))); - -Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { - value: 'HeadersIterator', - writable: false, - enumerable: false, - configurable: true -}); - -/** - * Export the Headers object in a form that Node.js can consume. - * - * @param Headers headers - * @return Object - */ -function exportNodeCompatibleHeaders(headers) { - const obj = Object.assign({ __proto__: null }, headers[MAP]); - - // http.request() only supports string as Host header. This hack makes - // specifying custom Host header possible. - const hostHeaderKey = find(headers[MAP], 'Host'); - if (hostHeaderKey !== undefined) { - obj[hostHeaderKey] = obj[hostHeaderKey][0]; - } - - return obj; -} - -/** - * Create a Headers object from an object of headers, ignoring those that do - * not conform to HTTP grammar productions. - * - * @param Object obj Object of headers - * @return Headers - */ -function createHeadersLenient(obj) { - const headers = new Headers(); - for (const name of Object.keys(obj)) { - if (invalidTokenRegex.test(name)) { - continue; - } - if (Array.isArray(obj[name])) { - for (const val of obj[name]) { - if (invalidHeaderCharRegex.test(val)) { - continue; - } - if (headers[MAP][name] === undefined) { - headers[MAP][name] = [val]; - } else { - headers[MAP][name].push(val); - } - } - } else if (!invalidHeaderCharRegex.test(obj[name])) { - headers[MAP][name] = [obj[name]]; - } - } - return headers; -} - -const INTERNALS$1 = Symbol('Response internals'); - -// fix an issue where "STATUS_CODES" aren't a named export for node <10 -const STATUS_CODES = http__WEBPACK_IMPORTED_MODULE_1__.STATUS_CODES; - -/** - * Response class - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -class Response { - constructor() { - let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - Body.call(this, body, opts); - - const status = opts.status || 200; - const headers = new Headers(opts.headers); - - if (body != null && !headers.has('Content-Type')) { - const contentType = extractContentType(body); - if (contentType) { - headers.append('Content-Type', contentType); - } - } - - this[INTERNALS$1] = { - url: opts.url, - status, - statusText: opts.statusText || STATUS_CODES[status], - headers, - counter: opts.counter - }; - } - - get url() { - return this[INTERNALS$1].url || ''; - } - - get status() { - return this[INTERNALS$1].status; - } - - /** - * Convenience property representing if the request ended normally - */ - get ok() { - return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300; - } - - get redirected() { - return this[INTERNALS$1].counter > 0; - } - - get statusText() { - return this[INTERNALS$1].statusText; - } - - get headers() { - return this[INTERNALS$1].headers; - } - - /** - * Clone this response - * - * @return Response - */ - clone() { - return new Response(clone(this), { - url: this.url, - status: this.status, - statusText: this.statusText, - headers: this.headers, - ok: this.ok, - redirected: this.redirected - }); - } -} - -Body.mixIn(Response.prototype); - -Object.defineProperties(Response.prototype, { - url: { enumerable: true }, - status: { enumerable: true }, - ok: { enumerable: true }, - redirected: { enumerable: true }, - statusText: { enumerable: true }, - headers: { enumerable: true }, - clone: { enumerable: true } -}); - -Object.defineProperty(Response.prototype, Symbol.toStringTag, { - value: 'Response', - writable: false, - enumerable: false, - configurable: true -}); - -const INTERNALS$2 = Symbol('Request internals'); - -// fix an issue where "format", "parse" aren't a named export for node <10 -const parse_url = url__WEBPACK_IMPORTED_MODULE_2__.parse; -const format_url = url__WEBPACK_IMPORTED_MODULE_2__.format; - -const streamDestructionSupported = 'destroy' in stream__WEBPACK_IMPORTED_MODULE_0__.Readable.prototype; - -/** - * Check if a value is an instance of Request. - * - * @param Mixed input - * @return Boolean - */ -function isRequest(input) { - return typeof input === 'object' && typeof input[INTERNALS$2] === 'object'; -} - -function isAbortSignal(signal) { - const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal); - return !!(proto && proto.constructor.name === 'AbortSignal'); -} - -/** - * Request class - * - * @param Mixed input Url or Request instance - * @param Object init Custom options - * @return Void - */ -class Request { - constructor(input) { - let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - let parsedURL; - - // normalize input - if (!isRequest(input)) { - if (input && input.href) { - // in order to support Node.js' Url objects; though WHATWG's URL objects - // will fall into this branch also (since their `toString()` will return - // `href` property anyway) - parsedURL = parse_url(input.href); - } else { - // coerce input to a string before attempting to parse - parsedURL = parse_url(`${input}`); - } - input = {}; - } else { - parsedURL = parse_url(input.url); - } - - let method = init.method || input.method || 'GET'; - method = method.toUpperCase(); - - if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) { - throw new TypeError('Request with GET/HEAD method cannot have body'); - } - - let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null; - - Body.call(this, inputBody, { - timeout: init.timeout || input.timeout || 0, - size: init.size || input.size || 0 - }); - - const headers = new Headers(init.headers || input.headers || {}); - - if (inputBody != null && !headers.has('Content-Type')) { - const contentType = extractContentType(inputBody); - if (contentType) { - headers.append('Content-Type', contentType); - } - } - - let signal = isRequest(input) ? input.signal : null; - if ('signal' in init) signal = init.signal; - - if (signal != null && !isAbortSignal(signal)) { - throw new TypeError('Expected signal to be an instanceof AbortSignal'); - } - - this[INTERNALS$2] = { - method, - redirect: init.redirect || input.redirect || 'follow', - headers, - parsedURL, - signal - }; - - // node-fetch-only options - this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20; - this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true; - this.counter = init.counter || input.counter || 0; - this.agent = init.agent || input.agent; - } - - get method() { - return this[INTERNALS$2].method; - } - - get url() { - return format_url(this[INTERNALS$2].parsedURL); - } - - get headers() { - return this[INTERNALS$2].headers; - } - - get redirect() { - return this[INTERNALS$2].redirect; - } - - get signal() { - return this[INTERNALS$2].signal; - } - - /** - * Clone this request - * - * @return Request - */ - clone() { - return new Request(this); - } -} - -Body.mixIn(Request.prototype); - -Object.defineProperty(Request.prototype, Symbol.toStringTag, { - value: 'Request', - writable: false, - enumerable: false, - configurable: true -}); - -Object.defineProperties(Request.prototype, { - method: { enumerable: true }, - url: { enumerable: true }, - headers: { enumerable: true }, - redirect: { enumerable: true }, - clone: { enumerable: true }, - signal: { enumerable: true } -}); - -/** - * Convert a Request to Node.js http request options. - * - * @param Request A Request instance - * @return Object The options object to be passed to http.request - */ -function getNodeRequestOptions(request) { - const parsedURL = request[INTERNALS$2].parsedURL; - const headers = new Headers(request[INTERNALS$2].headers); - - // fetch step 1.3 - if (!headers.has('Accept')) { - headers.set('Accept', '*/*'); - } - - // Basic fetch - if (!parsedURL.protocol || !parsedURL.hostname) { - throw new TypeError('Only absolute URLs are supported'); - } - - if (!/^https?:$/.test(parsedURL.protocol)) { - throw new TypeError('Only HTTP(S) protocols are supported'); - } - - if (request.signal && request.body instanceof stream__WEBPACK_IMPORTED_MODULE_0__.Readable && !streamDestructionSupported) { - throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8'); - } - - // HTTP-network-or-cache fetch steps 2.4-2.7 - let contentLengthValue = null; - if (request.body == null && /^(POST|PUT)$/i.test(request.method)) { - contentLengthValue = '0'; - } - if (request.body != null) { - const totalBytes = getTotalBytes(request); - if (typeof totalBytes === 'number') { - contentLengthValue = String(totalBytes); - } - } - if (contentLengthValue) { - headers.set('Content-Length', contentLengthValue); - } - - // HTTP-network-or-cache fetch step 2.11 - if (!headers.has('User-Agent')) { - headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)'); - } - - // HTTP-network-or-cache fetch step 2.15 - if (request.compress && !headers.has('Accept-Encoding')) { - headers.set('Accept-Encoding', 'gzip,deflate'); - } - - let agent = request.agent; - if (typeof agent === 'function') { - agent = agent(parsedURL); - } - - if (!headers.has('Connection') && !agent) { - headers.set('Connection', 'close'); - } - - // HTTP-network fetch step 4.2 - // chunked encoding is handled by Node.js - - return Object.assign({}, parsedURL, { - method: request.method, - headers: exportNodeCompatibleHeaders(headers), - agent - }); -} - -/** - * abort-error.js - * - * AbortError interface for cancelled requests - */ - -/** - * Create AbortError instance - * - * @param String message Error message for human - * @return AbortError - */ -function AbortError(message) { - Error.call(this, message); - - this.type = 'aborted'; - this.message = message; - - // hide custom error implementation details from end-users - Error.captureStackTrace(this, this.constructor); -} - -AbortError.prototype = Object.create(Error.prototype); -AbortError.prototype.constructor = AbortError; -AbortError.prototype.name = 'AbortError'; - -// fix an issue where "PassThrough", "resolve" aren't a named export for node <10 -const PassThrough$1 = stream__WEBPACK_IMPORTED_MODULE_0__.PassThrough; -const resolve_url = url__WEBPACK_IMPORTED_MODULE_2__.resolve; - -/** - * Fetch function - * - * @param Mixed url Absolute url or Request instance - * @param Object opts Fetch options - * @return Promise - */ -function fetch(url, opts) { - - // allow custom promise - if (!fetch.Promise) { - throw new Error('native promise missing, set fetch.Promise to your favorite alternative'); - } - - Body.Promise = fetch.Promise; - - // wrap http.request into fetch - return new fetch.Promise(function (resolve, reject) { - // build request object - const request = new Request(url, opts); - const options = getNodeRequestOptions(request); - - const send = (options.protocol === 'https:' ? https__WEBPACK_IMPORTED_MODULE_3__ : http__WEBPACK_IMPORTED_MODULE_1__).request; - const signal = request.signal; - - let response = null; - - const abort = function abort() { - let error = new AbortError('The user aborted a request.'); - reject(error); - if (request.body && request.body instanceof stream__WEBPACK_IMPORTED_MODULE_0__.Readable) { - request.body.destroy(error); - } - if (!response || !response.body) return; - response.body.emit('error', error); - }; - - if (signal && signal.aborted) { - abort(); - return; - } - - const abortAndFinalize = function abortAndFinalize() { - abort(); - finalize(); - }; - - // send request - const req = send(options); - let reqTimeout; - - if (signal) { - signal.addEventListener('abort', abortAndFinalize); - } - - function finalize() { - req.abort(); - if (signal) signal.removeEventListener('abort', abortAndFinalize); - clearTimeout(reqTimeout); - } - - if (request.timeout) { - req.once('socket', function (socket) { - reqTimeout = setTimeout(function () { - reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout')); - finalize(); - }, request.timeout); - }); - } - - req.on('error', function (err) { - reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); - finalize(); - }); - - req.on('response', function (res) { - clearTimeout(reqTimeout); - - const headers = createHeadersLenient(res.headers); - - // HTTP fetch step 5 - if (fetch.isRedirect(res.statusCode)) { - // HTTP fetch step 5.2 - const location = headers.get('Location'); - - // HTTP fetch step 5.3 - const locationURL = location === null ? null : resolve_url(request.url, location); - - // HTTP fetch step 5.5 - switch (request.redirect) { - case 'error': - reject(new FetchError(`redirect mode is set to error: ${request.url}`, 'no-redirect')); - finalize(); - return; - case 'manual': - // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL. - if (locationURL !== null) { - // handle corrupted header - try { - headers.set('Location', locationURL); - } catch (err) { - // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request - reject(err); - } - } - break; - case 'follow': - // HTTP-redirect fetch step 2 - if (locationURL === null) { - break; - } - - // HTTP-redirect fetch step 5 - if (request.counter >= request.follow) { - reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect')); - finalize(); - return; - } - - // HTTP-redirect fetch step 6 (counter increment) - // Create a new Request object. - const requestOpts = { - headers: new Headers(request.headers), - follow: request.follow, - counter: request.counter + 1, - agent: request.agent, - compress: request.compress, - method: request.method, - body: request.body, - signal: request.signal, - timeout: request.timeout - }; - - // HTTP-redirect fetch step 9 - if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { - reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); - finalize(); - return; - } - - // HTTP-redirect fetch step 11 - if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') { - requestOpts.method = 'GET'; - requestOpts.body = undefined; - requestOpts.headers.delete('content-length'); - } - - // HTTP-redirect fetch step 15 - resolve(fetch(new Request(locationURL, requestOpts))); - finalize(); - return; - } - } - - // prepare response - res.once('end', function () { - if (signal) signal.removeEventListener('abort', abortAndFinalize); - }); - let body = res.pipe(new PassThrough$1()); - - const response_options = { - url: request.url, - status: res.statusCode, - statusText: res.statusMessage, - headers: headers, - size: request.size, - timeout: request.timeout, - counter: request.counter - }; - - // HTTP-network fetch step 12.1.1.3 - const codings = headers.get('Content-Encoding'); - - // HTTP-network fetch step 12.1.1.4: handle content codings - - // in following scenarios we ignore compression support - // 1. compression support is disabled - // 2. HEAD request - // 3. no Content-Encoding header - // 4. no content response (204) - // 5. content not modified response (304) - if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) { - response = new Response(body, response_options); - resolve(response); - return; - } - - // For Node v6+ - // Be less strict when decoding compressed responses, since sometimes - // servers send slightly invalid responses that are still accepted - // by common browsers. - // Always using Z_SYNC_FLUSH is what cURL does. - const zlibOptions = { - flush: zlib__WEBPACK_IMPORTED_MODULE_4__.Z_SYNC_FLUSH, - finishFlush: zlib__WEBPACK_IMPORTED_MODULE_4__.Z_SYNC_FLUSH - }; - - // for gzip - if (codings == 'gzip' || codings == 'x-gzip') { - body = body.pipe(zlib__WEBPACK_IMPORTED_MODULE_4__.createGunzip(zlibOptions)); - response = new Response(body, response_options); - resolve(response); - return; - } - - // for deflate - if (codings == 'deflate' || codings == 'x-deflate') { - // handle the infamous raw deflate response from old servers - // a hack for old IIS and Apache servers - const raw = res.pipe(new PassThrough$1()); - raw.once('data', function (chunk) { - // see http://stackoverflow.com/questions/37519828 - if ((chunk[0] & 0x0F) === 0x08) { - body = body.pipe(zlib__WEBPACK_IMPORTED_MODULE_4__.createInflate()); - } else { - body = body.pipe(zlib__WEBPACK_IMPORTED_MODULE_4__.createInflateRaw()); - } - response = new Response(body, response_options); - resolve(response); - }); - return; - } - - // for br - if (codings == 'br' && typeof zlib__WEBPACK_IMPORTED_MODULE_4__.createBrotliDecompress === 'function') { - body = body.pipe(zlib__WEBPACK_IMPORTED_MODULE_4__.createBrotliDecompress()); - response = new Response(body, response_options); - resolve(response); - return; - } - - // otherwise, use response as-is - response = new Response(body, response_options); - resolve(response); - }); - - writeToStream(req, request); - }); -} -/** - * Redirect code matching - * - * @param Number code Status code - * @return Boolean - */ -fetch.isRedirect = function (code) { - return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; -}; - -// expose Promise -fetch.Promise = global.Promise; - -/* harmony default export */ __webpack_exports__["default"] = (fetch); - - - -/***/ }), - -/***/ "./src/extension.ts": -/*!**************************!*\ - !*** ./src/extension.ts ***! - \**************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -/** - * @author : Austin Ruby, Alex Chao, Ed Greenberg - * @function : activate extension - * @changelog : Ed Greenberg, November 5th, 2019, added flexible query file detection - * @changelog : Alex Chao, Nov. 5th-10th 2019... Lots of changes... server listener added - * - config file setup command made - * - config file option to allow for a longer time for the graphql server to startup - * ! I propose we add the PORT number to config file - * - updating variables in the event of changes in the config files - * @changelog : ## Austin? - * * */ -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -// eslint-disable-next-line import/no-unresolved -const vscode = __webpack_require__(/*! vscode */ "vscode"); -// only needed for creating the config file -const fs = __webpack_require__(/*! fs */ "fs"); -/* eslint-disable import/no-unresolved */ -const readFileSendReqAndWriteResponse = __webpack_require__(/*! ./modules/client/readFileSendReqAndWriteResponse */ "./src/modules/client/readFileSendReqAndWriteResponse.ts"); -const serverOn = __webpack_require__(/*! ./modules/server/serverOn */ "./src/modules/server/serverOn.ts"); -const serverOff = __webpack_require__(/*! ./modules/server/serverOff */ "./src/modules/server/serverOff.ts"); -// require in new function that checks for a running server -const checkForRunningServer = __webpack_require__(/*! ./modules/server/checkForRunningServer */ "./src/modules/server/checkForRunningServer.ts"); -// require in file that finds root directory -const findRootDirectory = __webpack_require__(/*! ./modules/client/findRootDirectory */ "./src/modules/client/findRootDirectory.ts"); -// require in file that returns entryPoint when given the root path -const parseConfigFile = __webpack_require__(/*! ./modules/client/parseConfigFile */ "./src/modules/client/parseConfigFile.ts"); -// require in file that finds port# -const findPortNumber = __webpack_require__(/*! ./modules/client/findPortNumber */ "./src/modules/client/findPortNumber.ts"); -// this method is called when your extension is activated -// your extension is activated the very first time the command is executed -function activate(context) { - // * These are some variables that I need to pass between different commands, so they're in - // * a higher scope - // this ChannelRef variable will be used to pass the output channel between separate function defs - // let graphQuillChannelRef: vscode.OutputChannel; - const gqChannel = vscode.window.createOutputChannel('GraphQuill'); - // a toggle variable that will is true when the server is on - let isOnToggle = false; - // a disposable variable to get rid of the save event listener - let saveListener; - // set rootPath and entryPoint to a string of the path to the server startup file (has app.listen) - const rootPath = findRootDirectory(); - // putting these variables in the global scope with the expectation that they will be set upon - // activating the extension. I'm moving them to be able to manage "live" changes - let entryPoint; - let allowServerTimeoutConfigSetting; - // set portNumber to a string. It is going to be set in the activation command - let portNumber; - // boolean to track if the server has been successfully turned on by the user - let serverTurnedOnByGraphQuill = false; - /** ********************************************************************************************** - * * The command must be defined in package.json under contributes/commands AND activation events - * Now provide the implementation of the command with registerCommand - * The commandId parameter must match the command field in package.json - * * This is the first GraphQuill option in the command palette for activating GraphQuill - *********************************************************************************************** */ - const disposableActivateGraphQuill = vscode.commands.registerCommand('extension.activateGraphQuill', () => __awaiter(this, void 0, void 0, function* () { - if (isOnToggle) { - // if server is already running, break out of function by returning null - console.log('Server is already running'); - vscode.window.showInformationMessage('GraphQuill is already active'); - return null; - } - // show output channel - gqChannel.show(true); - // parse the config file (this is important in case if there were any changes) - let parseResult = parseConfigFile(rootPath); - entryPoint = parseResult.entryPoint; - allowServerTimeoutConfigSetting = parseResult.allowServerTimeoutConfigSetting; - // if the entryPoint is falsey, break out of the function and tell the - // user to create a config file - if (!entryPoint) { - gqChannel.append('The config file was not found, please use the Create GraphQuill Config File Command to make one.'); - // break out of this execution context - return null; - } - // set the portNumber (in the higher scope so it can be used in the deactivate function) - portNumber = findPortNumber(entryPoint); - // Check ONCE if the port is open (also this does not need the third param) - // will resolve to a true or false value - const serverOnFromUser = yield checkForRunningServer(portNumber, true); - // console.log('--serverOnFromUser after once check is:', serverOnFromUser); - // trigger serverOn if the user does not already have the server running - if (!serverOnFromUser) { - // start up the user's server - serverOn(entryPoint); - // give user feedback that server is starting up - gqChannel.clear(); - gqChannel.append('The server is starting up...'); - // await this function that will return true or false based on if the server has been started - // false: if starting the server is longer than the time allotted in the config file (defaults - // to 3 seconds) - serverTurnedOnByGraphQuill = yield checkForRunningServer(portNumber, - // once setting is false, so the returned promise will only resolve when the server has - // started OR the timeout (next variable or 3sec) is reached - false, - // allowServerT.C.S. is either a time in milliseconds that defaults to 3000 - allowServerTimeoutConfigSetting); - // if it is false, that means there was an error starting the server - // notify the user & end the thread of execution - if (!serverTurnedOnByGraphQuill) { - // console.log('server is taking too long to startup'); - // give feedback to user that port didn't start (and the specified timeout config setting, - // defaults to 3 seconds) - gqChannel.clear(); - gqChannel.append(`The server is taking too long to startup (>${(allowServerTimeoutConfigSetting || 3000) / 1000} seconds).\nTo increase this time, update the "serverStartupTimeAllowed" setting in the graphquill.config.js file.`); - // break out, and just in case I'm going to try to kill the port if it did open - // otherwise we could get runaway node processes... - return setTimeout(() => serverOff(portNumber), 5000); - } - } - // if the server is on from either the user or graphquill, continue - // send first query & setup on save listener - if (serverOnFromUser || serverTurnedOnByGraphQuill) { - // update isOnToggle (refers to state of GraphQuill extension running or not) - isOnToggle = true; - // clear any other stuff off of the channel (e.g. previous error message) - gqChannel.clear(); - // get the fileName of the open file when the extension is FIRST fired - const currOpenEditorPath = vscode.window.activeTextEditor.document.fileName; - // send that request from the currentopeneditor - readFileSendReqAndWriteResponse(currOpenEditorPath, gqChannel, portNumber, rootPath); - // initialize the save listener here to clear the channel and resend new requests - saveListener = vscode.workspace.onDidSaveTextDocument((event) => { - // console.log('save event!!!', event); - // clear the graphQuill channel - gqChannel.clear(); - // re-parse the config file (in case the user made a change) - parseResult = parseConfigFile(rootPath); - entryPoint = parseResult.entryPoint; - allowServerTimeoutConfigSetting = parseResult.allowServerTimeoutConfigSetting; - if (!entryPoint) { - gqChannel.append('The config file was not found, please use the Create GraphQuill Config File Command to make one.'); - // break out of this execution context - return null; - } - // ! I really think we should add the port number to the config file to specify to the user - // ! That the port number SHUOLD not be changed... - // TODO this seems very redundant... but I'm blanking on how to make this dynamic - // TODO update if the user changes their server file... - // on each save... reparse for a portNumber in case if it was changed - portNumber = findPortNumber(entryPoint); - // send the filename and channel to the readFileSRAWR function - readFileSendReqAndWriteResponse(event.fileName, gqChannel, portNumber, rootPath); - // satisfying linter - return null; - }); - } - // to satisfy typescript linter... - return null; - })); - // push it to the subscriptions - context.subscriptions.push(disposableActivateGraphQuill); - /** ************************************************************************** - * * Second GraphQuill option in the command palette (Cmd Shift P) for deactivating graphquill - ************************************************************************** */ - const disposableDisableGraphQuill = vscode.commands.registerCommand('extension.deactivateGraphQuill', () => { - // console.log('--deactivate functionality triggered'); - // check isontoggle boolean - if (!isOnToggle) { - // server is already off - console.log('server is already off'); - vscode.window.showInformationMessage('GraphQuill is already off'); - return null; - } - // change toggle boolean - isOnToggle = false; - // dispose of the onDidSaveTextDocument event listener - if (saveListener) - saveListener.dispose(); - // close/hide GraphQuill channel - gqChannel.hide(); - gqChannel.clear(); - console.log('in deactivate, the server turned on by graphquill boolean is: ', serverTurnedOnByGraphQuill); - // invoke server off in this function - return setTimeout(() => (serverTurnedOnByGraphQuill && serverOff(portNumber)), 1); - }); - // push it into the subscriptions - context.subscriptions.push(disposableDisableGraphQuill); - /** ************************************************************************** - * * Third GraphQuill option in command palette to toggle graphquill extension - ************************************************************************** */ - const disposableToggleGraphQuill = vscode.commands.registerCommand('extension.toggleGraphQuill', () => { - // console.log('--toggle triggered!'); - // if the toggle boolean is false, then start the extension, otherwise end it... - if (!isOnToggle) { - // console.log('--toggle starting extension'); - // using the built in execute command and passing in a string of the command to trigger - vscode.commands.executeCommand('extension.activateGraphQuill'); - } - else { - // console.log('--toggle stopping the extension'); - vscode.commands.executeCommand('extension.deactivateGraphQuill'); - } - // just to make the linter happy... - return null; - }); - // push it to the subscriptions - context.subscriptions.push(disposableToggleGraphQuill); - /** ************************************************************************** - * * Fourth GraphQuill option in command palette to CREATE A CONFIG FILE - ************************************************************************** */ - const disposableCreateConfigFile = vscode.commands.registerCommand('extension.createConfigFile', () => { - // console.log('--config file setup triggered'); - // check if the root directory already has a graphquill.config.json file - const graphQuillConfigPath = `${rootPath}/graphquill.config.js`; - if (fs.existsSync(graphQuillConfigPath)) { - vscode.window.showInformationMessage(`A GraphQuill configuration file already exists at ${graphQuillConfigPath}`); - // exit out - return null; - } - // if it does not already exist, write to a new file - fs.writeFileSync(graphQuillConfigPath, - // string to populate the file with - 'module.exports = {\n // change "./server/index.js" to the relative path from the root directory to\n // the file that starts your server\n entry: \'./server/index.js\',\n\n // to increase the amount of time allowed for the server to startup, add a time\n // in milliseconds (integer) to the "serverStartupTimeAllowed"\n // serverStartupTimeAllowed: 5000,\n};\n', 'utf-8'); - // open the file in vscode - vscode.workspace.openTextDocument(graphQuillConfigPath).then((doc) => { - // apparently openTextDocument doesn't mean it's visible... - vscode.window.showTextDocument(doc); - }); - return null; - }); - // push it to the subscriptions - context.subscriptions.push(disposableCreateConfigFile); -} -exports.activate = activate; -// this method is called when your extension is deactivated -function deactivate() { - // deactivate must return a promise if cleanup operations are async. - // turn the server off if vscode is closed (tested via lsof in terminal) - // console.log('---deactive function called!!'); - // executing the deactivateGQ command seems to achieve a similar effect & is nice because it has - // access to the portNumber variable - vscode.commands.executeCommand('extension.deactivateGraphQuill'); - // return setTimeout(() => serverOff(3000), 1); -} -exports.deactivate = deactivate; - - -/***/ }), - -/***/ "./src/modules/client sync recursive ^.*$": -/*!**************************************!*\ - !*** ./src/modules/client sync ^.*$ ***! - \**************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var map = { - "./checkQueryBrackets": "./src/modules/client/checkQueryBrackets.ts", - "./checkQueryBrackets.ts": "./src/modules/client/checkQueryBrackets.ts", - "./extractQueries": "./src/modules/client/extractQueries.ts", - "./extractQueries.ts": "./src/modules/client/extractQueries.ts", - "./findPortNumber": "./src/modules/client/findPortNumber.ts", - "./findPortNumber.ts": "./src/modules/client/findPortNumber.ts", - "./findRootDirectory": "./src/modules/client/findRootDirectory.ts", - "./findRootDirectory.ts": "./src/modules/client/findRootDirectory.ts", - "./parseConfigFile": "./src/modules/client/parseConfigFile.ts", - "./parseConfigFile.ts": "./src/modules/client/parseConfigFile.ts", - "./parseQuery": "./src/modules/client/parseQuery.ts", - "./parseQuery.ts": "./src/modules/client/parseQuery.ts", - "./readFileSendReqAndWriteResponse": "./src/modules/client/readFileSendReqAndWriteResponse.ts", - "./readFileSendReqAndWriteResponse.ts": "./src/modules/client/readFileSendReqAndWriteResponse.ts" -}; - - -function webpackContext(req) { - var id = webpackContextResolve(req); - return __webpack_require__(id); -} -function webpackContextResolve(req) { - if(!__webpack_require__.o(map, req)) { - var e = new Error("Cannot find module '" + req + "'"); - e.code = 'MODULE_NOT_FOUND'; - throw e; - } - return map[req]; -} -webpackContext.keys = function webpackContextKeys() { - return Object.keys(map); -}; -webpackContext.resolve = webpackContextResolve; -module.exports = webpackContext; -webpackContext.id = "./src/modules/client sync recursive ^.*$"; - -/***/ }), - -/***/ "./src/modules/client/checkQueryBrackets.ts": -/*!**************************************************!*\ - !*** ./src/modules/client/checkQueryBrackets.ts ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -/** - * @module : parser.ts - * @author : Austin Ruby - * @function : parse string for instances of 'graphQuill' and extract content - * within parens immediately following each instance - * @changelog : Ed Greenberg, November 4th, 2019, rewrote to remove enum bug - * @changelog : ##WHOEVER CHANGES THE FILE, date, details - * * */ -// check if parens are balanced for parsed query strings -// if they're balanced, return original query string -// if they're not, return error message with imbalanced bracket/s -function checkQueryBrackets(queryString) { - const stack = []; // the core of the function... - // ...where detected opening brackets will be pushed in and pop off when the parser finds a mate - const validatedSoFar = []; // a running copy of the query - const openings = '{[('; // list of opening brackets - const closings = '}])'; // list of closing brackets - // eslint-disable-next-line no-restricted-syntax - for (const el of queryString) { // loop the query - if (openings.includes(el)) - stack.push(el); // if query el is opening bracket, add el to stack - if (closings.includes(el)) { - if (stack[stack.length - 1] === openings[closings.indexOf(el)]) - stack.pop(); - // if top of stack mates a new closing bracket, we are good, can reduce stack and keep going - else - break; - // if the top of stack does not mate closing bracket, we stop loop and skip to declaring error - } - validatedSoFar.push(el); // helping keep running copy of query - } - return stack.length === 0 // this will be zero if all query brackets have matches - ? queryString.slice(1, queryString.length - 1) // this substring is sent ahead if validated - : new Error(`${`The following character makes the query unbalanced: ${stack[stack.length - 1]}\n` - + 'The portion of the query that ran before the unbalance was detected was:\n'}${validatedSoFar.join('')}\n\n`); // ...otherwise, we report an error -} -module.exports = checkQueryBrackets; - - -/***/ }), - -/***/ "./src/modules/client/extractQueries.ts": -/*!**********************************************!*\ - !*** ./src/modules/client/extractQueries.ts ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -/* eslint-disable import/no-unresolved */ -// import { builtinModules } from 'module'; -Object.defineProperty(exports, "__esModule", { value: true }); -const parseQuery_1 = __webpack_require__(/*! ./parseQuery */ "./src/modules/client/parseQuery.ts"); -const useCheckQueryBrackets = __webpack_require__(/*! ./checkQueryBrackets */ "./src/modules/client/checkQueryBrackets.ts"); -// given file path, read file at path and parse for instances of 'graphQuill' -function extractQueries(string) { - // console.log(string); - // define text to search for in file - const gq = 'graphQuill'; - const queriesArr = []; - // iterate over string - for (let i = 0; i < string.length; i += 1) { - // if current slice of string is 'graphQuill' - // then push evaluated result of parseQueries passing in - // string sliced from current char to end into queriesArr - if (string.slice(i, i + gq.length) === gq) { - queriesArr.push(parseQuery_1.default(string.slice(i + gq.length))); - } - } - // after finding all instances of 'graphQuill' and parsing out query strings, - // map queries to new array full of either valid queries of errors - const validatedQueriesArr = queriesArr.map((queryString) => (useCheckQueryBrackets(queryString))); - // console.log('queriesArr: ', queriesArr); - // console.log('validatedQueriesArr: ', validatedQueriesArr); - return validatedQueriesArr; -} // given file path, read file at path and parse for instances of 'graphQuill' -module.exports = extractQueries; - - -/***/ }), - -/***/ "./src/modules/client/findPortNumber.ts": -/*!**********************************************!*\ - !*** ./src/modules/client/findPortNumber.ts ***! - \**********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -/** - * @author : Alex Chao - * @function : return the portNumber as a string - * @param: entryPoint - * @returns: portNumber as a string - * @changelog : ##WHOEVER CHANGES THE FILE, date, details - * * */ -const fs = __webpack_require__(/*! fs */ "fs"); -function findPortNumber(entryPoint) { - // this is a blocking (synchronous) call to the active file, populating 'data' as a string - const data = fs.readFileSync(entryPoint, 'utf8'); - // to stop a localhost, we must first identify a port, and 'app.listen(' is - // a special string in the active file that is likely to be adjacent to the port number - const lookup = data.search(/app.listen\(/); - // this next segment is edge case handling for if the port number - // is separated from the start parentheses by some number of spaces - let displace = 0; - while (data[lookup + displace + 11] === ' ') { - displace += 1; - } - // return the port number (accounting for the offsetting per the edge case) - return data.slice(lookup + 11 + displace, lookup + 15 + displace); -} -module.exports = findPortNumber; - - -/***/ }), - -/***/ "./src/modules/client/findRootDirectory.ts": -/*!*************************************************!*\ - !*** ./src/modules/client/findRootDirectory.ts ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -/** - * @author : Alex Chao Nov 7th, 2019. Modularized - * @function : return the root directory path in a string - * @param : none - * @returns : string of the root directory - * @changelog : ##WHOEVER CHANGES THE FILE, date, details - * * */ -Object.defineProperty(exports, "__esModule", { value: true }); -// eslint-disable-next-line import/no-unresolved -const vscode = __webpack_require__(/*! vscode */ "vscode"); -const path = __webpack_require__(/*! path */ "path"); -const fs = __webpack_require__(/*! fs */ "fs"); -function findRootDirectory() { - // identify entryPoint for the file that starts the server - // search for root directory by finding the package.json file - let root = path.dirname(vscode.window.activeTextEditor.document.fileName); - while (!fs.existsSync(`${root}/package.json`)) { - root = path.dirname(root); - } - return root; -} -module.exports = findRootDirectory; - - -/***/ }), - -/***/ "./src/modules/client/parseConfigFile.ts": -/*!***********************************************!*\ - !*** ./src/modules/client/parseConfigFile.ts ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -/* eslint-disable no-unused-vars */ -// these rules are disabled for the weird require that is inside of the function -/* eslint-disable global-require */ -/* eslint-disable import/no-dynamic-require */ -Object.defineProperty(exports, "__esModule", { value: true }); -// const path = require('path'); -const fs = __webpack_require__(/*! fs */ "fs"); -const path = __webpack_require__(/*! path */ "path"); -function parseConfigFile(rootPath) { - // find config file in root directory - const gqConfigFilePath = `${rootPath}/graphquill.config.js`; - // ! a cached version of this file will be stored here, so future invocations that are trying - // to get results of an updated config file, will appear to not have been changed - delete __webpack_require__.c[gqConfigFilePath]; - let entryPoint; - let allowServerTimeoutConfigSetting; - if (fs.existsSync(gqConfigFilePath)) { - // if the config file exists, require it in (will come in as an object) - const configObject = __webpack_require__("./src/modules/client sync recursive ^.*$")(`${gqConfigFilePath}`); - // console.log('config object in parseconfigfile.ts', configObject); - // set the entry point to the absolute path (root + relative entry path) - entryPoint = path.resolve(rootPath, configObject.entry); - // set the servertimeout config setting - allowServerTimeoutConfigSetting = configObject.serverStartupTimeAllowed; - } - else { - // default it to the current open editor if there is not a config file - entryPoint = ''; - // ! This will be handled in the outer extension.ts file to notify the user and break out of - // ! the thread of execution at the same time - // notify user that config file was not found and current file is being used as the entry point - // vscode.window.showInformationMessage('graphquill.config.js file was not found. - // Please use the Create GraphQuill Config File Command to create one'); - } - // return the array with the two results, to be destrucutred when the function is invoked - return { entryPoint, allowServerTimeoutConfigSetting }; -} -module.exports = parseConfigFile; - - -/***/ }), - -/***/ "./src/modules/client/parseQuery.ts": -/*!******************************************!*\ - !*** ./src/modules/client/parseQuery.ts ***! - \******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -/** - * @author : Austin Ruby - * @function : parse and validate query - * @changelog : Ed Greenberg, November 5th, 2019, created ability to return unbalanced parens - * @changelog : ##WHOEVER CHANGES THE FILE, date, details - * * */ -Object.defineProperty(exports, "__esModule", { value: true }); -// add characters to string while within parentheses -function parseQuery(input) { - let queryString = ''; // string to be checked for balanced parens - let passedQueryString = ''; // string to be passed along - let closer = false; // trip to prevent passed along string from overwriting - let openParensCount = 0; // balanced parens validation tool - let closeParensCount = 0; // balanced parens valaidation tool - let index = 0; // helps loop through input - const stack = []; // helps determine when query should be passed along - while (index < input.length) { // loop input - if (input[index] === '(') { // check open parens - openParensCount += 1; // increment relevant counter - stack.push(input[index]); // add to stack - } - else if (input[index] === ')') { // check closed parens - if (stack.length === 0) { // if stack is empty and we have a closed, we have a problem - return 'unbalanced parens'; - } - closeParensCount += 1; // increment relevant counter - stack.pop(); // closed parens eliminates open parens on stack - } - queryString += input[index]; // feed current character in loop to preliminary result string - if (stack.length === 0 && closer === false) { // first time we hit empty stack... - passedQueryString = queryString; // create result stack; - closer = true; - } - index += 1; - } - return openParensCount === closeParensCount ? passedQueryString : 'unbalanced parens'; -} -exports.default = parseQuery; - - -/***/ }), - -/***/ "./src/modules/client/readFileSendReqAndWriteResponse.ts": -/*!***************************************************************!*\ - !*** ./src/modules/client/readFileSendReqAndWriteResponse.ts ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -// for requiring in .js files -/* eslint-disable import/no-unresolved */ -Object.defineProperty(exports, "__esModule", { value: true }); -const fetch = __webpack_require__(/*! node-fetch */ "./node_modules/node-fetch/lib/index.mjs"); -const fs = __webpack_require__(/*! fs */ "fs"); -const extractQueries = __webpack_require__(/*! ./extractQueries */ "./src/modules/client/extractQueries.ts"); -// checkQueryBrackets used to be here -// parseQuery used to be here -// extractQueries was here -// parent function to read file, -// call helper functions to parse out query string, -// send request to GraphQL API, -// and return response to output channel -function readFileSendReqAndWriteResponse(filePath, channel, portNumber, rootPath) { - // console.log('inreadFile: ', filePath); - // parse the contents of the entire filePath file to a string - const copy = fs.readFileSync(filePath).toString(); - // check if the file is within the root directory, otherwise we don't want to inject the - // function defintion - if (filePath.includes(rootPath) && !copy.includes('function graphQuill')) { - const newFile = `function graphQuill() {}\n\n${copy}`; - fs.writeFileSync(filePath, newFile); - } - // read user's file - fs.readFile(filePath, (err, data) => { - if (err) { - console.log(err); - } - else { - // if no error, convert data to string and pass into gQParser to pull out query/ies - const result = extractQueries(data.toString()); - // send post request to API/graphql - setTimeout(() => { - // console.log('IN SET TIMEOUT'); - // handle multiple queries in file... - // the additional quotes need to be parsed off - const queriesWithoutQuotes = result.filter( - // callback to remove empty string queries (i.e. the function def of graphQuill) - (e) => (typeof e === 'string' && e.length)).map((query) => ( - // should all be strings... - typeof query === 'string' && query.slice(1, query.length - 1))); - console.log('--JUST THE QUERIES', queriesWithoutQuotes); - // TODO pair up the requests and responses. Right now the responses are coming in a random - // TODO order because of async fetches - // TODO MAKE THIS A PROMISE ALL? or does it not matter because the for loop will send off - // TODO all of the fetches simultaneously and just append responses on as they come in... - // console.log('query w/o quotes is', queryMinusQuotes); - queriesWithoutQuotes.forEach((query) => { - // send the fetch to the correct port (passed in as a variable) - fetch(`http://localhost:${portNumber}/graphql`, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ query }), - }) - .then((response) => response.json()) - .then((thing) => { - console.log('printed: ', thing); - // append any graphql response to the output channel - channel.append(`\n${JSON.stringify(thing, null, 2)}`); // may need to stringify to send - channel.show(true); - }) - .catch((error) => { - console.log('fetch catch error: ', error, typeof error, error.constructor.name); - // print any errors to the output channel - channel.append(`ERROR!!!\n${JSON.stringify(error, null, 2)}`); - }); - }); - // only append this string to the output channel once - channel.append('Responses are:'); - }, 1); // TODO BIG UX FIX NEEDED HERE - // then send response back to vscode output channel - // console.log('parsed queries are', result); - // TODO match these up with the correct queries when there are multiple within a single file - channel.append(`GraphQuill Queries are:\n${result.filter((e) => (typeof e === 'string' ? e.length : false))}\n`); - channel.show(true); - } - }); -} -module.exports = readFileSendReqAndWriteResponse; - - -/***/ }), - -/***/ "./src/modules/server/checkForRunningServer.ts": -/*!*****************************************************!*\ - !*** ./src/modules/server/checkForRunningServer.ts ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -/** - * @module : checkForRunningServer.ts - * @author : Alex Chao, Nov 7th, 2019 - * @function : uses child process and lsof to check if a port is currently running - * @param : portNumber, string - * @param : once: boolean, true if the function should check if the port is open right when the - * function is run. OR false if the function should wait for the server to start before resolving - * @param : allowServerTimeoutConfigSetting: number, user input from config file to determine how - * long to wait for the server to start. Defaults to 3000 (milliseconds) - * @returns : a boolean, true if the server has started, false if it has not started - * @changelog : ##WHOEVER CHANGES THE FILE, date, details - * * */ -// eslint-disable-next-line import/no-unresolved -// import * as vscode from 'vscode'; -// const path = require('path'); -// const fs = require('fs'); -const childProcess = __webpack_require__(/*! child_process */ "child_process"); -const checkForRunningServer = (portNumber, once, allowServerTimeoutConfigSetting = 3000) => { - console.log('CHECK FOR RUNNING SERVER IS RUNNINGGGGGG'); - // console.log(portNumber, once, allowServerTimeoutConfigSetting); - // moved this line into the serverOn file so that each time serverOn is called - // a new child process is started. This is critical to being able to toggle - // GraphQuill on and off - let portOpen = false; - let allTerminalText; - const bashTerminal = childProcess.spawn('bash'); - // next, we activate two terminal methods to give us - // feedback on whether we sucessfully used a child process - // note the Typescript (: any) used to handle unknown data inputs - bashTerminal.stdout.on('data', (data) => { - // console.log(`--stdout from terminal: ${data}`); - console.log('terminal has printed some data...'); - allTerminalText = data.toString(); - portOpen = allTerminalText.includes('node'); - // console.log('allterminal text', allTerminalText); - // console.log('---data type is', data.constructor.name); - }); - // log what the exit code is in the extension terminal - bashTerminal.on('exit', (code) => { - console.log(`checkForRunningServer child process exited with code ${code}`); - // console.log('--exit code type is', code.constructor.name); - }); - // just below is the real core of the function, the child process: - // checks if the port is active with the `lsof -i :${portNumber}\n` command - // IMPORTANT: code will not run without the '\n' component--the CLI needs this - return new Promise((resolve) => { - let numRuns = 0; - let timeoutId; - // A set interval callback that will write a command to the terminal every 200ms, then check - // if the portOpen boolean has been changed (it is actually changed in the on-data listener - // above). Promise will resolve when the portOpen variable is true - const intervalLsofToBash = setInterval(() => { - bashTerminal.stdin.write(`lsof -i :${portNumber}\n`); - // console.log('inside promise-- portOpen boolean', portOpen); - // console.log('inside promise-- allTerminalText', allTerminalText); - // if the port is open, resolve the promise, return some value... - if (portOpen) { - // clear set intervals - clearInterval(intervalLsofToBash); - // clear the timeoutId - if (timeoutId) - clearTimeout(timeoutId); - // end terminal session - bashTerminal.stdin.end(); - console.log('port is open!'); - // resolve promise - // return a confirmed status - resolve(true); - } - // if once param was set to true, we only want to check if the server is "immediately" on, so - // check if once is true, and numRuns is greater than one, then resolve the promise with the - // result of portOpen - if (once && numRuns > 1) { - console.log('---once conditional triggered, result is:', portOpen); - // clear set intervals - clearInterval(intervalLsofToBash); - // clear the timeoutId - if (timeoutId) - clearTimeout(timeoutId); - // end terminal session - bashTerminal.stdin.end(); - resolve(portOpen); - } - // increment numRuns for the once conditional test - numRuns += 1; - }, 200); // Run every 200ms - // default/base case to resolve promise if the server hasn't started in 3 seconds - // This means the server is either spinning up too slowly or there is an error in the user's - // server starting file. In either case we want to return false - if (!once) { - // only create this default timeout if this function was invoked with once === false - timeoutId = setTimeout(() => { - console.log('timeout of checkForRunningServer'); - // clear set intervals - clearInterval(intervalLsofToBash); - // end terminal session - bashTerminal.stdin.end(); - // resolve the promise - resolve(false); - }, allowServerTimeoutConfigSetting); // default allowed time is 3 sec. - } - }); -}; -module.exports = checkForRunningServer; - - -/***/ }), - -/***/ "./src/modules/server/serverOff.ts": -/*!*****************************************!*\ - !*** ./src/modules/server/serverOff.ts ***! - \*****************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -/** - * @module : serverOff.ts - * @author : Ed Greenberg - * @function : turn off server - * @changelog : Ed Greenberg, November 5th, 2019, rewrote to open port on server/index.js - * @changelog : ##WHOEVER CHANGES THE FILE, date, details - * * */ -Object.defineProperty(exports, "__esModule", { value: true }); -// eslint-disable-next-line import/no-unresolved -const vscode = __webpack_require__(/*! vscode */ "vscode"); -const fs = __webpack_require__(/*! fs */ "fs"); -const path = __webpack_require__(/*! path */ "path"); -const childProcess = __webpack_require__(/*! child_process */ "child_process"); -// spawn a new child process that will be used to close the open port -const serverOff = (portNumber) => { - console.log('in serveroff function file'); - // this one also had to be pulled into serverOff so that a new child process is started to - // kill the server port - const terminal2 = childProcess.spawn('bash'); - // we find the root directory by looking up from the active file - // ...until we detect a folder with package.json - let root = path.dirname(vscode.window.activeTextEditor.document.fileName); - while (!fs.existsSync(`${root}/package.json`)) { - root = path.dirname(root); - console.log('a root grows: ', root); - } - // const temp = vscode.window.activeTextEditor!.document.fileName; - // write any data/outputs from the terminal to the extension console - terminal2.stdout.on('data', (data) => { - console.log(`stdout: ${data}`); - }); - // on terminal exit, print the exit code - terminal2.on('exit', (code) => { - console.log(`terminal2 child process exited with code ${code}`); - }); - // // this is a blocking (synchronous) call to the active file, populating 'data' as a string - // const data = fs.readFileSync(`${root}/server/index.js`, 'utf8'); - // // to stop a localhost, we must first identify a port, and 'app.listen(' is - // // a special string in the active file that is likely to be adjacent to the port number - // const lookup = data.search(/app.listen\(/); - // // this next segment is edge case handling for if the port number - // // is separated from the start parentheses by some number of spaces - // let displace = 0; - // while (data[lookup + displace + 11] === ' ') { - // displace += 1; - // } - // // in target, we slice the port out of the array (offsetting as required by the edge case test) - // // eslint-disable-next-line no-unused-vars - // const target = data.slice(lookup + 11 + displace, lookup + 15 + displace); - // ? I don't think these need to be delayed... just kill the process - // in the core of our function, we run a special command that finds and kills the port specified - // setTimeout(() => { - // terminal2.stdin.write(`kill $(lsof -t -i:${target})\n`); - terminal2.stdin.write(`kill $(lsof -t -i:${portNumber})\n`); - terminal2.stdin.end(); - // }, 1); - vscode.window.showInformationMessage('GraphQuill has been turned off'); -}; -module.exports = serverOff; - - -/***/ }), - -/***/ "./src/modules/server/serverOn.ts": -/*!****************************************!*\ - !*** ./src/modules/server/serverOn.ts ***! - \****************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -/** - * @module : serverOn.ts - * @author : Ed Greenberg - * @function : turn on server - * @changelog : Ed Greenberg, November 5th, 2019, rewrote to open port on server/index.js - * @changelog : ##WHOEVER CHANGES THE FILE, date, details - * * */ -Object.defineProperty(exports, "__esModule", { value: true }); -// eslint-disable-next-line import/no-unresolved -const vscode = __webpack_require__(/*! vscode */ "vscode"); -// const path = require('path'); -// const fs = require('fs'); -const childProcess = __webpack_require__(/*! child_process */ "child_process"); -const serverOn = (entryPoint) => { - // moved this line into the serverOn file so that each time serverOn is called - // a new child process is started. This is critical to being able to toggle - // GraphQuill on and off - const terminal = childProcess.spawn('bash'); - // we find the root directory by looking up from the active file - // ...until we detect a folder with package.json - // let root = path.dirname(vscode.window.activeTextEditor!.document.fileName); - // while (!fs.existsSync(`${root}/package.json`)) { - // root = path.dirname(root); - // console.log('a root grows: ', root); - // } - // next, we activate two terminal methods to give us - // feedback on whether we sucessfully used a child process - // note the Typescript (: any) used to handle unknown data inputs - terminal.stdout.on('data', (data) => { - // todo add validation, if there is an error that is logged here, it's coming from node - // todo and should be piped to the channel as well - // todo this may require passing in the channel to the serverOn function... - console.log(`stdout from terminal: ${data}`); - // console.log('---data type is', data.constructor.name); - }); - // log what the exit code is in the extension terminal - terminal.on('exit', (code) => { - console.log(`child process exited with code ${code}`); - // console.log('--exit code type is', code.constructor.name); - }); - // just below is the real core of the function, the child process: - // we write to a new terminal to run the index.js file in the folder specified by base - // IMPORTANT: code will not run without the '\n' component--the CLI needs this - // explicit return command - return new Promise((resolve) => { - // console.log('inside promise'); - setTimeout(() => { - // console.log('root: ', root); - console.log('Sending stdin (node command) to terminal'); - // this seems to take some time to spin up the server and - // throws an error with the timing of a fetch - // terminal.stdin.write(`node ${root}/server/index.js\n`); - terminal.stdin.write(`node ${entryPoint}\n`); - console.log('Ending terminal session'); - terminal.stdin.end(); - // resolve promise - resolve(); - console.log('just resolved'); - vscode.window.showInformationMessage('GraphQuill Activated'); - }, 1); - }); - // this message pops up to the user upon completion of the command -}; -module.exports = serverOn; - - -/***/ }), - -/***/ "child_process": -/*!********************************!*\ - !*** external "child_process" ***! - \********************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = require("child_process"); - -/***/ }), - -/***/ "fs": -/*!*********************!*\ - !*** external "fs" ***! - \*********************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = require("fs"); - -/***/ }), - -/***/ "http": -/*!***********************!*\ - !*** external "http" ***! - \***********************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = require("http"); - -/***/ }), - -/***/ "https": -/*!************************!*\ - !*** external "https" ***! - \************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = require("https"); - -/***/ }), - -/***/ "path": -/*!***********************!*\ - !*** external "path" ***! - \***********************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = require("path"); - -/***/ }), - -/***/ "stream": -/*!*************************!*\ - !*** external "stream" ***! - \*************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = require("stream"); - -/***/ }), - -/***/ "url": -/*!**********************!*\ - !*** external "url" ***! - \**********************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = require("url"); - -/***/ }), - -/***/ "vscode": -/*!*************************!*\ - !*** external "vscode" ***! - \*************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = require("vscode"); - -/***/ }), - -/***/ "zlib": -/*!***********************!*\ - !*** external "zlib" ***! - \***********************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = require("zlib"); - -/***/ }) - -/******/ }); +module.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=16)}([function(e,t){e.exports=require("stream")},function(e,t){e.exports=require("zlib")},function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("vscode")},function(e,t){e.exports=require("url")},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(17),o=n(2),s=n(6);e.exports=function(e,t,n,i){const a=o.readFileSync(e).toString();if(e.includes(i)&&!a.includes("function graphQuill")){const t=`function graphQuill() {}\n\n${a}`;o.writeFileSync(e,t)}o.readFile(e,(e,o)=>{if(e)console.log(e);else{const e=s(o.toString());setTimeout(()=>{const o=e.filter(e=>"string"==typeof e&&e.length).map(e=>"string"==typeof e&&e.slice(1,e.length-1));console.log("--JUST THE QUERIES",o),o.forEach(e=>{r(`http://localhost:${n}/graphql`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:e})}).then(e=>e.json()).then(e=>{console.log("printed: ",e),t.append(`\n${JSON.stringify(e,null,2)}`),t.show(!0)}).catch(e=>{console.log("fetch catch error: ",e,typeof e,e.constructor.name),t.append(`ERROR!!!\n${JSON.stringify(e,null,2)}`)})}),t.append("Responses are:")},1),t.append(`GraphQuill Queries are:\n${e.filter(e=>"string"==typeof e&&e.length)}\n`),t.show(!0)}})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(7),o=n(8);e.exports=function(e){const t="graphQuill",n=[];for(let o=0;oo(e))}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){let t="",n="",r=!1,o=0,s=0,i=0;const a=[];for(;ir(this,void 0,void 0,(function*(){if(p)return console.log("Server is already running"),o.window.showInformationMessage("GraphQuill is already active"),null;t.show(!0);let e=f(h);if(m=e.entryPoint,y=e.allowServerTimeoutConfigSetting,!m)return t.append("The config file was not found, please use the Create GraphQuill Config File Command to make one."),null;g=d(m);const r=yield l(g,!0);if(!(r||(a(m),t.clear(),t.append("The server is starting up..."),b=yield l(g,!1,y))))return t.clear(),t.append(`The server is taking too long to startup (>${(y||3e3)/1e3} seconds).\nTo increase this time, update the "serverStartupTimeAllowed" setting in the graphquill.config.js file.`),setTimeout(()=>u(g),5e3);if(r||b){p=!0,t.clear();const r=o.window.activeTextEditor.document.fileName;i(r,t,g,h),n=o.workspace.onDidSaveTextDocument(n=>(t.clear(),e=f(h),m=e.entryPoint,y=e.allowServerTimeoutConfigSetting,m?(g=d(m),i(n.fileName,t,g,h),null):(t.append("The config file was not found, please use the Create GraphQuill Config File Command to make one."),null)))}return null})));e.subscriptions.push(w);const v=o.commands.registerCommand("extension.deactivateGraphQuill",()=>p?(p=!1,n&&n.dispose(),t.hide(),t.clear(),console.log("in deactivate, the server turned on by graphquill boolean is: ",b),setTimeout(()=>b&&u(g),1)):(console.log("server is already off"),o.window.showInformationMessage("GraphQuill is already off"),null));e.subscriptions.push(v);const x=o.commands.registerCommand("extension.toggleGraphQuill",()=>(p?o.commands.executeCommand("extension.deactivateGraphQuill"):o.commands.executeCommand("extension.activateGraphQuill"),null));e.subscriptions.push(x);const S=o.commands.registerCommand("extension.createConfigFile",()=>{const e=`${h}/graphquill.config.js`;return s.existsSync(e)?(o.window.showInformationMessage(`A GraphQuill configuration file already exists at ${e}`),null):(s.writeFileSync(e,'module.exports = {\n // change "./server/index.js" to the relative path from the root directory to\n // the file that starts your server\n entry: \'./server/index.js\',\n\n // to increase the amount of time allowed for the server to startup, add a time\n // in milliseconds (integer) to the "serverStartupTimeAllowed"\n // serverStartupTimeAllowed: 5000,\n};\n',"utf-8"),o.workspace.openTextDocument(e).then(e=>{o.window.showTextDocument(e)}),null)});e.subscriptions.push(S)},t.deactivate=function(){o.commands.executeCommand("extension.deactivateGraphQuill")}},function(e,t,n){"use strict";n.r(t),n.d(t,"Headers",(function(){return C})),n.d(t,"Request",(function(){return I})),n.d(t,"Response",(function(){return F})),n.d(t,"FetchError",(function(){return d}));var r=n(0),o=n(14),s=n(4),i=n(15),a=n(1);const u=r.Readable,l=Symbol("buffer"),c=Symbol("type");class f{constructor(){this[c]="";const e=arguments[0],t=arguments[1],n=[];let r=0;if(e){const t=e,o=Number(t.length);for(let e=0;e1&&void 0!==arguments[1]?arguments[1]:{},o=n.size;let s=void 0===o?0:o;var i=n.timeout;let a=void 0===i?0:i;null==e?e=null:b(e)?e=Buffer.from(e.toString()):w(e)||Buffer.isBuffer(e)||("[object ArrayBuffer]"===Object.prototype.toString.call(e)?e=Buffer.from(e):ArrayBuffer.isView(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):e instanceof r||(e=Buffer.from(String(e)))),this[h]={body:e,disturbed:!1,error:null},this.size=s,this.timeout=a,e instanceof r&&e.on("error",(function(e){const n="AbortError"===e.name?e:new d(`Invalid response body while trying to fetch ${t.url}: ${e.message}`,"system",e);t[h].error=n}))}function g(){var e=this;if(this[h].disturbed)return y.Promise.reject(new TypeError(`body used already for: ${this.url}`));if(this[h].disturbed=!0,this[h].error)return y.Promise.reject(this[h].error);let t=this.body;if(null===t)return y.Promise.resolve(Buffer.alloc(0));if(w(t)&&(t=t.stream()),Buffer.isBuffer(t))return y.Promise.resolve(t);if(!(t instanceof r))return y.Promise.resolve(Buffer.alloc(0));let n=[],o=0,s=!1;return new y.Promise((function(r,i){let a;e.timeout&&(a=setTimeout((function(){s=!0,i(new d(`Response timeout while trying to fetch ${e.url} (over ${e.timeout}ms)`,"body-timeout"))}),e.timeout)),t.on("error",(function(t){"AbortError"===t.name?(s=!0,i(t)):i(new d(`Invalid response body while trying to fetch ${e.url}: ${t.message}`,"system",t))})),t.on("data",(function(t){if(!s&&null!==t){if(e.size&&o+t.length>e.size)return s=!0,void i(new d(`content size at ${e.url} over limit: ${e.size}`,"max-size"));o+=t.length,n.push(t)}})),t.on("end",(function(){if(!s){clearTimeout(a);try{r(Buffer.concat(n,o))}catch(t){i(new d(`Could not create Buffer from response body for ${e.url}: ${t.message}`,"system",t))}}}))}))}function b(e){return"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&("URLSearchParams"===e.constructor.name||"[object URLSearchParams]"===Object.prototype.toString.call(e)||"function"==typeof e.sort)}function w(e){return"object"==typeof e&&"function"==typeof e.arrayBuffer&&"string"==typeof e.type&&"function"==typeof e.stream&&"function"==typeof e.constructor&&"string"==typeof e.constructor.name&&/^(Blob|File)$/.test(e.constructor.name)&&/^(Blob|File)$/.test(e[Symbol.toStringTag])}function v(e){let t,n,o=e.body;if(e.bodyUsed)throw new Error("cannot clone body after it is used");return o instanceof r&&"function"!=typeof o.getBoundary&&(t=new m,n=new m,o.pipe(t),o.pipe(n),e[h].body=t,o=n),o}function x(e){return null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":b(e)?"application/x-www-form-urlencoded;charset=UTF-8":w(e)?e.type||null:Buffer.isBuffer(e)?null:"[object ArrayBuffer]"===Object.prototype.toString.call(e)?null:ArrayBuffer.isView(e)?null:"function"==typeof e.getBoundary?`multipart/form-data;boundary=${e.getBoundary()}`:e instanceof r?null:"text/plain;charset=UTF-8"}function S(e){const t=e.body;return null===t?0:w(t)?t.size:Buffer.isBuffer(t)?t.length:t&&"function"==typeof t.getLengthSync&&(t._lengthRetrievers&&0==t._lengthRetrievers.length||t.hasKnownLength&&t.hasKnownLength())?t.getLengthSync():null}y.prototype={get body(){return this[h].body},get bodyUsed(){return this[h].disturbed},arrayBuffer(){return g.call(this).then((function(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}))},blob(){let e=this.headers&&this.headers.get("content-type")||"";return g.call(this).then((function(t){return Object.assign(new f([],{type:e.toLowerCase()}),{[l]:t})}))},json(){var e=this;return g.call(this).then((function(t){try{return JSON.parse(t.toString())}catch(t){return y.Promise.reject(new d(`invalid json response body at ${e.url} reason: ${t.message}`,"invalid-json"))}}))},text(){return g.call(this).then((function(e){return e.toString()}))},buffer(){return g.call(this)},textConverted(){var e=this;return g.call(this).then((function(t){return function(e,t){if("function"!=typeof p)throw new Error("The package `encoding` must be installed to use the textConverted() function");const n=t.get("content-type");let r,o,s="utf-8";n&&(r=/charset=([^;]*)/i.exec(n));o=e.slice(0,1024).toString(),!r&&o&&(r=/0&&void 0!==arguments[0]?arguments[0]:void 0;if(this[$]=Object.create(null),e instanceof C){const t=e.raw(),n=Object.keys(t);for(const e of n)for(const n of t[e])this.append(e,n)}else if(null==e);else{if("object"!=typeof e)throw new TypeError("Provided initializer must be an object");{const t=e[Symbol.iterator];if(null!=t){if("function"!=typeof t)throw new TypeError("Header pairs must be iterable");const n=[];for(const t of e){if("object"!=typeof t||"function"!=typeof t[Symbol.iterator])throw new TypeError("Each header pair must be iterable");n.push(Array.from(t))}for(const e of n){if(2!==e.length)throw new TypeError("Each header pair must be a name/value tuple");this.append(e[0],e[1])}}else for(const t of Object.keys(e)){const n=e[t];this.append(t,n)}}}}get(e){O(e=`${e}`);const t=E(this[$],e);return void 0===t?null:this[$][t].join(", ")}forEach(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,n=B(this),r=0;for(;r1&&void 0!==arguments[1]?arguments[1]:"key+value";return Object.keys(e[$]).sort().map("key"===t?function(e){return e.toLowerCase()}:"value"===t?function(t){return e[$][t].join(", ")}:function(t){return[t.toLowerCase(),e[$][t].join(", ")]})}C.prototype.entries=C.prototype[Symbol.iterator],Object.defineProperty(C.prototype,Symbol.toStringTag,{value:"Headers",writable:!1,enumerable:!1,configurable:!0}),Object.defineProperties(C.prototype,{get:{enumerable:!0},forEach:{enumerable:!0},set:{enumerable:!0},append:{enumerable:!0},has:{enumerable:!0},delete:{enumerable:!0},keys:{enumerable:!0},values:{enumerable:!0},entries:{enumerable:!0}});const k=Symbol("internal");function R(e,t){const n=Object.create(_);return n[k]={target:e,kind:t,index:0},n}const _=Object.setPrototypeOf({next(){if(!this||Object.getPrototypeOf(this)!==_)throw new TypeError("Value of `this` is not a HeadersIterator");var e=this[k];const t=e.target,n=e.kind,r=e.index,o=B(t,n);return r>=o.length?{value:void 0,done:!0}:(this[k].index=r+1,{value:o[r],done:!1})}},Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));function A(e){const t=Object.assign({__proto__:null},e[$]),n=E(e[$],"Host");return void 0!==n&&(t[n]=t[n][0]),t}Object.defineProperty(_,Symbol.toStringTag,{value:"HeadersIterator",writable:!1,enumerable:!1,configurable:!0});const q=Symbol("Response internals"),L=o.STATUS_CODES;class F{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};y.call(this,e,t);const n=t.status||200,r=new C(t.headers);if(null!=e&&!r.has("Content-Type")){const t=x(e);t&&r.append("Content-Type",t)}this[q]={url:t.url,status:n,statusText:t.statusText||L[n],headers:r,counter:t.counter}}get url(){return this[q].url||""}get status(){return this[q].status}get ok(){return this[q].status>=200&&this[q].status<300}get redirected(){return this[q].counter>0}get statusText(){return this[q].statusText}get headers(){return this[q].headers}clone(){return new F(v(this),{url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected})}}y.mixIn(F.prototype),Object.defineProperties(F.prototype,{url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}}),Object.defineProperty(F.prototype,Symbol.toStringTag,{value:"Response",writable:!1,enumerable:!1,configurable:!0});const G=Symbol("Request internals"),Q=s.parse,U=s.format,M="destroy"in r.Readable.prototype;function z(e){return"object"==typeof e&&"object"==typeof e[G]}class I{constructor(e){let t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};z(e)?t=Q(e.url):(t=e&&e.href?Q(e.href):Q(`${e}`),e={});let r=n.method||e.method||"GET";if(r=r.toUpperCase(),(null!=n.body||z(e)&&null!==e.body)&&("GET"===r||"HEAD"===r))throw new TypeError("Request with GET/HEAD method cannot have body");let o=null!=n.body?n.body:z(e)&&null!==e.body?v(e):null;y.call(this,o,{timeout:n.timeout||e.timeout||0,size:n.size||e.size||0});const s=new C(n.headers||e.headers||{});if(null!=o&&!s.has("Content-Type")){const e=x(o);e&&s.append("Content-Type",e)}let i=z(e)?e.signal:null;if("signal"in n&&(i=n.signal),null!=i&&!function(e){const t=e&&"object"==typeof e&&Object.getPrototypeOf(e);return!(!t||"AbortSignal"!==t.constructor.name)}(i))throw new TypeError("Expected signal to be an instanceof AbortSignal");this[G]={method:r,redirect:n.redirect||e.redirect||"follow",headers:s,parsedURL:t,signal:i},this.follow=void 0!==n.follow?n.follow:void 0!==e.follow?e.follow:20,this.compress=void 0!==n.compress?n.compress:void 0===e.compress||e.compress,this.counter=n.counter||e.counter||0,this.agent=n.agent||e.agent}get method(){return this[G].method}get url(){return U(this[G].parsedURL)}get headers(){return this[G].headers}get redirect(){return this[G].redirect}get signal(){return this[G].signal}clone(){return new I(this)}}function N(e){Error.call(this,e),this.type="aborted",this.message=e,Error.captureStackTrace(this,this.constructor)}y.mixIn(I.prototype),Object.defineProperty(I.prototype,Symbol.toStringTag,{value:"Request",writable:!1,enumerable:!1,configurable:!0}),Object.defineProperties(I.prototype,{method:{enumerable:!0},url:{enumerable:!0},headers:{enumerable:!0},redirect:{enumerable:!0},clone:{enumerable:!0},signal:{enumerable:!0}}),N.prototype=Object.create(Error.prototype),N.prototype.constructor=N,N.prototype.name="AbortError";const H=r.PassThrough,D=s.resolve;function J(e,t){if(!J.Promise)throw new Error("native promise missing, set fetch.Promise to your favorite alternative");return y.Promise=J.Promise,new J.Promise((function(n,s){const u=new I(e,t),l=function(e){const t=e[G].parsedURL,n=new C(e[G].headers);if(n.has("Accept")||n.set("Accept","*/*"),!t.protocol||!t.hostname)throw new TypeError("Only absolute URLs are supported");if(!/^https?:$/.test(t.protocol))throw new TypeError("Only HTTP(S) protocols are supported");if(e.signal&&e.body instanceof r.Readable&&!M)throw new Error("Cancellation of streamed requests with AbortSignal is not supported in node < 8");let o=null;if(null==e.body&&/^(POST|PUT)$/i.test(e.method)&&(o="0"),null!=e.body){const t=S(e);"number"==typeof t&&(o=String(t))}o&&n.set("Content-Length",o),n.has("User-Agent")||n.set("User-Agent","node-fetch/1.0 (+https://github.com/bitinn/node-fetch)"),e.compress&&!n.has("Accept-Encoding")&&n.set("Accept-Encoding","gzip,deflate");let s=e.agent;return"function"==typeof s&&(s=s(t)),n.has("Connection")||s||n.set("Connection","close"),Object.assign({},t,{method:e.method,headers:A(n),agent:s})}(u),c=("https:"===l.protocol?i:o).request,f=u.signal;let p=null;const h=function(){let e=new N("The user aborted a request.");s(e),u.body&&u.body instanceof r.Readable&&u.body.destroy(e),p&&p.body&&p.body.emit("error",e)};if(f&&f.aborted)return void h();const m=function(){h(),b()},y=c(l);let g;function b(){y.abort(),f&&f.removeEventListener("abort",m),clearTimeout(g)}f&&f.addEventListener("abort",m),u.timeout&&y.once("socket",(function(e){g=setTimeout((function(){s(new d(`network timeout at: ${u.url}`,"request-timeout")),b()}),u.timeout)})),y.on("error",(function(e){s(new d(`request to ${u.url} failed, reason: ${e.message}`,"system",e)),b()})),y.on("response",(function(e){clearTimeout(g);const t=function(e){const t=new C;for(const n of Object.keys(e))if(!T.test(n))if(Array.isArray(e[n]))for(const r of e[n])j.test(r)||(void 0===t[$][n]?t[$][n]=[r]:t[$][n].push(r));else j.test(e[n])||(t[$][n]=[e[n]]);return t}(e.headers);if(J.isRedirect(e.statusCode)){const r=t.get("Location"),o=null===r?null:D(u.url,r);switch(u.redirect){case"error":return s(new d(`redirect mode is set to error: ${u.url}`,"no-redirect")),void b();case"manual":if(null!==o)try{t.set("Location",o)}catch(e){s(e)}break;case"follow":if(null===o)break;if(u.counter>=u.follow)return s(new d(`maximum redirect reached at: ${u.url}`,"max-redirect")),void b();const r={headers:new C(u.headers),follow:u.follow,counter:u.counter+1,agent:u.agent,compress:u.compress,method:u.method,body:u.body,signal:u.signal,timeout:u.timeout};return 303!==e.statusCode&&u.body&&null===S(u)?(s(new d("Cannot follow redirect with body being a readable stream","unsupported-redirect")),void b()):(303!==e.statusCode&&(301!==e.statusCode&&302!==e.statusCode||"POST"!==u.method)||(r.method="GET",r.body=void 0,r.headers.delete("content-length")),n(J(new I(o,r))),void b())}}e.once("end",(function(){f&&f.removeEventListener("abort",m)}));let r=e.pipe(new H);const o={url:u.url,status:e.statusCode,statusText:e.statusMessage,headers:t,size:u.size,timeout:u.timeout,counter:u.counter},i=t.get("Content-Encoding");if(!u.compress||"HEAD"===u.method||null===i||204===e.statusCode||304===e.statusCode)return p=new F(r,o),void n(p);const l={flush:a.Z_SYNC_FLUSH,finishFlush:a.Z_SYNC_FLUSH};if("gzip"==i||"x-gzip"==i)return r=r.pipe(a.createGunzip(l)),p=new F(r,o),void n(p);if("deflate"!=i&&"x-deflate"!=i){if("br"==i&&"function"==typeof a.createBrotliDecompress)return r=r.pipe(a.createBrotliDecompress()),p=new F(r,o),void n(p);p=new F(r,o),n(p)}else{e.pipe(new H).once("data",(function(e){r=8==(15&e[0])?r.pipe(a.createInflate()):r.pipe(a.createInflateRaw()),p=new F(r,o),n(p)}))}})),function(e,t){const n=t.body;null===n?e.end():w(n)?n.stream().pipe(e):Buffer.isBuffer(n)?(e.write(n),e.end()):n.pipe(e)}(y,u)}))}J.isRedirect=function(e){return 301===e||302===e||303===e||307===e||308===e},J.Promise=global.Promise,t.default=J},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(3),o=n(9);e.exports=e=>{const t=o.spawn("bash");return t.stdout.on("data",e=>{console.log(`stdout from terminal: ${e}`)}),t.on("exit",e=>{console.log(`child process exited with code ${e}`)}),new Promise(n=>{setTimeout(()=>{console.log("Sending stdin (node command) to terminal"),t.stdin.write(`node ${e}\n`),console.log("Ending terminal session"),t.stdin.end(),n(),console.log("just resolved"),r.window.showInformationMessage("GraphQuill Activated")},1)})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(3),o=n(2),s=n(10),i=n(9);e.exports=e=>{console.log("in serveroff function file");const t=i.spawn("bash");let n=s.dirname(r.window.activeTextEditor.document.fileName);for(;!o.existsSync(`${n}/package.json`);)n=s.dirname(n),console.log("a root grows: ",n);t.stdout.on("data",e=>{console.log(`stdout: ${e}`)}),t.on("exit",e=>{console.log(`terminal2 child process exited with code ${e}`)}),t.stdin.write(`kill $(lsof -t -i:${e})\n`),t.stdin.end(),r.window.showInformationMessage("GraphQuill has been turned off")}},function(e,t,n){"use strict";const r=n(9);e.exports=(e,t,n=3e3)=>{console.log("CHECK FOR RUNNING SERVER IS RUNNINGGGGGG");let o,s=!1;const i=r.spawn("bash");return i.stdout.on("data",e=>{console.log("terminal has printed some data..."),o=e.toString(),s=o.includes("node")}),i.on("exit",e=>{console.log(`checkForRunningServer child process exited with code ${e}`)}),new Promise(r=>{let o,a=0;const u=setInterval(()=>{i.stdin.write(`lsof -i :${e}\n`),s&&(clearInterval(u),o&&clearTimeout(o),i.stdin.end(),console.log("port is open!"),r(!0)),t&&a>1&&(console.log("---once conditional triggered, result is:",s),clearInterval(u),o&&clearTimeout(o),i.stdin.end(),r(s)),a+=1},200);t||(o=setTimeout(()=>{console.log("timeout of checkForRunningServer"),clearInterval(u),i.stdin.end(),r(!1)},n))})}},function(e,t,n){var r={"./checkQueryBrackets":8,"./checkQueryBrackets.ts":8,"./extractQueries":6,"./extractQueries.ts":6,"./findPortNumber":13,"./findPortNumber.ts":13,"./findRootDirectory":11,"./findRootDirectory.ts":11,"./parseConfigFile":12,"./parseConfigFile.ts":12,"./parseQuery":7,"./parseQuery.ts":7,"./readFileSendReqAndWriteResponse":5,"./readFileSendReqAndWriteResponse.ts":5};function o(e){var t=s(e);return n(t)}function s(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=s,e.exports=o,o.id=21}]); //# sourceMappingURL=extension.js.map \ No newline at end of file diff --git a/dist/extension.js.map b/dist/extension.js.map index 10e19a4..8b07d37 100644 --- a/dist/extension.js.map +++ b/dist/extension.js.map @@ -1 +1 @@ -{"version":3,"sources":["../webpack/bootstrap",".././node_modules/node-fetch/lib/index.mjs",".././src/extension.ts",".././src/modules/client sync ^.*$",".././src/modules/client/checkQueryBrackets.ts",".././src/modules/client/extractQueries.ts",".././src/modules/client/findPortNumber.ts",".././src/modules/client/findRootDirectory.ts",".././src/modules/client/parseConfigFile.ts",".././src/modules/client/parseQuery.ts",".././src/modules/client/readFileSendReqAndWriteResponse.ts",".././src/modules/server/checkForRunningServer.ts",".././src/modules/server/serverOff.ts",".././src/modules/server/serverOn.ts","../external \"child_process\"","../external \"fs\"","../external \"http\"","../external \"https\"","../external \"path\"","../external \"stream\"","../external \"url\"","../external \"vscode\"","../external \"zlib\""],"names":[],"mappings":";;QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4B;AACJ;AACF;AACI;AACF;;AAExB;;AAEA;AACA,iBAAiB,mCAAM;;AAEvB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;AACA;;AAEA;AACA,QAAQ,mBAAmB;AAC3B,QAAQ,mBAAmB;AAC3B,SAAS;AACT,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA,oBAAoB,mCAAM;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kFAAkF;AAClF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE,yBAAyB,kCAAkC;AAC7D;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE,0BAA0B,mCAAM,GAAG;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,mCAAM;AAC3B;AACA,iHAAiH,UAAU,IAAI,YAAY;AAC3I;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ,+EAA+E,WAAW,WAAW,YAAY;AACjH;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,QAAQ,mBAAmB;AAC3B,YAAY,mBAAmB;AAC/B,eAAe,mBAAmB;AAClC,QAAQ,mBAAmB;AAC3B,QAAQ,mBAAmB;AAC3B,QAAQ;AACR,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qEAAqE,SAAS;AAC9E;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,mCAAM;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,oEAAoE,WAAW,SAAS,eAAe;AACvG,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,yEAAyE,WAAW,IAAI,YAAY;AACpG;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA,6CAA6C,WAAW,eAAe,YAAY;AACnF;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,IAAI;AACJ;AACA,4EAA4E,WAAW,IAAI,YAAY;AACvG;AACA,GAAG;AACH,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAY,EAAE;AACd,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,mCAAM;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,qBAAqB;AACrB,EAAE;AACF;AACA,4CAA4C;AAC5C,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA,8BAA8B,WAAW,mBAAmB;AAC5D,EAAE,0BAA0B,mCAAM;AAClC;AACA;AACA;AACA,EAAE;AACF;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,WAAW,KAAK;AAChB;AACA,yBAAyB,KAAK;AAC9B;AACA;;AAEA;AACA,YAAY,MAAM;AAClB;AACA,yBAAyB,MAAM;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,OAAO,mBAAmB;AAC1B,WAAW,mBAAmB;AAC9B,OAAO,mBAAmB;AAC1B,UAAU,mBAAmB;AAC7B,OAAO,mBAAmB;AAC1B,UAAU,mBAAmB;AAC7B,QAAQ,mBAAmB;AAC3B,UAAU,mBAAmB;AAC7B,WAAW;AACX,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA,EAAE;AACF;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAkB;;AAE9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,qBAAqB,iCAAI;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA,OAAO,mBAAmB;AAC1B,UAAU,mBAAmB;AAC7B,MAAM,mBAAmB;AACzB,cAAc,mBAAmB;AACjC,cAAc,mBAAmB;AACjC,WAAW,mBAAmB;AAC9B,SAAS;AACT,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA,kBAAkB,gCAAG;AACrB,mBAAmB,gCAAG;;AAEtB,gDAAgD,mCAAM;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA,IAAI;AACJ;AACA,6BAA6B,MAAM;AACnC;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH,iEAAiE;;AAEjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,UAAU,mBAAmB;AAC7B,OAAO,mBAAmB;AAC1B,WAAW,mBAAmB;AAC9B,YAAY,mBAAmB;AAC/B,SAAS,mBAAmB;AAC5B,UAAU;AACV,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+CAA+C,mCAAM;AACrD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,wBAAwB;AACxB;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB,mCAAM;AAC5B,oBAAoB,gCAAG;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gDAAgD,kCAAK,GAAG,iCAAI;AAC5D;;AAEA;;AAEA;AACA;AACA;AACA,+CAA+C,mCAAM;AACrD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kDAAkD,YAAY;AAC9D;AACA,KAAK;AACL,IAAI;AACJ;;AAEA;AACA,uCAAuC,YAAY,mBAAmB,YAAY;AAClF;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,8DAA8D,YAAY;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6DAA6D,YAAY;AACzE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iCAAI;AACf,iBAAiB,iCAAI;AACrB;;AAEA;AACA;AACA,qBAAqB,iCAAI;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iCAAI;AAC3B,MAAM;AACN,uBAAuB,iCAAI;AAC3B;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,iCAAiC,iCAAI;AACrC,qBAAqB,iCAAI;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEe,oEAAK,EAAC;AAC6B;;;;;;;;;;;;;;AC9lDlD;;;;;;;;;;OAUO;;;;;;;;;;;AAEP,gDAAgD;AAChD,2DAAiC;AAEjC,2CAA2C;AAC3C,MAAM,EAAE,GAAG,mBAAO,CAAC,cAAI,CAAC,CAAC;AAGzB,yCAAyC;AACzC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","file":"extension.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 \t\t}\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// 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, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\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\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/extension.ts\");\n","import Stream from 'stream';\nimport http from 'http';\nimport Url from 'url';\nimport https from 'https';\nimport zlib from 'zlib';\n\n// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js\n\n// fix for \"Readable\" isn't a named export issue\nconst Readable = Stream.Readable;\n\nconst BUFFER = Symbol('buffer');\nconst TYPE = Symbol('type');\n\nclass Blob {\n\tconstructor() {\n\t\tthis[TYPE] = '';\n\n\t\tconst blobParts = arguments[0];\n\t\tconst options = arguments[1];\n\n\t\tconst buffers = [];\n\t\tlet size = 0;\n\n\t\tif (blobParts) {\n\t\t\tconst a = blobParts;\n\t\t\tconst length = Number(a.length);\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tconst element = a[i];\n\t\t\t\tlet buffer;\n\t\t\t\tif (element instanceof Buffer) {\n\t\t\t\t\tbuffer = element;\n\t\t\t\t} else if (ArrayBuffer.isView(element)) {\n\t\t\t\t\tbuffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);\n\t\t\t\t} else if (element instanceof ArrayBuffer) {\n\t\t\t\t\tbuffer = Buffer.from(element);\n\t\t\t\t} else if (element instanceof Blob) {\n\t\t\t\t\tbuffer = element[BUFFER];\n\t\t\t\t} else {\n\t\t\t\t\tbuffer = Buffer.from(typeof element === 'string' ? element : String(element));\n\t\t\t\t}\n\t\t\t\tsize += buffer.length;\n\t\t\t\tbuffers.push(buffer);\n\t\t\t}\n\t\t}\n\n\t\tthis[BUFFER] = Buffer.concat(buffers);\n\n\t\tlet type = options && options.type !== undefined && String(options.type).toLowerCase();\n\t\tif (type && !/[^\\u0020-\\u007E]/.test(type)) {\n\t\t\tthis[TYPE] = type;\n\t\t}\n\t}\n\tget size() {\n\t\treturn this[BUFFER].length;\n\t}\n\tget type() {\n\t\treturn this[TYPE];\n\t}\n\ttext() {\n\t\treturn Promise.resolve(this[BUFFER].toString());\n\t}\n\tarrayBuffer() {\n\t\tconst buf = this[BUFFER];\n\t\tconst ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\treturn Promise.resolve(ab);\n\t}\n\tstream() {\n\t\tconst readable = new Readable();\n\t\treadable._read = function () {};\n\t\treadable.push(this[BUFFER]);\n\t\treadable.push(null);\n\t\treturn readable;\n\t}\n\ttoString() {\n\t\treturn '[object Blob]';\n\t}\n\tslice() {\n\t\tconst size = this.size;\n\n\t\tconst start = arguments[0];\n\t\tconst end = arguments[1];\n\t\tlet relativeStart, relativeEnd;\n\t\tif (start === undefined) {\n\t\t\trelativeStart = 0;\n\t\t} else if (start < 0) {\n\t\t\trelativeStart = Math.max(size + start, 0);\n\t\t} else {\n\t\t\trelativeStart = Math.min(start, size);\n\t\t}\n\t\tif (end === undefined) {\n\t\t\trelativeEnd = size;\n\t\t} else if (end < 0) {\n\t\t\trelativeEnd = Math.max(size + end, 0);\n\t\t} else {\n\t\t\trelativeEnd = Math.min(end, size);\n\t\t}\n\t\tconst span = Math.max(relativeEnd - relativeStart, 0);\n\n\t\tconst buffer = this[BUFFER];\n\t\tconst slicedBuffer = buffer.slice(relativeStart, relativeStart + span);\n\t\tconst blob = new Blob([], { type: arguments[2] });\n\t\tblob[BUFFER] = slicedBuffer;\n\t\treturn blob;\n\t}\n}\n\nObject.defineProperties(Blob.prototype, {\n\tsize: { enumerable: true },\n\ttype: { enumerable: true },\n\tslice: { enumerable: true }\n});\n\nObject.defineProperty(Blob.prototype, Symbol.toStringTag, {\n\tvalue: 'Blob',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * fetch-error.js\n *\n * FetchError interface for operational errors\n */\n\n/**\n * Create FetchError instance\n *\n * @param String message Error message for human\n * @param String type Error type for machine\n * @param String systemError For Node.js system error\n * @return FetchError\n */\nfunction FetchError(message, type, systemError) {\n Error.call(this, message);\n\n this.message = message;\n this.type = type;\n\n // when err.type is `system`, err.code contains system error code\n if (systemError) {\n this.code = this.errno = systemError.code;\n }\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nFetchError.prototype = Object.create(Error.prototype);\nFetchError.prototype.constructor = FetchError;\nFetchError.prototype.name = 'FetchError';\n\nlet convert;\ntry {\n\tconvert = require('encoding').convert;\n} catch (e) {}\n\nconst INTERNALS = Symbol('Body internals');\n\n// fix an issue where \"PassThrough\" isn't a named export for node <10\nconst PassThrough = Stream.PassThrough;\n\n/**\n * Body mixin\n *\n * Ref: https://fetch.spec.whatwg.org/#body\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nfunction Body(body) {\n\tvar _this = this;\n\n\tvar _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n\t _ref$size = _ref.size;\n\n\tlet size = _ref$size === undefined ? 0 : _ref$size;\n\tvar _ref$timeout = _ref.timeout;\n\tlet timeout = _ref$timeout === undefined ? 0 : _ref$timeout;\n\n\tif (body == null) {\n\t\t// body is undefined or null\n\t\tbody = null;\n\t} else if (isURLSearchParams(body)) {\n\t\t// body is a URLSearchParams\n\t\tbody = Buffer.from(body.toString());\n\t} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\n\t\t// body is ArrayBuffer\n\t\tbody = Buffer.from(body);\n\t} else if (ArrayBuffer.isView(body)) {\n\t\t// body is ArrayBufferView\n\t\tbody = Buffer.from(body.buffer, body.byteOffset, body.byteLength);\n\t} else if (body instanceof Stream) ; else {\n\t\t// none of the above\n\t\t// coerce to string then buffer\n\t\tbody = Buffer.from(String(body));\n\t}\n\tthis[INTERNALS] = {\n\t\tbody,\n\t\tdisturbed: false,\n\t\terror: null\n\t};\n\tthis.size = size;\n\tthis.timeout = timeout;\n\n\tif (body instanceof Stream) {\n\t\tbody.on('error', function (err) {\n\t\t\tconst error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);\n\t\t\t_this[INTERNALS].error = error;\n\t\t});\n\t}\n}\n\nBody.prototype = {\n\tget body() {\n\t\treturn this[INTERNALS].body;\n\t},\n\n\tget bodyUsed() {\n\t\treturn this[INTERNALS].disturbed;\n\t},\n\n\t/**\n * Decode response as ArrayBuffer\n *\n * @return Promise\n */\n\tarrayBuffer() {\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\t});\n\t},\n\n\t/**\n * Return raw response as Blob\n *\n * @return Promise\n */\n\tblob() {\n\t\tlet ct = this.headers && this.headers.get('content-type') || '';\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn Object.assign(\n\t\t\t// Prevent copying\n\t\t\tnew Blob([], {\n\t\t\t\ttype: ct.toLowerCase()\n\t\t\t}), {\n\t\t\t\t[BUFFER]: buf\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n * Decode response as json\n *\n * @return Promise\n */\n\tjson() {\n\t\tvar _this2 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(buffer.toString());\n\t\t\t} catch (err) {\n\t\t\t\treturn Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n * Decode response as text\n *\n * @return Promise\n */\n\ttext() {\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn buffer.toString();\n\t\t});\n\t},\n\n\t/**\n * Decode response as buffer (non-spec api)\n *\n * @return Promise\n */\n\tbuffer() {\n\t\treturn consumeBody.call(this);\n\t},\n\n\t/**\n * Decode response as text, while automatically detecting the encoding and\n * trying to decode to UTF-8 (non-spec api)\n *\n * @return Promise\n */\n\ttextConverted() {\n\t\tvar _this3 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn convertBody(buffer, _this3.headers);\n\t\t});\n\t}\n};\n\n// In browsers, all properties are enumerable.\nObject.defineProperties(Body.prototype, {\n\tbody: { enumerable: true },\n\tbodyUsed: { enumerable: true },\n\tarrayBuffer: { enumerable: true },\n\tblob: { enumerable: true },\n\tjson: { enumerable: true },\n\ttext: { enumerable: true }\n});\n\nBody.mixIn = function (proto) {\n\tfor (const name of Object.getOwnPropertyNames(Body.prototype)) {\n\t\t// istanbul ignore else: future proof\n\t\tif (!(name in proto)) {\n\t\t\tconst desc = Object.getOwnPropertyDescriptor(Body.prototype, name);\n\t\t\tObject.defineProperty(proto, name, desc);\n\t\t}\n\t}\n};\n\n/**\n * Consume and convert an entire Body to a Buffer.\n *\n * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body\n *\n * @return Promise\n */\nfunction consumeBody() {\n\tvar _this4 = this;\n\n\tif (this[INTERNALS].disturbed) {\n\t\treturn Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));\n\t}\n\n\tthis[INTERNALS].disturbed = true;\n\n\tif (this[INTERNALS].error) {\n\t\treturn Body.Promise.reject(this[INTERNALS].error);\n\t}\n\n\tlet body = this.body;\n\n\t// body is null\n\tif (body === null) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is blob\n\tif (isBlob(body)) {\n\t\tbody = body.stream();\n\t}\n\n\t// body is buffer\n\tif (Buffer.isBuffer(body)) {\n\t\treturn Body.Promise.resolve(body);\n\t}\n\n\t// istanbul ignore if: should never happen\n\tif (!(body instanceof Stream)) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is stream\n\t// get ready to actually consume the body\n\tlet accum = [];\n\tlet accumBytes = 0;\n\tlet abort = false;\n\n\treturn new Body.Promise(function (resolve, reject) {\n\t\tlet resTimeout;\n\n\t\t// allow timeout on slow response body\n\t\tif (_this4.timeout) {\n\t\t\tresTimeout = setTimeout(function () {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));\n\t\t\t}, _this4.timeout);\n\t\t}\n\n\t\t// handle stream errors\n\t\tbody.on('error', function (err) {\n\t\t\tif (err.name === 'AbortError') {\n\t\t\t\t// if the request was aborted, reject with this Error\n\t\t\t\tabort = true;\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\t// other errors, such as incorrect content-encoding\n\t\t\t\treject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\n\t\tbody.on('data', function (chunk) {\n\t\t\tif (abort || chunk === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (_this4.size && accumBytes + chunk.length > _this4.size) {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\taccumBytes += chunk.length;\n\t\t\taccum.push(chunk);\n\t\t});\n\n\t\tbody.on('end', function () {\n\t\t\tif (abort) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclearTimeout(resTimeout);\n\n\t\t\ttry {\n\t\t\t\tresolve(Buffer.concat(accum, accumBytes));\n\t\t\t} catch (err) {\n\t\t\t\t// handle streams that have accumulated too much data (issue #414)\n\t\t\t\treject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect buffer encoding and convert to target encoding\n * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding\n *\n * @param Buffer buffer Incoming buffer\n * @param String encoding Target encoding\n * @return String\n */\nfunction convertBody(buffer, headers) {\n\tif (typeof convert !== 'function') {\n\t\tthrow new Error('The package `encoding` must be installed to use the textConverted() function');\n\t}\n\n\tconst ct = headers.get('content-type');\n\tlet charset = 'utf-8';\n\tlet res, str;\n\n\t// header\n\tif (ct) {\n\t\tres = /charset=([^;]*)/i.exec(ct);\n\t}\n\n\t// no charset in content type, peek at response body for at most 1024 bytes\n\tstr = buffer.slice(0, 1024).toString();\n\n\t// html5\n\tif (!res && str) {\n\t\tres = / 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n\t\tthis[MAP] = Object.create(null);\n\n\t\tif (init instanceof Headers) {\n\t\t\tconst rawHeaders = init.raw();\n\t\t\tconst headerNames = Object.keys(rawHeaders);\n\n\t\t\tfor (const headerName of headerNames) {\n\t\t\t\tfor (const value of rawHeaders[headerName]) {\n\t\t\t\t\tthis.append(headerName, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// We don't worry about converting prop to ByteString here as append()\n\t\t// will handle it.\n\t\tif (init == null) ; else if (typeof init === 'object') {\n\t\t\tconst method = init[Symbol.iterator];\n\t\t\tif (method != null) {\n\t\t\t\tif (typeof method !== 'function') {\n\t\t\t\t\tthrow new TypeError('Header pairs must be iterable');\n\t\t\t\t}\n\n\t\t\t\t// sequence>\n\t\t\t\t// Note: per spec we have to first exhaust the lists then process them\n\t\t\t\tconst pairs = [];\n\t\t\t\tfor (const pair of init) {\n\t\t\t\t\tif (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be iterable');\n\t\t\t\t\t}\n\t\t\t\t\tpairs.push(Array.from(pair));\n\t\t\t\t}\n\n\t\t\t\tfor (const pair of pairs) {\n\t\t\t\t\tif (pair.length !== 2) {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be a name/value tuple');\n\t\t\t\t\t}\n\t\t\t\t\tthis.append(pair[0], pair[1]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// record\n\t\t\t\tfor (const key of Object.keys(init)) {\n\t\t\t\t\tconst value = init[key];\n\t\t\t\t\tthis.append(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('Provided initializer must be an object');\n\t\t}\n\t}\n\n\t/**\n * Return combined header value given name\n *\n * @param String name Header name\n * @return Mixed\n */\n\tget(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this[MAP][key].join(', ');\n\t}\n\n\t/**\n * Iterate over all headers\n *\n * @param Function callback Executed for each item with parameters (value, name, thisArg)\n * @param Boolean thisArg `this` context for callback function\n * @return Void\n */\n\tforEach(callback) {\n\t\tlet thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\tlet pairs = getHeaders(this);\n\t\tlet i = 0;\n\t\twhile (i < pairs.length) {\n\t\t\tvar _pairs$i = pairs[i];\n\t\t\tconst name = _pairs$i[0],\n\t\t\t value = _pairs$i[1];\n\n\t\t\tcallback.call(thisArg, value, name, this);\n\t\t\tpairs = getHeaders(this);\n\t\t\ti++;\n\t\t}\n\t}\n\n\t/**\n * Overwrite header values given name\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tset(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tthis[MAP][key !== undefined ? key : name] = [value];\n\t}\n\n\t/**\n * Append a value onto existing header\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tappend(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tthis[MAP][key].push(value);\n\t\t} else {\n\t\t\tthis[MAP][name] = [value];\n\t\t}\n\t}\n\n\t/**\n * Check for header name existence\n *\n * @param String name Header name\n * @return Boolean\n */\n\thas(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\treturn find(this[MAP], name) !== undefined;\n\t}\n\n\t/**\n * Delete all header values given name\n *\n * @param String name Header name\n * @return Void\n */\n\tdelete(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tdelete this[MAP][key];\n\t\t}\n\t}\n\n\t/**\n * Return raw headers (non-spec api)\n *\n * @return Object\n */\n\traw() {\n\t\treturn this[MAP];\n\t}\n\n\t/**\n * Get an iterator on keys.\n *\n * @return Iterator\n */\n\tkeys() {\n\t\treturn createHeadersIterator(this, 'key');\n\t}\n\n\t/**\n * Get an iterator on values.\n *\n * @return Iterator\n */\n\tvalues() {\n\t\treturn createHeadersIterator(this, 'value');\n\t}\n\n\t/**\n * Get an iterator on entries.\n *\n * This is the default iterator of the Headers object.\n *\n * @return Iterator\n */\n\t[Symbol.iterator]() {\n\t\treturn createHeadersIterator(this, 'key+value');\n\t}\n}\nHeaders.prototype.entries = Headers.prototype[Symbol.iterator];\n\nObject.defineProperty(Headers.prototype, Symbol.toStringTag, {\n\tvalue: 'Headers',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Headers.prototype, {\n\tget: { enumerable: true },\n\tforEach: { enumerable: true },\n\tset: { enumerable: true },\n\tappend: { enumerable: true },\n\thas: { enumerable: true },\n\tdelete: { enumerable: true },\n\tkeys: { enumerable: true },\n\tvalues: { enumerable: true },\n\tentries: { enumerable: true }\n});\n\nfunction getHeaders(headers) {\n\tlet kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';\n\n\tconst keys = Object.keys(headers[MAP]).sort();\n\treturn keys.map(kind === 'key' ? function (k) {\n\t\treturn k.toLowerCase();\n\t} : kind === 'value' ? function (k) {\n\t\treturn headers[MAP][k].join(', ');\n\t} : function (k) {\n\t\treturn [k.toLowerCase(), headers[MAP][k].join(', ')];\n\t});\n}\n\nconst INTERNAL = Symbol('internal');\n\nfunction createHeadersIterator(target, kind) {\n\tconst iterator = Object.create(HeadersIteratorPrototype);\n\titerator[INTERNAL] = {\n\t\ttarget,\n\t\tkind,\n\t\tindex: 0\n\t};\n\treturn iterator;\n}\n\nconst HeadersIteratorPrototype = Object.setPrototypeOf({\n\tnext() {\n\t\t// istanbul ignore if\n\t\tif (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {\n\t\t\tthrow new TypeError('Value of `this` is not a HeadersIterator');\n\t\t}\n\n\t\tvar _INTERNAL = this[INTERNAL];\n\t\tconst target = _INTERNAL.target,\n\t\t kind = _INTERNAL.kind,\n\t\t index = _INTERNAL.index;\n\n\t\tconst values = getHeaders(target, kind);\n\t\tconst len = values.length;\n\t\tif (index >= len) {\n\t\t\treturn {\n\t\t\t\tvalue: undefined,\n\t\t\t\tdone: true\n\t\t\t};\n\t\t}\n\n\t\tthis[INTERNAL].index = index + 1;\n\n\t\treturn {\n\t\t\tvalue: values[index],\n\t\t\tdone: false\n\t\t};\n\t}\n}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));\n\nObject.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {\n\tvalue: 'HeadersIterator',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * Export the Headers object in a form that Node.js can consume.\n *\n * @param Headers headers\n * @return Object\n */\nfunction exportNodeCompatibleHeaders(headers) {\n\tconst obj = Object.assign({ __proto__: null }, headers[MAP]);\n\n\t// http.request() only supports string as Host header. This hack makes\n\t// specifying custom Host header possible.\n\tconst hostHeaderKey = find(headers[MAP], 'Host');\n\tif (hostHeaderKey !== undefined) {\n\t\tobj[hostHeaderKey] = obj[hostHeaderKey][0];\n\t}\n\n\treturn obj;\n}\n\n/**\n * Create a Headers object from an object of headers, ignoring those that do\n * not conform to HTTP grammar productions.\n *\n * @param Object obj Object of headers\n * @return Headers\n */\nfunction createHeadersLenient(obj) {\n\tconst headers = new Headers();\n\tfor (const name of Object.keys(obj)) {\n\t\tif (invalidTokenRegex.test(name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(obj[name])) {\n\t\t\tfor (const val of obj[name]) {\n\t\t\t\tif (invalidHeaderCharRegex.test(val)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (headers[MAP][name] === undefined) {\n\t\t\t\t\theaders[MAP][name] = [val];\n\t\t\t\t} else {\n\t\t\t\t\theaders[MAP][name].push(val);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (!invalidHeaderCharRegex.test(obj[name])) {\n\t\t\theaders[MAP][name] = [obj[name]];\n\t\t}\n\t}\n\treturn headers;\n}\n\nconst INTERNALS$1 = Symbol('Response internals');\n\n// fix an issue where \"STATUS_CODES\" aren't a named export for node <10\nconst STATUS_CODES = http.STATUS_CODES;\n\n/**\n * Response class\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nclass Response {\n\tconstructor() {\n\t\tlet body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tlet opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tBody.call(this, body, opts);\n\n\t\tconst status = opts.status || 200;\n\t\tconst headers = new Headers(opts.headers);\n\n\t\tif (body != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(body);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tthis[INTERNALS$1] = {\n\t\t\turl: opts.url,\n\t\t\tstatus,\n\t\t\tstatusText: opts.statusText || STATUS_CODES[status],\n\t\t\theaders,\n\t\t\tcounter: opts.counter\n\t\t};\n\t}\n\n\tget url() {\n\t\treturn this[INTERNALS$1].url || '';\n\t}\n\n\tget status() {\n\t\treturn this[INTERNALS$1].status;\n\t}\n\n\t/**\n * Convenience property representing if the request ended normally\n */\n\tget ok() {\n\t\treturn this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;\n\t}\n\n\tget redirected() {\n\t\treturn this[INTERNALS$1].counter > 0;\n\t}\n\n\tget statusText() {\n\t\treturn this[INTERNALS$1].statusText;\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$1].headers;\n\t}\n\n\t/**\n * Clone this response\n *\n * @return Response\n */\n\tclone() {\n\t\treturn new Response(clone(this), {\n\t\t\turl: this.url,\n\t\t\tstatus: this.status,\n\t\t\tstatusText: this.statusText,\n\t\t\theaders: this.headers,\n\t\t\tok: this.ok,\n\t\t\tredirected: this.redirected\n\t\t});\n\t}\n}\n\nBody.mixIn(Response.prototype);\n\nObject.defineProperties(Response.prototype, {\n\turl: { enumerable: true },\n\tstatus: { enumerable: true },\n\tok: { enumerable: true },\n\tredirected: { enumerable: true },\n\tstatusText: { enumerable: true },\n\theaders: { enumerable: true },\n\tclone: { enumerable: true }\n});\n\nObject.defineProperty(Response.prototype, Symbol.toStringTag, {\n\tvalue: 'Response',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nconst INTERNALS$2 = Symbol('Request internals');\n\n// fix an issue where \"format\", \"parse\" aren't a named export for node <10\nconst parse_url = Url.parse;\nconst format_url = Url.format;\n\nconst streamDestructionSupported = 'destroy' in Stream.Readable.prototype;\n\n/**\n * Check if a value is an instance of Request.\n *\n * @param Mixed input\n * @return Boolean\n */\nfunction isRequest(input) {\n\treturn typeof input === 'object' && typeof input[INTERNALS$2] === 'object';\n}\n\nfunction isAbortSignal(signal) {\n\tconst proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);\n\treturn !!(proto && proto.constructor.name === 'AbortSignal');\n}\n\n/**\n * Request class\n *\n * @param Mixed input Url or Request instance\n * @param Object init Custom options\n * @return Void\n */\nclass Request {\n\tconstructor(input) {\n\t\tlet init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tlet parsedURL;\n\n\t\t// normalize input\n\t\tif (!isRequest(input)) {\n\t\t\tif (input && input.href) {\n\t\t\t\t// in order to support Node.js' Url objects; though WHATWG's URL objects\n\t\t\t\t// will fall into this branch also (since their `toString()` will return\n\t\t\t\t// `href` property anyway)\n\t\t\t\tparsedURL = parse_url(input.href);\n\t\t\t} else {\n\t\t\t\t// coerce input to a string before attempting to parse\n\t\t\t\tparsedURL = parse_url(`${input}`);\n\t\t\t}\n\t\t\tinput = {};\n\t\t} else {\n\t\t\tparsedURL = parse_url(input.url);\n\t\t}\n\n\t\tlet method = init.method || input.method || 'GET';\n\t\tmethod = method.toUpperCase();\n\n\t\tif ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {\n\t\t\tthrow new TypeError('Request with GET/HEAD method cannot have body');\n\t\t}\n\n\t\tlet inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;\n\n\t\tBody.call(this, inputBody, {\n\t\t\ttimeout: init.timeout || input.timeout || 0,\n\t\t\tsize: init.size || input.size || 0\n\t\t});\n\n\t\tconst headers = new Headers(init.headers || input.headers || {});\n\n\t\tif (inputBody != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(inputBody);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tlet signal = isRequest(input) ? input.signal : null;\n\t\tif ('signal' in init) signal = init.signal;\n\n\t\tif (signal != null && !isAbortSignal(signal)) {\n\t\t\tthrow new TypeError('Expected signal to be an instanceof AbortSignal');\n\t\t}\n\n\t\tthis[INTERNALS$2] = {\n\t\t\tmethod,\n\t\t\tredirect: init.redirect || input.redirect || 'follow',\n\t\t\theaders,\n\t\t\tparsedURL,\n\t\t\tsignal\n\t\t};\n\n\t\t// node-fetch-only options\n\t\tthis.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;\n\t\tthis.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;\n\t\tthis.counter = init.counter || input.counter || 0;\n\t\tthis.agent = init.agent || input.agent;\n\t}\n\n\tget method() {\n\t\treturn this[INTERNALS$2].method;\n\t}\n\n\tget url() {\n\t\treturn format_url(this[INTERNALS$2].parsedURL);\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$2].headers;\n\t}\n\n\tget redirect() {\n\t\treturn this[INTERNALS$2].redirect;\n\t}\n\n\tget signal() {\n\t\treturn this[INTERNALS$2].signal;\n\t}\n\n\t/**\n * Clone this request\n *\n * @return Request\n */\n\tclone() {\n\t\treturn new Request(this);\n\t}\n}\n\nBody.mixIn(Request.prototype);\n\nObject.defineProperty(Request.prototype, Symbol.toStringTag, {\n\tvalue: 'Request',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Request.prototype, {\n\tmethod: { enumerable: true },\n\turl: { enumerable: true },\n\theaders: { enumerable: true },\n\tredirect: { enumerable: true },\n\tclone: { enumerable: true },\n\tsignal: { enumerable: true }\n});\n\n/**\n * Convert a Request to Node.js http request options.\n *\n * @param Request A Request instance\n * @return Object The options object to be passed to http.request\n */\nfunction getNodeRequestOptions(request) {\n\tconst parsedURL = request[INTERNALS$2].parsedURL;\n\tconst headers = new Headers(request[INTERNALS$2].headers);\n\n\t// fetch step 1.3\n\tif (!headers.has('Accept')) {\n\t\theaders.set('Accept', '*/*');\n\t}\n\n\t// Basic fetch\n\tif (!parsedURL.protocol || !parsedURL.hostname) {\n\t\tthrow new TypeError('Only absolute URLs are supported');\n\t}\n\n\tif (!/^https?:$/.test(parsedURL.protocol)) {\n\t\tthrow new TypeError('Only HTTP(S) protocols are supported');\n\t}\n\n\tif (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {\n\t\tthrow new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');\n\t}\n\n\t// HTTP-network-or-cache fetch steps 2.4-2.7\n\tlet contentLengthValue = null;\n\tif (request.body == null && /^(POST|PUT)$/i.test(request.method)) {\n\t\tcontentLengthValue = '0';\n\t}\n\tif (request.body != null) {\n\t\tconst totalBytes = getTotalBytes(request);\n\t\tif (typeof totalBytes === 'number') {\n\t\t\tcontentLengthValue = String(totalBytes);\n\t\t}\n\t}\n\tif (contentLengthValue) {\n\t\theaders.set('Content-Length', contentLengthValue);\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.11\n\tif (!headers.has('User-Agent')) {\n\t\theaders.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.15\n\tif (request.compress && !headers.has('Accept-Encoding')) {\n\t\theaders.set('Accept-Encoding', 'gzip,deflate');\n\t}\n\n\tlet agent = request.agent;\n\tif (typeof agent === 'function') {\n\t\tagent = agent(parsedURL);\n\t}\n\n\tif (!headers.has('Connection') && !agent) {\n\t\theaders.set('Connection', 'close');\n\t}\n\n\t// HTTP-network fetch step 4.2\n\t// chunked encoding is handled by Node.js\n\n\treturn Object.assign({}, parsedURL, {\n\t\tmethod: request.method,\n\t\theaders: exportNodeCompatibleHeaders(headers),\n\t\tagent\n\t});\n}\n\n/**\n * abort-error.js\n *\n * AbortError interface for cancelled requests\n */\n\n/**\n * Create AbortError instance\n *\n * @param String message Error message for human\n * @return AbortError\n */\nfunction AbortError(message) {\n Error.call(this, message);\n\n this.type = 'aborted';\n this.message = message;\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nAbortError.prototype = Object.create(Error.prototype);\nAbortError.prototype.constructor = AbortError;\nAbortError.prototype.name = 'AbortError';\n\n// fix an issue where \"PassThrough\", \"resolve\" aren't a named export for node <10\nconst PassThrough$1 = Stream.PassThrough;\nconst resolve_url = Url.resolve;\n\n/**\n * Fetch function\n *\n * @param Mixed url Absolute url or Request instance\n * @param Object opts Fetch options\n * @return Promise\n */\nfunction fetch(url, opts) {\n\n\t// allow custom promise\n\tif (!fetch.Promise) {\n\t\tthrow new Error('native promise missing, set fetch.Promise to your favorite alternative');\n\t}\n\n\tBody.Promise = fetch.Promise;\n\n\t// wrap http.request into fetch\n\treturn new fetch.Promise(function (resolve, reject) {\n\t\t// build request object\n\t\tconst request = new Request(url, opts);\n\t\tconst options = getNodeRequestOptions(request);\n\n\t\tconst send = (options.protocol === 'https:' ? https : http).request;\n\t\tconst signal = request.signal;\n\n\t\tlet response = null;\n\n\t\tconst abort = function abort() {\n\t\t\tlet error = new AbortError('The user aborted a request.');\n\t\t\treject(error);\n\t\t\tif (request.body && request.body instanceof Stream.Readable) {\n\t\t\t\trequest.body.destroy(error);\n\t\t\t}\n\t\t\tif (!response || !response.body) return;\n\t\t\tresponse.body.emit('error', error);\n\t\t};\n\n\t\tif (signal && signal.aborted) {\n\t\t\tabort();\n\t\t\treturn;\n\t\t}\n\n\t\tconst abortAndFinalize = function abortAndFinalize() {\n\t\t\tabort();\n\t\t\tfinalize();\n\t\t};\n\n\t\t// send request\n\t\tconst req = send(options);\n\t\tlet reqTimeout;\n\n\t\tif (signal) {\n\t\t\tsignal.addEventListener('abort', abortAndFinalize);\n\t\t}\n\n\t\tfunction finalize() {\n\t\t\treq.abort();\n\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\tclearTimeout(reqTimeout);\n\t\t}\n\n\t\tif (request.timeout) {\n\t\t\treq.once('socket', function (socket) {\n\t\t\t\treqTimeout = setTimeout(function () {\n\t\t\t\t\treject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));\n\t\t\t\t\tfinalize();\n\t\t\t\t}, request.timeout);\n\t\t\t});\n\t\t}\n\n\t\treq.on('error', function (err) {\n\t\t\treject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));\n\t\t\tfinalize();\n\t\t});\n\n\t\treq.on('response', function (res) {\n\t\t\tclearTimeout(reqTimeout);\n\n\t\t\tconst headers = createHeadersLenient(res.headers);\n\n\t\t\t// HTTP fetch step 5\n\t\t\tif (fetch.isRedirect(res.statusCode)) {\n\t\t\t\t// HTTP fetch step 5.2\n\t\t\t\tconst location = headers.get('Location');\n\n\t\t\t\t// HTTP fetch step 5.3\n\t\t\t\tconst locationURL = location === null ? null : resolve_url(request.url, location);\n\n\t\t\t\t// HTTP fetch step 5.5\n\t\t\t\tswitch (request.redirect) {\n\t\t\t\t\tcase 'error':\n\t\t\t\t\t\treject(new FetchError(`redirect mode is set to error: ${request.url}`, 'no-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase 'manual':\n\t\t\t\t\t\t// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.\n\t\t\t\t\t\tif (locationURL !== null) {\n\t\t\t\t\t\t\t// handle corrupted header\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\theaders.set('Location', locationURL);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\t// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request\n\t\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'follow':\n\t\t\t\t\t\t// HTTP-redirect fetch step 2\n\t\t\t\t\t\tif (locationURL === null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 5\n\t\t\t\t\t\tif (request.counter >= request.follow) {\n\t\t\t\t\t\t\treject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 6 (counter increment)\n\t\t\t\t\t\t// Create a new Request object.\n\t\t\t\t\t\tconst requestOpts = {\n\t\t\t\t\t\t\theaders: new Headers(request.headers),\n\t\t\t\t\t\t\tfollow: request.follow,\n\t\t\t\t\t\t\tcounter: request.counter + 1,\n\t\t\t\t\t\t\tagent: request.agent,\n\t\t\t\t\t\t\tcompress: request.compress,\n\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\tbody: request.body,\n\t\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t\t\ttimeout: request.timeout\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 9\n\t\t\t\t\t\tif (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {\n\t\t\t\t\t\t\treject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 11\n\t\t\t\t\t\tif (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {\n\t\t\t\t\t\t\trequestOpts.method = 'GET';\n\t\t\t\t\t\t\trequestOpts.body = undefined;\n\t\t\t\t\t\t\trequestOpts.headers.delete('content-length');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 15\n\t\t\t\t\t\tresolve(fetch(new Request(locationURL, requestOpts)));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// prepare response\n\t\t\tres.once('end', function () {\n\t\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\t});\n\t\t\tlet body = res.pipe(new PassThrough$1());\n\n\t\t\tconst response_options = {\n\t\t\t\turl: request.url,\n\t\t\t\tstatus: res.statusCode,\n\t\t\t\tstatusText: res.statusMessage,\n\t\t\t\theaders: headers,\n\t\t\t\tsize: request.size,\n\t\t\t\ttimeout: request.timeout,\n\t\t\t\tcounter: request.counter\n\t\t\t};\n\n\t\t\t// HTTP-network fetch step 12.1.1.3\n\t\t\tconst codings = headers.get('Content-Encoding');\n\n\t\t\t// HTTP-network fetch step 12.1.1.4: handle content codings\n\n\t\t\t// in following scenarios we ignore compression support\n\t\t\t// 1. compression support is disabled\n\t\t\t// 2. HEAD request\n\t\t\t// 3. no Content-Encoding header\n\t\t\t// 4. no content response (204)\n\t\t\t// 5. content not modified response (304)\n\t\t\tif (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For Node v6+\n\t\t\t// Be less strict when decoding compressed responses, since sometimes\n\t\t\t// servers send slightly invalid responses that are still accepted\n\t\t\t// by common browsers.\n\t\t\t// Always using Z_SYNC_FLUSH is what cURL does.\n\t\t\tconst zlibOptions = {\n\t\t\t\tflush: zlib.Z_SYNC_FLUSH,\n\t\t\t\tfinishFlush: zlib.Z_SYNC_FLUSH\n\t\t\t};\n\n\t\t\t// for gzip\n\t\t\tif (codings == 'gzip' || codings == 'x-gzip') {\n\t\t\t\tbody = body.pipe(zlib.createGunzip(zlibOptions));\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for deflate\n\t\t\tif (codings == 'deflate' || codings == 'x-deflate') {\n\t\t\t\t// handle the infamous raw deflate response from old servers\n\t\t\t\t// a hack for old IIS and Apache servers\n\t\t\t\tconst raw = res.pipe(new PassThrough$1());\n\t\t\t\traw.once('data', function (chunk) {\n\t\t\t\t\t// see http://stackoverflow.com/questions/37519828\n\t\t\t\t\tif ((chunk[0] & 0x0F) === 0x08) {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflate());\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflateRaw());\n\t\t\t\t\t}\n\t\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\t\tresolve(response);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for br\n\t\t\tif (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {\n\t\t\t\tbody = body.pipe(zlib.createBrotliDecompress());\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// otherwise, use response as-is\n\t\t\tresponse = new Response(body, response_options);\n\t\t\tresolve(response);\n\t\t});\n\n\t\twriteToStream(req, request);\n\t});\n}\n/**\n * Redirect code matching\n *\n * @param Number code Status code\n * @return Boolean\n */\nfetch.isRedirect = function (code) {\n\treturn code === 301 || code === 302 || code === 303 || code === 307 || code === 308;\n};\n\n// expose Promise\nfetch.Promise = global.Promise;\n\nexport default fetch;\nexport { Headers, Request, Response, FetchError };\n","/**\n * @author : Austin Ruby, Alex Chao, Ed Greenberg\n * @function : activate extension\n * @changelog : Ed Greenberg, November 5th, 2019, added flexible query file detection\n * @changelog : Alex Chao, Nov. 5th-10th 2019... Lots of changes... server listener added\n * - config file setup command made\n * - config file option to allow for a longer time for the graphql server to startup\n * ! I propose we add the PORT number to config file\n * - updating variables in the event of changes in the config files\n * @changelog : ## Austin?\n * * */\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\n// only needed for creating the config file\nconst fs = require('fs');\n\n\n/* eslint-disable import/no-unresolved */\nconst readFileSendReqAndWriteResponse = require('./modules/client/readFileSendReqAndWriteResponse');\nconst serverOn = require('./modules/server/serverOn');\nconst serverOff = require('./modules/server/serverOff');\n\n// require in new function that checks for a running server\nconst checkForRunningServer = require('./modules/server/checkForRunningServer');\n\n// require in file that finds root directory\nconst findRootDirectory = require('./modules/client/findRootDirectory');\n// require in file that returns entryPoint when given the root path\nconst parseConfigFile = require('./modules/client/parseConfigFile');\n// require in file that finds port#\nconst findPortNumber = require('./modules/client/findPortNumber');\n\n\n// this method is called when your extension is activated\n// your extension is activated the very first time the command is executed\nexport function activate(context: vscode.ExtensionContext) {\n // * These are some variables that I need to pass between different commands, so they're in\n // * a higher scope\n // this ChannelRef variable will be used to pass the output channel between separate function defs\n // let graphQuillChannelRef: vscode.OutputChannel;\n const gqChannel = vscode.window.createOutputChannel('GraphQuill');\n\n // a toggle variable that will is true when the server is on\n let isOnToggle = false;\n\n // a disposable variable to get rid of the save event listener\n let saveListener: vscode.Disposable;\n\n // set rootPath and entryPoint to a string of the path to the server startup file (has app.listen)\n const rootPath = findRootDirectory();\n\n // putting these variables in the global scope with the expectation that they will be set upon\n // activating the extension. I'm moving them to be able to manage \"live\" changes\n let entryPoint: string;\n let allowServerTimeoutConfigSetting: number;\n\n // set portNumber to a string. It is going to be set in the activation command\n let portNumber: string;\n\n // boolean to track if the server has been successfully turned on by the user\n let serverTurnedOnByGraphQuill = false;\n\n /** **********************************************************************************************\n * * The command must be defined in package.json under contributes/commands AND activation events\n * Now provide the implementation of the command with registerCommand\n * The commandId parameter must match the command field in package.json\n * * This is the first GraphQuill option in the command palette for activating GraphQuill\n *********************************************************************************************** */\n const disposableActivateGraphQuill = vscode.commands.registerCommand('extension.activateGraphQuill', async () => {\n if (isOnToggle) {\n // if server is already running, break out of function by returning null\n console.log('Server is already running');\n vscode.window.showInformationMessage('GraphQuill is already active');\n return null;\n }\n\n // show output channel\n gqChannel.show(true);\n\n // parse the config file (this is important in case if there were any changes)\n let parseResult = parseConfigFile(rootPath);\n entryPoint = parseResult.entryPoint;\n allowServerTimeoutConfigSetting = parseResult.allowServerTimeoutConfigSetting;\n\n // if the entryPoint is falsey, break out of the function and tell the\n // user to create a config file\n if (!entryPoint) {\n gqChannel.append('The config file was not found, please use the Create GraphQuill Config File Command to make one.');\n // break out of this execution context\n return null;\n }\n\n // set the portNumber (in the higher scope so it can be used in the deactivate function)\n portNumber = findPortNumber(entryPoint);\n\n // Check ONCE if the port is open (also this does not need the third param)\n // will resolve to a true or false value\n const serverOnFromUser = await checkForRunningServer(portNumber, true);\n // console.log('--serverOnFromUser after once check is:', serverOnFromUser);\n\n // trigger serverOn if the user does not already have the server running\n if (!serverOnFromUser) {\n // start up the user's server\n serverOn(entryPoint);\n\n // give user feedback that server is starting up\n gqChannel.clear();\n gqChannel.append('The server is starting up...');\n\n // await this function that will return true or false based on if the server has been started\n // false: if starting the server is longer than the time allotted in the config file (defaults\n // to 3 seconds)\n serverTurnedOnByGraphQuill = await checkForRunningServer(portNumber,\n // once setting is false, so the returned promise will only resolve when the server has\n // started OR the timeout (next variable or 3sec) is reached\n false,\n // allowServerT.C.S. is either a time in milliseconds that defaults to 3000\n allowServerTimeoutConfigSetting);\n\n // if it is false, that means there was an error starting the server\n // notify the user & end the thread of execution\n if (!serverTurnedOnByGraphQuill) {\n // console.log('server is taking too long to startup');\n\n // give feedback to user that port didn't start (and the specified timeout config setting,\n // defaults to 3 seconds)\n gqChannel.clear();\n gqChannel.append(`The server is taking too long to startup (>${(allowServerTimeoutConfigSetting || 3000) / 1000} seconds).\\nTo increase this time, update the \"serverStartupTimeAllowed\" setting in the graphquill.config.js file.`);\n\n // break out, and just in case I'm going to try to kill the port if it did open\n // otherwise we could get runaway node processes...\n return setTimeout(() => serverOff(portNumber), 5000);\n }\n }\n\n // if the server is on from either the user or graphquill, continue\n // send first query & setup on save listener\n if (serverOnFromUser || serverTurnedOnByGraphQuill) {\n // update isOnToggle (refers to state of GraphQuill extension running or not)\n isOnToggle = true;\n\n // clear any other stuff off of the channel (e.g. previous error message)\n gqChannel.clear();\n\n // get the fileName of the open file when the extension is FIRST fired\n const currOpenEditorPath: string = vscode.window.activeTextEditor!.document.fileName;\n // send that request from the currentopeneditor\n readFileSendReqAndWriteResponse(currOpenEditorPath, gqChannel, portNumber, rootPath);\n\n // initialize the save listener here to clear the channel and resend new requests\n saveListener = vscode.workspace.onDidSaveTextDocument((event) => {\n // console.log('save event!!!', event);\n\n // clear the graphQuill channel\n gqChannel.clear();\n\n // re-parse the config file (in case the user made a change)\n parseResult = parseConfigFile(rootPath);\n entryPoint = parseResult.entryPoint;\n allowServerTimeoutConfigSetting = parseResult.allowServerTimeoutConfigSetting;\n\n if (!entryPoint) {\n gqChannel.append('The config file was not found, please use the Create GraphQuill Config File Command to make one.');\n // break out of this execution context\n return null;\n }\n\n // ! I really think we should add the port number to the config file to specify to the user\n // ! That the port number SHUOLD not be changed...\n // TODO this seems very redundant... but I'm blanking on how to make this dynamic\n // TODO update if the user changes their server file...\n // on each save... reparse for a portNumber in case if it was changed\n portNumber = findPortNumber(entryPoint);\n\n // send the filename and channel to the readFileSRAWR function\n readFileSendReqAndWriteResponse(event.fileName, gqChannel, portNumber, rootPath);\n\n // satisfying linter\n return null;\n });\n }\n\n // to satisfy typescript linter...\n return null;\n });\n\n // push it to the subscriptions\n context.subscriptions.push(disposableActivateGraphQuill);\n\n\n /** **************************************************************************\n * * Second GraphQuill option in the command palette (Cmd Shift P) for deactivating graphquill\n ************************************************************************** */\n const disposableDisableGraphQuill = vscode.commands.registerCommand('extension.deactivateGraphQuill', () => {\n // console.log('--deactivate functionality triggered');\n\n // check isontoggle boolean\n if (!isOnToggle) {\n // server is already off\n console.log('server is already off');\n vscode.window.showInformationMessage('GraphQuill is already off');\n\n return null;\n }\n\n // change toggle boolean\n isOnToggle = false;\n\n // dispose of the onDidSaveTextDocument event listener\n if (saveListener) saveListener.dispose();\n\n // close/hide GraphQuill channel\n gqChannel.hide();\n gqChannel.clear();\n\n console.log('in deactivate, the server turned on by graphquill boolean is: ', serverTurnedOnByGraphQuill);\n // invoke server off in this function\n return setTimeout(() => (serverTurnedOnByGraphQuill && serverOff(portNumber)), 1);\n });\n\n // push it into the subscriptions\n context.subscriptions.push(disposableDisableGraphQuill);\n\n\n /** **************************************************************************\n * * Third GraphQuill option in command palette to toggle graphquill extension\n ************************************************************************** */\n const disposableToggleGraphQuill = vscode.commands.registerCommand('extension.toggleGraphQuill', () => {\n // console.log('--toggle triggered!');\n\n // if the toggle boolean is false, then start the extension, otherwise end it...\n if (!isOnToggle) {\n // console.log('--toggle starting extension');\n // using the built in execute command and passing in a string of the command to trigger\n vscode.commands.executeCommand('extension.activateGraphQuill');\n } else {\n // console.log('--toggle stopping the extension');\n vscode.commands.executeCommand('extension.deactivateGraphQuill');\n }\n\n // just to make the linter happy...\n return null;\n });\n\n // push it to the subscriptions\n context.subscriptions.push(disposableToggleGraphQuill);\n\n /** **************************************************************************\n * * Fourth GraphQuill option in command palette to CREATE A CONFIG FILE\n ************************************************************************** */\n const disposableCreateConfigFile = vscode.commands.registerCommand('extension.createConfigFile', () => {\n // console.log('--config file setup triggered');\n\n // check if the root directory already has a graphquill.config.json file\n const graphQuillConfigPath = `${rootPath}/graphquill.config.js`;\n if (fs.existsSync(graphQuillConfigPath)) {\n vscode.window.showInformationMessage(`A GraphQuill configuration file already exists at ${graphQuillConfigPath}`);\n // exit out\n return null;\n }\n\n // if it does not already exist, write to a new file\n fs.writeFileSync(graphQuillConfigPath,\n // string to populate the file with\n 'module.exports = {\\n // change \"./server/index.js\" to the relative path from the root directory to\\n // the file that starts your server\\n entry: \\'./server/index.js\\',\\n\\n // to increase the amount of time allowed for the server to startup, add a time\\n // in milliseconds (integer) to the \"serverStartupTimeAllowed\"\\n // serverStartupTimeAllowed: 5000,\\n};\\n',\n 'utf-8');\n\n // open the file in vscode\n vscode.workspace.openTextDocument(graphQuillConfigPath).then((doc) => {\n // apparently openTextDocument doesn't mean it's visible...\n vscode.window.showTextDocument(doc);\n });\n\n return null;\n });\n\n // push it to the subscriptions\n context.subscriptions.push(disposableCreateConfigFile);\n}\n\n\n// this method is called when your extension is deactivated\nexport function deactivate() {\n // deactivate must return a promise if cleanup operations are async.\n // turn the server off if vscode is closed (tested via lsof in terminal)\n\n // console.log('---deactive function called!!');\n\n // executing the deactivateGQ command seems to achieve a similar effect & is nice because it has\n // access to the portNumber variable\n vscode.commands.executeCommand('extension.deactivateGraphQuill');\n // return setTimeout(() => serverOff(3000), 1);\n}\n","var map = {\n\t\"./checkQueryBrackets\": \"./src/modules/client/checkQueryBrackets.ts\",\n\t\"./checkQueryBrackets.ts\": \"./src/modules/client/checkQueryBrackets.ts\",\n\t\"./extractQueries\": \"./src/modules/client/extractQueries.ts\",\n\t\"./extractQueries.ts\": \"./src/modules/client/extractQueries.ts\",\n\t\"./findPortNumber\": \"./src/modules/client/findPortNumber.ts\",\n\t\"./findPortNumber.ts\": \"./src/modules/client/findPortNumber.ts\",\n\t\"./findRootDirectory\": \"./src/modules/client/findRootDirectory.ts\",\n\t\"./findRootDirectory.ts\": \"./src/modules/client/findRootDirectory.ts\",\n\t\"./parseConfigFile\": \"./src/modules/client/parseConfigFile.ts\",\n\t\"./parseConfigFile.ts\": \"./src/modules/client/parseConfigFile.ts\",\n\t\"./parseQuery\": \"./src/modules/client/parseQuery.ts\",\n\t\"./parseQuery.ts\": \"./src/modules/client/parseQuery.ts\",\n\t\"./readFileSendReqAndWriteResponse\": \"./src/modules/client/readFileSendReqAndWriteResponse.ts\",\n\t\"./readFileSendReqAndWriteResponse.ts\": \"./src/modules/client/readFileSendReqAndWriteResponse.ts\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src/modules/client sync recursive ^.*$\";","/**\n * @module : parser.ts\n * @author : Austin Ruby\n * @function : parse string for instances of 'graphQuill' and extract content\n * within parens immediately following each instance\n * @changelog : Ed Greenberg, November 4th, 2019, rewrote to remove enum bug\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n\n// check if parens are balanced for parsed query strings\n// if they're balanced, return original query string\n// if they're not, return error message with imbalanced bracket/s\nfunction checkQueryBrackets(queryString: string) {\n const stack: string[] = []; // the core of the function...\n // ...where detected opening brackets will be pushed in and pop off when the parser finds a mate\n const validatedSoFar: string[] = []; // a running copy of the query\n const openings: string = '{[('; // list of opening brackets\n const closings: string = '}])'; // list of closing brackets\n\n\n // eslint-disable-next-line no-restricted-syntax\n for (const el of queryString) { // loop the query\n if (openings.includes(el)) stack.push(el); // if query el is opening bracket, add el to stack\n if (closings.includes(el)) {\n if (stack[stack.length - 1] === openings[closings.indexOf(el)]) stack.pop();\n // if top of stack mates a new closing bracket, we are good, can reduce stack and keep going\n else break;\n // if the top of stack does not mate closing bracket, we stop loop and skip to declaring error\n }\n validatedSoFar.push(el); // helping keep running copy of query\n }\n\n\n return stack.length === 0 // this will be zero if all query brackets have matches\n ? queryString.slice(1, queryString.length - 1) // this substring is sent ahead if validated\n : new Error(`${`The following character makes the query unbalanced: ${stack[stack.length - 1]}\\n`\n + 'The portion of the query that ran before the unbalance was detected was:\\n'}${\n validatedSoFar.join('')}\\n\\n`); // ...otherwise, we report an error\n}\n\nmodule.exports = checkQueryBrackets;\n","/* eslint-disable import/no-unresolved */\n// import { builtinModules } from 'module';\n\nimport parseQuery from './parseQuery';\n\nconst useCheckQueryBrackets = require('./checkQueryBrackets');\n\n// given file path, read file at path and parse for instances of 'graphQuill'\nfunction extractQueries(string: string) {\n // console.log(string);\n // define text to search for in file\n const gq: string = 'graphQuill';\n const queriesArr: string[] = [];\n // iterate over string\n for (let i: number = 0; i < string.length; i += 1) {\n // if current slice of string is 'graphQuill'\n // then push evaluated result of parseQueries passing in\n // string sliced from current char to end into queriesArr\n if (string.slice(i, i + gq.length) === gq) {\n queriesArr.push(parseQuery(string.slice(i + gq.length)));\n }\n }\n\n // after finding all instances of 'graphQuill' and parsing out query strings,\n // map queries to new array full of either valid queries of errors\n const validatedQueriesArr: (string | Error)[] = queriesArr.map((queryString) => (\n useCheckQueryBrackets(queryString)));\n // console.log('queriesArr: ', queriesArr);\n // console.log('validatedQueriesArr: ', validatedQueriesArr);\n return validatedQueriesArr;\n}// given file path, read file at path and parse for instances of 'graphQuill'\n\nmodule.exports = extractQueries;\n","/**\n * @author : Alex Chao\n * @function : return the portNumber as a string\n * @param: entryPoint\n * @returns: portNumber as a string\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\nconst fs = require('fs');\n\nfunction findPortNumber(entryPoint: string) {\n // this is a blocking (synchronous) call to the active file, populating 'data' as a string\n const data = fs.readFileSync(entryPoint, 'utf8');\n\n // to stop a localhost, we must first identify a port, and 'app.listen(' is\n // a special string in the active file that is likely to be adjacent to the port number\n const lookup = data.search(/app.listen\\(/);\n\n // this next segment is edge case handling for if the port number\n // is separated from the start parentheses by some number of spaces\n let displace = 0;\n while (data[lookup + displace + 11] === ' ') {\n displace += 1;\n }\n\n // return the port number (accounting for the offsetting per the edge case)\n return data.slice(lookup + 11 + displace, lookup + 15 + displace);\n}\n\nmodule.exports = findPortNumber;\n","/**\n * @author : Alex Chao Nov 7th, 2019. Modularized\n * @function : return the root directory path in a string\n * @param : none\n * @returns : string of the root directory\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\nconst path = require('path');\nconst fs = require('fs');\n\nfunction findRootDirectory() {\n // identify entryPoint for the file that starts the server\n // search for root directory by finding the package.json file\n let root = path.dirname(vscode.window.activeTextEditor!.document.fileName);\n while (!fs.existsSync(`${root}/package.json`)) {\n root = path.dirname(root);\n }\n\n return root;\n}\n\nmodule.exports = findRootDirectory;\n","/* eslint-disable no-unused-vars */\n// these rules are disabled for the weird require that is inside of the function\n/* eslint-disable global-require */\n/* eslint-disable import/no-dynamic-require */\n\n/**\n * @author : Alex Chao\n * @function : return an object with the entryPoint and the allowServerTimeoutConfigSetting\n * @param : none\n * @returns : an array with the root directory AND the entryPoint strings\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\n// const path = require('path');\nconst fs = require('fs');\nconst path = require('path');\n\nfunction parseConfigFile(rootPath: string) {\n // find config file in root directory\n const gqConfigFilePath = `${rootPath}/graphquill.config.js`;\n\n // ! a cached version of this file will be stored here, so future invocations that are trying\n // to get results of an updated config file, will appear to not have been changed\n delete require.cache[gqConfigFilePath];\n\n let entryPoint : string;\n let allowServerTimeoutConfigSetting : number|undefined;\n\n if (fs.existsSync(gqConfigFilePath)) {\n // if the config file exists, require it in (will come in as an object)\n const configObject = require(`${gqConfigFilePath}`);\n // console.log('config object in parseconfigfile.ts', configObject);\n\n // set the entry point to the absolute path (root + relative entry path)\n entryPoint = path.resolve(rootPath, configObject.entry);\n\n // set the servertimeout config setting\n allowServerTimeoutConfigSetting = configObject.serverStartupTimeAllowed;\n } else {\n // default it to the current open editor if there is not a config file\n entryPoint = '';\n\n // ! This will be handled in the outer extension.ts file to notify the user and break out of\n // ! the thread of execution at the same time\n // notify user that config file was not found and current file is being used as the entry point\n // vscode.window.showInformationMessage('graphquill.config.js file was not found.\n // Please use the Create GraphQuill Config File Command to create one');\n }\n\n // return the array with the two results, to be destrucutred when the function is invoked\n return { entryPoint, allowServerTimeoutConfigSetting };\n}\n\nmodule.exports = parseConfigFile;\n","/**\n * @author : Austin Ruby\n * @function : parse and validate query\n * @changelog : Ed Greenberg, November 5th, 2019, created ability to return unbalanced parens\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n\n// add characters to string while within parentheses\nexport default function parseQuery(input: string) {\n let queryString: string = ''; // string to be checked for balanced parens\n let passedQueryString: string = ''; // string to be passed along\n let closer: boolean = false; // trip to prevent passed along string from overwriting\n let openParensCount: number = 0; // balanced parens validation tool\n let closeParensCount: number = 0; // balanced parens valaidation tool\n let index: number = 0; // helps loop through input\n const stack: string[] = []; // helps determine when query should be passed along\n while (index < input.length) { // loop input\n if (input[index] === '(') { // check open parens\n openParensCount += 1; // increment relevant counter\n stack.push(input[index]); // add to stack\n } else if (input[index] === ')') { // check closed parens\n if (stack.length === 0) { // if stack is empty and we have a closed, we have a problem\n return 'unbalanced parens';\n }\n closeParensCount += 1; // increment relevant counter\n stack.pop(); // closed parens eliminates open parens on stack\n }\n queryString += input[index]; // feed current character in loop to preliminary result string\n if (stack.length === 0 && closer === false) { // first time we hit empty stack...\n passedQueryString = queryString; // create result stack;\n closer = true;\n }\n index += 1;\n }\n return openParensCount === closeParensCount ? passedQueryString : 'unbalanced parens';\n}\n","// for requiring in .js files\n/* eslint-disable import/no-unresolved */\n\n// for vscode module being dumb\n/* eslint-disable no-unused-vars */\n\n/**\n * @module : readFileSendReqAndWriteResponse.ts\n * @author : Austin Ruby\n * @function : parse string for instances of 'graphQuill' and extract content\n * within parens immediately following each instance\n * @changelog : Ed Greenberg, November 5th, 2019, copy out boilerplate function invocation\n * to query file if not present\n * @changelog : Alex Chao, November 5th, 2019, merge conflict handling and server additions\n * @changelog : Alex Chao, November 6th, 2019, dynamic port number for fetching, coming from\n * the extension.ts file\n * * */\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\nconst fetch = require('node-fetch');\nconst fs = require('fs');\n\nconst extractQueries = require('./extractQueries');\n\n// checkQueryBrackets used to be here\n// parseQuery used to be here\n// extractQueries was here\n\n// parent function to read file,\n// call helper functions to parse out query string,\n// send request to GraphQL API,\n// and return response to output channel\nfunction readFileSendReqAndWriteResponse(\n filePath: string,\n channel: vscode.OutputChannel,\n portNumber: string,\n rootPath: string, // passing the root path in to control the function def. injection\n) {\n // console.log('inreadFile: ', filePath);\n\n // parse the contents of the entire filePath file to a string\n const copy = fs.readFileSync(filePath).toString();\n // check if the file is within the root directory, otherwise we don't want to inject the\n // function defintion\n if (filePath.includes(rootPath) && !copy.includes('function graphQuill')) {\n const newFile = `function graphQuill() {}\\n\\n${copy}`;\n fs.writeFileSync(filePath, newFile);\n }\n\n // read user's file\n fs.readFile(filePath, (err: Error, data: Buffer) => {\n if (err) {\n console.log(err);\n } else {\n // if no error, convert data to string and pass into gQParser to pull out query/ies\n const result: (string | Error)[] = extractQueries(data.toString());\n\n // send post request to API/graphql\n\n setTimeout(() => {\n // console.log('IN SET TIMEOUT');\n\n // handle multiple queries in file...\n // the additional quotes need to be parsed off\n const queriesWithoutQuotes: (string|false)[] = result.filter(\n // callback to remove empty string queries (i.e. the function def of graphQuill)\n (e: string|Error) => (typeof e === 'string' && e.length),\n ).map(\n (query: string|Error) => (\n // should all be strings...\n typeof query === 'string' && query.slice(1, query.length - 1)\n ),\n );\n\n console.log('--JUST THE QUERIES', queriesWithoutQuotes);\n\n\n // TODO pair up the requests and responses. Right now the responses are coming in a random\n // TODO order because of async fetches\n\n // TODO MAKE THIS A PROMISE ALL? or does it not matter because the for loop will send off\n // TODO all of the fetches simultaneously and just append responses on as they come in...\n // console.log('query w/o quotes is', queryMinusQuotes);\n queriesWithoutQuotes.forEach((query) => {\n // send the fetch to the correct port (passed in as a variable)\n fetch(`http://localhost:${portNumber}/graphql`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ query }),\n })\n .then((response: Response) => response.json())\n .then((thing: Object) => {\n console.log('printed: ', thing);\n // append any graphql response to the output channel\n channel.append(`\\n${JSON.stringify(thing, null, 2)}`); // may need to stringify to send\n channel.show(true);\n })\n .catch((error: Error) => {\n console.log('fetch catch error: ', error, typeof error, error.constructor.name);\n\n // print any errors to the output channel\n channel.append(`ERROR!!!\\n${JSON.stringify(error, null, 2)}`);\n });\n });\n\n // only append this string to the output channel once\n channel.append('Responses are:');\n }, 1); // TODO BIG UX FIX NEEDED HERE\n\n // then send response back to vscode output channel\n // console.log('parsed queries are', result);\n // TODO match these up with the correct queries when there are multiple within a single file\n channel.append(`GraphQuill Queries are:\\n${result.filter((e : string|Error) => (typeof e === 'string' ? e.length : false))}\\n`);\n channel.show(true);\n }\n });\n}\n\nmodule.exports = readFileSendReqAndWriteResponse;\n","/**\n * @module : checkForRunningServer.ts\n * @author : Alex Chao, Nov 7th, 2019\n * @function : uses child process and lsof to check if a port is currently running\n * @param : portNumber, string\n * @param : once: boolean, true if the function should check if the port is open right when the\n * function is run. OR false if the function should wait for the server to start before resolving\n * @param : allowServerTimeoutConfigSetting: number, user input from config file to determine how\n * long to wait for the server to start. Defaults to 3000 (milliseconds)\n * @returns : a boolean, true if the server has started, false if it has not started\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n// eslint-disable-next-line import/no-unresolved\n// import * as vscode from 'vscode';\n\n// const path = require('path');\n// const fs = require('fs');\nconst childProcess = require('child_process');\n\nconst checkForRunningServer = (\n portNumber: string,\n once: boolean,\n allowServerTimeoutConfigSetting = 3000,\n) => {\n console.log('CHECK FOR RUNNING SERVER IS RUNNINGGGGGG');\n // console.log(portNumber, once, allowServerTimeoutConfigSetting);\n // moved this line into the serverOn file so that each time serverOn is called\n // a new child process is started. This is critical to being able to toggle\n // GraphQuill on and off\n let portOpen = false;\n let allTerminalText: string;\n const bashTerminal = childProcess.spawn('bash');\n\n // next, we activate two terminal methods to give us\n // feedback on whether we sucessfully used a child process\n // note the Typescript (: any) used to handle unknown data inputs\n bashTerminal.stdout.on('data', (data: Buffer) => {\n // console.log(`--stdout from terminal: ${data}`);\n console.log('terminal has printed some data...');\n allTerminalText = data.toString();\n portOpen = allTerminalText.includes('node');\n // console.log('allterminal text', allTerminalText);\n // console.log('---data type is', data.constructor.name);\n });\n\n // log what the exit code is in the extension terminal\n bashTerminal.on('exit', (code: Number) => {\n console.log(`checkForRunningServer child process exited with code ${code}`);\n // console.log('--exit code type is', code.constructor.name);\n });\n\n // just below is the real core of the function, the child process:\n // checks if the port is active with the `lsof -i :${portNumber}\\n` command\n // IMPORTANT: code will not run without the '\\n' component--the CLI needs this\n return new Promise((resolve) => {\n let numRuns = 0;\n let timeoutId: NodeJS.Timer;\n // A set interval callback that will write a command to the terminal every 200ms, then check\n // if the portOpen boolean has been changed (it is actually changed in the on-data listener\n // above). Promise will resolve when the portOpen variable is true\n const intervalLsofToBash = setInterval(() => {\n bashTerminal.stdin.write(`lsof -i :${portNumber}\\n`);\n // console.log('inside promise-- portOpen boolean', portOpen);\n // console.log('inside promise-- allTerminalText', allTerminalText);\n\n // if the port is open, resolve the promise, return some value...\n if (portOpen) {\n // clear set intervals\n clearInterval(intervalLsofToBash);\n\n // clear the timeoutId\n if (timeoutId) clearTimeout(timeoutId);\n\n // end terminal session\n bashTerminal.stdin.end();\n\n console.log('port is open!');\n\n // resolve promise\n // return a confirmed status\n resolve(true);\n }\n\n // if once param was set to true, we only want to check if the server is \"immediately\" on, so\n // check if once is true, and numRuns is greater than one, then resolve the promise with the\n // result of portOpen\n if (once && numRuns > 1) {\n console.log('---once conditional triggered, result is:', portOpen);\n // clear set intervals\n clearInterval(intervalLsofToBash);\n\n // clear the timeoutId\n if (timeoutId) clearTimeout(timeoutId);\n\n // end terminal session\n bashTerminal.stdin.end();\n\n resolve(portOpen);\n }\n\n // increment numRuns for the once conditional test\n numRuns += 1;\n }, 200); // Run every 200ms\n\n // default/base case to resolve promise if the server hasn't started in 3 seconds\n // This means the server is either spinning up too slowly or there is an error in the user's\n // server starting file. In either case we want to return false\n if (!once) {\n // only create this default timeout if this function was invoked with once === false\n timeoutId = setTimeout(() => {\n console.log('timeout of checkForRunningServer');\n // clear set intervals\n clearInterval(intervalLsofToBash);\n\n // end terminal session\n bashTerminal.stdin.end();\n\n // resolve the promise\n resolve(false);\n }, allowServerTimeoutConfigSetting); // default allowed time is 3 sec.\n }\n });\n};\n\nmodule.exports = checkForRunningServer;\n","/**\n * @module : serverOff.ts\n * @author : Ed Greenberg\n * @function : turn off server\n * @changelog : Ed Greenberg, November 5th, 2019, rewrote to open port on server/index.js\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\nconst fs = require('fs');\nconst path = require('path');\nconst childProcess = require('child_process');\n\n// spawn a new child process that will be used to close the open port\n\nconst serverOff = (portNumber: Number) => {\n console.log('in serveroff function file');\n // this one also had to be pulled into serverOff so that a new child process is started to\n // kill the server port\n const terminal2 = childProcess.spawn('bash');\n\n // we find the root directory by looking up from the active file\n // ...until we detect a folder with package.json\n let root = path.dirname(vscode.window.activeTextEditor!.document.fileName);\n while (!fs.existsSync(`${root}/package.json`)) {\n root = path.dirname(root);\n console.log('a root grows: ', root);\n }\n\n // const temp = vscode.window.activeTextEditor!.document.fileName;\n\n // write any data/outputs from the terminal to the extension console\n terminal2.stdout.on('data', (data: Buffer) => {\n console.log(`stdout: ${data}`);\n });\n\n // on terminal exit, print the exit code\n terminal2.on('exit', (code: Number) => {\n console.log(`terminal2 child process exited with code ${code}`);\n });\n\n // // this is a blocking (synchronous) call to the active file, populating 'data' as a string\n // const data = fs.readFileSync(`${root}/server/index.js`, 'utf8');\n\n // // to stop a localhost, we must first identify a port, and 'app.listen(' is\n // // a special string in the active file that is likely to be adjacent to the port number\n // const lookup = data.search(/app.listen\\(/);\n\n // // this next segment is edge case handling for if the port number\n // // is separated from the start parentheses by some number of spaces\n // let displace = 0;\n // while (data[lookup + displace + 11] === ' ') {\n // displace += 1;\n // }\n\n // // in target, we slice the port out of the array (offsetting as required by the edge case test)\n // // eslint-disable-next-line no-unused-vars\n // const target = data.slice(lookup + 11 + displace, lookup + 15 + displace);\n\n // ? I don't think these need to be delayed... just kill the process\n // in the core of our function, we run a special command that finds and kills the port specified\n // setTimeout(() => {\n // terminal2.stdin.write(`kill $(lsof -t -i:${target})\\n`);\n terminal2.stdin.write(`kill $(lsof -t -i:${portNumber})\\n`);\n terminal2.stdin.end();\n // }, 1);\n\n vscode.window.showInformationMessage('GraphQuill has been turned off');\n};\n\nmodule.exports = serverOff;\n","/**\n * @module : serverOn.ts\n * @author : Ed Greenberg\n * @function : turn on server\n * @changelog : Ed Greenberg, November 5th, 2019, rewrote to open port on server/index.js\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\n// const path = require('path');\n// const fs = require('fs');\nconst childProcess = require('child_process');\n\n\nconst serverOn = (entryPoint: string) => {\n // moved this line into the serverOn file so that each time serverOn is called\n // a new child process is started. This is critical to being able to toggle\n // GraphQuill on and off\n const terminal = childProcess.spawn('bash');\n\n // we find the root directory by looking up from the active file\n // ...until we detect a folder with package.json\n // let root = path.dirname(vscode.window.activeTextEditor!.document.fileName);\n // while (!fs.existsSync(`${root}/package.json`)) {\n // root = path.dirname(root);\n // console.log('a root grows: ', root);\n // }\n\n // next, we activate two terminal methods to give us\n // feedback on whether we sucessfully used a child process\n // note the Typescript (: any) used to handle unknown data inputs\n terminal.stdout.on('data', (data: Buffer) => {\n // todo add validation, if there is an error that is logged here, it's coming from node\n // todo and should be piped to the channel as well\n // todo this may require passing in the channel to the serverOn function...\n console.log(`stdout from terminal: ${data}`);\n // console.log('---data type is', data.constructor.name);\n });\n\n // log what the exit code is in the extension terminal\n terminal.on('exit', (code: Number) => {\n console.log(`child process exited with code ${code}`);\n // console.log('--exit code type is', code.constructor.name);\n });\n\n // just below is the real core of the function, the child process:\n // we write to a new terminal to run the index.js file in the folder specified by base\n // IMPORTANT: code will not run without the '\\n' component--the CLI needs this\n // explicit return command\n return new Promise((resolve) => {\n // console.log('inside promise');\n setTimeout(() => {\n // console.log('root: ', root);\n console.log('Sending stdin (node command) to terminal');\n\n // this seems to take some time to spin up the server and\n // throws an error with the timing of a fetch\n // terminal.stdin.write(`node ${root}/server/index.js\\n`);\n terminal.stdin.write(`node ${entryPoint}\\n`);\n console.log('Ending terminal session');\n terminal.stdin.end();\n\n // resolve promise\n resolve();\n console.log('just resolved');\n\n vscode.window.showInformationMessage('GraphQuill Activated');\n }, 1);\n });\n\n // this message pops up to the user upon completion of the command\n};\n\nmodule.exports = serverOn;\n","module.exports = require(\"child_process\");","module.exports = require(\"fs\");","module.exports = require(\"http\");","module.exports = require(\"https\");","module.exports = require(\"path\");","module.exports = require(\"stream\");","module.exports = require(\"url\");","module.exports = require(\"vscode\");","module.exports = require(\"zlib\");"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["../webpack/bootstrap","../external \"stream\"","../external \"zlib\"","../external \"fs\"","../external \"vscode\"","../external \"url\"",".././src/modules/client/readFileSendReqAndWriteResponse.ts",".././src/modules/client/extractQueries.ts",".././src/modules/client/parseQuery.ts",".././src/modules/client/checkQueryBrackets.ts","../external \"child_process\"","../external \"path\"",".././src/modules/client/findRootDirectory.ts",".././src/modules/client/parseConfigFile.ts",".././src/modules/client/findPortNumber.ts","../external \"http\"","../external \"https\"",".././src/extension.ts",".././node_modules/node-fetch/lib/index.mjs",".././src/modules/server/serverOn.ts",".././src/modules/server/serverOff.ts",".././src/modules/server/checkForRunningServer.ts",".././src/modules/client sync ^.*$"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","require","fetch","fs","extractQueries","filePath","channel","portNumber","rootPath","copy","readFileSync","toString","includes","newFile","writeFileSync","readFile","err","data","console","log","result","setTimeout","queriesWithoutQuotes","filter","e","length","map","query","slice","forEach","method","headers","body","JSON","stringify","then","response","json","thing","append","show","catch","error","constructor","useCheckQueryBrackets","string","gq","queriesArr","push","queryString","input","passedQueryString","closer","openParensCount","closeParensCount","index","stack","pop","validatedSoFar","el","indexOf","Error","join","path","root","dirname","vscode","window","activeTextEditor","document","fileName","existsSync","gqConfigFilePath","entryPoint","allowServerTimeoutConfigSetting","configObject","resolve","entry","serverStartupTimeAllowed","lookup","search","displace","readFileSendReqAndWriteResponse","serverOn","serverOff","checkForRunningServer","findRootDirectory","parseConfigFile","findPortNumber","context","gqChannel","createOutputChannel","saveListener","isOnToggle","serverTurnedOnByGraphQuill","disposableActivateGraphQuill","commands","registerCommand","showInformationMessage","parseResult","serverOnFromUser","clear","currOpenEditorPath","workspace","onDidSaveTextDocument","event","subscriptions","disposableDisableGraphQuill","dispose","hide","disposableToggleGraphQuill","executeCommand","disposableCreateConfigFile","graphQuillConfigPath","openTextDocument","doc","showTextDocument","Readable","BUFFER","TYPE","Blob","this","blobParts","arguments","options","buffers","size","a","Number","element","buffer","Buffer","ArrayBuffer","isView","from","byteOffset","byteLength","String","concat","type","undefined","toLowerCase","test","Promise","buf","ab","readable","_read","start","end","relativeStart","relativeEnd","Math","max","min","span","slicedBuffer","blob","FetchError","message","systemError","code","errno","captureStackTrace","convert","defineProperties","writable","configurable","INTERNALS","PassThrough","Body","_this","_ref","_ref$size","_ref$timeout","timeout","isURLSearchParams","isBlob","isBuffer","disturbed","on","url","consumeBody","_this4","reject","TypeError","alloc","stream","accum","accumBytes","abort","resTimeout","chunk","clearTimeout","obj","delete","getAll","has","set","sort","arrayBuffer","clone","instance","p1","p2","bodyUsed","getBoundary","pipe","extractContentType","getTotalBytes","getLengthSync","_lengthRetrievers","hasKnownLength","ct","assign","_this2","parse","_this3","res","str","charset","exec","convertBody","text","mixIn","proto","getOwnPropertyNames","desc","getOwnPropertyDescriptor","global","invalidTokenRegex","invalidHeaderCharRegex","validateName","validateValue","find","MAP","Headers","init","rawHeaders","raw","headerNames","keys","headerName","iterator","pairs","pair","Array","callback","thisArg","getHeaders","_pairs$i","createHeadersIterator","kind","k","entries","values","INTERNAL","target","HeadersIteratorPrototype","setPrototypeOf","getPrototypeOf","_INTERNAL","done","exportNodeCompatibleHeaders","__proto__","hostHeaderKey","INTERNALS$1","STATUS_CODES","Response","opts","status","contentType","statusText","counter","ok","redirected","INTERNALS$2","parse_url","format_url","format","streamDestructionSupported","isRequest","Request","parsedURL","href","toUpperCase","inputBody","signal","isAbortSignal","redirect","follow","compress","agent","AbortError","PassThrough$1","resolve_url","request","protocol","hostname","contentLengthValue","totalBytes","getNodeRequestOptions","send","destroy","emit","aborted","abortAndFinalize","finalize","req","reqTimeout","removeEventListener","addEventListener","once","socket","isArray","val","createHeadersLenient","isRedirect","statusCode","location","locationURL","requestOpts","response_options","statusMessage","codings","zlibOptions","flush","Z_SYNC_FLUSH","finishFlush","createGunzip","createBrotliDecompress","createInflate","createInflateRaw","dest","write","writeToStream","childProcess","terminal","spawn","stdout","stdin","terminal2","allTerminalText","portOpen","bashTerminal","timeoutId","numRuns","intervalLsofToBash","setInterval","clearInterval","webpackContext","id","webpackContextResolve"],"mappings":"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","file":"extension.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 \t\t}\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// 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, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\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\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 16);\n","module.exports = require(\"stream\");","module.exports = require(\"zlib\");","module.exports = require(\"fs\");","module.exports = require(\"vscode\");","module.exports = require(\"url\");","// for requiring in .js files\n/* eslint-disable import/no-unresolved */\n\n// for vscode module being dumb\n/* eslint-disable no-unused-vars */\n\n/**\n * @module : readFileSendReqAndWriteResponse.ts\n * @author : Austin Ruby\n * @function : parse string for instances of 'graphQuill' and extract content\n * within parens immediately following each instance\n * @changelog : Ed Greenberg, November 5th, 2019, copy out boilerplate function invocation\n * to query file if not present\n * @changelog : Alex Chao, November 5th, 2019, merge conflict handling and server additions\n * @changelog : Alex Chao, November 6th, 2019, dynamic port number for fetching, coming from\n * the extension.ts file\n * * */\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\nconst fetch = require('node-fetch');\nconst fs = require('fs');\n\nconst extractQueries = require('./extractQueries');\n\n// checkQueryBrackets used to be here\n// parseQuery used to be here\n// extractQueries was here\n\n// parent function to read file,\n// call helper functions to parse out query string,\n// send request to GraphQL API,\n// and return response to output channel\nfunction readFileSendReqAndWriteResponse(\n filePath: string,\n channel: vscode.OutputChannel,\n portNumber: string,\n rootPath: string, // passing the root path in to control the function def. injection\n) {\n // console.log('inreadFile: ', filePath);\n\n // parse the contents of the entire filePath file to a string\n const copy = fs.readFileSync(filePath).toString();\n // check if the file is within the root directory, otherwise we don't want to inject the\n // function defintion\n if (filePath.includes(rootPath) && !copy.includes('function graphQuill')) {\n const newFile = `function graphQuill() {}\\n\\n${copy}`;\n fs.writeFileSync(filePath, newFile);\n }\n\n // read user's file\n fs.readFile(filePath, (err: Error, data: Buffer) => {\n if (err) {\n console.log(err);\n } else {\n // if no error, convert data to string and pass into gQParser to pull out query/ies\n const result: (string | Error)[] = extractQueries(data.toString());\n\n // send post request to API/graphql\n\n setTimeout(() => {\n // console.log('IN SET TIMEOUT');\n\n // handle multiple queries in file...\n // the additional quotes need to be parsed off\n const queriesWithoutQuotes: (string|false)[] = result.filter(\n // callback to remove empty string queries (i.e. the function def of graphQuill)\n (e: string|Error) => (typeof e === 'string' && e.length),\n ).map(\n (query: string|Error) => (\n // should all be strings...\n typeof query === 'string' && query.slice(1, query.length - 1)\n ),\n );\n\n console.log('--JUST THE QUERIES', queriesWithoutQuotes);\n\n\n // TODO pair up the requests and responses. Right now the responses are coming in a random\n // TODO order because of async fetches\n\n // TODO MAKE THIS A PROMISE ALL? or does it not matter because the for loop will send off\n // TODO all of the fetches simultaneously and just append responses on as they come in...\n // console.log('query w/o quotes is', queryMinusQuotes);\n queriesWithoutQuotes.forEach((query) => {\n // send the fetch to the correct port (passed in as a variable)\n fetch(`http://localhost:${portNumber}/graphql`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ query }),\n })\n .then((response: Response) => response.json())\n .then((thing: Object) => {\n console.log('printed: ', thing);\n // append any graphql response to the output channel\n channel.append(`\\n${JSON.stringify(thing, null, 2)}`); // may need to stringify to send\n channel.show(true);\n })\n .catch((error: Error) => {\n console.log('fetch catch error: ', error, typeof error, error.constructor.name);\n\n // print any errors to the output channel\n channel.append(`ERROR!!!\\n${JSON.stringify(error, null, 2)}`);\n });\n });\n\n // only append this string to the output channel once\n channel.append('Responses are:');\n }, 1); // TODO BIG UX FIX NEEDED HERE\n\n // then send response back to vscode output channel\n // console.log('parsed queries are', result);\n // TODO match these up with the correct queries when there are multiple within a single file\n channel.append(`GraphQuill Queries are:\\n${result.filter((e : string|Error) => (typeof e === 'string' ? e.length : false))}\\n`);\n channel.show(true);\n }\n });\n}\n\nmodule.exports = readFileSendReqAndWriteResponse;\n","/* eslint-disable import/no-unresolved */\n// import { builtinModules } from 'module';\n\nimport parseQuery from './parseQuery';\n\nconst useCheckQueryBrackets = require('./checkQueryBrackets');\n\n// given file path, read file at path and parse for instances of 'graphQuill'\nfunction extractQueries(string: string) {\n // console.log(string);\n // define text to search for in file\n const gq: string = 'graphQuill';\n const queriesArr: string[] = [];\n // iterate over string\n for (let i: number = 0; i < string.length; i += 1) {\n // if current slice of string is 'graphQuill'\n // then push evaluated result of parseQueries passing in\n // string sliced from current char to end into queriesArr\n if (string.slice(i, i + gq.length) === gq) {\n queriesArr.push(parseQuery(string.slice(i + gq.length)));\n }\n }\n\n // after finding all instances of 'graphQuill' and parsing out query strings,\n // map queries to new array full of either valid queries of errors\n const validatedQueriesArr: (string | Error)[] = queriesArr.map((queryString) => (\n useCheckQueryBrackets(queryString)));\n // console.log('queriesArr: ', queriesArr);\n // console.log('validatedQueriesArr: ', validatedQueriesArr);\n return validatedQueriesArr;\n}// given file path, read file at path and parse for instances of 'graphQuill'\n\nmodule.exports = extractQueries;\n","/**\n * @author : Austin Ruby\n * @function : parse and validate query\n * @changelog : Ed Greenberg, November 5th, 2019, created ability to return unbalanced parens\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n\n// add characters to string while within parentheses\nexport default function parseQuery(input: string) {\n let queryString: string = ''; // string to be checked for balanced parens\n let passedQueryString: string = ''; // string to be passed along\n let closer: boolean = false; // trip to prevent passed along string from overwriting\n let openParensCount: number = 0; // balanced parens validation tool\n let closeParensCount: number = 0; // balanced parens valaidation tool\n let index: number = 0; // helps loop through input\n const stack: string[] = []; // helps determine when query should be passed along\n while (index < input.length) { // loop input\n if (input[index] === '(') { // check open parens\n openParensCount += 1; // increment relevant counter\n stack.push(input[index]); // add to stack\n } else if (input[index] === ')') { // check closed parens\n if (stack.length === 0) { // if stack is empty and we have a closed, we have a problem\n return 'unbalanced parens';\n }\n closeParensCount += 1; // increment relevant counter\n stack.pop(); // closed parens eliminates open parens on stack\n }\n queryString += input[index]; // feed current character in loop to preliminary result string\n if (stack.length === 0 && closer === false) { // first time we hit empty stack...\n passedQueryString = queryString; // create result stack;\n closer = true;\n }\n index += 1;\n }\n return openParensCount === closeParensCount ? passedQueryString : 'unbalanced parens';\n}\n","/**\n * @module : parser.ts\n * @author : Austin Ruby\n * @function : parse string for instances of 'graphQuill' and extract content\n * within parens immediately following each instance\n * @changelog : Ed Greenberg, November 4th, 2019, rewrote to remove enum bug\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n\n// check if parens are balanced for parsed query strings\n// if they're balanced, return original query string\n// if they're not, return error message with imbalanced bracket/s\nfunction checkQueryBrackets(queryString: string) {\n const stack: string[] = []; // the core of the function...\n // ...where detected opening brackets will be pushed in and pop off when the parser finds a mate\n const validatedSoFar: string[] = []; // a running copy of the query\n const openings: string = '{[('; // list of opening brackets\n const closings: string = '}])'; // list of closing brackets\n\n\n // eslint-disable-next-line no-restricted-syntax\n for (const el of queryString) { // loop the query\n if (openings.includes(el)) stack.push(el); // if query el is opening bracket, add el to stack\n if (closings.includes(el)) {\n if (stack[stack.length - 1] === openings[closings.indexOf(el)]) stack.pop();\n // if top of stack mates a new closing bracket, we are good, can reduce stack and keep going\n else break;\n // if the top of stack does not mate closing bracket, we stop loop and skip to declaring error\n }\n validatedSoFar.push(el); // helping keep running copy of query\n }\n\n\n return stack.length === 0 // this will be zero if all query brackets have matches\n ? queryString.slice(1, queryString.length - 1) // this substring is sent ahead if validated\n : new Error(`${`The following character makes the query unbalanced: ${stack[stack.length - 1]}\\n`\n + 'The portion of the query that ran before the unbalance was detected was:\\n'}${\n validatedSoFar.join('')}\\n\\n`); // ...otherwise, we report an error\n}\n\nmodule.exports = checkQueryBrackets;\n","module.exports = require(\"child_process\");","module.exports = require(\"path\");","/**\n * @author : Alex Chao Nov 7th, 2019. Modularized\n * @function : return the root directory path in a string\n * @param : none\n * @returns : string of the root directory\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\nconst path = require('path');\nconst fs = require('fs');\n\nfunction findRootDirectory() {\n // identify entryPoint for the file that starts the server\n // search for root directory by finding the package.json file\n let root = path.dirname(vscode.window.activeTextEditor!.document.fileName);\n while (!fs.existsSync(`${root}/package.json`)) {\n root = path.dirname(root);\n }\n\n return root;\n}\n\nmodule.exports = findRootDirectory;\n","/* eslint-disable no-unused-vars */\n// these rules are disabled for the weird require that is inside of the function\n/* eslint-disable global-require */\n/* eslint-disable import/no-dynamic-require */\n\n/**\n * @author : Alex Chao\n * @function : return an object with the entryPoint and the allowServerTimeoutConfigSetting\n * @param : none\n * @returns : an array with the root directory AND the entryPoint strings\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\n// const path = require('path');\nconst fs = require('fs');\nconst path = require('path');\n\nfunction parseConfigFile(rootPath: string) {\n // find config file in root directory\n const gqConfigFilePath = `${rootPath}/graphquill.config.js`;\n\n // ! a cached version of this file will be stored here, so future invocations that are trying\n // to get results of an updated config file, will appear to not have been changed\n delete require.cache[gqConfigFilePath];\n\n let entryPoint : string;\n let allowServerTimeoutConfigSetting : number|undefined;\n\n if (fs.existsSync(gqConfigFilePath)) {\n // if the config file exists, require it in (will come in as an object)\n const configObject = require(`${gqConfigFilePath}`);\n // console.log('config object in parseconfigfile.ts', configObject);\n\n // set the entry point to the absolute path (root + relative entry path)\n entryPoint = path.resolve(rootPath, configObject.entry);\n\n // set the servertimeout config setting\n allowServerTimeoutConfigSetting = configObject.serverStartupTimeAllowed;\n } else {\n // default it to the current open editor if there is not a config file\n entryPoint = '';\n\n // ! This will be handled in the outer extension.ts file to notify the user and break out of\n // ! the thread of execution at the same time\n // notify user that config file was not found and current file is being used as the entry point\n // vscode.window.showInformationMessage('graphquill.config.js file was not found.\n // Please use the Create GraphQuill Config File Command to create one');\n }\n\n // return the array with the two results, to be destrucutred when the function is invoked\n return { entryPoint, allowServerTimeoutConfigSetting };\n}\n\nmodule.exports = parseConfigFile;\n","/**\n * @author : Alex Chao\n * @function : return the portNumber as a string\n * @param: entryPoint\n * @returns: portNumber as a string\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\nconst fs = require('fs');\n\nfunction findPortNumber(entryPoint: string) {\n // this is a blocking (synchronous) call to the active file, populating 'data' as a string\n const data = fs.readFileSync(entryPoint, 'utf8');\n\n // to stop a localhost, we must first identify a port, and 'app.listen(' is\n // a special string in the active file that is likely to be adjacent to the port number\n const lookup = data.search(/app.listen\\(/);\n\n // this next segment is edge case handling for if the port number\n // is separated from the start parentheses by some number of spaces\n let displace = 0;\n while (data[lookup + displace + 11] === ' ') {\n displace += 1;\n }\n\n // return the port number (accounting for the offsetting per the edge case)\n return data.slice(lookup + 11 + displace, lookup + 15 + displace);\n}\n\nmodule.exports = findPortNumber;\n","module.exports = require(\"http\");","module.exports = require(\"https\");","/**\n * @author : Austin Ruby, Alex Chao, Ed Greenberg\n * @function : activate extension\n * @changelog : Ed Greenberg, November 5th, 2019, added flexible query file detection\n * @changelog : Alex Chao, Nov. 5th-10th 2019... Lots of changes... server listener added\n * - config file setup command made\n * - config file option to allow for a longer time for the graphql server to startup\n * ! I propose we add the PORT number to config file\n * - updating variables in the event of changes in the config files\n * @changelog : ## Austin?\n * * */\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\n// only needed for creating the config file\nconst fs = require('fs');\n\n\n/* eslint-disable import/no-unresolved */\nconst readFileSendReqAndWriteResponse = require('./modules/client/readFileSendReqAndWriteResponse');\nconst serverOn = require('./modules/server/serverOn');\nconst serverOff = require('./modules/server/serverOff');\n\n// require in new function that checks for a running server\nconst checkForRunningServer = require('./modules/server/checkForRunningServer');\n\n// require in file that finds root directory\nconst findRootDirectory = require('./modules/client/findRootDirectory');\n// require in file that returns entryPoint when given the root path\nconst parseConfigFile = require('./modules/client/parseConfigFile');\n// require in file that finds port#\nconst findPortNumber = require('./modules/client/findPortNumber');\n\n\n// this method is called when your extension is activated\n// your extension is activated the very first time the command is executed\nexport function activate(context: vscode.ExtensionContext) {\n // * These are some variables that I need to pass between different commands, so they're in\n // * a higher scope\n // this ChannelRef variable will be used to pass the output channel between separate function defs\n // let graphQuillChannelRef: vscode.OutputChannel;\n const gqChannel = vscode.window.createOutputChannel('GraphQuill');\n\n // a toggle variable that will is true when the server is on\n let isOnToggle = false;\n\n // a disposable variable to get rid of the save event listener\n let saveListener: vscode.Disposable;\n\n // set rootPath and entryPoint to a string of the path to the server startup file (has app.listen)\n const rootPath = findRootDirectory();\n\n // putting these variables in the global scope with the expectation that they will be set upon\n // activating the extension. I'm moving them to be able to manage \"live\" changes\n let entryPoint: string;\n let allowServerTimeoutConfigSetting: number;\n\n // set portNumber to a string. It is going to be set in the activation command\n let portNumber: string;\n\n // boolean to track if the server has been successfully turned on by the user\n let serverTurnedOnByGraphQuill = false;\n\n /** **********************************************************************************************\n * * The command must be defined in package.json under contributes/commands AND activation events\n * Now provide the implementation of the command with registerCommand\n * The commandId parameter must match the command field in package.json\n * * This is the first GraphQuill option in the command palette for activating GraphQuill\n *********************************************************************************************** */\n const disposableActivateGraphQuill = vscode.commands.registerCommand('extension.activateGraphQuill', async () => {\n if (isOnToggle) {\n // if server is already running, break out of function by returning null\n console.log('Server is already running');\n vscode.window.showInformationMessage('GraphQuill is already active');\n return null;\n }\n\n // show output channel\n gqChannel.show(true);\n\n // parse the config file (this is important in case if there were any changes)\n let parseResult = parseConfigFile(rootPath);\n entryPoint = parseResult.entryPoint;\n allowServerTimeoutConfigSetting = parseResult.allowServerTimeoutConfigSetting;\n\n // if the entryPoint is falsey, break out of the function and tell the\n // user to create a config file\n if (!entryPoint) {\n gqChannel.append('The config file was not found, please use the Create GraphQuill Config File Command to make one.');\n // break out of this execution context\n return null;\n }\n\n // set the portNumber (in the higher scope so it can be used in the deactivate function)\n portNumber = findPortNumber(entryPoint);\n\n // Check ONCE if the port is open (also this does not need the third param)\n // will resolve to a true or false value\n const serverOnFromUser = await checkForRunningServer(portNumber, true);\n // console.log('--serverOnFromUser after once check is:', serverOnFromUser);\n\n // trigger serverOn if the user does not already have the server running\n if (!serverOnFromUser) {\n // start up the user's server\n serverOn(entryPoint);\n\n // give user feedback that server is starting up\n gqChannel.clear();\n gqChannel.append('The server is starting up...');\n\n // await this function that will return true or false based on if the server has been started\n // false: if starting the server is longer than the time allotted in the config file (defaults\n // to 3 seconds)\n serverTurnedOnByGraphQuill = await checkForRunningServer(portNumber,\n // once setting is false, so the returned promise will only resolve when the server has\n // started OR the timeout (next variable or 3sec) is reached\n false,\n // allowServerT.C.S. is either a time in milliseconds that defaults to 3000\n allowServerTimeoutConfigSetting);\n\n // if it is false, that means there was an error starting the server\n // notify the user & end the thread of execution\n if (!serverTurnedOnByGraphQuill) {\n // console.log('server is taking too long to startup');\n\n // give feedback to user that port didn't start (and the specified timeout config setting,\n // defaults to 3 seconds)\n gqChannel.clear();\n gqChannel.append(`The server is taking too long to startup (>${(allowServerTimeoutConfigSetting || 3000) / 1000} seconds).\\nTo increase this time, update the \"serverStartupTimeAllowed\" setting in the graphquill.config.js file.`);\n\n // break out, and just in case I'm going to try to kill the port if it did open\n // otherwise we could get runaway node processes...\n return setTimeout(() => serverOff(portNumber), 5000);\n }\n }\n\n // if the server is on from either the user or graphquill, continue\n // send first query & setup on save listener\n if (serverOnFromUser || serverTurnedOnByGraphQuill) {\n // update isOnToggle (refers to state of GraphQuill extension running or not)\n isOnToggle = true;\n\n // clear any other stuff off of the channel (e.g. previous error message)\n gqChannel.clear();\n\n // get the fileName of the open file when the extension is FIRST fired\n const currOpenEditorPath: string = vscode.window.activeTextEditor!.document.fileName;\n // send that request from the currentopeneditor\n readFileSendReqAndWriteResponse(currOpenEditorPath, gqChannel, portNumber, rootPath);\n\n // initialize the save listener here to clear the channel and resend new requests\n saveListener = vscode.workspace.onDidSaveTextDocument((event) => {\n // console.log('save event!!!', event);\n\n // clear the graphQuill channel\n gqChannel.clear();\n\n // re-parse the config file (in case the user made a change)\n parseResult = parseConfigFile(rootPath);\n entryPoint = parseResult.entryPoint;\n allowServerTimeoutConfigSetting = parseResult.allowServerTimeoutConfigSetting;\n\n if (!entryPoint) {\n gqChannel.append('The config file was not found, please use the Create GraphQuill Config File Command to make one.');\n // break out of this execution context\n return null;\n }\n\n // ! I really think we should add the port number to the config file to specify to the user\n // ! That the port number SHUOLD not be changed...\n // TODO this seems very redundant... but I'm blanking on how to make this dynamic\n // TODO update if the user changes their server file...\n // on each save... reparse for a portNumber in case if it was changed\n portNumber = findPortNumber(entryPoint);\n\n // send the filename and channel to the readFileSRAWR function\n readFileSendReqAndWriteResponse(event.fileName, gqChannel, portNumber, rootPath);\n\n // satisfying linter\n return null;\n });\n }\n\n // to satisfy typescript linter...\n return null;\n });\n\n // push it to the subscriptions\n context.subscriptions.push(disposableActivateGraphQuill);\n\n\n /** **************************************************************************\n * * Second GraphQuill option in the command palette (Cmd Shift P) for deactivating graphquill\n ************************************************************************** */\n const disposableDisableGraphQuill = vscode.commands.registerCommand('extension.deactivateGraphQuill', () => {\n // console.log('--deactivate functionality triggered');\n\n // check isontoggle boolean\n if (!isOnToggle) {\n // server is already off\n console.log('server is already off');\n vscode.window.showInformationMessage('GraphQuill is already off');\n\n return null;\n }\n\n // change toggle boolean\n isOnToggle = false;\n\n // dispose of the onDidSaveTextDocument event listener\n if (saveListener) saveListener.dispose();\n\n // close/hide GraphQuill channel\n gqChannel.hide();\n gqChannel.clear();\n\n console.log('in deactivate, the server turned on by graphquill boolean is: ', serverTurnedOnByGraphQuill);\n // invoke server off in this function\n return setTimeout(() => (serverTurnedOnByGraphQuill && serverOff(portNumber)), 1);\n });\n\n // push it into the subscriptions\n context.subscriptions.push(disposableDisableGraphQuill);\n\n\n /** **************************************************************************\n * * Third GraphQuill option in command palette to toggle graphquill extension\n ************************************************************************** */\n const disposableToggleGraphQuill = vscode.commands.registerCommand('extension.toggleGraphQuill', () => {\n // console.log('--toggle triggered!');\n\n // if the toggle boolean is false, then start the extension, otherwise end it...\n if (!isOnToggle) {\n // console.log('--toggle starting extension');\n // using the built in execute command and passing in a string of the command to trigger\n vscode.commands.executeCommand('extension.activateGraphQuill');\n } else {\n // console.log('--toggle stopping the extension');\n vscode.commands.executeCommand('extension.deactivateGraphQuill');\n }\n\n // just to make the linter happy...\n return null;\n });\n\n // push it to the subscriptions\n context.subscriptions.push(disposableToggleGraphQuill);\n\n /** **************************************************************************\n * * Fourth GraphQuill option in command palette to CREATE A CONFIG FILE\n ************************************************************************** */\n const disposableCreateConfigFile = vscode.commands.registerCommand('extension.createConfigFile', () => {\n // console.log('--config file setup triggered');\n\n // check if the root directory already has a graphquill.config.json file\n const graphQuillConfigPath = `${rootPath}/graphquill.config.js`;\n if (fs.existsSync(graphQuillConfigPath)) {\n vscode.window.showInformationMessage(`A GraphQuill configuration file already exists at ${graphQuillConfigPath}`);\n // exit out\n return null;\n }\n\n // if it does not already exist, write to a new file\n fs.writeFileSync(graphQuillConfigPath,\n // string to populate the file with\n 'module.exports = {\\n // change \"./server/index.js\" to the relative path from the root directory to\\n // the file that starts your server\\n entry: \\'./server/index.js\\',\\n\\n // to increase the amount of time allowed for the server to startup, add a time\\n // in milliseconds (integer) to the \"serverStartupTimeAllowed\"\\n // serverStartupTimeAllowed: 5000,\\n};\\n',\n 'utf-8');\n\n // open the file in vscode\n vscode.workspace.openTextDocument(graphQuillConfigPath).then((doc) => {\n // apparently openTextDocument doesn't mean it's visible...\n vscode.window.showTextDocument(doc);\n });\n\n return null;\n });\n\n // push it to the subscriptions\n context.subscriptions.push(disposableCreateConfigFile);\n}\n\n\n// this method is called when your extension is deactivated\nexport function deactivate() {\n // deactivate must return a promise if cleanup operations are async.\n // turn the server off if vscode is closed (tested via lsof in terminal)\n\n // console.log('---deactive function called!!');\n\n // executing the deactivateGQ command seems to achieve a similar effect & is nice because it has\n // access to the portNumber variable\n vscode.commands.executeCommand('extension.deactivateGraphQuill');\n // return setTimeout(() => serverOff(3000), 1);\n}\n","import Stream from 'stream';\nimport http from 'http';\nimport Url from 'url';\nimport https from 'https';\nimport zlib from 'zlib';\n\n// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js\n\n// fix for \"Readable\" isn't a named export issue\nconst Readable = Stream.Readable;\n\nconst BUFFER = Symbol('buffer');\nconst TYPE = Symbol('type');\n\nclass Blob {\n\tconstructor() {\n\t\tthis[TYPE] = '';\n\n\t\tconst blobParts = arguments[0];\n\t\tconst options = arguments[1];\n\n\t\tconst buffers = [];\n\t\tlet size = 0;\n\n\t\tif (blobParts) {\n\t\t\tconst a = blobParts;\n\t\t\tconst length = Number(a.length);\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tconst element = a[i];\n\t\t\t\tlet buffer;\n\t\t\t\tif (element instanceof Buffer) {\n\t\t\t\t\tbuffer = element;\n\t\t\t\t} else if (ArrayBuffer.isView(element)) {\n\t\t\t\t\tbuffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);\n\t\t\t\t} else if (element instanceof ArrayBuffer) {\n\t\t\t\t\tbuffer = Buffer.from(element);\n\t\t\t\t} else if (element instanceof Blob) {\n\t\t\t\t\tbuffer = element[BUFFER];\n\t\t\t\t} else {\n\t\t\t\t\tbuffer = Buffer.from(typeof element === 'string' ? element : String(element));\n\t\t\t\t}\n\t\t\t\tsize += buffer.length;\n\t\t\t\tbuffers.push(buffer);\n\t\t\t}\n\t\t}\n\n\t\tthis[BUFFER] = Buffer.concat(buffers);\n\n\t\tlet type = options && options.type !== undefined && String(options.type).toLowerCase();\n\t\tif (type && !/[^\\u0020-\\u007E]/.test(type)) {\n\t\t\tthis[TYPE] = type;\n\t\t}\n\t}\n\tget size() {\n\t\treturn this[BUFFER].length;\n\t}\n\tget type() {\n\t\treturn this[TYPE];\n\t}\n\ttext() {\n\t\treturn Promise.resolve(this[BUFFER].toString());\n\t}\n\tarrayBuffer() {\n\t\tconst buf = this[BUFFER];\n\t\tconst ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\treturn Promise.resolve(ab);\n\t}\n\tstream() {\n\t\tconst readable = new Readable();\n\t\treadable._read = function () {};\n\t\treadable.push(this[BUFFER]);\n\t\treadable.push(null);\n\t\treturn readable;\n\t}\n\ttoString() {\n\t\treturn '[object Blob]';\n\t}\n\tslice() {\n\t\tconst size = this.size;\n\n\t\tconst start = arguments[0];\n\t\tconst end = arguments[1];\n\t\tlet relativeStart, relativeEnd;\n\t\tif (start === undefined) {\n\t\t\trelativeStart = 0;\n\t\t} else if (start < 0) {\n\t\t\trelativeStart = Math.max(size + start, 0);\n\t\t} else {\n\t\t\trelativeStart = Math.min(start, size);\n\t\t}\n\t\tif (end === undefined) {\n\t\t\trelativeEnd = size;\n\t\t} else if (end < 0) {\n\t\t\trelativeEnd = Math.max(size + end, 0);\n\t\t} else {\n\t\t\trelativeEnd = Math.min(end, size);\n\t\t}\n\t\tconst span = Math.max(relativeEnd - relativeStart, 0);\n\n\t\tconst buffer = this[BUFFER];\n\t\tconst slicedBuffer = buffer.slice(relativeStart, relativeStart + span);\n\t\tconst blob = new Blob([], { type: arguments[2] });\n\t\tblob[BUFFER] = slicedBuffer;\n\t\treturn blob;\n\t}\n}\n\nObject.defineProperties(Blob.prototype, {\n\tsize: { enumerable: true },\n\ttype: { enumerable: true },\n\tslice: { enumerable: true }\n});\n\nObject.defineProperty(Blob.prototype, Symbol.toStringTag, {\n\tvalue: 'Blob',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * fetch-error.js\n *\n * FetchError interface for operational errors\n */\n\n/**\n * Create FetchError instance\n *\n * @param String message Error message for human\n * @param String type Error type for machine\n * @param String systemError For Node.js system error\n * @return FetchError\n */\nfunction FetchError(message, type, systemError) {\n Error.call(this, message);\n\n this.message = message;\n this.type = type;\n\n // when err.type is `system`, err.code contains system error code\n if (systemError) {\n this.code = this.errno = systemError.code;\n }\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nFetchError.prototype = Object.create(Error.prototype);\nFetchError.prototype.constructor = FetchError;\nFetchError.prototype.name = 'FetchError';\n\nlet convert;\ntry {\n\tconvert = require('encoding').convert;\n} catch (e) {}\n\nconst INTERNALS = Symbol('Body internals');\n\n// fix an issue where \"PassThrough\" isn't a named export for node <10\nconst PassThrough = Stream.PassThrough;\n\n/**\n * Body mixin\n *\n * Ref: https://fetch.spec.whatwg.org/#body\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nfunction Body(body) {\n\tvar _this = this;\n\n\tvar _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n\t _ref$size = _ref.size;\n\n\tlet size = _ref$size === undefined ? 0 : _ref$size;\n\tvar _ref$timeout = _ref.timeout;\n\tlet timeout = _ref$timeout === undefined ? 0 : _ref$timeout;\n\n\tif (body == null) {\n\t\t// body is undefined or null\n\t\tbody = null;\n\t} else if (isURLSearchParams(body)) {\n\t\t// body is a URLSearchParams\n\t\tbody = Buffer.from(body.toString());\n\t} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\n\t\t// body is ArrayBuffer\n\t\tbody = Buffer.from(body);\n\t} else if (ArrayBuffer.isView(body)) {\n\t\t// body is ArrayBufferView\n\t\tbody = Buffer.from(body.buffer, body.byteOffset, body.byteLength);\n\t} else if (body instanceof Stream) ; else {\n\t\t// none of the above\n\t\t// coerce to string then buffer\n\t\tbody = Buffer.from(String(body));\n\t}\n\tthis[INTERNALS] = {\n\t\tbody,\n\t\tdisturbed: false,\n\t\terror: null\n\t};\n\tthis.size = size;\n\tthis.timeout = timeout;\n\n\tif (body instanceof Stream) {\n\t\tbody.on('error', function (err) {\n\t\t\tconst error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);\n\t\t\t_this[INTERNALS].error = error;\n\t\t});\n\t}\n}\n\nBody.prototype = {\n\tget body() {\n\t\treturn this[INTERNALS].body;\n\t},\n\n\tget bodyUsed() {\n\t\treturn this[INTERNALS].disturbed;\n\t},\n\n\t/**\n * Decode response as ArrayBuffer\n *\n * @return Promise\n */\n\tarrayBuffer() {\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\t});\n\t},\n\n\t/**\n * Return raw response as Blob\n *\n * @return Promise\n */\n\tblob() {\n\t\tlet ct = this.headers && this.headers.get('content-type') || '';\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn Object.assign(\n\t\t\t// Prevent copying\n\t\t\tnew Blob([], {\n\t\t\t\ttype: ct.toLowerCase()\n\t\t\t}), {\n\t\t\t\t[BUFFER]: buf\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n * Decode response as json\n *\n * @return Promise\n */\n\tjson() {\n\t\tvar _this2 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(buffer.toString());\n\t\t\t} catch (err) {\n\t\t\t\treturn Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n * Decode response as text\n *\n * @return Promise\n */\n\ttext() {\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn buffer.toString();\n\t\t});\n\t},\n\n\t/**\n * Decode response as buffer (non-spec api)\n *\n * @return Promise\n */\n\tbuffer() {\n\t\treturn consumeBody.call(this);\n\t},\n\n\t/**\n * Decode response as text, while automatically detecting the encoding and\n * trying to decode to UTF-8 (non-spec api)\n *\n * @return Promise\n */\n\ttextConverted() {\n\t\tvar _this3 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn convertBody(buffer, _this3.headers);\n\t\t});\n\t}\n};\n\n// In browsers, all properties are enumerable.\nObject.defineProperties(Body.prototype, {\n\tbody: { enumerable: true },\n\tbodyUsed: { enumerable: true },\n\tarrayBuffer: { enumerable: true },\n\tblob: { enumerable: true },\n\tjson: { enumerable: true },\n\ttext: { enumerable: true }\n});\n\nBody.mixIn = function (proto) {\n\tfor (const name of Object.getOwnPropertyNames(Body.prototype)) {\n\t\t// istanbul ignore else: future proof\n\t\tif (!(name in proto)) {\n\t\t\tconst desc = Object.getOwnPropertyDescriptor(Body.prototype, name);\n\t\t\tObject.defineProperty(proto, name, desc);\n\t\t}\n\t}\n};\n\n/**\n * Consume and convert an entire Body to a Buffer.\n *\n * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body\n *\n * @return Promise\n */\nfunction consumeBody() {\n\tvar _this4 = this;\n\n\tif (this[INTERNALS].disturbed) {\n\t\treturn Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));\n\t}\n\n\tthis[INTERNALS].disturbed = true;\n\n\tif (this[INTERNALS].error) {\n\t\treturn Body.Promise.reject(this[INTERNALS].error);\n\t}\n\n\tlet body = this.body;\n\n\t// body is null\n\tif (body === null) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is blob\n\tif (isBlob(body)) {\n\t\tbody = body.stream();\n\t}\n\n\t// body is buffer\n\tif (Buffer.isBuffer(body)) {\n\t\treturn Body.Promise.resolve(body);\n\t}\n\n\t// istanbul ignore if: should never happen\n\tif (!(body instanceof Stream)) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is stream\n\t// get ready to actually consume the body\n\tlet accum = [];\n\tlet accumBytes = 0;\n\tlet abort = false;\n\n\treturn new Body.Promise(function (resolve, reject) {\n\t\tlet resTimeout;\n\n\t\t// allow timeout on slow response body\n\t\tif (_this4.timeout) {\n\t\t\tresTimeout = setTimeout(function () {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));\n\t\t\t}, _this4.timeout);\n\t\t}\n\n\t\t// handle stream errors\n\t\tbody.on('error', function (err) {\n\t\t\tif (err.name === 'AbortError') {\n\t\t\t\t// if the request was aborted, reject with this Error\n\t\t\t\tabort = true;\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\t// other errors, such as incorrect content-encoding\n\t\t\t\treject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\n\t\tbody.on('data', function (chunk) {\n\t\t\tif (abort || chunk === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (_this4.size && accumBytes + chunk.length > _this4.size) {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\taccumBytes += chunk.length;\n\t\t\taccum.push(chunk);\n\t\t});\n\n\t\tbody.on('end', function () {\n\t\t\tif (abort) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclearTimeout(resTimeout);\n\n\t\t\ttry {\n\t\t\t\tresolve(Buffer.concat(accum, accumBytes));\n\t\t\t} catch (err) {\n\t\t\t\t// handle streams that have accumulated too much data (issue #414)\n\t\t\t\treject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect buffer encoding and convert to target encoding\n * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding\n *\n * @param Buffer buffer Incoming buffer\n * @param String encoding Target encoding\n * @return String\n */\nfunction convertBody(buffer, headers) {\n\tif (typeof convert !== 'function') {\n\t\tthrow new Error('The package `encoding` must be installed to use the textConverted() function');\n\t}\n\n\tconst ct = headers.get('content-type');\n\tlet charset = 'utf-8';\n\tlet res, str;\n\n\t// header\n\tif (ct) {\n\t\tres = /charset=([^;]*)/i.exec(ct);\n\t}\n\n\t// no charset in content type, peek at response body for at most 1024 bytes\n\tstr = buffer.slice(0, 1024).toString();\n\n\t// html5\n\tif (!res && str) {\n\t\tres = / 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n\t\tthis[MAP] = Object.create(null);\n\n\t\tif (init instanceof Headers) {\n\t\t\tconst rawHeaders = init.raw();\n\t\t\tconst headerNames = Object.keys(rawHeaders);\n\n\t\t\tfor (const headerName of headerNames) {\n\t\t\t\tfor (const value of rawHeaders[headerName]) {\n\t\t\t\t\tthis.append(headerName, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// We don't worry about converting prop to ByteString here as append()\n\t\t// will handle it.\n\t\tif (init == null) ; else if (typeof init === 'object') {\n\t\t\tconst method = init[Symbol.iterator];\n\t\t\tif (method != null) {\n\t\t\t\tif (typeof method !== 'function') {\n\t\t\t\t\tthrow new TypeError('Header pairs must be iterable');\n\t\t\t\t}\n\n\t\t\t\t// sequence>\n\t\t\t\t// Note: per spec we have to first exhaust the lists then process them\n\t\t\t\tconst pairs = [];\n\t\t\t\tfor (const pair of init) {\n\t\t\t\t\tif (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be iterable');\n\t\t\t\t\t}\n\t\t\t\t\tpairs.push(Array.from(pair));\n\t\t\t\t}\n\n\t\t\t\tfor (const pair of pairs) {\n\t\t\t\t\tif (pair.length !== 2) {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be a name/value tuple');\n\t\t\t\t\t}\n\t\t\t\t\tthis.append(pair[0], pair[1]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// record\n\t\t\t\tfor (const key of Object.keys(init)) {\n\t\t\t\t\tconst value = init[key];\n\t\t\t\t\tthis.append(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('Provided initializer must be an object');\n\t\t}\n\t}\n\n\t/**\n * Return combined header value given name\n *\n * @param String name Header name\n * @return Mixed\n */\n\tget(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this[MAP][key].join(', ');\n\t}\n\n\t/**\n * Iterate over all headers\n *\n * @param Function callback Executed for each item with parameters (value, name, thisArg)\n * @param Boolean thisArg `this` context for callback function\n * @return Void\n */\n\tforEach(callback) {\n\t\tlet thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\tlet pairs = getHeaders(this);\n\t\tlet i = 0;\n\t\twhile (i < pairs.length) {\n\t\t\tvar _pairs$i = pairs[i];\n\t\t\tconst name = _pairs$i[0],\n\t\t\t value = _pairs$i[1];\n\n\t\t\tcallback.call(thisArg, value, name, this);\n\t\t\tpairs = getHeaders(this);\n\t\t\ti++;\n\t\t}\n\t}\n\n\t/**\n * Overwrite header values given name\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tset(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tthis[MAP][key !== undefined ? key : name] = [value];\n\t}\n\n\t/**\n * Append a value onto existing header\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tappend(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tthis[MAP][key].push(value);\n\t\t} else {\n\t\t\tthis[MAP][name] = [value];\n\t\t}\n\t}\n\n\t/**\n * Check for header name existence\n *\n * @param String name Header name\n * @return Boolean\n */\n\thas(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\treturn find(this[MAP], name) !== undefined;\n\t}\n\n\t/**\n * Delete all header values given name\n *\n * @param String name Header name\n * @return Void\n */\n\tdelete(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tdelete this[MAP][key];\n\t\t}\n\t}\n\n\t/**\n * Return raw headers (non-spec api)\n *\n * @return Object\n */\n\traw() {\n\t\treturn this[MAP];\n\t}\n\n\t/**\n * Get an iterator on keys.\n *\n * @return Iterator\n */\n\tkeys() {\n\t\treturn createHeadersIterator(this, 'key');\n\t}\n\n\t/**\n * Get an iterator on values.\n *\n * @return Iterator\n */\n\tvalues() {\n\t\treturn createHeadersIterator(this, 'value');\n\t}\n\n\t/**\n * Get an iterator on entries.\n *\n * This is the default iterator of the Headers object.\n *\n * @return Iterator\n */\n\t[Symbol.iterator]() {\n\t\treturn createHeadersIterator(this, 'key+value');\n\t}\n}\nHeaders.prototype.entries = Headers.prototype[Symbol.iterator];\n\nObject.defineProperty(Headers.prototype, Symbol.toStringTag, {\n\tvalue: 'Headers',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Headers.prototype, {\n\tget: { enumerable: true },\n\tforEach: { enumerable: true },\n\tset: { enumerable: true },\n\tappend: { enumerable: true },\n\thas: { enumerable: true },\n\tdelete: { enumerable: true },\n\tkeys: { enumerable: true },\n\tvalues: { enumerable: true },\n\tentries: { enumerable: true }\n});\n\nfunction getHeaders(headers) {\n\tlet kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';\n\n\tconst keys = Object.keys(headers[MAP]).sort();\n\treturn keys.map(kind === 'key' ? function (k) {\n\t\treturn k.toLowerCase();\n\t} : kind === 'value' ? function (k) {\n\t\treturn headers[MAP][k].join(', ');\n\t} : function (k) {\n\t\treturn [k.toLowerCase(), headers[MAP][k].join(', ')];\n\t});\n}\n\nconst INTERNAL = Symbol('internal');\n\nfunction createHeadersIterator(target, kind) {\n\tconst iterator = Object.create(HeadersIteratorPrototype);\n\titerator[INTERNAL] = {\n\t\ttarget,\n\t\tkind,\n\t\tindex: 0\n\t};\n\treturn iterator;\n}\n\nconst HeadersIteratorPrototype = Object.setPrototypeOf({\n\tnext() {\n\t\t// istanbul ignore if\n\t\tif (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {\n\t\t\tthrow new TypeError('Value of `this` is not a HeadersIterator');\n\t\t}\n\n\t\tvar _INTERNAL = this[INTERNAL];\n\t\tconst target = _INTERNAL.target,\n\t\t kind = _INTERNAL.kind,\n\t\t index = _INTERNAL.index;\n\n\t\tconst values = getHeaders(target, kind);\n\t\tconst len = values.length;\n\t\tif (index >= len) {\n\t\t\treturn {\n\t\t\t\tvalue: undefined,\n\t\t\t\tdone: true\n\t\t\t};\n\t\t}\n\n\t\tthis[INTERNAL].index = index + 1;\n\n\t\treturn {\n\t\t\tvalue: values[index],\n\t\t\tdone: false\n\t\t};\n\t}\n}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));\n\nObject.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {\n\tvalue: 'HeadersIterator',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * Export the Headers object in a form that Node.js can consume.\n *\n * @param Headers headers\n * @return Object\n */\nfunction exportNodeCompatibleHeaders(headers) {\n\tconst obj = Object.assign({ __proto__: null }, headers[MAP]);\n\n\t// http.request() only supports string as Host header. This hack makes\n\t// specifying custom Host header possible.\n\tconst hostHeaderKey = find(headers[MAP], 'Host');\n\tif (hostHeaderKey !== undefined) {\n\t\tobj[hostHeaderKey] = obj[hostHeaderKey][0];\n\t}\n\n\treturn obj;\n}\n\n/**\n * Create a Headers object from an object of headers, ignoring those that do\n * not conform to HTTP grammar productions.\n *\n * @param Object obj Object of headers\n * @return Headers\n */\nfunction createHeadersLenient(obj) {\n\tconst headers = new Headers();\n\tfor (const name of Object.keys(obj)) {\n\t\tif (invalidTokenRegex.test(name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(obj[name])) {\n\t\t\tfor (const val of obj[name]) {\n\t\t\t\tif (invalidHeaderCharRegex.test(val)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (headers[MAP][name] === undefined) {\n\t\t\t\t\theaders[MAP][name] = [val];\n\t\t\t\t} else {\n\t\t\t\t\theaders[MAP][name].push(val);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (!invalidHeaderCharRegex.test(obj[name])) {\n\t\t\theaders[MAP][name] = [obj[name]];\n\t\t}\n\t}\n\treturn headers;\n}\n\nconst INTERNALS$1 = Symbol('Response internals');\n\n// fix an issue where \"STATUS_CODES\" aren't a named export for node <10\nconst STATUS_CODES = http.STATUS_CODES;\n\n/**\n * Response class\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nclass Response {\n\tconstructor() {\n\t\tlet body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tlet opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tBody.call(this, body, opts);\n\n\t\tconst status = opts.status || 200;\n\t\tconst headers = new Headers(opts.headers);\n\n\t\tif (body != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(body);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tthis[INTERNALS$1] = {\n\t\t\turl: opts.url,\n\t\t\tstatus,\n\t\t\tstatusText: opts.statusText || STATUS_CODES[status],\n\t\t\theaders,\n\t\t\tcounter: opts.counter\n\t\t};\n\t}\n\n\tget url() {\n\t\treturn this[INTERNALS$1].url || '';\n\t}\n\n\tget status() {\n\t\treturn this[INTERNALS$1].status;\n\t}\n\n\t/**\n * Convenience property representing if the request ended normally\n */\n\tget ok() {\n\t\treturn this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;\n\t}\n\n\tget redirected() {\n\t\treturn this[INTERNALS$1].counter > 0;\n\t}\n\n\tget statusText() {\n\t\treturn this[INTERNALS$1].statusText;\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$1].headers;\n\t}\n\n\t/**\n * Clone this response\n *\n * @return Response\n */\n\tclone() {\n\t\treturn new Response(clone(this), {\n\t\t\turl: this.url,\n\t\t\tstatus: this.status,\n\t\t\tstatusText: this.statusText,\n\t\t\theaders: this.headers,\n\t\t\tok: this.ok,\n\t\t\tredirected: this.redirected\n\t\t});\n\t}\n}\n\nBody.mixIn(Response.prototype);\n\nObject.defineProperties(Response.prototype, {\n\turl: { enumerable: true },\n\tstatus: { enumerable: true },\n\tok: { enumerable: true },\n\tredirected: { enumerable: true },\n\tstatusText: { enumerable: true },\n\theaders: { enumerable: true },\n\tclone: { enumerable: true }\n});\n\nObject.defineProperty(Response.prototype, Symbol.toStringTag, {\n\tvalue: 'Response',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nconst INTERNALS$2 = Symbol('Request internals');\n\n// fix an issue where \"format\", \"parse\" aren't a named export for node <10\nconst parse_url = Url.parse;\nconst format_url = Url.format;\n\nconst streamDestructionSupported = 'destroy' in Stream.Readable.prototype;\n\n/**\n * Check if a value is an instance of Request.\n *\n * @param Mixed input\n * @return Boolean\n */\nfunction isRequest(input) {\n\treturn typeof input === 'object' && typeof input[INTERNALS$2] === 'object';\n}\n\nfunction isAbortSignal(signal) {\n\tconst proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);\n\treturn !!(proto && proto.constructor.name === 'AbortSignal');\n}\n\n/**\n * Request class\n *\n * @param Mixed input Url or Request instance\n * @param Object init Custom options\n * @return Void\n */\nclass Request {\n\tconstructor(input) {\n\t\tlet init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tlet parsedURL;\n\n\t\t// normalize input\n\t\tif (!isRequest(input)) {\n\t\t\tif (input && input.href) {\n\t\t\t\t// in order to support Node.js' Url objects; though WHATWG's URL objects\n\t\t\t\t// will fall into this branch also (since their `toString()` will return\n\t\t\t\t// `href` property anyway)\n\t\t\t\tparsedURL = parse_url(input.href);\n\t\t\t} else {\n\t\t\t\t// coerce input to a string before attempting to parse\n\t\t\t\tparsedURL = parse_url(`${input}`);\n\t\t\t}\n\t\t\tinput = {};\n\t\t} else {\n\t\t\tparsedURL = parse_url(input.url);\n\t\t}\n\n\t\tlet method = init.method || input.method || 'GET';\n\t\tmethod = method.toUpperCase();\n\n\t\tif ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {\n\t\t\tthrow new TypeError('Request with GET/HEAD method cannot have body');\n\t\t}\n\n\t\tlet inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;\n\n\t\tBody.call(this, inputBody, {\n\t\t\ttimeout: init.timeout || input.timeout || 0,\n\t\t\tsize: init.size || input.size || 0\n\t\t});\n\n\t\tconst headers = new Headers(init.headers || input.headers || {});\n\n\t\tif (inputBody != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(inputBody);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tlet signal = isRequest(input) ? input.signal : null;\n\t\tif ('signal' in init) signal = init.signal;\n\n\t\tif (signal != null && !isAbortSignal(signal)) {\n\t\t\tthrow new TypeError('Expected signal to be an instanceof AbortSignal');\n\t\t}\n\n\t\tthis[INTERNALS$2] = {\n\t\t\tmethod,\n\t\t\tredirect: init.redirect || input.redirect || 'follow',\n\t\t\theaders,\n\t\t\tparsedURL,\n\t\t\tsignal\n\t\t};\n\n\t\t// node-fetch-only options\n\t\tthis.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;\n\t\tthis.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;\n\t\tthis.counter = init.counter || input.counter || 0;\n\t\tthis.agent = init.agent || input.agent;\n\t}\n\n\tget method() {\n\t\treturn this[INTERNALS$2].method;\n\t}\n\n\tget url() {\n\t\treturn format_url(this[INTERNALS$2].parsedURL);\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$2].headers;\n\t}\n\n\tget redirect() {\n\t\treturn this[INTERNALS$2].redirect;\n\t}\n\n\tget signal() {\n\t\treturn this[INTERNALS$2].signal;\n\t}\n\n\t/**\n * Clone this request\n *\n * @return Request\n */\n\tclone() {\n\t\treturn new Request(this);\n\t}\n}\n\nBody.mixIn(Request.prototype);\n\nObject.defineProperty(Request.prototype, Symbol.toStringTag, {\n\tvalue: 'Request',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Request.prototype, {\n\tmethod: { enumerable: true },\n\turl: { enumerable: true },\n\theaders: { enumerable: true },\n\tredirect: { enumerable: true },\n\tclone: { enumerable: true },\n\tsignal: { enumerable: true }\n});\n\n/**\n * Convert a Request to Node.js http request options.\n *\n * @param Request A Request instance\n * @return Object The options object to be passed to http.request\n */\nfunction getNodeRequestOptions(request) {\n\tconst parsedURL = request[INTERNALS$2].parsedURL;\n\tconst headers = new Headers(request[INTERNALS$2].headers);\n\n\t// fetch step 1.3\n\tif (!headers.has('Accept')) {\n\t\theaders.set('Accept', '*/*');\n\t}\n\n\t// Basic fetch\n\tif (!parsedURL.protocol || !parsedURL.hostname) {\n\t\tthrow new TypeError('Only absolute URLs are supported');\n\t}\n\n\tif (!/^https?:$/.test(parsedURL.protocol)) {\n\t\tthrow new TypeError('Only HTTP(S) protocols are supported');\n\t}\n\n\tif (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {\n\t\tthrow new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');\n\t}\n\n\t// HTTP-network-or-cache fetch steps 2.4-2.7\n\tlet contentLengthValue = null;\n\tif (request.body == null && /^(POST|PUT)$/i.test(request.method)) {\n\t\tcontentLengthValue = '0';\n\t}\n\tif (request.body != null) {\n\t\tconst totalBytes = getTotalBytes(request);\n\t\tif (typeof totalBytes === 'number') {\n\t\t\tcontentLengthValue = String(totalBytes);\n\t\t}\n\t}\n\tif (contentLengthValue) {\n\t\theaders.set('Content-Length', contentLengthValue);\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.11\n\tif (!headers.has('User-Agent')) {\n\t\theaders.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.15\n\tif (request.compress && !headers.has('Accept-Encoding')) {\n\t\theaders.set('Accept-Encoding', 'gzip,deflate');\n\t}\n\n\tlet agent = request.agent;\n\tif (typeof agent === 'function') {\n\t\tagent = agent(parsedURL);\n\t}\n\n\tif (!headers.has('Connection') && !agent) {\n\t\theaders.set('Connection', 'close');\n\t}\n\n\t// HTTP-network fetch step 4.2\n\t// chunked encoding is handled by Node.js\n\n\treturn Object.assign({}, parsedURL, {\n\t\tmethod: request.method,\n\t\theaders: exportNodeCompatibleHeaders(headers),\n\t\tagent\n\t});\n}\n\n/**\n * abort-error.js\n *\n * AbortError interface for cancelled requests\n */\n\n/**\n * Create AbortError instance\n *\n * @param String message Error message for human\n * @return AbortError\n */\nfunction AbortError(message) {\n Error.call(this, message);\n\n this.type = 'aborted';\n this.message = message;\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nAbortError.prototype = Object.create(Error.prototype);\nAbortError.prototype.constructor = AbortError;\nAbortError.prototype.name = 'AbortError';\n\n// fix an issue where \"PassThrough\", \"resolve\" aren't a named export for node <10\nconst PassThrough$1 = Stream.PassThrough;\nconst resolve_url = Url.resolve;\n\n/**\n * Fetch function\n *\n * @param Mixed url Absolute url or Request instance\n * @param Object opts Fetch options\n * @return Promise\n */\nfunction fetch(url, opts) {\n\n\t// allow custom promise\n\tif (!fetch.Promise) {\n\t\tthrow new Error('native promise missing, set fetch.Promise to your favorite alternative');\n\t}\n\n\tBody.Promise = fetch.Promise;\n\n\t// wrap http.request into fetch\n\treturn new fetch.Promise(function (resolve, reject) {\n\t\t// build request object\n\t\tconst request = new Request(url, opts);\n\t\tconst options = getNodeRequestOptions(request);\n\n\t\tconst send = (options.protocol === 'https:' ? https : http).request;\n\t\tconst signal = request.signal;\n\n\t\tlet response = null;\n\n\t\tconst abort = function abort() {\n\t\t\tlet error = new AbortError('The user aborted a request.');\n\t\t\treject(error);\n\t\t\tif (request.body && request.body instanceof Stream.Readable) {\n\t\t\t\trequest.body.destroy(error);\n\t\t\t}\n\t\t\tif (!response || !response.body) return;\n\t\t\tresponse.body.emit('error', error);\n\t\t};\n\n\t\tif (signal && signal.aborted) {\n\t\t\tabort();\n\t\t\treturn;\n\t\t}\n\n\t\tconst abortAndFinalize = function abortAndFinalize() {\n\t\t\tabort();\n\t\t\tfinalize();\n\t\t};\n\n\t\t// send request\n\t\tconst req = send(options);\n\t\tlet reqTimeout;\n\n\t\tif (signal) {\n\t\t\tsignal.addEventListener('abort', abortAndFinalize);\n\t\t}\n\n\t\tfunction finalize() {\n\t\t\treq.abort();\n\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\tclearTimeout(reqTimeout);\n\t\t}\n\n\t\tif (request.timeout) {\n\t\t\treq.once('socket', function (socket) {\n\t\t\t\treqTimeout = setTimeout(function () {\n\t\t\t\t\treject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));\n\t\t\t\t\tfinalize();\n\t\t\t\t}, request.timeout);\n\t\t\t});\n\t\t}\n\n\t\treq.on('error', function (err) {\n\t\t\treject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));\n\t\t\tfinalize();\n\t\t});\n\n\t\treq.on('response', function (res) {\n\t\t\tclearTimeout(reqTimeout);\n\n\t\t\tconst headers = createHeadersLenient(res.headers);\n\n\t\t\t// HTTP fetch step 5\n\t\t\tif (fetch.isRedirect(res.statusCode)) {\n\t\t\t\t// HTTP fetch step 5.2\n\t\t\t\tconst location = headers.get('Location');\n\n\t\t\t\t// HTTP fetch step 5.3\n\t\t\t\tconst locationURL = location === null ? null : resolve_url(request.url, location);\n\n\t\t\t\t// HTTP fetch step 5.5\n\t\t\t\tswitch (request.redirect) {\n\t\t\t\t\tcase 'error':\n\t\t\t\t\t\treject(new FetchError(`redirect mode is set to error: ${request.url}`, 'no-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase 'manual':\n\t\t\t\t\t\t// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.\n\t\t\t\t\t\tif (locationURL !== null) {\n\t\t\t\t\t\t\t// handle corrupted header\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\theaders.set('Location', locationURL);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\t// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request\n\t\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'follow':\n\t\t\t\t\t\t// HTTP-redirect fetch step 2\n\t\t\t\t\t\tif (locationURL === null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 5\n\t\t\t\t\t\tif (request.counter >= request.follow) {\n\t\t\t\t\t\t\treject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 6 (counter increment)\n\t\t\t\t\t\t// Create a new Request object.\n\t\t\t\t\t\tconst requestOpts = {\n\t\t\t\t\t\t\theaders: new Headers(request.headers),\n\t\t\t\t\t\t\tfollow: request.follow,\n\t\t\t\t\t\t\tcounter: request.counter + 1,\n\t\t\t\t\t\t\tagent: request.agent,\n\t\t\t\t\t\t\tcompress: request.compress,\n\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\tbody: request.body,\n\t\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t\t\ttimeout: request.timeout\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 9\n\t\t\t\t\t\tif (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {\n\t\t\t\t\t\t\treject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 11\n\t\t\t\t\t\tif (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {\n\t\t\t\t\t\t\trequestOpts.method = 'GET';\n\t\t\t\t\t\t\trequestOpts.body = undefined;\n\t\t\t\t\t\t\trequestOpts.headers.delete('content-length');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 15\n\t\t\t\t\t\tresolve(fetch(new Request(locationURL, requestOpts)));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// prepare response\n\t\t\tres.once('end', function () {\n\t\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\t});\n\t\t\tlet body = res.pipe(new PassThrough$1());\n\n\t\t\tconst response_options = {\n\t\t\t\turl: request.url,\n\t\t\t\tstatus: res.statusCode,\n\t\t\t\tstatusText: res.statusMessage,\n\t\t\t\theaders: headers,\n\t\t\t\tsize: request.size,\n\t\t\t\ttimeout: request.timeout,\n\t\t\t\tcounter: request.counter\n\t\t\t};\n\n\t\t\t// HTTP-network fetch step 12.1.1.3\n\t\t\tconst codings = headers.get('Content-Encoding');\n\n\t\t\t// HTTP-network fetch step 12.1.1.4: handle content codings\n\n\t\t\t// in following scenarios we ignore compression support\n\t\t\t// 1. compression support is disabled\n\t\t\t// 2. HEAD request\n\t\t\t// 3. no Content-Encoding header\n\t\t\t// 4. no content response (204)\n\t\t\t// 5. content not modified response (304)\n\t\t\tif (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For Node v6+\n\t\t\t// Be less strict when decoding compressed responses, since sometimes\n\t\t\t// servers send slightly invalid responses that are still accepted\n\t\t\t// by common browsers.\n\t\t\t// Always using Z_SYNC_FLUSH is what cURL does.\n\t\t\tconst zlibOptions = {\n\t\t\t\tflush: zlib.Z_SYNC_FLUSH,\n\t\t\t\tfinishFlush: zlib.Z_SYNC_FLUSH\n\t\t\t};\n\n\t\t\t// for gzip\n\t\t\tif (codings == 'gzip' || codings == 'x-gzip') {\n\t\t\t\tbody = body.pipe(zlib.createGunzip(zlibOptions));\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for deflate\n\t\t\tif (codings == 'deflate' || codings == 'x-deflate') {\n\t\t\t\t// handle the infamous raw deflate response from old servers\n\t\t\t\t// a hack for old IIS and Apache servers\n\t\t\t\tconst raw = res.pipe(new PassThrough$1());\n\t\t\t\traw.once('data', function (chunk) {\n\t\t\t\t\t// see http://stackoverflow.com/questions/37519828\n\t\t\t\t\tif ((chunk[0] & 0x0F) === 0x08) {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflate());\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflateRaw());\n\t\t\t\t\t}\n\t\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\t\tresolve(response);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for br\n\t\t\tif (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {\n\t\t\t\tbody = body.pipe(zlib.createBrotliDecompress());\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// otherwise, use response as-is\n\t\t\tresponse = new Response(body, response_options);\n\t\t\tresolve(response);\n\t\t});\n\n\t\twriteToStream(req, request);\n\t});\n}\n/**\n * Redirect code matching\n *\n * @param Number code Status code\n * @return Boolean\n */\nfetch.isRedirect = function (code) {\n\treturn code === 301 || code === 302 || code === 303 || code === 307 || code === 308;\n};\n\n// expose Promise\nfetch.Promise = global.Promise;\n\nexport default fetch;\nexport { Headers, Request, Response, FetchError };\n","/**\n * @module : serverOn.ts\n * @author : Ed Greenberg\n * @function : turn on server\n * @changelog : Ed Greenberg, November 5th, 2019, rewrote to open port on server/index.js\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\n// const path = require('path');\n// const fs = require('fs');\nconst childProcess = require('child_process');\n\n\nconst serverOn = (entryPoint: string) => {\n // moved this line into the serverOn file so that each time serverOn is called\n // a new child process is started. This is critical to being able to toggle\n // GraphQuill on and off\n const terminal = childProcess.spawn('bash');\n\n // we find the root directory by looking up from the active file\n // ...until we detect a folder with package.json\n // let root = path.dirname(vscode.window.activeTextEditor!.document.fileName);\n // while (!fs.existsSync(`${root}/package.json`)) {\n // root = path.dirname(root);\n // console.log('a root grows: ', root);\n // }\n\n // next, we activate two terminal methods to give us\n // feedback on whether we sucessfully used a child process\n // note the Typescript (: any) used to handle unknown data inputs\n terminal.stdout.on('data', (data: Buffer) => {\n // todo add validation, if there is an error that is logged here, it's coming from node\n // todo and should be piped to the channel as well\n // todo this may require passing in the channel to the serverOn function...\n console.log(`stdout from terminal: ${data}`);\n // console.log('---data type is', data.constructor.name);\n });\n\n // log what the exit code is in the extension terminal\n terminal.on('exit', (code: Number) => {\n console.log(`child process exited with code ${code}`);\n // console.log('--exit code type is', code.constructor.name);\n });\n\n // just below is the real core of the function, the child process:\n // we write to a new terminal to run the index.js file in the folder specified by base\n // IMPORTANT: code will not run without the '\\n' component--the CLI needs this\n // explicit return command\n return new Promise((resolve) => {\n // console.log('inside promise');\n setTimeout(() => {\n // console.log('root: ', root);\n console.log('Sending stdin (node command) to terminal');\n\n // this seems to take some time to spin up the server and\n // throws an error with the timing of a fetch\n // terminal.stdin.write(`node ${root}/server/index.js\\n`);\n terminal.stdin.write(`node ${entryPoint}\\n`);\n console.log('Ending terminal session');\n terminal.stdin.end();\n\n // resolve promise\n resolve();\n console.log('just resolved');\n\n vscode.window.showInformationMessage('GraphQuill Activated');\n }, 1);\n });\n\n // this message pops up to the user upon completion of the command\n};\n\nmodule.exports = serverOn;\n","/**\n * @module : serverOff.ts\n * @author : Ed Greenberg\n * @function : turn off server\n * @changelog : Ed Greenberg, November 5th, 2019, rewrote to open port on server/index.js\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\nconst fs = require('fs');\nconst path = require('path');\nconst childProcess = require('child_process');\n\n// spawn a new child process that will be used to close the open port\n\nconst serverOff = (portNumber: Number) => {\n console.log('in serveroff function file');\n // this one also had to be pulled into serverOff so that a new child process is started to\n // kill the server port\n const terminal2 = childProcess.spawn('bash');\n\n // we find the root directory by looking up from the active file\n // ...until we detect a folder with package.json\n let root = path.dirname(vscode.window.activeTextEditor!.document.fileName);\n while (!fs.existsSync(`${root}/package.json`)) {\n root = path.dirname(root);\n console.log('a root grows: ', root);\n }\n\n // const temp = vscode.window.activeTextEditor!.document.fileName;\n\n // write any data/outputs from the terminal to the extension console\n terminal2.stdout.on('data', (data: Buffer) => {\n console.log(`stdout: ${data}`);\n });\n\n // on terminal exit, print the exit code\n terminal2.on('exit', (code: Number) => {\n console.log(`terminal2 child process exited with code ${code}`);\n });\n\n // // this is a blocking (synchronous) call to the active file, populating 'data' as a string\n // const data = fs.readFileSync(`${root}/server/index.js`, 'utf8');\n\n // // to stop a localhost, we must first identify a port, and 'app.listen(' is\n // // a special string in the active file that is likely to be adjacent to the port number\n // const lookup = data.search(/app.listen\\(/);\n\n // // this next segment is edge case handling for if the port number\n // // is separated from the start parentheses by some number of spaces\n // let displace = 0;\n // while (data[lookup + displace + 11] === ' ') {\n // displace += 1;\n // }\n\n // // in target, we slice the port out of the array (offsetting as required by the edge case test)\n // // eslint-disable-next-line no-unused-vars\n // const target = data.slice(lookup + 11 + displace, lookup + 15 + displace);\n\n // ? I don't think these need to be delayed... just kill the process\n // in the core of our function, we run a special command that finds and kills the port specified\n // setTimeout(() => {\n // terminal2.stdin.write(`kill $(lsof -t -i:${target})\\n`);\n terminal2.stdin.write(`kill $(lsof -t -i:${portNumber})\\n`);\n terminal2.stdin.end();\n // }, 1);\n\n vscode.window.showInformationMessage('GraphQuill has been turned off');\n};\n\nmodule.exports = serverOff;\n","/**\n * @module : checkForRunningServer.ts\n * @author : Alex Chao, Nov 7th, 2019\n * @function : uses child process and lsof to check if a port is currently running\n * @param : portNumber, string\n * @param : once: boolean, true if the function should check if the port is open right when the\n * function is run. OR false if the function should wait for the server to start before resolving\n * @param : allowServerTimeoutConfigSetting: number, user input from config file to determine how\n * long to wait for the server to start. Defaults to 3000 (milliseconds)\n * @returns : a boolean, true if the server has started, false if it has not started\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n// eslint-disable-next-line import/no-unresolved\n// import * as vscode from 'vscode';\n\n// const path = require('path');\n// const fs = require('fs');\nconst childProcess = require('child_process');\n\nconst checkForRunningServer = (\n portNumber: string,\n once: boolean,\n allowServerTimeoutConfigSetting = 3000,\n) => {\n console.log('CHECK FOR RUNNING SERVER IS RUNNINGGGGGG');\n // console.log(portNumber, once, allowServerTimeoutConfigSetting);\n // moved this line into the serverOn file so that each time serverOn is called\n // a new child process is started. This is critical to being able to toggle\n // GraphQuill on and off\n let portOpen = false;\n let allTerminalText: string;\n const bashTerminal = childProcess.spawn('bash');\n\n // next, we activate two terminal methods to give us\n // feedback on whether we sucessfully used a child process\n // note the Typescript (: any) used to handle unknown data inputs\n bashTerminal.stdout.on('data', (data: Buffer) => {\n // console.log(`--stdout from terminal: ${data}`);\n console.log('terminal has printed some data...');\n allTerminalText = data.toString();\n portOpen = allTerminalText.includes('node');\n // console.log('allterminal text', allTerminalText);\n // console.log('---data type is', data.constructor.name);\n });\n\n // log what the exit code is in the extension terminal\n bashTerminal.on('exit', (code: Number) => {\n console.log(`checkForRunningServer child process exited with code ${code}`);\n // console.log('--exit code type is', code.constructor.name);\n });\n\n // just below is the real core of the function, the child process:\n // checks if the port is active with the `lsof -i :${portNumber}\\n` command\n // IMPORTANT: code will not run without the '\\n' component--the CLI needs this\n return new Promise((resolve) => {\n let numRuns = 0;\n let timeoutId: NodeJS.Timer;\n // A set interval callback that will write a command to the terminal every 200ms, then check\n // if the portOpen boolean has been changed (it is actually changed in the on-data listener\n // above). Promise will resolve when the portOpen variable is true\n const intervalLsofToBash = setInterval(() => {\n bashTerminal.stdin.write(`lsof -i :${portNumber}\\n`);\n // console.log('inside promise-- portOpen boolean', portOpen);\n // console.log('inside promise-- allTerminalText', allTerminalText);\n\n // if the port is open, resolve the promise, return some value...\n if (portOpen) {\n // clear set intervals\n clearInterval(intervalLsofToBash);\n\n // clear the timeoutId\n if (timeoutId) clearTimeout(timeoutId);\n\n // end terminal session\n bashTerminal.stdin.end();\n\n console.log('port is open!');\n\n // resolve promise\n // return a confirmed status\n resolve(true);\n }\n\n // if once param was set to true, we only want to check if the server is \"immediately\" on, so\n // check if once is true, and numRuns is greater than one, then resolve the promise with the\n // result of portOpen\n if (once && numRuns > 1) {\n console.log('---once conditional triggered, result is:', portOpen);\n // clear set intervals\n clearInterval(intervalLsofToBash);\n\n // clear the timeoutId\n if (timeoutId) clearTimeout(timeoutId);\n\n // end terminal session\n bashTerminal.stdin.end();\n\n resolve(portOpen);\n }\n\n // increment numRuns for the once conditional test\n numRuns += 1;\n }, 200); // Run every 200ms\n\n // default/base case to resolve promise if the server hasn't started in 3 seconds\n // This means the server is either spinning up too slowly or there is an error in the user's\n // server starting file. In either case we want to return false\n if (!once) {\n // only create this default timeout if this function was invoked with once === false\n timeoutId = setTimeout(() => {\n console.log('timeout of checkForRunningServer');\n // clear set intervals\n clearInterval(intervalLsofToBash);\n\n // end terminal session\n bashTerminal.stdin.end();\n\n // resolve the promise\n resolve(false);\n }, allowServerTimeoutConfigSetting); // default allowed time is 3 sec.\n }\n });\n};\n\nmodule.exports = checkForRunningServer;\n","var map = {\n\t\"./checkQueryBrackets\": 8,\n\t\"./checkQueryBrackets.ts\": 8,\n\t\"./extractQueries\": 6,\n\t\"./extractQueries.ts\": 6,\n\t\"./findPortNumber\": 13,\n\t\"./findPortNumber.ts\": 13,\n\t\"./findRootDirectory\": 11,\n\t\"./findRootDirectory.ts\": 11,\n\t\"./parseConfigFile\": 12,\n\t\"./parseConfigFile.ts\": 12,\n\t\"./parseQuery\": 7,\n\t\"./parseQuery.ts\": 7,\n\t\"./readFileSendReqAndWriteResponse\": 5,\n\t\"./readFileSendReqAndWriteResponse.ts\": 5\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 21;"],"sourceRoot":""} \ No newline at end of file From 711a60de94329fedd4568607f00044955486f30d Mon Sep 17 00:00:00 2001 From: alexchao26 Date: Sun, 10 Nov 2019 22:00:52 -0500 Subject: [PATCH 04/10] pre-minor publish changes to logo --- package.json | 2 +- statics/graphquill-logo.png | Bin 0 -> 223838 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 statics/graphquill-logo.png diff --git a/package.json b/package.json index 3e6a053..d08de26 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "graphquill", "displayName": "GraphQuill", "description": "Welcome to a new era of GraphQL API devleopment.", - "icon": "./out/graphquill-logo.png", + "icon": "statics/graphquill-logo.png", "publisher": "sproutdeveloping", "version": "0.4.0", "repository": { diff --git a/statics/graphquill-logo.png b/statics/graphquill-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a9858f69ca4d30eaf52ed2eef61ea8bc97713571 GIT binary patch literal 223838 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 Rm2H0h^ofw;kAo5l{|82~^N9ce literal 0 HcmV?d00001 From 8e9eab295485b28a92a98fea3c6cd84a808ddd30 Mon Sep 17 00:00:00 2001 From: alexchao26 Date: Sun, 10 Nov 2019 22:01:36 -0500 Subject: [PATCH 05/10] 0.5.0 --- package-lock.json | 2 +- package.json | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index abe3566..48ab54f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "graphquill", - "version": "0.4.0", + "version": "0.5.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index d08de26..7e3cf44 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Welcome to a new era of GraphQL API devleopment.", "icon": "statics/graphquill-logo.png", "publisher": "sproutdeveloping", - "version": "0.4.0", + "version": "0.5.0", "repository": { "type": "git", "url": "https://github.com/oslabs-beta/GraphQuill.git" @@ -44,10 +44,10 @@ }, "scripts": { "vscode:prepublish": "webpack --mode production", - "webpack": "webpack --mode development", - "webpack-dev": "webpack --mode development --watch", - "test-compile": "tsc -p ./", - "compile": "tsc -p ./", + "webpack": "webpack --mode development", + "webpack-dev": "webpack --mode development --watch", + "test-compile": "tsc -p ./", + "compile": "tsc -p ./", "watch": "tsc -watch -p ./", "pretest": "npm run compile", "test": "node ./out/test/runTest.js", From 6e045df8c7b406f021b4b055f9e795c7c604f13e Mon Sep 17 00:00:00 2001 From: alexchao26 Date: Sun, 10 Nov 2019 22:53:58 -0500 Subject: [PATCH 06/10] webpack removed. all kinds of issues... mostly with the dynamic require in parseConfigFile --- .vscodeignore | 2 +- dist/extension.js | 2 - dist/extension.js.map | 1 - package-lock.json | 4111 +---------------------------------------- package.json | 9 +- webpack.config.js | 43 - 6 files changed, 65 insertions(+), 4103 deletions(-) delete mode 100644 dist/extension.js delete mode 100644 dist/extension.js.map delete mode 100644 webpack.config.js diff --git a/.vscodeignore b/.vscodeignore index 9ad24ad..7af47aa 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -1,6 +1,6 @@ .vscode/** .vscode-test/** -out/** +out/test/** src/** .eslintrc .gitignore diff --git a/dist/extension.js b/dist/extension.js deleted file mode 100644 index ebd58ac..0000000 --- a/dist/extension.js +++ /dev/null @@ -1,2 +0,0 @@ -module.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=16)}([function(e,t){e.exports=require("stream")},function(e,t){e.exports=require("zlib")},function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("vscode")},function(e,t){e.exports=require("url")},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(17),o=n(2),s=n(6);e.exports=function(e,t,n,i){const a=o.readFileSync(e).toString();if(e.includes(i)&&!a.includes("function graphQuill")){const t=`function graphQuill() {}\n\n${a}`;o.writeFileSync(e,t)}o.readFile(e,(e,o)=>{if(e)console.log(e);else{const e=s(o.toString());setTimeout(()=>{const o=e.filter(e=>"string"==typeof e&&e.length).map(e=>"string"==typeof e&&e.slice(1,e.length-1));console.log("--JUST THE QUERIES",o),o.forEach(e=>{r(`http://localhost:${n}/graphql`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:e})}).then(e=>e.json()).then(e=>{console.log("printed: ",e),t.append(`\n${JSON.stringify(e,null,2)}`),t.show(!0)}).catch(e=>{console.log("fetch catch error: ",e,typeof e,e.constructor.name),t.append(`ERROR!!!\n${JSON.stringify(e,null,2)}`)})}),t.append("Responses are:")},1),t.append(`GraphQuill Queries are:\n${e.filter(e=>"string"==typeof e&&e.length)}\n`),t.show(!0)}})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(7),o=n(8);e.exports=function(e){const t="graphQuill",n=[];for(let o=0;oo(e))}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){let t="",n="",r=!1,o=0,s=0,i=0;const a=[];for(;ir(this,void 0,void 0,(function*(){if(p)return console.log("Server is already running"),o.window.showInformationMessage("GraphQuill is already active"),null;t.show(!0);let e=f(h);if(m=e.entryPoint,y=e.allowServerTimeoutConfigSetting,!m)return t.append("The config file was not found, please use the Create GraphQuill Config File Command to make one."),null;g=d(m);const r=yield l(g,!0);if(!(r||(a(m),t.clear(),t.append("The server is starting up..."),b=yield l(g,!1,y))))return t.clear(),t.append(`The server is taking too long to startup (>${(y||3e3)/1e3} seconds).\nTo increase this time, update the "serverStartupTimeAllowed" setting in the graphquill.config.js file.`),setTimeout(()=>u(g),5e3);if(r||b){p=!0,t.clear();const r=o.window.activeTextEditor.document.fileName;i(r,t,g,h),n=o.workspace.onDidSaveTextDocument(n=>(t.clear(),e=f(h),m=e.entryPoint,y=e.allowServerTimeoutConfigSetting,m?(g=d(m),i(n.fileName,t,g,h),null):(t.append("The config file was not found, please use the Create GraphQuill Config File Command to make one."),null)))}return null})));e.subscriptions.push(w);const v=o.commands.registerCommand("extension.deactivateGraphQuill",()=>p?(p=!1,n&&n.dispose(),t.hide(),t.clear(),console.log("in deactivate, the server turned on by graphquill boolean is: ",b),setTimeout(()=>b&&u(g),1)):(console.log("server is already off"),o.window.showInformationMessage("GraphQuill is already off"),null));e.subscriptions.push(v);const x=o.commands.registerCommand("extension.toggleGraphQuill",()=>(p?o.commands.executeCommand("extension.deactivateGraphQuill"):o.commands.executeCommand("extension.activateGraphQuill"),null));e.subscriptions.push(x);const S=o.commands.registerCommand("extension.createConfigFile",()=>{const e=`${h}/graphquill.config.js`;return s.existsSync(e)?(o.window.showInformationMessage(`A GraphQuill configuration file already exists at ${e}`),null):(s.writeFileSync(e,'module.exports = {\n // change "./server/index.js" to the relative path from the root directory to\n // the file that starts your server\n entry: \'./server/index.js\',\n\n // to increase the amount of time allowed for the server to startup, add a time\n // in milliseconds (integer) to the "serverStartupTimeAllowed"\n // serverStartupTimeAllowed: 5000,\n};\n',"utf-8"),o.workspace.openTextDocument(e).then(e=>{o.window.showTextDocument(e)}),null)});e.subscriptions.push(S)},t.deactivate=function(){o.commands.executeCommand("extension.deactivateGraphQuill")}},function(e,t,n){"use strict";n.r(t),n.d(t,"Headers",(function(){return C})),n.d(t,"Request",(function(){return I})),n.d(t,"Response",(function(){return F})),n.d(t,"FetchError",(function(){return d}));var r=n(0),o=n(14),s=n(4),i=n(15),a=n(1);const u=r.Readable,l=Symbol("buffer"),c=Symbol("type");class f{constructor(){this[c]="";const e=arguments[0],t=arguments[1],n=[];let r=0;if(e){const t=e,o=Number(t.length);for(let e=0;e1&&void 0!==arguments[1]?arguments[1]:{},o=n.size;let s=void 0===o?0:o;var i=n.timeout;let a=void 0===i?0:i;null==e?e=null:b(e)?e=Buffer.from(e.toString()):w(e)||Buffer.isBuffer(e)||("[object ArrayBuffer]"===Object.prototype.toString.call(e)?e=Buffer.from(e):ArrayBuffer.isView(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):e instanceof r||(e=Buffer.from(String(e)))),this[h]={body:e,disturbed:!1,error:null},this.size=s,this.timeout=a,e instanceof r&&e.on("error",(function(e){const n="AbortError"===e.name?e:new d(`Invalid response body while trying to fetch ${t.url}: ${e.message}`,"system",e);t[h].error=n}))}function g(){var e=this;if(this[h].disturbed)return y.Promise.reject(new TypeError(`body used already for: ${this.url}`));if(this[h].disturbed=!0,this[h].error)return y.Promise.reject(this[h].error);let t=this.body;if(null===t)return y.Promise.resolve(Buffer.alloc(0));if(w(t)&&(t=t.stream()),Buffer.isBuffer(t))return y.Promise.resolve(t);if(!(t instanceof r))return y.Promise.resolve(Buffer.alloc(0));let n=[],o=0,s=!1;return new y.Promise((function(r,i){let a;e.timeout&&(a=setTimeout((function(){s=!0,i(new d(`Response timeout while trying to fetch ${e.url} (over ${e.timeout}ms)`,"body-timeout"))}),e.timeout)),t.on("error",(function(t){"AbortError"===t.name?(s=!0,i(t)):i(new d(`Invalid response body while trying to fetch ${e.url}: ${t.message}`,"system",t))})),t.on("data",(function(t){if(!s&&null!==t){if(e.size&&o+t.length>e.size)return s=!0,void i(new d(`content size at ${e.url} over limit: ${e.size}`,"max-size"));o+=t.length,n.push(t)}})),t.on("end",(function(){if(!s){clearTimeout(a);try{r(Buffer.concat(n,o))}catch(t){i(new d(`Could not create Buffer from response body for ${e.url}: ${t.message}`,"system",t))}}}))}))}function b(e){return"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&("URLSearchParams"===e.constructor.name||"[object URLSearchParams]"===Object.prototype.toString.call(e)||"function"==typeof e.sort)}function w(e){return"object"==typeof e&&"function"==typeof e.arrayBuffer&&"string"==typeof e.type&&"function"==typeof e.stream&&"function"==typeof e.constructor&&"string"==typeof e.constructor.name&&/^(Blob|File)$/.test(e.constructor.name)&&/^(Blob|File)$/.test(e[Symbol.toStringTag])}function v(e){let t,n,o=e.body;if(e.bodyUsed)throw new Error("cannot clone body after it is used");return o instanceof r&&"function"!=typeof o.getBoundary&&(t=new m,n=new m,o.pipe(t),o.pipe(n),e[h].body=t,o=n),o}function x(e){return null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":b(e)?"application/x-www-form-urlencoded;charset=UTF-8":w(e)?e.type||null:Buffer.isBuffer(e)?null:"[object ArrayBuffer]"===Object.prototype.toString.call(e)?null:ArrayBuffer.isView(e)?null:"function"==typeof e.getBoundary?`multipart/form-data;boundary=${e.getBoundary()}`:e instanceof r?null:"text/plain;charset=UTF-8"}function S(e){const t=e.body;return null===t?0:w(t)?t.size:Buffer.isBuffer(t)?t.length:t&&"function"==typeof t.getLengthSync&&(t._lengthRetrievers&&0==t._lengthRetrievers.length||t.hasKnownLength&&t.hasKnownLength())?t.getLengthSync():null}y.prototype={get body(){return this[h].body},get bodyUsed(){return this[h].disturbed},arrayBuffer(){return g.call(this).then((function(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}))},blob(){let e=this.headers&&this.headers.get("content-type")||"";return g.call(this).then((function(t){return Object.assign(new f([],{type:e.toLowerCase()}),{[l]:t})}))},json(){var e=this;return g.call(this).then((function(t){try{return JSON.parse(t.toString())}catch(t){return y.Promise.reject(new d(`invalid json response body at ${e.url} reason: ${t.message}`,"invalid-json"))}}))},text(){return g.call(this).then((function(e){return e.toString()}))},buffer(){return g.call(this)},textConverted(){var e=this;return g.call(this).then((function(t){return function(e,t){if("function"!=typeof p)throw new Error("The package `encoding` must be installed to use the textConverted() function");const n=t.get("content-type");let r,o,s="utf-8";n&&(r=/charset=([^;]*)/i.exec(n));o=e.slice(0,1024).toString(),!r&&o&&(r=/0&&void 0!==arguments[0]?arguments[0]:void 0;if(this[$]=Object.create(null),e instanceof C){const t=e.raw(),n=Object.keys(t);for(const e of n)for(const n of t[e])this.append(e,n)}else if(null==e);else{if("object"!=typeof e)throw new TypeError("Provided initializer must be an object");{const t=e[Symbol.iterator];if(null!=t){if("function"!=typeof t)throw new TypeError("Header pairs must be iterable");const n=[];for(const t of e){if("object"!=typeof t||"function"!=typeof t[Symbol.iterator])throw new TypeError("Each header pair must be iterable");n.push(Array.from(t))}for(const e of n){if(2!==e.length)throw new TypeError("Each header pair must be a name/value tuple");this.append(e[0],e[1])}}else for(const t of Object.keys(e)){const n=e[t];this.append(t,n)}}}}get(e){O(e=`${e}`);const t=E(this[$],e);return void 0===t?null:this[$][t].join(", ")}forEach(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,n=B(this),r=0;for(;r1&&void 0!==arguments[1]?arguments[1]:"key+value";return Object.keys(e[$]).sort().map("key"===t?function(e){return e.toLowerCase()}:"value"===t?function(t){return e[$][t].join(", ")}:function(t){return[t.toLowerCase(),e[$][t].join(", ")]})}C.prototype.entries=C.prototype[Symbol.iterator],Object.defineProperty(C.prototype,Symbol.toStringTag,{value:"Headers",writable:!1,enumerable:!1,configurable:!0}),Object.defineProperties(C.prototype,{get:{enumerable:!0},forEach:{enumerable:!0},set:{enumerable:!0},append:{enumerable:!0},has:{enumerable:!0},delete:{enumerable:!0},keys:{enumerable:!0},values:{enumerable:!0},entries:{enumerable:!0}});const k=Symbol("internal");function R(e,t){const n=Object.create(_);return n[k]={target:e,kind:t,index:0},n}const _=Object.setPrototypeOf({next(){if(!this||Object.getPrototypeOf(this)!==_)throw new TypeError("Value of `this` is not a HeadersIterator");var e=this[k];const t=e.target,n=e.kind,r=e.index,o=B(t,n);return r>=o.length?{value:void 0,done:!0}:(this[k].index=r+1,{value:o[r],done:!1})}},Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));function A(e){const t=Object.assign({__proto__:null},e[$]),n=E(e[$],"Host");return void 0!==n&&(t[n]=t[n][0]),t}Object.defineProperty(_,Symbol.toStringTag,{value:"HeadersIterator",writable:!1,enumerable:!1,configurable:!0});const q=Symbol("Response internals"),L=o.STATUS_CODES;class F{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};y.call(this,e,t);const n=t.status||200,r=new C(t.headers);if(null!=e&&!r.has("Content-Type")){const t=x(e);t&&r.append("Content-Type",t)}this[q]={url:t.url,status:n,statusText:t.statusText||L[n],headers:r,counter:t.counter}}get url(){return this[q].url||""}get status(){return this[q].status}get ok(){return this[q].status>=200&&this[q].status<300}get redirected(){return this[q].counter>0}get statusText(){return this[q].statusText}get headers(){return this[q].headers}clone(){return new F(v(this),{url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected})}}y.mixIn(F.prototype),Object.defineProperties(F.prototype,{url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}}),Object.defineProperty(F.prototype,Symbol.toStringTag,{value:"Response",writable:!1,enumerable:!1,configurable:!0});const G=Symbol("Request internals"),Q=s.parse,U=s.format,M="destroy"in r.Readable.prototype;function z(e){return"object"==typeof e&&"object"==typeof e[G]}class I{constructor(e){let t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};z(e)?t=Q(e.url):(t=e&&e.href?Q(e.href):Q(`${e}`),e={});let r=n.method||e.method||"GET";if(r=r.toUpperCase(),(null!=n.body||z(e)&&null!==e.body)&&("GET"===r||"HEAD"===r))throw new TypeError("Request with GET/HEAD method cannot have body");let o=null!=n.body?n.body:z(e)&&null!==e.body?v(e):null;y.call(this,o,{timeout:n.timeout||e.timeout||0,size:n.size||e.size||0});const s=new C(n.headers||e.headers||{});if(null!=o&&!s.has("Content-Type")){const e=x(o);e&&s.append("Content-Type",e)}let i=z(e)?e.signal:null;if("signal"in n&&(i=n.signal),null!=i&&!function(e){const t=e&&"object"==typeof e&&Object.getPrototypeOf(e);return!(!t||"AbortSignal"!==t.constructor.name)}(i))throw new TypeError("Expected signal to be an instanceof AbortSignal");this[G]={method:r,redirect:n.redirect||e.redirect||"follow",headers:s,parsedURL:t,signal:i},this.follow=void 0!==n.follow?n.follow:void 0!==e.follow?e.follow:20,this.compress=void 0!==n.compress?n.compress:void 0===e.compress||e.compress,this.counter=n.counter||e.counter||0,this.agent=n.agent||e.agent}get method(){return this[G].method}get url(){return U(this[G].parsedURL)}get headers(){return this[G].headers}get redirect(){return this[G].redirect}get signal(){return this[G].signal}clone(){return new I(this)}}function N(e){Error.call(this,e),this.type="aborted",this.message=e,Error.captureStackTrace(this,this.constructor)}y.mixIn(I.prototype),Object.defineProperty(I.prototype,Symbol.toStringTag,{value:"Request",writable:!1,enumerable:!1,configurable:!0}),Object.defineProperties(I.prototype,{method:{enumerable:!0},url:{enumerable:!0},headers:{enumerable:!0},redirect:{enumerable:!0},clone:{enumerable:!0},signal:{enumerable:!0}}),N.prototype=Object.create(Error.prototype),N.prototype.constructor=N,N.prototype.name="AbortError";const H=r.PassThrough,D=s.resolve;function J(e,t){if(!J.Promise)throw new Error("native promise missing, set fetch.Promise to your favorite alternative");return y.Promise=J.Promise,new J.Promise((function(n,s){const u=new I(e,t),l=function(e){const t=e[G].parsedURL,n=new C(e[G].headers);if(n.has("Accept")||n.set("Accept","*/*"),!t.protocol||!t.hostname)throw new TypeError("Only absolute URLs are supported");if(!/^https?:$/.test(t.protocol))throw new TypeError("Only HTTP(S) protocols are supported");if(e.signal&&e.body instanceof r.Readable&&!M)throw new Error("Cancellation of streamed requests with AbortSignal is not supported in node < 8");let o=null;if(null==e.body&&/^(POST|PUT)$/i.test(e.method)&&(o="0"),null!=e.body){const t=S(e);"number"==typeof t&&(o=String(t))}o&&n.set("Content-Length",o),n.has("User-Agent")||n.set("User-Agent","node-fetch/1.0 (+https://github.com/bitinn/node-fetch)"),e.compress&&!n.has("Accept-Encoding")&&n.set("Accept-Encoding","gzip,deflate");let s=e.agent;return"function"==typeof s&&(s=s(t)),n.has("Connection")||s||n.set("Connection","close"),Object.assign({},t,{method:e.method,headers:A(n),agent:s})}(u),c=("https:"===l.protocol?i:o).request,f=u.signal;let p=null;const h=function(){let e=new N("The user aborted a request.");s(e),u.body&&u.body instanceof r.Readable&&u.body.destroy(e),p&&p.body&&p.body.emit("error",e)};if(f&&f.aborted)return void h();const m=function(){h(),b()},y=c(l);let g;function b(){y.abort(),f&&f.removeEventListener("abort",m),clearTimeout(g)}f&&f.addEventListener("abort",m),u.timeout&&y.once("socket",(function(e){g=setTimeout((function(){s(new d(`network timeout at: ${u.url}`,"request-timeout")),b()}),u.timeout)})),y.on("error",(function(e){s(new d(`request to ${u.url} failed, reason: ${e.message}`,"system",e)),b()})),y.on("response",(function(e){clearTimeout(g);const t=function(e){const t=new C;for(const n of Object.keys(e))if(!T.test(n))if(Array.isArray(e[n]))for(const r of e[n])j.test(r)||(void 0===t[$][n]?t[$][n]=[r]:t[$][n].push(r));else j.test(e[n])||(t[$][n]=[e[n]]);return t}(e.headers);if(J.isRedirect(e.statusCode)){const r=t.get("Location"),o=null===r?null:D(u.url,r);switch(u.redirect){case"error":return s(new d(`redirect mode is set to error: ${u.url}`,"no-redirect")),void b();case"manual":if(null!==o)try{t.set("Location",o)}catch(e){s(e)}break;case"follow":if(null===o)break;if(u.counter>=u.follow)return s(new d(`maximum redirect reached at: ${u.url}`,"max-redirect")),void b();const r={headers:new C(u.headers),follow:u.follow,counter:u.counter+1,agent:u.agent,compress:u.compress,method:u.method,body:u.body,signal:u.signal,timeout:u.timeout};return 303!==e.statusCode&&u.body&&null===S(u)?(s(new d("Cannot follow redirect with body being a readable stream","unsupported-redirect")),void b()):(303!==e.statusCode&&(301!==e.statusCode&&302!==e.statusCode||"POST"!==u.method)||(r.method="GET",r.body=void 0,r.headers.delete("content-length")),n(J(new I(o,r))),void b())}}e.once("end",(function(){f&&f.removeEventListener("abort",m)}));let r=e.pipe(new H);const o={url:u.url,status:e.statusCode,statusText:e.statusMessage,headers:t,size:u.size,timeout:u.timeout,counter:u.counter},i=t.get("Content-Encoding");if(!u.compress||"HEAD"===u.method||null===i||204===e.statusCode||304===e.statusCode)return p=new F(r,o),void n(p);const l={flush:a.Z_SYNC_FLUSH,finishFlush:a.Z_SYNC_FLUSH};if("gzip"==i||"x-gzip"==i)return r=r.pipe(a.createGunzip(l)),p=new F(r,o),void n(p);if("deflate"!=i&&"x-deflate"!=i){if("br"==i&&"function"==typeof a.createBrotliDecompress)return r=r.pipe(a.createBrotliDecompress()),p=new F(r,o),void n(p);p=new F(r,o),n(p)}else{e.pipe(new H).once("data",(function(e){r=8==(15&e[0])?r.pipe(a.createInflate()):r.pipe(a.createInflateRaw()),p=new F(r,o),n(p)}))}})),function(e,t){const n=t.body;null===n?e.end():w(n)?n.stream().pipe(e):Buffer.isBuffer(n)?(e.write(n),e.end()):n.pipe(e)}(y,u)}))}J.isRedirect=function(e){return 301===e||302===e||303===e||307===e||308===e},J.Promise=global.Promise,t.default=J},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(3),o=n(9);e.exports=e=>{const t=o.spawn("bash");return t.stdout.on("data",e=>{console.log(`stdout from terminal: ${e}`)}),t.on("exit",e=>{console.log(`child process exited with code ${e}`)}),new Promise(n=>{setTimeout(()=>{console.log("Sending stdin (node command) to terminal"),t.stdin.write(`node ${e}\n`),console.log("Ending terminal session"),t.stdin.end(),n(),console.log("just resolved"),r.window.showInformationMessage("GraphQuill Activated")},1)})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(3),o=n(2),s=n(10),i=n(9);e.exports=e=>{console.log("in serveroff function file");const t=i.spawn("bash");let n=s.dirname(r.window.activeTextEditor.document.fileName);for(;!o.existsSync(`${n}/package.json`);)n=s.dirname(n),console.log("a root grows: ",n);t.stdout.on("data",e=>{console.log(`stdout: ${e}`)}),t.on("exit",e=>{console.log(`terminal2 child process exited with code ${e}`)}),t.stdin.write(`kill $(lsof -t -i:${e})\n`),t.stdin.end(),r.window.showInformationMessage("GraphQuill has been turned off")}},function(e,t,n){"use strict";const r=n(9);e.exports=(e,t,n=3e3)=>{console.log("CHECK FOR RUNNING SERVER IS RUNNINGGGGGG");let o,s=!1;const i=r.spawn("bash");return i.stdout.on("data",e=>{console.log("terminal has printed some data..."),o=e.toString(),s=o.includes("node")}),i.on("exit",e=>{console.log(`checkForRunningServer child process exited with code ${e}`)}),new Promise(r=>{let o,a=0;const u=setInterval(()=>{i.stdin.write(`lsof -i :${e}\n`),s&&(clearInterval(u),o&&clearTimeout(o),i.stdin.end(),console.log("port is open!"),r(!0)),t&&a>1&&(console.log("---once conditional triggered, result is:",s),clearInterval(u),o&&clearTimeout(o),i.stdin.end(),r(s)),a+=1},200);t||(o=setTimeout(()=>{console.log("timeout of checkForRunningServer"),clearInterval(u),i.stdin.end(),r(!1)},n))})}},function(e,t,n){var r={"./checkQueryBrackets":8,"./checkQueryBrackets.ts":8,"./extractQueries":6,"./extractQueries.ts":6,"./findPortNumber":13,"./findPortNumber.ts":13,"./findRootDirectory":11,"./findRootDirectory.ts":11,"./parseConfigFile":12,"./parseConfigFile.ts":12,"./parseQuery":7,"./parseQuery.ts":7,"./readFileSendReqAndWriteResponse":5,"./readFileSendReqAndWriteResponse.ts":5};function o(e){var t=s(e);return n(t)}function s(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=s,e.exports=o,o.id=21}]); -//# sourceMappingURL=extension.js.map \ No newline at end of file diff --git a/dist/extension.js.map b/dist/extension.js.map deleted file mode 100644 index 8b07d37..0000000 --- a/dist/extension.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../webpack/bootstrap","../external \"stream\"","../external \"zlib\"","../external \"fs\"","../external \"vscode\"","../external \"url\"",".././src/modules/client/readFileSendReqAndWriteResponse.ts",".././src/modules/client/extractQueries.ts",".././src/modules/client/parseQuery.ts",".././src/modules/client/checkQueryBrackets.ts","../external \"child_process\"","../external \"path\"",".././src/modules/client/findRootDirectory.ts",".././src/modules/client/parseConfigFile.ts",".././src/modules/client/findPortNumber.ts","../external \"http\"","../external \"https\"",".././src/extension.ts",".././node_modules/node-fetch/lib/index.mjs",".././src/modules/server/serverOn.ts",".././src/modules/server/serverOff.ts",".././src/modules/server/checkForRunningServer.ts",".././src/modules/client sync ^.*$"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","require","fetch","fs","extractQueries","filePath","channel","portNumber","rootPath","copy","readFileSync","toString","includes","newFile","writeFileSync","readFile","err","data","console","log","result","setTimeout","queriesWithoutQuotes","filter","e","length","map","query","slice","forEach","method","headers","body","JSON","stringify","then","response","json","thing","append","show","catch","error","constructor","useCheckQueryBrackets","string","gq","queriesArr","push","queryString","input","passedQueryString","closer","openParensCount","closeParensCount","index","stack","pop","validatedSoFar","el","indexOf","Error","join","path","root","dirname","vscode","window","activeTextEditor","document","fileName","existsSync","gqConfigFilePath","entryPoint","allowServerTimeoutConfigSetting","configObject","resolve","entry","serverStartupTimeAllowed","lookup","search","displace","readFileSendReqAndWriteResponse","serverOn","serverOff","checkForRunningServer","findRootDirectory","parseConfigFile","findPortNumber","context","gqChannel","createOutputChannel","saveListener","isOnToggle","serverTurnedOnByGraphQuill","disposableActivateGraphQuill","commands","registerCommand","showInformationMessage","parseResult","serverOnFromUser","clear","currOpenEditorPath","workspace","onDidSaveTextDocument","event","subscriptions","disposableDisableGraphQuill","dispose","hide","disposableToggleGraphQuill","executeCommand","disposableCreateConfigFile","graphQuillConfigPath","openTextDocument","doc","showTextDocument","Readable","BUFFER","TYPE","Blob","this","blobParts","arguments","options","buffers","size","a","Number","element","buffer","Buffer","ArrayBuffer","isView","from","byteOffset","byteLength","String","concat","type","undefined","toLowerCase","test","Promise","buf","ab","readable","_read","start","end","relativeStart","relativeEnd","Math","max","min","span","slicedBuffer","blob","FetchError","message","systemError","code","errno","captureStackTrace","convert","defineProperties","writable","configurable","INTERNALS","PassThrough","Body","_this","_ref","_ref$size","_ref$timeout","timeout","isURLSearchParams","isBlob","isBuffer","disturbed","on","url","consumeBody","_this4","reject","TypeError","alloc","stream","accum","accumBytes","abort","resTimeout","chunk","clearTimeout","obj","delete","getAll","has","set","sort","arrayBuffer","clone","instance","p1","p2","bodyUsed","getBoundary","pipe","extractContentType","getTotalBytes","getLengthSync","_lengthRetrievers","hasKnownLength","ct","assign","_this2","parse","_this3","res","str","charset","exec","convertBody","text","mixIn","proto","getOwnPropertyNames","desc","getOwnPropertyDescriptor","global","invalidTokenRegex","invalidHeaderCharRegex","validateName","validateValue","find","MAP","Headers","init","rawHeaders","raw","headerNames","keys","headerName","iterator","pairs","pair","Array","callback","thisArg","getHeaders","_pairs$i","createHeadersIterator","kind","k","entries","values","INTERNAL","target","HeadersIteratorPrototype","setPrototypeOf","getPrototypeOf","_INTERNAL","done","exportNodeCompatibleHeaders","__proto__","hostHeaderKey","INTERNALS$1","STATUS_CODES","Response","opts","status","contentType","statusText","counter","ok","redirected","INTERNALS$2","parse_url","format_url","format","streamDestructionSupported","isRequest","Request","parsedURL","href","toUpperCase","inputBody","signal","isAbortSignal","redirect","follow","compress","agent","AbortError","PassThrough$1","resolve_url","request","protocol","hostname","contentLengthValue","totalBytes","getNodeRequestOptions","send","destroy","emit","aborted","abortAndFinalize","finalize","req","reqTimeout","removeEventListener","addEventListener","once","socket","isArray","val","createHeadersLenient","isRedirect","statusCode","location","locationURL","requestOpts","response_options","statusMessage","codings","zlibOptions","flush","Z_SYNC_FLUSH","finishFlush","createGunzip","createBrotliDecompress","createInflate","createInflateRaw","dest","write","writeToStream","childProcess","terminal","spawn","stdout","stdin","terminal2","allTerminalText","portOpen","bashTerminal","timeoutId","numRuns","intervalLsofToBash","setInterval","clearInterval","webpackContext","id","webpackContextResolve"],"mappings":"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","file":"extension.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 \t\t}\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// 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, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\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\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 16);\n","module.exports = require(\"stream\");","module.exports = require(\"zlib\");","module.exports = require(\"fs\");","module.exports = require(\"vscode\");","module.exports = require(\"url\");","// for requiring in .js files\n/* eslint-disable import/no-unresolved */\n\n// for vscode module being dumb\n/* eslint-disable no-unused-vars */\n\n/**\n * @module : readFileSendReqAndWriteResponse.ts\n * @author : Austin Ruby\n * @function : parse string for instances of 'graphQuill' and extract content\n * within parens immediately following each instance\n * @changelog : Ed Greenberg, November 5th, 2019, copy out boilerplate function invocation\n * to query file if not present\n * @changelog : Alex Chao, November 5th, 2019, merge conflict handling and server additions\n * @changelog : Alex Chao, November 6th, 2019, dynamic port number for fetching, coming from\n * the extension.ts file\n * * */\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\nconst fetch = require('node-fetch');\nconst fs = require('fs');\n\nconst extractQueries = require('./extractQueries');\n\n// checkQueryBrackets used to be here\n// parseQuery used to be here\n// extractQueries was here\n\n// parent function to read file,\n// call helper functions to parse out query string,\n// send request to GraphQL API,\n// and return response to output channel\nfunction readFileSendReqAndWriteResponse(\n filePath: string,\n channel: vscode.OutputChannel,\n portNumber: string,\n rootPath: string, // passing the root path in to control the function def. injection\n) {\n // console.log('inreadFile: ', filePath);\n\n // parse the contents of the entire filePath file to a string\n const copy = fs.readFileSync(filePath).toString();\n // check if the file is within the root directory, otherwise we don't want to inject the\n // function defintion\n if (filePath.includes(rootPath) && !copy.includes('function graphQuill')) {\n const newFile = `function graphQuill() {}\\n\\n${copy}`;\n fs.writeFileSync(filePath, newFile);\n }\n\n // read user's file\n fs.readFile(filePath, (err: Error, data: Buffer) => {\n if (err) {\n console.log(err);\n } else {\n // if no error, convert data to string and pass into gQParser to pull out query/ies\n const result: (string | Error)[] = extractQueries(data.toString());\n\n // send post request to API/graphql\n\n setTimeout(() => {\n // console.log('IN SET TIMEOUT');\n\n // handle multiple queries in file...\n // the additional quotes need to be parsed off\n const queriesWithoutQuotes: (string|false)[] = result.filter(\n // callback to remove empty string queries (i.e. the function def of graphQuill)\n (e: string|Error) => (typeof e === 'string' && e.length),\n ).map(\n (query: string|Error) => (\n // should all be strings...\n typeof query === 'string' && query.slice(1, query.length - 1)\n ),\n );\n\n console.log('--JUST THE QUERIES', queriesWithoutQuotes);\n\n\n // TODO pair up the requests and responses. Right now the responses are coming in a random\n // TODO order because of async fetches\n\n // TODO MAKE THIS A PROMISE ALL? or does it not matter because the for loop will send off\n // TODO all of the fetches simultaneously and just append responses on as they come in...\n // console.log('query w/o quotes is', queryMinusQuotes);\n queriesWithoutQuotes.forEach((query) => {\n // send the fetch to the correct port (passed in as a variable)\n fetch(`http://localhost:${portNumber}/graphql`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ query }),\n })\n .then((response: Response) => response.json())\n .then((thing: Object) => {\n console.log('printed: ', thing);\n // append any graphql response to the output channel\n channel.append(`\\n${JSON.stringify(thing, null, 2)}`); // may need to stringify to send\n channel.show(true);\n })\n .catch((error: Error) => {\n console.log('fetch catch error: ', error, typeof error, error.constructor.name);\n\n // print any errors to the output channel\n channel.append(`ERROR!!!\\n${JSON.stringify(error, null, 2)}`);\n });\n });\n\n // only append this string to the output channel once\n channel.append('Responses are:');\n }, 1); // TODO BIG UX FIX NEEDED HERE\n\n // then send response back to vscode output channel\n // console.log('parsed queries are', result);\n // TODO match these up with the correct queries when there are multiple within a single file\n channel.append(`GraphQuill Queries are:\\n${result.filter((e : string|Error) => (typeof e === 'string' ? e.length : false))}\\n`);\n channel.show(true);\n }\n });\n}\n\nmodule.exports = readFileSendReqAndWriteResponse;\n","/* eslint-disable import/no-unresolved */\n// import { builtinModules } from 'module';\n\nimport parseQuery from './parseQuery';\n\nconst useCheckQueryBrackets = require('./checkQueryBrackets');\n\n// given file path, read file at path and parse for instances of 'graphQuill'\nfunction extractQueries(string: string) {\n // console.log(string);\n // define text to search for in file\n const gq: string = 'graphQuill';\n const queriesArr: string[] = [];\n // iterate over string\n for (let i: number = 0; i < string.length; i += 1) {\n // if current slice of string is 'graphQuill'\n // then push evaluated result of parseQueries passing in\n // string sliced from current char to end into queriesArr\n if (string.slice(i, i + gq.length) === gq) {\n queriesArr.push(parseQuery(string.slice(i + gq.length)));\n }\n }\n\n // after finding all instances of 'graphQuill' and parsing out query strings,\n // map queries to new array full of either valid queries of errors\n const validatedQueriesArr: (string | Error)[] = queriesArr.map((queryString) => (\n useCheckQueryBrackets(queryString)));\n // console.log('queriesArr: ', queriesArr);\n // console.log('validatedQueriesArr: ', validatedQueriesArr);\n return validatedQueriesArr;\n}// given file path, read file at path and parse for instances of 'graphQuill'\n\nmodule.exports = extractQueries;\n","/**\n * @author : Austin Ruby\n * @function : parse and validate query\n * @changelog : Ed Greenberg, November 5th, 2019, created ability to return unbalanced parens\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n\n// add characters to string while within parentheses\nexport default function parseQuery(input: string) {\n let queryString: string = ''; // string to be checked for balanced parens\n let passedQueryString: string = ''; // string to be passed along\n let closer: boolean = false; // trip to prevent passed along string from overwriting\n let openParensCount: number = 0; // balanced parens validation tool\n let closeParensCount: number = 0; // balanced parens valaidation tool\n let index: number = 0; // helps loop through input\n const stack: string[] = []; // helps determine when query should be passed along\n while (index < input.length) { // loop input\n if (input[index] === '(') { // check open parens\n openParensCount += 1; // increment relevant counter\n stack.push(input[index]); // add to stack\n } else if (input[index] === ')') { // check closed parens\n if (stack.length === 0) { // if stack is empty and we have a closed, we have a problem\n return 'unbalanced parens';\n }\n closeParensCount += 1; // increment relevant counter\n stack.pop(); // closed parens eliminates open parens on stack\n }\n queryString += input[index]; // feed current character in loop to preliminary result string\n if (stack.length === 0 && closer === false) { // first time we hit empty stack...\n passedQueryString = queryString; // create result stack;\n closer = true;\n }\n index += 1;\n }\n return openParensCount === closeParensCount ? passedQueryString : 'unbalanced parens';\n}\n","/**\n * @module : parser.ts\n * @author : Austin Ruby\n * @function : parse string for instances of 'graphQuill' and extract content\n * within parens immediately following each instance\n * @changelog : Ed Greenberg, November 4th, 2019, rewrote to remove enum bug\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n\n// check if parens are balanced for parsed query strings\n// if they're balanced, return original query string\n// if they're not, return error message with imbalanced bracket/s\nfunction checkQueryBrackets(queryString: string) {\n const stack: string[] = []; // the core of the function...\n // ...where detected opening brackets will be pushed in and pop off when the parser finds a mate\n const validatedSoFar: string[] = []; // a running copy of the query\n const openings: string = '{[('; // list of opening brackets\n const closings: string = '}])'; // list of closing brackets\n\n\n // eslint-disable-next-line no-restricted-syntax\n for (const el of queryString) { // loop the query\n if (openings.includes(el)) stack.push(el); // if query el is opening bracket, add el to stack\n if (closings.includes(el)) {\n if (stack[stack.length - 1] === openings[closings.indexOf(el)]) stack.pop();\n // if top of stack mates a new closing bracket, we are good, can reduce stack and keep going\n else break;\n // if the top of stack does not mate closing bracket, we stop loop and skip to declaring error\n }\n validatedSoFar.push(el); // helping keep running copy of query\n }\n\n\n return stack.length === 0 // this will be zero if all query brackets have matches\n ? queryString.slice(1, queryString.length - 1) // this substring is sent ahead if validated\n : new Error(`${`The following character makes the query unbalanced: ${stack[stack.length - 1]}\\n`\n + 'The portion of the query that ran before the unbalance was detected was:\\n'}${\n validatedSoFar.join('')}\\n\\n`); // ...otherwise, we report an error\n}\n\nmodule.exports = checkQueryBrackets;\n","module.exports = require(\"child_process\");","module.exports = require(\"path\");","/**\n * @author : Alex Chao Nov 7th, 2019. Modularized\n * @function : return the root directory path in a string\n * @param : none\n * @returns : string of the root directory\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\nconst path = require('path');\nconst fs = require('fs');\n\nfunction findRootDirectory() {\n // identify entryPoint for the file that starts the server\n // search for root directory by finding the package.json file\n let root = path.dirname(vscode.window.activeTextEditor!.document.fileName);\n while (!fs.existsSync(`${root}/package.json`)) {\n root = path.dirname(root);\n }\n\n return root;\n}\n\nmodule.exports = findRootDirectory;\n","/* eslint-disable no-unused-vars */\n// these rules are disabled for the weird require that is inside of the function\n/* eslint-disable global-require */\n/* eslint-disable import/no-dynamic-require */\n\n/**\n * @author : Alex Chao\n * @function : return an object with the entryPoint and the allowServerTimeoutConfigSetting\n * @param : none\n * @returns : an array with the root directory AND the entryPoint strings\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\n// const path = require('path');\nconst fs = require('fs');\nconst path = require('path');\n\nfunction parseConfigFile(rootPath: string) {\n // find config file in root directory\n const gqConfigFilePath = `${rootPath}/graphquill.config.js`;\n\n // ! a cached version of this file will be stored here, so future invocations that are trying\n // to get results of an updated config file, will appear to not have been changed\n delete require.cache[gqConfigFilePath];\n\n let entryPoint : string;\n let allowServerTimeoutConfigSetting : number|undefined;\n\n if (fs.existsSync(gqConfigFilePath)) {\n // if the config file exists, require it in (will come in as an object)\n const configObject = require(`${gqConfigFilePath}`);\n // console.log('config object in parseconfigfile.ts', configObject);\n\n // set the entry point to the absolute path (root + relative entry path)\n entryPoint = path.resolve(rootPath, configObject.entry);\n\n // set the servertimeout config setting\n allowServerTimeoutConfigSetting = configObject.serverStartupTimeAllowed;\n } else {\n // default it to the current open editor if there is not a config file\n entryPoint = '';\n\n // ! This will be handled in the outer extension.ts file to notify the user and break out of\n // ! the thread of execution at the same time\n // notify user that config file was not found and current file is being used as the entry point\n // vscode.window.showInformationMessage('graphquill.config.js file was not found.\n // Please use the Create GraphQuill Config File Command to create one');\n }\n\n // return the array with the two results, to be destrucutred when the function is invoked\n return { entryPoint, allowServerTimeoutConfigSetting };\n}\n\nmodule.exports = parseConfigFile;\n","/**\n * @author : Alex Chao\n * @function : return the portNumber as a string\n * @param: entryPoint\n * @returns: portNumber as a string\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\nconst fs = require('fs');\n\nfunction findPortNumber(entryPoint: string) {\n // this is a blocking (synchronous) call to the active file, populating 'data' as a string\n const data = fs.readFileSync(entryPoint, 'utf8');\n\n // to stop a localhost, we must first identify a port, and 'app.listen(' is\n // a special string in the active file that is likely to be adjacent to the port number\n const lookup = data.search(/app.listen\\(/);\n\n // this next segment is edge case handling for if the port number\n // is separated from the start parentheses by some number of spaces\n let displace = 0;\n while (data[lookup + displace + 11] === ' ') {\n displace += 1;\n }\n\n // return the port number (accounting for the offsetting per the edge case)\n return data.slice(lookup + 11 + displace, lookup + 15 + displace);\n}\n\nmodule.exports = findPortNumber;\n","module.exports = require(\"http\");","module.exports = require(\"https\");","/**\n * @author : Austin Ruby, Alex Chao, Ed Greenberg\n * @function : activate extension\n * @changelog : Ed Greenberg, November 5th, 2019, added flexible query file detection\n * @changelog : Alex Chao, Nov. 5th-10th 2019... Lots of changes... server listener added\n * - config file setup command made\n * - config file option to allow for a longer time for the graphql server to startup\n * ! I propose we add the PORT number to config file\n * - updating variables in the event of changes in the config files\n * @changelog : ## Austin?\n * * */\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\n// only needed for creating the config file\nconst fs = require('fs');\n\n\n/* eslint-disable import/no-unresolved */\nconst readFileSendReqAndWriteResponse = require('./modules/client/readFileSendReqAndWriteResponse');\nconst serverOn = require('./modules/server/serverOn');\nconst serverOff = require('./modules/server/serverOff');\n\n// require in new function that checks for a running server\nconst checkForRunningServer = require('./modules/server/checkForRunningServer');\n\n// require in file that finds root directory\nconst findRootDirectory = require('./modules/client/findRootDirectory');\n// require in file that returns entryPoint when given the root path\nconst parseConfigFile = require('./modules/client/parseConfigFile');\n// require in file that finds port#\nconst findPortNumber = require('./modules/client/findPortNumber');\n\n\n// this method is called when your extension is activated\n// your extension is activated the very first time the command is executed\nexport function activate(context: vscode.ExtensionContext) {\n // * These are some variables that I need to pass between different commands, so they're in\n // * a higher scope\n // this ChannelRef variable will be used to pass the output channel between separate function defs\n // let graphQuillChannelRef: vscode.OutputChannel;\n const gqChannel = vscode.window.createOutputChannel('GraphQuill');\n\n // a toggle variable that will is true when the server is on\n let isOnToggle = false;\n\n // a disposable variable to get rid of the save event listener\n let saveListener: vscode.Disposable;\n\n // set rootPath and entryPoint to a string of the path to the server startup file (has app.listen)\n const rootPath = findRootDirectory();\n\n // putting these variables in the global scope with the expectation that they will be set upon\n // activating the extension. I'm moving them to be able to manage \"live\" changes\n let entryPoint: string;\n let allowServerTimeoutConfigSetting: number;\n\n // set portNumber to a string. It is going to be set in the activation command\n let portNumber: string;\n\n // boolean to track if the server has been successfully turned on by the user\n let serverTurnedOnByGraphQuill = false;\n\n /** **********************************************************************************************\n * * The command must be defined in package.json under contributes/commands AND activation events\n * Now provide the implementation of the command with registerCommand\n * The commandId parameter must match the command field in package.json\n * * This is the first GraphQuill option in the command palette for activating GraphQuill\n *********************************************************************************************** */\n const disposableActivateGraphQuill = vscode.commands.registerCommand('extension.activateGraphQuill', async () => {\n if (isOnToggle) {\n // if server is already running, break out of function by returning null\n console.log('Server is already running');\n vscode.window.showInformationMessage('GraphQuill is already active');\n return null;\n }\n\n // show output channel\n gqChannel.show(true);\n\n // parse the config file (this is important in case if there were any changes)\n let parseResult = parseConfigFile(rootPath);\n entryPoint = parseResult.entryPoint;\n allowServerTimeoutConfigSetting = parseResult.allowServerTimeoutConfigSetting;\n\n // if the entryPoint is falsey, break out of the function and tell the\n // user to create a config file\n if (!entryPoint) {\n gqChannel.append('The config file was not found, please use the Create GraphQuill Config File Command to make one.');\n // break out of this execution context\n return null;\n }\n\n // set the portNumber (in the higher scope so it can be used in the deactivate function)\n portNumber = findPortNumber(entryPoint);\n\n // Check ONCE if the port is open (also this does not need the third param)\n // will resolve to a true or false value\n const serverOnFromUser = await checkForRunningServer(portNumber, true);\n // console.log('--serverOnFromUser after once check is:', serverOnFromUser);\n\n // trigger serverOn if the user does not already have the server running\n if (!serverOnFromUser) {\n // start up the user's server\n serverOn(entryPoint);\n\n // give user feedback that server is starting up\n gqChannel.clear();\n gqChannel.append('The server is starting up...');\n\n // await this function that will return true or false based on if the server has been started\n // false: if starting the server is longer than the time allotted in the config file (defaults\n // to 3 seconds)\n serverTurnedOnByGraphQuill = await checkForRunningServer(portNumber,\n // once setting is false, so the returned promise will only resolve when the server has\n // started OR the timeout (next variable or 3sec) is reached\n false,\n // allowServerT.C.S. is either a time in milliseconds that defaults to 3000\n allowServerTimeoutConfigSetting);\n\n // if it is false, that means there was an error starting the server\n // notify the user & end the thread of execution\n if (!serverTurnedOnByGraphQuill) {\n // console.log('server is taking too long to startup');\n\n // give feedback to user that port didn't start (and the specified timeout config setting,\n // defaults to 3 seconds)\n gqChannel.clear();\n gqChannel.append(`The server is taking too long to startup (>${(allowServerTimeoutConfigSetting || 3000) / 1000} seconds).\\nTo increase this time, update the \"serverStartupTimeAllowed\" setting in the graphquill.config.js file.`);\n\n // break out, and just in case I'm going to try to kill the port if it did open\n // otherwise we could get runaway node processes...\n return setTimeout(() => serverOff(portNumber), 5000);\n }\n }\n\n // if the server is on from either the user or graphquill, continue\n // send first query & setup on save listener\n if (serverOnFromUser || serverTurnedOnByGraphQuill) {\n // update isOnToggle (refers to state of GraphQuill extension running or not)\n isOnToggle = true;\n\n // clear any other stuff off of the channel (e.g. previous error message)\n gqChannel.clear();\n\n // get the fileName of the open file when the extension is FIRST fired\n const currOpenEditorPath: string = vscode.window.activeTextEditor!.document.fileName;\n // send that request from the currentopeneditor\n readFileSendReqAndWriteResponse(currOpenEditorPath, gqChannel, portNumber, rootPath);\n\n // initialize the save listener here to clear the channel and resend new requests\n saveListener = vscode.workspace.onDidSaveTextDocument((event) => {\n // console.log('save event!!!', event);\n\n // clear the graphQuill channel\n gqChannel.clear();\n\n // re-parse the config file (in case the user made a change)\n parseResult = parseConfigFile(rootPath);\n entryPoint = parseResult.entryPoint;\n allowServerTimeoutConfigSetting = parseResult.allowServerTimeoutConfigSetting;\n\n if (!entryPoint) {\n gqChannel.append('The config file was not found, please use the Create GraphQuill Config File Command to make one.');\n // break out of this execution context\n return null;\n }\n\n // ! I really think we should add the port number to the config file to specify to the user\n // ! That the port number SHUOLD not be changed...\n // TODO this seems very redundant... but I'm blanking on how to make this dynamic\n // TODO update if the user changes their server file...\n // on each save... reparse for a portNumber in case if it was changed\n portNumber = findPortNumber(entryPoint);\n\n // send the filename and channel to the readFileSRAWR function\n readFileSendReqAndWriteResponse(event.fileName, gqChannel, portNumber, rootPath);\n\n // satisfying linter\n return null;\n });\n }\n\n // to satisfy typescript linter...\n return null;\n });\n\n // push it to the subscriptions\n context.subscriptions.push(disposableActivateGraphQuill);\n\n\n /** **************************************************************************\n * * Second GraphQuill option in the command palette (Cmd Shift P) for deactivating graphquill\n ************************************************************************** */\n const disposableDisableGraphQuill = vscode.commands.registerCommand('extension.deactivateGraphQuill', () => {\n // console.log('--deactivate functionality triggered');\n\n // check isontoggle boolean\n if (!isOnToggle) {\n // server is already off\n console.log('server is already off');\n vscode.window.showInformationMessage('GraphQuill is already off');\n\n return null;\n }\n\n // change toggle boolean\n isOnToggle = false;\n\n // dispose of the onDidSaveTextDocument event listener\n if (saveListener) saveListener.dispose();\n\n // close/hide GraphQuill channel\n gqChannel.hide();\n gqChannel.clear();\n\n console.log('in deactivate, the server turned on by graphquill boolean is: ', serverTurnedOnByGraphQuill);\n // invoke server off in this function\n return setTimeout(() => (serverTurnedOnByGraphQuill && serverOff(portNumber)), 1);\n });\n\n // push it into the subscriptions\n context.subscriptions.push(disposableDisableGraphQuill);\n\n\n /** **************************************************************************\n * * Third GraphQuill option in command palette to toggle graphquill extension\n ************************************************************************** */\n const disposableToggleGraphQuill = vscode.commands.registerCommand('extension.toggleGraphQuill', () => {\n // console.log('--toggle triggered!');\n\n // if the toggle boolean is false, then start the extension, otherwise end it...\n if (!isOnToggle) {\n // console.log('--toggle starting extension');\n // using the built in execute command and passing in a string of the command to trigger\n vscode.commands.executeCommand('extension.activateGraphQuill');\n } else {\n // console.log('--toggle stopping the extension');\n vscode.commands.executeCommand('extension.deactivateGraphQuill');\n }\n\n // just to make the linter happy...\n return null;\n });\n\n // push it to the subscriptions\n context.subscriptions.push(disposableToggleGraphQuill);\n\n /** **************************************************************************\n * * Fourth GraphQuill option in command palette to CREATE A CONFIG FILE\n ************************************************************************** */\n const disposableCreateConfigFile = vscode.commands.registerCommand('extension.createConfigFile', () => {\n // console.log('--config file setup triggered');\n\n // check if the root directory already has a graphquill.config.json file\n const graphQuillConfigPath = `${rootPath}/graphquill.config.js`;\n if (fs.existsSync(graphQuillConfigPath)) {\n vscode.window.showInformationMessage(`A GraphQuill configuration file already exists at ${graphQuillConfigPath}`);\n // exit out\n return null;\n }\n\n // if it does not already exist, write to a new file\n fs.writeFileSync(graphQuillConfigPath,\n // string to populate the file with\n 'module.exports = {\\n // change \"./server/index.js\" to the relative path from the root directory to\\n // the file that starts your server\\n entry: \\'./server/index.js\\',\\n\\n // to increase the amount of time allowed for the server to startup, add a time\\n // in milliseconds (integer) to the \"serverStartupTimeAllowed\"\\n // serverStartupTimeAllowed: 5000,\\n};\\n',\n 'utf-8');\n\n // open the file in vscode\n vscode.workspace.openTextDocument(graphQuillConfigPath).then((doc) => {\n // apparently openTextDocument doesn't mean it's visible...\n vscode.window.showTextDocument(doc);\n });\n\n return null;\n });\n\n // push it to the subscriptions\n context.subscriptions.push(disposableCreateConfigFile);\n}\n\n\n// this method is called when your extension is deactivated\nexport function deactivate() {\n // deactivate must return a promise if cleanup operations are async.\n // turn the server off if vscode is closed (tested via lsof in terminal)\n\n // console.log('---deactive function called!!');\n\n // executing the deactivateGQ command seems to achieve a similar effect & is nice because it has\n // access to the portNumber variable\n vscode.commands.executeCommand('extension.deactivateGraphQuill');\n // return setTimeout(() => serverOff(3000), 1);\n}\n","import Stream from 'stream';\nimport http from 'http';\nimport Url from 'url';\nimport https from 'https';\nimport zlib from 'zlib';\n\n// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js\n\n// fix for \"Readable\" isn't a named export issue\nconst Readable = Stream.Readable;\n\nconst BUFFER = Symbol('buffer');\nconst TYPE = Symbol('type');\n\nclass Blob {\n\tconstructor() {\n\t\tthis[TYPE] = '';\n\n\t\tconst blobParts = arguments[0];\n\t\tconst options = arguments[1];\n\n\t\tconst buffers = [];\n\t\tlet size = 0;\n\n\t\tif (blobParts) {\n\t\t\tconst a = blobParts;\n\t\t\tconst length = Number(a.length);\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tconst element = a[i];\n\t\t\t\tlet buffer;\n\t\t\t\tif (element instanceof Buffer) {\n\t\t\t\t\tbuffer = element;\n\t\t\t\t} else if (ArrayBuffer.isView(element)) {\n\t\t\t\t\tbuffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);\n\t\t\t\t} else if (element instanceof ArrayBuffer) {\n\t\t\t\t\tbuffer = Buffer.from(element);\n\t\t\t\t} else if (element instanceof Blob) {\n\t\t\t\t\tbuffer = element[BUFFER];\n\t\t\t\t} else {\n\t\t\t\t\tbuffer = Buffer.from(typeof element === 'string' ? element : String(element));\n\t\t\t\t}\n\t\t\t\tsize += buffer.length;\n\t\t\t\tbuffers.push(buffer);\n\t\t\t}\n\t\t}\n\n\t\tthis[BUFFER] = Buffer.concat(buffers);\n\n\t\tlet type = options && options.type !== undefined && String(options.type).toLowerCase();\n\t\tif (type && !/[^\\u0020-\\u007E]/.test(type)) {\n\t\t\tthis[TYPE] = type;\n\t\t}\n\t}\n\tget size() {\n\t\treturn this[BUFFER].length;\n\t}\n\tget type() {\n\t\treturn this[TYPE];\n\t}\n\ttext() {\n\t\treturn Promise.resolve(this[BUFFER].toString());\n\t}\n\tarrayBuffer() {\n\t\tconst buf = this[BUFFER];\n\t\tconst ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\treturn Promise.resolve(ab);\n\t}\n\tstream() {\n\t\tconst readable = new Readable();\n\t\treadable._read = function () {};\n\t\treadable.push(this[BUFFER]);\n\t\treadable.push(null);\n\t\treturn readable;\n\t}\n\ttoString() {\n\t\treturn '[object Blob]';\n\t}\n\tslice() {\n\t\tconst size = this.size;\n\n\t\tconst start = arguments[0];\n\t\tconst end = arguments[1];\n\t\tlet relativeStart, relativeEnd;\n\t\tif (start === undefined) {\n\t\t\trelativeStart = 0;\n\t\t} else if (start < 0) {\n\t\t\trelativeStart = Math.max(size + start, 0);\n\t\t} else {\n\t\t\trelativeStart = Math.min(start, size);\n\t\t}\n\t\tif (end === undefined) {\n\t\t\trelativeEnd = size;\n\t\t} else if (end < 0) {\n\t\t\trelativeEnd = Math.max(size + end, 0);\n\t\t} else {\n\t\t\trelativeEnd = Math.min(end, size);\n\t\t}\n\t\tconst span = Math.max(relativeEnd - relativeStart, 0);\n\n\t\tconst buffer = this[BUFFER];\n\t\tconst slicedBuffer = buffer.slice(relativeStart, relativeStart + span);\n\t\tconst blob = new Blob([], { type: arguments[2] });\n\t\tblob[BUFFER] = slicedBuffer;\n\t\treturn blob;\n\t}\n}\n\nObject.defineProperties(Blob.prototype, {\n\tsize: { enumerable: true },\n\ttype: { enumerable: true },\n\tslice: { enumerable: true }\n});\n\nObject.defineProperty(Blob.prototype, Symbol.toStringTag, {\n\tvalue: 'Blob',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * fetch-error.js\n *\n * FetchError interface for operational errors\n */\n\n/**\n * Create FetchError instance\n *\n * @param String message Error message for human\n * @param String type Error type for machine\n * @param String systemError For Node.js system error\n * @return FetchError\n */\nfunction FetchError(message, type, systemError) {\n Error.call(this, message);\n\n this.message = message;\n this.type = type;\n\n // when err.type is `system`, err.code contains system error code\n if (systemError) {\n this.code = this.errno = systemError.code;\n }\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nFetchError.prototype = Object.create(Error.prototype);\nFetchError.prototype.constructor = FetchError;\nFetchError.prototype.name = 'FetchError';\n\nlet convert;\ntry {\n\tconvert = require('encoding').convert;\n} catch (e) {}\n\nconst INTERNALS = Symbol('Body internals');\n\n// fix an issue where \"PassThrough\" isn't a named export for node <10\nconst PassThrough = Stream.PassThrough;\n\n/**\n * Body mixin\n *\n * Ref: https://fetch.spec.whatwg.org/#body\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nfunction Body(body) {\n\tvar _this = this;\n\n\tvar _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n\t _ref$size = _ref.size;\n\n\tlet size = _ref$size === undefined ? 0 : _ref$size;\n\tvar _ref$timeout = _ref.timeout;\n\tlet timeout = _ref$timeout === undefined ? 0 : _ref$timeout;\n\n\tif (body == null) {\n\t\t// body is undefined or null\n\t\tbody = null;\n\t} else if (isURLSearchParams(body)) {\n\t\t// body is a URLSearchParams\n\t\tbody = Buffer.from(body.toString());\n\t} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {\n\t\t// body is ArrayBuffer\n\t\tbody = Buffer.from(body);\n\t} else if (ArrayBuffer.isView(body)) {\n\t\t// body is ArrayBufferView\n\t\tbody = Buffer.from(body.buffer, body.byteOffset, body.byteLength);\n\t} else if (body instanceof Stream) ; else {\n\t\t// none of the above\n\t\t// coerce to string then buffer\n\t\tbody = Buffer.from(String(body));\n\t}\n\tthis[INTERNALS] = {\n\t\tbody,\n\t\tdisturbed: false,\n\t\terror: null\n\t};\n\tthis.size = size;\n\tthis.timeout = timeout;\n\n\tif (body instanceof Stream) {\n\t\tbody.on('error', function (err) {\n\t\t\tconst error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);\n\t\t\t_this[INTERNALS].error = error;\n\t\t});\n\t}\n}\n\nBody.prototype = {\n\tget body() {\n\t\treturn this[INTERNALS].body;\n\t},\n\n\tget bodyUsed() {\n\t\treturn this[INTERNALS].disturbed;\n\t},\n\n\t/**\n * Decode response as ArrayBuffer\n *\n * @return Promise\n */\n\tarrayBuffer() {\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n\t\t});\n\t},\n\n\t/**\n * Return raw response as Blob\n *\n * @return Promise\n */\n\tblob() {\n\t\tlet ct = this.headers && this.headers.get('content-type') || '';\n\t\treturn consumeBody.call(this).then(function (buf) {\n\t\t\treturn Object.assign(\n\t\t\t// Prevent copying\n\t\t\tnew Blob([], {\n\t\t\t\ttype: ct.toLowerCase()\n\t\t\t}), {\n\t\t\t\t[BUFFER]: buf\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n * Decode response as json\n *\n * @return Promise\n */\n\tjson() {\n\t\tvar _this2 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(buffer.toString());\n\t\t\t} catch (err) {\n\t\t\t\treturn Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n * Decode response as text\n *\n * @return Promise\n */\n\ttext() {\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn buffer.toString();\n\t\t});\n\t},\n\n\t/**\n * Decode response as buffer (non-spec api)\n *\n * @return Promise\n */\n\tbuffer() {\n\t\treturn consumeBody.call(this);\n\t},\n\n\t/**\n * Decode response as text, while automatically detecting the encoding and\n * trying to decode to UTF-8 (non-spec api)\n *\n * @return Promise\n */\n\ttextConverted() {\n\t\tvar _this3 = this;\n\n\t\treturn consumeBody.call(this).then(function (buffer) {\n\t\t\treturn convertBody(buffer, _this3.headers);\n\t\t});\n\t}\n};\n\n// In browsers, all properties are enumerable.\nObject.defineProperties(Body.prototype, {\n\tbody: { enumerable: true },\n\tbodyUsed: { enumerable: true },\n\tarrayBuffer: { enumerable: true },\n\tblob: { enumerable: true },\n\tjson: { enumerable: true },\n\ttext: { enumerable: true }\n});\n\nBody.mixIn = function (proto) {\n\tfor (const name of Object.getOwnPropertyNames(Body.prototype)) {\n\t\t// istanbul ignore else: future proof\n\t\tif (!(name in proto)) {\n\t\t\tconst desc = Object.getOwnPropertyDescriptor(Body.prototype, name);\n\t\t\tObject.defineProperty(proto, name, desc);\n\t\t}\n\t}\n};\n\n/**\n * Consume and convert an entire Body to a Buffer.\n *\n * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body\n *\n * @return Promise\n */\nfunction consumeBody() {\n\tvar _this4 = this;\n\n\tif (this[INTERNALS].disturbed) {\n\t\treturn Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));\n\t}\n\n\tthis[INTERNALS].disturbed = true;\n\n\tif (this[INTERNALS].error) {\n\t\treturn Body.Promise.reject(this[INTERNALS].error);\n\t}\n\n\tlet body = this.body;\n\n\t// body is null\n\tif (body === null) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is blob\n\tif (isBlob(body)) {\n\t\tbody = body.stream();\n\t}\n\n\t// body is buffer\n\tif (Buffer.isBuffer(body)) {\n\t\treturn Body.Promise.resolve(body);\n\t}\n\n\t// istanbul ignore if: should never happen\n\tif (!(body instanceof Stream)) {\n\t\treturn Body.Promise.resolve(Buffer.alloc(0));\n\t}\n\n\t// body is stream\n\t// get ready to actually consume the body\n\tlet accum = [];\n\tlet accumBytes = 0;\n\tlet abort = false;\n\n\treturn new Body.Promise(function (resolve, reject) {\n\t\tlet resTimeout;\n\n\t\t// allow timeout on slow response body\n\t\tif (_this4.timeout) {\n\t\t\tresTimeout = setTimeout(function () {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));\n\t\t\t}, _this4.timeout);\n\t\t}\n\n\t\t// handle stream errors\n\t\tbody.on('error', function (err) {\n\t\t\tif (err.name === 'AbortError') {\n\t\t\t\t// if the request was aborted, reject with this Error\n\t\t\t\tabort = true;\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\t// other errors, such as incorrect content-encoding\n\t\t\t\treject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\n\t\tbody.on('data', function (chunk) {\n\t\t\tif (abort || chunk === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (_this4.size && accumBytes + chunk.length > _this4.size) {\n\t\t\t\tabort = true;\n\t\t\t\treject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\taccumBytes += chunk.length;\n\t\t\taccum.push(chunk);\n\t\t});\n\n\t\tbody.on('end', function () {\n\t\t\tif (abort) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclearTimeout(resTimeout);\n\n\t\t\ttry {\n\t\t\t\tresolve(Buffer.concat(accum, accumBytes));\n\t\t\t} catch (err) {\n\t\t\t\t// handle streams that have accumulated too much data (issue #414)\n\t\t\t\treject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect buffer encoding and convert to target encoding\n * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding\n *\n * @param Buffer buffer Incoming buffer\n * @param String encoding Target encoding\n * @return String\n */\nfunction convertBody(buffer, headers) {\n\tif (typeof convert !== 'function') {\n\t\tthrow new Error('The package `encoding` must be installed to use the textConverted() function');\n\t}\n\n\tconst ct = headers.get('content-type');\n\tlet charset = 'utf-8';\n\tlet res, str;\n\n\t// header\n\tif (ct) {\n\t\tres = /charset=([^;]*)/i.exec(ct);\n\t}\n\n\t// no charset in content type, peek at response body for at most 1024 bytes\n\tstr = buffer.slice(0, 1024).toString();\n\n\t// html5\n\tif (!res && str) {\n\t\tres = / 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n\t\tthis[MAP] = Object.create(null);\n\n\t\tif (init instanceof Headers) {\n\t\t\tconst rawHeaders = init.raw();\n\t\t\tconst headerNames = Object.keys(rawHeaders);\n\n\t\t\tfor (const headerName of headerNames) {\n\t\t\t\tfor (const value of rawHeaders[headerName]) {\n\t\t\t\t\tthis.append(headerName, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// We don't worry about converting prop to ByteString here as append()\n\t\t// will handle it.\n\t\tif (init == null) ; else if (typeof init === 'object') {\n\t\t\tconst method = init[Symbol.iterator];\n\t\t\tif (method != null) {\n\t\t\t\tif (typeof method !== 'function') {\n\t\t\t\t\tthrow new TypeError('Header pairs must be iterable');\n\t\t\t\t}\n\n\t\t\t\t// sequence>\n\t\t\t\t// Note: per spec we have to first exhaust the lists then process them\n\t\t\t\tconst pairs = [];\n\t\t\t\tfor (const pair of init) {\n\t\t\t\t\tif (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be iterable');\n\t\t\t\t\t}\n\t\t\t\t\tpairs.push(Array.from(pair));\n\t\t\t\t}\n\n\t\t\t\tfor (const pair of pairs) {\n\t\t\t\t\tif (pair.length !== 2) {\n\t\t\t\t\t\tthrow new TypeError('Each header pair must be a name/value tuple');\n\t\t\t\t\t}\n\t\t\t\t\tthis.append(pair[0], pair[1]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// record\n\t\t\t\tfor (const key of Object.keys(init)) {\n\t\t\t\t\tconst value = init[key];\n\t\t\t\t\tthis.append(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('Provided initializer must be an object');\n\t\t}\n\t}\n\n\t/**\n * Return combined header value given name\n *\n * @param String name Header name\n * @return Mixed\n */\n\tget(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this[MAP][key].join(', ');\n\t}\n\n\t/**\n * Iterate over all headers\n *\n * @param Function callback Executed for each item with parameters (value, name, thisArg)\n * @param Boolean thisArg `this` context for callback function\n * @return Void\n */\n\tforEach(callback) {\n\t\tlet thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\tlet pairs = getHeaders(this);\n\t\tlet i = 0;\n\t\twhile (i < pairs.length) {\n\t\t\tvar _pairs$i = pairs[i];\n\t\t\tconst name = _pairs$i[0],\n\t\t\t value = _pairs$i[1];\n\n\t\t\tcallback.call(thisArg, value, name, this);\n\t\t\tpairs = getHeaders(this);\n\t\t\ti++;\n\t\t}\n\t}\n\n\t/**\n * Overwrite header values given name\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tset(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tthis[MAP][key !== undefined ? key : name] = [value];\n\t}\n\n\t/**\n * Append a value onto existing header\n *\n * @param String name Header name\n * @param String value Header value\n * @return Void\n */\n\tappend(name, value) {\n\t\tname = `${name}`;\n\t\tvalue = `${value}`;\n\t\tvalidateName(name);\n\t\tvalidateValue(value);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tthis[MAP][key].push(value);\n\t\t} else {\n\t\t\tthis[MAP][name] = [value];\n\t\t}\n\t}\n\n\t/**\n * Check for header name existence\n *\n * @param String name Header name\n * @return Boolean\n */\n\thas(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\treturn find(this[MAP], name) !== undefined;\n\t}\n\n\t/**\n * Delete all header values given name\n *\n * @param String name Header name\n * @return Void\n */\n\tdelete(name) {\n\t\tname = `${name}`;\n\t\tvalidateName(name);\n\t\tconst key = find(this[MAP], name);\n\t\tif (key !== undefined) {\n\t\t\tdelete this[MAP][key];\n\t\t}\n\t}\n\n\t/**\n * Return raw headers (non-spec api)\n *\n * @return Object\n */\n\traw() {\n\t\treturn this[MAP];\n\t}\n\n\t/**\n * Get an iterator on keys.\n *\n * @return Iterator\n */\n\tkeys() {\n\t\treturn createHeadersIterator(this, 'key');\n\t}\n\n\t/**\n * Get an iterator on values.\n *\n * @return Iterator\n */\n\tvalues() {\n\t\treturn createHeadersIterator(this, 'value');\n\t}\n\n\t/**\n * Get an iterator on entries.\n *\n * This is the default iterator of the Headers object.\n *\n * @return Iterator\n */\n\t[Symbol.iterator]() {\n\t\treturn createHeadersIterator(this, 'key+value');\n\t}\n}\nHeaders.prototype.entries = Headers.prototype[Symbol.iterator];\n\nObject.defineProperty(Headers.prototype, Symbol.toStringTag, {\n\tvalue: 'Headers',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Headers.prototype, {\n\tget: { enumerable: true },\n\tforEach: { enumerable: true },\n\tset: { enumerable: true },\n\tappend: { enumerable: true },\n\thas: { enumerable: true },\n\tdelete: { enumerable: true },\n\tkeys: { enumerable: true },\n\tvalues: { enumerable: true },\n\tentries: { enumerable: true }\n});\n\nfunction getHeaders(headers) {\n\tlet kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';\n\n\tconst keys = Object.keys(headers[MAP]).sort();\n\treturn keys.map(kind === 'key' ? function (k) {\n\t\treturn k.toLowerCase();\n\t} : kind === 'value' ? function (k) {\n\t\treturn headers[MAP][k].join(', ');\n\t} : function (k) {\n\t\treturn [k.toLowerCase(), headers[MAP][k].join(', ')];\n\t});\n}\n\nconst INTERNAL = Symbol('internal');\n\nfunction createHeadersIterator(target, kind) {\n\tconst iterator = Object.create(HeadersIteratorPrototype);\n\titerator[INTERNAL] = {\n\t\ttarget,\n\t\tkind,\n\t\tindex: 0\n\t};\n\treturn iterator;\n}\n\nconst HeadersIteratorPrototype = Object.setPrototypeOf({\n\tnext() {\n\t\t// istanbul ignore if\n\t\tif (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {\n\t\t\tthrow new TypeError('Value of `this` is not a HeadersIterator');\n\t\t}\n\n\t\tvar _INTERNAL = this[INTERNAL];\n\t\tconst target = _INTERNAL.target,\n\t\t kind = _INTERNAL.kind,\n\t\t index = _INTERNAL.index;\n\n\t\tconst values = getHeaders(target, kind);\n\t\tconst len = values.length;\n\t\tif (index >= len) {\n\t\t\treturn {\n\t\t\t\tvalue: undefined,\n\t\t\t\tdone: true\n\t\t\t};\n\t\t}\n\n\t\tthis[INTERNAL].index = index + 1;\n\n\t\treturn {\n\t\t\tvalue: values[index],\n\t\t\tdone: false\n\t\t};\n\t}\n}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));\n\nObject.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {\n\tvalue: 'HeadersIterator',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\n/**\n * Export the Headers object in a form that Node.js can consume.\n *\n * @param Headers headers\n * @return Object\n */\nfunction exportNodeCompatibleHeaders(headers) {\n\tconst obj = Object.assign({ __proto__: null }, headers[MAP]);\n\n\t// http.request() only supports string as Host header. This hack makes\n\t// specifying custom Host header possible.\n\tconst hostHeaderKey = find(headers[MAP], 'Host');\n\tif (hostHeaderKey !== undefined) {\n\t\tobj[hostHeaderKey] = obj[hostHeaderKey][0];\n\t}\n\n\treturn obj;\n}\n\n/**\n * Create a Headers object from an object of headers, ignoring those that do\n * not conform to HTTP grammar productions.\n *\n * @param Object obj Object of headers\n * @return Headers\n */\nfunction createHeadersLenient(obj) {\n\tconst headers = new Headers();\n\tfor (const name of Object.keys(obj)) {\n\t\tif (invalidTokenRegex.test(name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (Array.isArray(obj[name])) {\n\t\t\tfor (const val of obj[name]) {\n\t\t\t\tif (invalidHeaderCharRegex.test(val)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (headers[MAP][name] === undefined) {\n\t\t\t\t\theaders[MAP][name] = [val];\n\t\t\t\t} else {\n\t\t\t\t\theaders[MAP][name].push(val);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (!invalidHeaderCharRegex.test(obj[name])) {\n\t\t\theaders[MAP][name] = [obj[name]];\n\t\t}\n\t}\n\treturn headers;\n}\n\nconst INTERNALS$1 = Symbol('Response internals');\n\n// fix an issue where \"STATUS_CODES\" aren't a named export for node <10\nconst STATUS_CODES = http.STATUS_CODES;\n\n/**\n * Response class\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nclass Response {\n\tconstructor() {\n\t\tlet body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tlet opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tBody.call(this, body, opts);\n\n\t\tconst status = opts.status || 200;\n\t\tconst headers = new Headers(opts.headers);\n\n\t\tif (body != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(body);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tthis[INTERNALS$1] = {\n\t\t\turl: opts.url,\n\t\t\tstatus,\n\t\t\tstatusText: opts.statusText || STATUS_CODES[status],\n\t\t\theaders,\n\t\t\tcounter: opts.counter\n\t\t};\n\t}\n\n\tget url() {\n\t\treturn this[INTERNALS$1].url || '';\n\t}\n\n\tget status() {\n\t\treturn this[INTERNALS$1].status;\n\t}\n\n\t/**\n * Convenience property representing if the request ended normally\n */\n\tget ok() {\n\t\treturn this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;\n\t}\n\n\tget redirected() {\n\t\treturn this[INTERNALS$1].counter > 0;\n\t}\n\n\tget statusText() {\n\t\treturn this[INTERNALS$1].statusText;\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$1].headers;\n\t}\n\n\t/**\n * Clone this response\n *\n * @return Response\n */\n\tclone() {\n\t\treturn new Response(clone(this), {\n\t\t\turl: this.url,\n\t\t\tstatus: this.status,\n\t\t\tstatusText: this.statusText,\n\t\t\theaders: this.headers,\n\t\t\tok: this.ok,\n\t\t\tredirected: this.redirected\n\t\t});\n\t}\n}\n\nBody.mixIn(Response.prototype);\n\nObject.defineProperties(Response.prototype, {\n\turl: { enumerable: true },\n\tstatus: { enumerable: true },\n\tok: { enumerable: true },\n\tredirected: { enumerable: true },\n\tstatusText: { enumerable: true },\n\theaders: { enumerable: true },\n\tclone: { enumerable: true }\n});\n\nObject.defineProperty(Response.prototype, Symbol.toStringTag, {\n\tvalue: 'Response',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nconst INTERNALS$2 = Symbol('Request internals');\n\n// fix an issue where \"format\", \"parse\" aren't a named export for node <10\nconst parse_url = Url.parse;\nconst format_url = Url.format;\n\nconst streamDestructionSupported = 'destroy' in Stream.Readable.prototype;\n\n/**\n * Check if a value is an instance of Request.\n *\n * @param Mixed input\n * @return Boolean\n */\nfunction isRequest(input) {\n\treturn typeof input === 'object' && typeof input[INTERNALS$2] === 'object';\n}\n\nfunction isAbortSignal(signal) {\n\tconst proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);\n\treturn !!(proto && proto.constructor.name === 'AbortSignal');\n}\n\n/**\n * Request class\n *\n * @param Mixed input Url or Request instance\n * @param Object init Custom options\n * @return Void\n */\nclass Request {\n\tconstructor(input) {\n\t\tlet init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t\tlet parsedURL;\n\n\t\t// normalize input\n\t\tif (!isRequest(input)) {\n\t\t\tif (input && input.href) {\n\t\t\t\t// in order to support Node.js' Url objects; though WHATWG's URL objects\n\t\t\t\t// will fall into this branch also (since their `toString()` will return\n\t\t\t\t// `href` property anyway)\n\t\t\t\tparsedURL = parse_url(input.href);\n\t\t\t} else {\n\t\t\t\t// coerce input to a string before attempting to parse\n\t\t\t\tparsedURL = parse_url(`${input}`);\n\t\t\t}\n\t\t\tinput = {};\n\t\t} else {\n\t\t\tparsedURL = parse_url(input.url);\n\t\t}\n\n\t\tlet method = init.method || input.method || 'GET';\n\t\tmethod = method.toUpperCase();\n\n\t\tif ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {\n\t\t\tthrow new TypeError('Request with GET/HEAD method cannot have body');\n\t\t}\n\n\t\tlet inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;\n\n\t\tBody.call(this, inputBody, {\n\t\t\ttimeout: init.timeout || input.timeout || 0,\n\t\t\tsize: init.size || input.size || 0\n\t\t});\n\n\t\tconst headers = new Headers(init.headers || input.headers || {});\n\n\t\tif (inputBody != null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(inputBody);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tlet signal = isRequest(input) ? input.signal : null;\n\t\tif ('signal' in init) signal = init.signal;\n\n\t\tif (signal != null && !isAbortSignal(signal)) {\n\t\t\tthrow new TypeError('Expected signal to be an instanceof AbortSignal');\n\t\t}\n\n\t\tthis[INTERNALS$2] = {\n\t\t\tmethod,\n\t\t\tredirect: init.redirect || input.redirect || 'follow',\n\t\t\theaders,\n\t\t\tparsedURL,\n\t\t\tsignal\n\t\t};\n\n\t\t// node-fetch-only options\n\t\tthis.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;\n\t\tthis.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;\n\t\tthis.counter = init.counter || input.counter || 0;\n\t\tthis.agent = init.agent || input.agent;\n\t}\n\n\tget method() {\n\t\treturn this[INTERNALS$2].method;\n\t}\n\n\tget url() {\n\t\treturn format_url(this[INTERNALS$2].parsedURL);\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS$2].headers;\n\t}\n\n\tget redirect() {\n\t\treturn this[INTERNALS$2].redirect;\n\t}\n\n\tget signal() {\n\t\treturn this[INTERNALS$2].signal;\n\t}\n\n\t/**\n * Clone this request\n *\n * @return Request\n */\n\tclone() {\n\t\treturn new Request(this);\n\t}\n}\n\nBody.mixIn(Request.prototype);\n\nObject.defineProperty(Request.prototype, Symbol.toStringTag, {\n\tvalue: 'Request',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n});\n\nObject.defineProperties(Request.prototype, {\n\tmethod: { enumerable: true },\n\turl: { enumerable: true },\n\theaders: { enumerable: true },\n\tredirect: { enumerable: true },\n\tclone: { enumerable: true },\n\tsignal: { enumerable: true }\n});\n\n/**\n * Convert a Request to Node.js http request options.\n *\n * @param Request A Request instance\n * @return Object The options object to be passed to http.request\n */\nfunction getNodeRequestOptions(request) {\n\tconst parsedURL = request[INTERNALS$2].parsedURL;\n\tconst headers = new Headers(request[INTERNALS$2].headers);\n\n\t// fetch step 1.3\n\tif (!headers.has('Accept')) {\n\t\theaders.set('Accept', '*/*');\n\t}\n\n\t// Basic fetch\n\tif (!parsedURL.protocol || !parsedURL.hostname) {\n\t\tthrow new TypeError('Only absolute URLs are supported');\n\t}\n\n\tif (!/^https?:$/.test(parsedURL.protocol)) {\n\t\tthrow new TypeError('Only HTTP(S) protocols are supported');\n\t}\n\n\tif (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {\n\t\tthrow new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');\n\t}\n\n\t// HTTP-network-or-cache fetch steps 2.4-2.7\n\tlet contentLengthValue = null;\n\tif (request.body == null && /^(POST|PUT)$/i.test(request.method)) {\n\t\tcontentLengthValue = '0';\n\t}\n\tif (request.body != null) {\n\t\tconst totalBytes = getTotalBytes(request);\n\t\tif (typeof totalBytes === 'number') {\n\t\t\tcontentLengthValue = String(totalBytes);\n\t\t}\n\t}\n\tif (contentLengthValue) {\n\t\theaders.set('Content-Length', contentLengthValue);\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.11\n\tif (!headers.has('User-Agent')) {\n\t\theaders.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.15\n\tif (request.compress && !headers.has('Accept-Encoding')) {\n\t\theaders.set('Accept-Encoding', 'gzip,deflate');\n\t}\n\n\tlet agent = request.agent;\n\tif (typeof agent === 'function') {\n\t\tagent = agent(parsedURL);\n\t}\n\n\tif (!headers.has('Connection') && !agent) {\n\t\theaders.set('Connection', 'close');\n\t}\n\n\t// HTTP-network fetch step 4.2\n\t// chunked encoding is handled by Node.js\n\n\treturn Object.assign({}, parsedURL, {\n\t\tmethod: request.method,\n\t\theaders: exportNodeCompatibleHeaders(headers),\n\t\tagent\n\t});\n}\n\n/**\n * abort-error.js\n *\n * AbortError interface for cancelled requests\n */\n\n/**\n * Create AbortError instance\n *\n * @param String message Error message for human\n * @return AbortError\n */\nfunction AbortError(message) {\n Error.call(this, message);\n\n this.type = 'aborted';\n this.message = message;\n\n // hide custom error implementation details from end-users\n Error.captureStackTrace(this, this.constructor);\n}\n\nAbortError.prototype = Object.create(Error.prototype);\nAbortError.prototype.constructor = AbortError;\nAbortError.prototype.name = 'AbortError';\n\n// fix an issue where \"PassThrough\", \"resolve\" aren't a named export for node <10\nconst PassThrough$1 = Stream.PassThrough;\nconst resolve_url = Url.resolve;\n\n/**\n * Fetch function\n *\n * @param Mixed url Absolute url or Request instance\n * @param Object opts Fetch options\n * @return Promise\n */\nfunction fetch(url, opts) {\n\n\t// allow custom promise\n\tif (!fetch.Promise) {\n\t\tthrow new Error('native promise missing, set fetch.Promise to your favorite alternative');\n\t}\n\n\tBody.Promise = fetch.Promise;\n\n\t// wrap http.request into fetch\n\treturn new fetch.Promise(function (resolve, reject) {\n\t\t// build request object\n\t\tconst request = new Request(url, opts);\n\t\tconst options = getNodeRequestOptions(request);\n\n\t\tconst send = (options.protocol === 'https:' ? https : http).request;\n\t\tconst signal = request.signal;\n\n\t\tlet response = null;\n\n\t\tconst abort = function abort() {\n\t\t\tlet error = new AbortError('The user aborted a request.');\n\t\t\treject(error);\n\t\t\tif (request.body && request.body instanceof Stream.Readable) {\n\t\t\t\trequest.body.destroy(error);\n\t\t\t}\n\t\t\tif (!response || !response.body) return;\n\t\t\tresponse.body.emit('error', error);\n\t\t};\n\n\t\tif (signal && signal.aborted) {\n\t\t\tabort();\n\t\t\treturn;\n\t\t}\n\n\t\tconst abortAndFinalize = function abortAndFinalize() {\n\t\t\tabort();\n\t\t\tfinalize();\n\t\t};\n\n\t\t// send request\n\t\tconst req = send(options);\n\t\tlet reqTimeout;\n\n\t\tif (signal) {\n\t\t\tsignal.addEventListener('abort', abortAndFinalize);\n\t\t}\n\n\t\tfunction finalize() {\n\t\t\treq.abort();\n\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\tclearTimeout(reqTimeout);\n\t\t}\n\n\t\tif (request.timeout) {\n\t\t\treq.once('socket', function (socket) {\n\t\t\t\treqTimeout = setTimeout(function () {\n\t\t\t\t\treject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));\n\t\t\t\t\tfinalize();\n\t\t\t\t}, request.timeout);\n\t\t\t});\n\t\t}\n\n\t\treq.on('error', function (err) {\n\t\t\treject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));\n\t\t\tfinalize();\n\t\t});\n\n\t\treq.on('response', function (res) {\n\t\t\tclearTimeout(reqTimeout);\n\n\t\t\tconst headers = createHeadersLenient(res.headers);\n\n\t\t\t// HTTP fetch step 5\n\t\t\tif (fetch.isRedirect(res.statusCode)) {\n\t\t\t\t// HTTP fetch step 5.2\n\t\t\t\tconst location = headers.get('Location');\n\n\t\t\t\t// HTTP fetch step 5.3\n\t\t\t\tconst locationURL = location === null ? null : resolve_url(request.url, location);\n\n\t\t\t\t// HTTP fetch step 5.5\n\t\t\t\tswitch (request.redirect) {\n\t\t\t\t\tcase 'error':\n\t\t\t\t\t\treject(new FetchError(`redirect mode is set to error: ${request.url}`, 'no-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase 'manual':\n\t\t\t\t\t\t// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.\n\t\t\t\t\t\tif (locationURL !== null) {\n\t\t\t\t\t\t\t// handle corrupted header\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\theaders.set('Location', locationURL);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\t// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request\n\t\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'follow':\n\t\t\t\t\t\t// HTTP-redirect fetch step 2\n\t\t\t\t\t\tif (locationURL === null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 5\n\t\t\t\t\t\tif (request.counter >= request.follow) {\n\t\t\t\t\t\t\treject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 6 (counter increment)\n\t\t\t\t\t\t// Create a new Request object.\n\t\t\t\t\t\tconst requestOpts = {\n\t\t\t\t\t\t\theaders: new Headers(request.headers),\n\t\t\t\t\t\t\tfollow: request.follow,\n\t\t\t\t\t\t\tcounter: request.counter + 1,\n\t\t\t\t\t\t\tagent: request.agent,\n\t\t\t\t\t\t\tcompress: request.compress,\n\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\tbody: request.body,\n\t\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t\t\ttimeout: request.timeout\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 9\n\t\t\t\t\t\tif (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {\n\t\t\t\t\t\t\treject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 11\n\t\t\t\t\t\tif (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {\n\t\t\t\t\t\t\trequestOpts.method = 'GET';\n\t\t\t\t\t\t\trequestOpts.body = undefined;\n\t\t\t\t\t\t\trequestOpts.headers.delete('content-length');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 15\n\t\t\t\t\t\tresolve(fetch(new Request(locationURL, requestOpts)));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// prepare response\n\t\t\tres.once('end', function () {\n\t\t\t\tif (signal) signal.removeEventListener('abort', abortAndFinalize);\n\t\t\t});\n\t\t\tlet body = res.pipe(new PassThrough$1());\n\n\t\t\tconst response_options = {\n\t\t\t\turl: request.url,\n\t\t\t\tstatus: res.statusCode,\n\t\t\t\tstatusText: res.statusMessage,\n\t\t\t\theaders: headers,\n\t\t\t\tsize: request.size,\n\t\t\t\ttimeout: request.timeout,\n\t\t\t\tcounter: request.counter\n\t\t\t};\n\n\t\t\t// HTTP-network fetch step 12.1.1.3\n\t\t\tconst codings = headers.get('Content-Encoding');\n\n\t\t\t// HTTP-network fetch step 12.1.1.4: handle content codings\n\n\t\t\t// in following scenarios we ignore compression support\n\t\t\t// 1. compression support is disabled\n\t\t\t// 2. HEAD request\n\t\t\t// 3. no Content-Encoding header\n\t\t\t// 4. no content response (204)\n\t\t\t// 5. content not modified response (304)\n\t\t\tif (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For Node v6+\n\t\t\t// Be less strict when decoding compressed responses, since sometimes\n\t\t\t// servers send slightly invalid responses that are still accepted\n\t\t\t// by common browsers.\n\t\t\t// Always using Z_SYNC_FLUSH is what cURL does.\n\t\t\tconst zlibOptions = {\n\t\t\t\tflush: zlib.Z_SYNC_FLUSH,\n\t\t\t\tfinishFlush: zlib.Z_SYNC_FLUSH\n\t\t\t};\n\n\t\t\t// for gzip\n\t\t\tif (codings == 'gzip' || codings == 'x-gzip') {\n\t\t\t\tbody = body.pipe(zlib.createGunzip(zlibOptions));\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for deflate\n\t\t\tif (codings == 'deflate' || codings == 'x-deflate') {\n\t\t\t\t// handle the infamous raw deflate response from old servers\n\t\t\t\t// a hack for old IIS and Apache servers\n\t\t\t\tconst raw = res.pipe(new PassThrough$1());\n\t\t\t\traw.once('data', function (chunk) {\n\t\t\t\t\t// see http://stackoverflow.com/questions/37519828\n\t\t\t\t\tif ((chunk[0] & 0x0F) === 0x08) {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflate());\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbody = body.pipe(zlib.createInflateRaw());\n\t\t\t\t\t}\n\t\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\t\tresolve(response);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// for br\n\t\t\tif (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {\n\t\t\t\tbody = body.pipe(zlib.createBrotliDecompress());\n\t\t\t\tresponse = new Response(body, response_options);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// otherwise, use response as-is\n\t\t\tresponse = new Response(body, response_options);\n\t\t\tresolve(response);\n\t\t});\n\n\t\twriteToStream(req, request);\n\t});\n}\n/**\n * Redirect code matching\n *\n * @param Number code Status code\n * @return Boolean\n */\nfetch.isRedirect = function (code) {\n\treturn code === 301 || code === 302 || code === 303 || code === 307 || code === 308;\n};\n\n// expose Promise\nfetch.Promise = global.Promise;\n\nexport default fetch;\nexport { Headers, Request, Response, FetchError };\n","/**\n * @module : serverOn.ts\n * @author : Ed Greenberg\n * @function : turn on server\n * @changelog : Ed Greenberg, November 5th, 2019, rewrote to open port on server/index.js\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\n// const path = require('path');\n// const fs = require('fs');\nconst childProcess = require('child_process');\n\n\nconst serverOn = (entryPoint: string) => {\n // moved this line into the serverOn file so that each time serverOn is called\n // a new child process is started. This is critical to being able to toggle\n // GraphQuill on and off\n const terminal = childProcess.spawn('bash');\n\n // we find the root directory by looking up from the active file\n // ...until we detect a folder with package.json\n // let root = path.dirname(vscode.window.activeTextEditor!.document.fileName);\n // while (!fs.existsSync(`${root}/package.json`)) {\n // root = path.dirname(root);\n // console.log('a root grows: ', root);\n // }\n\n // next, we activate two terminal methods to give us\n // feedback on whether we sucessfully used a child process\n // note the Typescript (: any) used to handle unknown data inputs\n terminal.stdout.on('data', (data: Buffer) => {\n // todo add validation, if there is an error that is logged here, it's coming from node\n // todo and should be piped to the channel as well\n // todo this may require passing in the channel to the serverOn function...\n console.log(`stdout from terminal: ${data}`);\n // console.log('---data type is', data.constructor.name);\n });\n\n // log what the exit code is in the extension terminal\n terminal.on('exit', (code: Number) => {\n console.log(`child process exited with code ${code}`);\n // console.log('--exit code type is', code.constructor.name);\n });\n\n // just below is the real core of the function, the child process:\n // we write to a new terminal to run the index.js file in the folder specified by base\n // IMPORTANT: code will not run without the '\\n' component--the CLI needs this\n // explicit return command\n return new Promise((resolve) => {\n // console.log('inside promise');\n setTimeout(() => {\n // console.log('root: ', root);\n console.log('Sending stdin (node command) to terminal');\n\n // this seems to take some time to spin up the server and\n // throws an error with the timing of a fetch\n // terminal.stdin.write(`node ${root}/server/index.js\\n`);\n terminal.stdin.write(`node ${entryPoint}\\n`);\n console.log('Ending terminal session');\n terminal.stdin.end();\n\n // resolve promise\n resolve();\n console.log('just resolved');\n\n vscode.window.showInformationMessage('GraphQuill Activated');\n }, 1);\n });\n\n // this message pops up to the user upon completion of the command\n};\n\nmodule.exports = serverOn;\n","/**\n * @module : serverOff.ts\n * @author : Ed Greenberg\n * @function : turn off server\n * @changelog : Ed Greenberg, November 5th, 2019, rewrote to open port on server/index.js\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n// eslint-disable-next-line import/no-unresolved\nimport * as vscode from 'vscode';\n\nconst fs = require('fs');\nconst path = require('path');\nconst childProcess = require('child_process');\n\n// spawn a new child process that will be used to close the open port\n\nconst serverOff = (portNumber: Number) => {\n console.log('in serveroff function file');\n // this one also had to be pulled into serverOff so that a new child process is started to\n // kill the server port\n const terminal2 = childProcess.spawn('bash');\n\n // we find the root directory by looking up from the active file\n // ...until we detect a folder with package.json\n let root = path.dirname(vscode.window.activeTextEditor!.document.fileName);\n while (!fs.existsSync(`${root}/package.json`)) {\n root = path.dirname(root);\n console.log('a root grows: ', root);\n }\n\n // const temp = vscode.window.activeTextEditor!.document.fileName;\n\n // write any data/outputs from the terminal to the extension console\n terminal2.stdout.on('data', (data: Buffer) => {\n console.log(`stdout: ${data}`);\n });\n\n // on terminal exit, print the exit code\n terminal2.on('exit', (code: Number) => {\n console.log(`terminal2 child process exited with code ${code}`);\n });\n\n // // this is a blocking (synchronous) call to the active file, populating 'data' as a string\n // const data = fs.readFileSync(`${root}/server/index.js`, 'utf8');\n\n // // to stop a localhost, we must first identify a port, and 'app.listen(' is\n // // a special string in the active file that is likely to be adjacent to the port number\n // const lookup = data.search(/app.listen\\(/);\n\n // // this next segment is edge case handling for if the port number\n // // is separated from the start parentheses by some number of spaces\n // let displace = 0;\n // while (data[lookup + displace + 11] === ' ') {\n // displace += 1;\n // }\n\n // // in target, we slice the port out of the array (offsetting as required by the edge case test)\n // // eslint-disable-next-line no-unused-vars\n // const target = data.slice(lookup + 11 + displace, lookup + 15 + displace);\n\n // ? I don't think these need to be delayed... just kill the process\n // in the core of our function, we run a special command that finds and kills the port specified\n // setTimeout(() => {\n // terminal2.stdin.write(`kill $(lsof -t -i:${target})\\n`);\n terminal2.stdin.write(`kill $(lsof -t -i:${portNumber})\\n`);\n terminal2.stdin.end();\n // }, 1);\n\n vscode.window.showInformationMessage('GraphQuill has been turned off');\n};\n\nmodule.exports = serverOff;\n","/**\n * @module : checkForRunningServer.ts\n * @author : Alex Chao, Nov 7th, 2019\n * @function : uses child process and lsof to check if a port is currently running\n * @param : portNumber, string\n * @param : once: boolean, true if the function should check if the port is open right when the\n * function is run. OR false if the function should wait for the server to start before resolving\n * @param : allowServerTimeoutConfigSetting: number, user input from config file to determine how\n * long to wait for the server to start. Defaults to 3000 (milliseconds)\n * @returns : a boolean, true if the server has started, false if it has not started\n * @changelog : ##WHOEVER CHANGES THE FILE, date, details\n * * */\n\n// eslint-disable-next-line import/no-unresolved\n// import * as vscode from 'vscode';\n\n// const path = require('path');\n// const fs = require('fs');\nconst childProcess = require('child_process');\n\nconst checkForRunningServer = (\n portNumber: string,\n once: boolean,\n allowServerTimeoutConfigSetting = 3000,\n) => {\n console.log('CHECK FOR RUNNING SERVER IS RUNNINGGGGGG');\n // console.log(portNumber, once, allowServerTimeoutConfigSetting);\n // moved this line into the serverOn file so that each time serverOn is called\n // a new child process is started. This is critical to being able to toggle\n // GraphQuill on and off\n let portOpen = false;\n let allTerminalText: string;\n const bashTerminal = childProcess.spawn('bash');\n\n // next, we activate two terminal methods to give us\n // feedback on whether we sucessfully used a child process\n // note the Typescript (: any) used to handle unknown data inputs\n bashTerminal.stdout.on('data', (data: Buffer) => {\n // console.log(`--stdout from terminal: ${data}`);\n console.log('terminal has printed some data...');\n allTerminalText = data.toString();\n portOpen = allTerminalText.includes('node');\n // console.log('allterminal text', allTerminalText);\n // console.log('---data type is', data.constructor.name);\n });\n\n // log what the exit code is in the extension terminal\n bashTerminal.on('exit', (code: Number) => {\n console.log(`checkForRunningServer child process exited with code ${code}`);\n // console.log('--exit code type is', code.constructor.name);\n });\n\n // just below is the real core of the function, the child process:\n // checks if the port is active with the `lsof -i :${portNumber}\\n` command\n // IMPORTANT: code will not run without the '\\n' component--the CLI needs this\n return new Promise((resolve) => {\n let numRuns = 0;\n let timeoutId: NodeJS.Timer;\n // A set interval callback that will write a command to the terminal every 200ms, then check\n // if the portOpen boolean has been changed (it is actually changed in the on-data listener\n // above). Promise will resolve when the portOpen variable is true\n const intervalLsofToBash = setInterval(() => {\n bashTerminal.stdin.write(`lsof -i :${portNumber}\\n`);\n // console.log('inside promise-- portOpen boolean', portOpen);\n // console.log('inside promise-- allTerminalText', allTerminalText);\n\n // if the port is open, resolve the promise, return some value...\n if (portOpen) {\n // clear set intervals\n clearInterval(intervalLsofToBash);\n\n // clear the timeoutId\n if (timeoutId) clearTimeout(timeoutId);\n\n // end terminal session\n bashTerminal.stdin.end();\n\n console.log('port is open!');\n\n // resolve promise\n // return a confirmed status\n resolve(true);\n }\n\n // if once param was set to true, we only want to check if the server is \"immediately\" on, so\n // check if once is true, and numRuns is greater than one, then resolve the promise with the\n // result of portOpen\n if (once && numRuns > 1) {\n console.log('---once conditional triggered, result is:', portOpen);\n // clear set intervals\n clearInterval(intervalLsofToBash);\n\n // clear the timeoutId\n if (timeoutId) clearTimeout(timeoutId);\n\n // end terminal session\n bashTerminal.stdin.end();\n\n resolve(portOpen);\n }\n\n // increment numRuns for the once conditional test\n numRuns += 1;\n }, 200); // Run every 200ms\n\n // default/base case to resolve promise if the server hasn't started in 3 seconds\n // This means the server is either spinning up too slowly or there is an error in the user's\n // server starting file. In either case we want to return false\n if (!once) {\n // only create this default timeout if this function was invoked with once === false\n timeoutId = setTimeout(() => {\n console.log('timeout of checkForRunningServer');\n // clear set intervals\n clearInterval(intervalLsofToBash);\n\n // end terminal session\n bashTerminal.stdin.end();\n\n // resolve the promise\n resolve(false);\n }, allowServerTimeoutConfigSetting); // default allowed time is 3 sec.\n }\n });\n};\n\nmodule.exports = checkForRunningServer;\n","var map = {\n\t\"./checkQueryBrackets\": 8,\n\t\"./checkQueryBrackets.ts\": 8,\n\t\"./extractQueries\": 6,\n\t\"./extractQueries.ts\": 6,\n\t\"./findPortNumber\": 13,\n\t\"./findPortNumber.ts\": 13,\n\t\"./findRootDirectory\": 11,\n\t\"./findRootDirectory.ts\": 11,\n\t\"./parseConfigFile\": 12,\n\t\"./parseConfigFile.ts\": 12,\n\t\"./parseQuery\": 7,\n\t\"./parseQuery.ts\": 7,\n\t\"./readFileSendReqAndWriteResponse\": 5,\n\t\"./readFileSendReqAndWriteResponse.ts\": 5\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 21;"],"sourceRoot":""} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 48ab54f..3f7821f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -164,194 +164,6 @@ } } }, - "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.8.5" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, "acorn": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", @@ -385,18 +197,6 @@ "uri-js": "^4.2.2" } }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, - "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "dev": true - }, "ansi-colors": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", @@ -427,136 +227,6 @@ "color-convert": "^1.9.0" } }, - "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" - }, - "dependencies": { - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "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" - } - } - } - }, - "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" - } - }, - "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" - } - }, - "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" - } - } - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, "arg": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.1.tgz", @@ -582,24 +252,6 @@ "commander": "^2.11.0" } }, - "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-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-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-includes": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", @@ -610,62 +262,12 @@ "es-abstract": "^1.7.0" } }, - "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 - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "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 - }, "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -678,18 +280,6 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "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 - }, "axobject-query": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", @@ -705,91 +295,12 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "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" - } - } - } - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bluebird": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", - "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -809,158 +320,18 @@ "fill-range": "^7.0.1" } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, "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 }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, "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 }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "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" - } - }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1004,147 +375,10 @@ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "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.1" - }, - "dependencies": { - "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" - } - }, - "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" - } - }, - "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" - } - }, - "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" - } - }, - "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-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" - } - } - } - }, - "chownr": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", - "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "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" - } - } - } - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "requires": { "restore-cursor": "^3.1.0" @@ -1201,16 +435,6 @@ } } }, - "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-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -1232,161 +456,30 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "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=", "dev": true }, - "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" - } - }, "confusing-browser-globals": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz", "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==", "dev": true }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, "contains-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, "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 }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, "damerau-levenshtein": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", @@ -1416,12 +509,6 @@ "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 - }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -1446,80 +533,12 @@ "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" - } - } - } - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "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 - }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1529,39 +548,6 @@ "esutils": "^2.0.2" } }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "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" - } - }, - "elliptic": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", - "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -1574,15 +560,6 @@ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", "dev": true }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, "enhanced-resolve": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", @@ -2025,111 +1002,6 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "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": { - "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" - } - }, - "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" - } - }, - "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" - } - } - } - }, - "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-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" - }, - "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" - } - } - } - }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -2141,71 +1013,6 @@ "tmp": "^0.0.33" } }, - "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" - } - }, - "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" - } - }, - "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" - } - } - } - }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", @@ -2224,12 +1031,6 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", - "dev": true - }, "figures": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", @@ -2257,197 +1058,15 @@ "to-regex-range": "^5.0.1" } }, - "find-cache-dir": { + "find-up": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "dependencies": { - "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" - } - }, - "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" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "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 - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { "locate-path": "^2.0.0" } }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "dependencies": { - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "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" - } - } - } - }, - "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" - } - }, - "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" - } - } - } - }, "flat": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", @@ -2455,634 +1074,39 @@ "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 - } - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", - "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" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "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" - } - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.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": "4.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "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.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "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.6", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "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.7.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 + }, + "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 } } }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -3107,21 +1131,6 @@ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "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.5", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz", @@ -3136,62 +1145,6 @@ "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" - }, - "dependencies": { - "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" - } - } - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - }, - "dependencies": { - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - } - } - }, - "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" - } - }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -3231,104 +1184,12 @@ "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": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "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 }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "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.5", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", @@ -3356,12 +1217,6 @@ } } }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, "https-proxy-agent": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", @@ -3381,18 +1236,6 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -3409,82 +1252,12 @@ "resolve-from": "^4.0.0" } }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "dependencies": { - "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" - } - }, - "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" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "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 - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } - } - }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -3501,12 +1274,6 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, "inquirer": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.0.tgz", @@ -3562,116 +1329,24 @@ } } }, - "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": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "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.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "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.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "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.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "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", @@ -3699,15 +1374,6 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "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", @@ -3723,12 +1389,6 @@ "has": "^1.0.1" } }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, "is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", @@ -3738,18 +1398,6 @@ "has-symbols": "^1.0.0" } }, - "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 - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -3762,12 +1410,6 @@ "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": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3784,12 +1426,6 @@ "esprima": "^4.0.0" } }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -3811,29 +1447,14 @@ "minimist": "^1.2.0" } }, - "jsx-ast-utils": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz", - "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==", - "dev": true, - "requires": { - "array-includes": "^3.0.3", - "object.assign": "^4.1.0" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "jsx-ast-utils": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz", + "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "array-includes": "^3.0.3", + "object.assign": "^4.1.0" } }, "levn": { @@ -3866,12 +1487,6 @@ } } }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, "loader-utils": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", @@ -3923,83 +1538,12 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, "make-error": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", "dev": true }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", - "dev": true - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "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-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" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, "memory-fs": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", @@ -4020,34 +1564,12 @@ "picomatch": "^2.0.5" } }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -4063,45 +1585,6 @@ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "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.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -4224,20 +1707,6 @@ } } }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -4250,44 +1719,12 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "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" - } - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -4309,45 +1746,6 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -4360,58 +1758,12 @@ "validate-npm-package-license": "^3.0.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 - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, "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.6.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", @@ -4424,15 +1776,6 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "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", @@ -4479,15 +1822,6 @@ "es-abstract": "^1.5.1" } }, - "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.values": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", @@ -4532,47 +1866,12 @@ "wordwrap": "~1.0.0" } }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, "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 }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -4597,23 +1896,6 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, - "pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", - "dev": true - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -4623,20 +1905,6 @@ "callsites": "^3.0.0" } }, - "parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", - "dev": true, - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -4646,30 +1914,6 @@ "error-ex": "^1.2.0" } }, - "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 - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "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", @@ -4717,31 +1961,12 @@ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", "dev": true }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "picomatch": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==", "dev": true }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -4751,24 +1976,12 @@ "find-up": "^2.1.0" } }, - "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 - }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -4781,12 +1994,6 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, "prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", @@ -4804,96 +2011,18 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "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": { - "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" - } - } - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, "ramda": { "version": "0.26.1", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==", "dev": true }, - "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" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, "react-is": { "version": "16.11.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.11.0.tgz", @@ -4925,131 +2054,15 @@ "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" - } - }, - "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": { - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "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" - } - } - } - }, - "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" - } - }, - "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" - } - } + "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" } }, "regenerator-runtime": { @@ -5058,40 +2071,12 @@ "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", "dev": true }, - "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" - } - }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, - "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.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "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 - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -5113,58 +2098,12 @@ "path-parse": "^1.0.6" } }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -5175,12 +2114,6 @@ "signal-exit": "^3.0.2" } }, - "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.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -5190,16 +2123,6 @@ "glob": "^7.1.3" } }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -5209,15 +2132,6 @@ "is-promise": "^2.1.0" } }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, "rxjs": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", @@ -5233,89 +2147,24 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "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 }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, - "serialize-javascript": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", - "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", - "dev": true - }, "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" - }, - "dependencies": { - "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" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -5348,147 +2197,6 @@ "is-fullwidth-code-point": "^2.0.0" } }, - "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": { - "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" - } - }, - "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" - } - }, - "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" - } - } - } - }, - "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-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "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-support": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", @@ -5507,12 +2215,6 @@ } } }, - "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 - }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -5545,90 +2247,12 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, - "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" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "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-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "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": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -5683,12 +2307,6 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -5756,126 +2374,25 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, - "terser": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.0.tgz", - "integrity": "sha512-oDG16n2WKm27JO8h4y/w3iqBGAOSCtq7k8dRmrn4Wf9NouL0b2WpMHGChFGZq4nFAQy1FsNJrVQHfurXOSTmOA==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "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 - } - } - }, - "terser-webpack-plugin": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", - "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^1.7.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.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 - } - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "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.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "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" - } - } - } + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "os-tmpdir": "~1.0.2" } }, "to-regex-range": { @@ -5944,12 +2461,6 @@ "tslib": "^1.8.1" } }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -5971,94 +2482,12 @@ "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", "dev": true }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, "typescript": { "version": "3.6.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.4.tgz", "integrity": "sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==", "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-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "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 - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -6068,53 +2497,6 @@ "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "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": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -6137,12 +2519,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, "vscode-test": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.2.0.tgz", @@ -6154,348 +2530,6 @@ "rimraf": "^2.6.3" } }, - "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", - "dev": true, - "requires": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - } - }, - "webpack": { - "version": "4.41.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.2.tgz", - "integrity": "sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.2.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.1", - "watchpack": "^1.6.0", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "acorn": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", - "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", - "dev": true - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "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" - } - } - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "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" - } - }, - "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" - } - } - } - }, - "webpack-cli": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.10.tgz", - "integrity": "sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg==", - "dev": true, - "requires": { - "chalk": "2.4.2", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "findup-sync": "3.0.0", - "global-modules": "2.0.0", - "import-local": "2.0.0", - "interpret": "1.2.0", - "loader-utils": "1.2.3", - "supports-color": "6.1.0", - "v8-compile-cache": "2.0.3", - "yargs": "13.2.4" - }, - "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 - }, - "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 - }, - "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" - } - }, - "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" - } - }, - "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" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "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 - }, - "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" - } - }, - "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" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "v8-compile-cache": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", - "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", - "dev": true - }, - "yargs": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", - "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", - "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.0" - } - } - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, - "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 - } - } - }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -6526,15 +2560,6 @@ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", @@ -6595,24 +2620,12 @@ "mkdirp": "^0.5.1" } }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, "yargs": { "version": "13.3.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", diff --git a/package.json b/package.json index 7e3cf44..d0d6192 100644 --- a/package.json +++ b/package.json @@ -43,10 +43,7 @@ ] }, "scripts": { - "vscode:prepublish": "webpack --mode production", - "webpack": "webpack --mode development", - "webpack-dev": "webpack --mode development --watch", - "test-compile": "tsc -p ./", + "vscode:prepublish": "npm run compile", "compile": "tsc -p ./", "watch": "tsc -watch -p ./", "pretest": "npm run compile", @@ -75,9 +72,7 @@ "ts-loader": "^6.2.1", "ts-node": "^8.4.1", "typescript": "^3.3.1", - "vscode-test": "^1.2.0", - "webpack": "^4.41.2", - "webpack-cli": "^3.3.10" + "vscode-test": "^1.2.0" }, "dependencies": { "node-fetch": "^2.6.0" diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 80fe529..0000000 --- a/webpack.config.js +++ /dev/null @@ -1,43 +0,0 @@ -// eslint-disable -//@ts-check - -'use strict'; - -const path = require('path'); - -/**@type {import('webpack').Configuration}*/ - -const config = { - target: 'node', // vscode extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/ - - entry: './src/extension.ts', // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ - output: { - // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ - path: path.resolve(__dirname, 'dist'), - filename: 'extension.js', - libraryTarget: 'commonjs2', - devtoolModuleFilenameTemplate: '../[resource-path]' - }, - devtool: 'source-map', - externals: { - vscode: 'commonjs vscode' // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ - }, - resolve: { - // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader - extensions: ['.ts', '.js'] - }, - module: { - rules: [ - { - test: /\.ts$/, - exclude: /node_modules/, - use: [ - { - loader: 'ts-loader' - } - ] - } - ] - } -}; -module.exports = config; \ No newline at end of file From 2089d14a864e8457db66f4ebb0218e73feb09325 Mon Sep 17 00:00:00 2001 From: alexchao26 Date: Sun, 10 Nov 2019 22:54:45 -0500 Subject: [PATCH 07/10] 0.6.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3f7821f..0301eb4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "graphquill", - "version": "0.5.0", + "version": "0.6.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index d0d6192..3018d3a 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Welcome to a new era of GraphQL API devleopment.", "icon": "statics/graphquill-logo.png", "publisher": "sproutdeveloping", - "version": "0.5.0", + "version": "0.6.0", "repository": { "type": "git", "url": "https://github.com/oslabs-beta/GraphQuill.git" From 30db9b99d4b19533f35dea76de665bff5fb75f5c Mon Sep 17 00:00:00 2001 From: alexchao26 Date: Sun, 10 Nov 2019 23:08:54 -0500 Subject: [PATCH 08/10] fixing my mistakes... --- .gitignore | 3 --- .vscode/launch.json | 2 +- src/extension.ts | 14 +++++++------- src/modules/client/extractQueries.ts | 4 ++-- .../client/readFileSendReqAndWriteResponse.ts | 2 +- 5 files changed, 11 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index dd0b33a..20d3c63 100644 --- a/.gitignore +++ b/.gitignore @@ -3,9 +3,6 @@ node_modules .vscode-test/ *.vsix -# webpack output files -dist/ - # Logs logs *.log diff --git a/.vscode/launch.json b/.vscode/launch.json index a61c4df..412ef8a 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -44,7 +44,7 @@ "outFiles": [ "${workspaceFolder}/out/test/**/*.js" ], - "preLaunchTask": "npm: test-compile" + "preLaunchTask": "npm: watch" } ] } diff --git a/src/extension.ts b/src/extension.ts index 20dbf56..079f5c4 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -18,19 +18,19 @@ const fs = require('fs'); /* eslint-disable import/no-unresolved */ -const readFileSendReqAndWriteResponse = require('./modules/client/readFileSendReqAndWriteResponse'); -const serverOn = require('./modules/server/serverOn'); -const serverOff = require('./modules/server/serverOff'); +const readFileSendReqAndWriteResponse = require('./modules/client/readFileSendReqAndWriteResponse.js'); +const serverOn = require('./modules/server/serverOn.js'); +const serverOff = require('./modules/server/serverOff.js'); // require in new function that checks for a running server -const checkForRunningServer = require('./modules/server/checkForRunningServer'); +const checkForRunningServer = require('./modules/server/checkForRunningServer.js'); // require in file that finds root directory -const findRootDirectory = require('./modules/client/findRootDirectory'); +const findRootDirectory = require('./modules/client/findRootDirectory.js'); // require in file that returns entryPoint when given the root path -const parseConfigFile = require('./modules/client/parseConfigFile'); +const parseConfigFile = require('./modules/client/parseConfigFile.js'); // require in file that finds port# -const findPortNumber = require('./modules/client/findPortNumber'); +const findPortNumber = require('./modules/client/findPortNumber.js'); // this method is called when your extension is activated diff --git a/src/modules/client/extractQueries.ts b/src/modules/client/extractQueries.ts index bd28310..48c4ad2 100644 --- a/src/modules/client/extractQueries.ts +++ b/src/modules/client/extractQueries.ts @@ -1,9 +1,9 @@ /* eslint-disable import/no-unresolved */ // import { builtinModules } from 'module'; -import parseQuery from './parseQuery'; +import parseQuery from './parseQuery.js'; -const useCheckQueryBrackets = require('./checkQueryBrackets'); +const useCheckQueryBrackets = require('./checkQueryBrackets.js'); // given file path, read file at path and parse for instances of 'graphQuill' function extractQueries(string: string) { diff --git a/src/modules/client/readFileSendReqAndWriteResponse.ts b/src/modules/client/readFileSendReqAndWriteResponse.ts index 1c6bb79..c93d1d1 100644 --- a/src/modules/client/readFileSendReqAndWriteResponse.ts +++ b/src/modules/client/readFileSendReqAndWriteResponse.ts @@ -22,7 +22,7 @@ import * as vscode from 'vscode'; const fetch = require('node-fetch'); const fs = require('fs'); -const extractQueries = require('./extractQueries'); +const extractQueries = require('./extractQueries.js'); // checkQueryBrackets used to be here // parseQuery used to be here From 98e28ccdcb58cf345a262f1d48de8d23d1158464 Mon Sep 17 00:00:00 2001 From: alexchao26 Date: Sun, 10 Nov 2019 23:09:11 -0500 Subject: [PATCH 09/10] 0.7.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0301eb4..84d95f2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "graphquill", - "version": "0.6.0", + "version": "0.7.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 3018d3a..9760c05 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Welcome to a new era of GraphQL API devleopment.", "icon": "statics/graphquill-logo.png", "publisher": "sproutdeveloping", - "version": "0.6.0", + "version": "0.7.0", "repository": { "type": "git", "url": "https://github.com/oslabs-beta/GraphQuill.git" From e85381b8e716924acfc981f6cf60e5b540174e3d Mon Sep 17 00:00:00 2001 From: alexchao26 Date: Tue, 12 Nov 2019 19:51:51 -0500 Subject: [PATCH 10/10] comments during code review --- src/extension.ts | 6 ++---- src/modules/client/parseConfigFile.ts | 3 ++- src/modules/client/parseQuery.ts | 4 ++-- src/modules/client/readFileSendReqAndWriteResponse.ts | 4 +++- src/test/suite/parser.test.ts | 6 +++--- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 079f5c4..177f23c 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -92,6 +92,7 @@ export function activate(context: vscode.ExtensionContext) { return null; } + // ! remove after config file is setup // set the portNumber (in the higher scope so it can be used in the deactivate function) portNumber = findPortNumber(entryPoint); @@ -170,8 +171,7 @@ export function activate(context: vscode.ExtensionContext) { // ! I really think we should add the port number to the config file to specify to the user // ! That the port number SHUOLD not be changed... // TODO this seems very redundant... but I'm blanking on how to make this dynamic - // TODO update if the user changes their server file... - // on each save... reparse for a portNumber in case if it was changed + // ! on each save... reparse for a portNumber in case if it was changed portNumber = findPortNumber(entryPoint); // send the filename and channel to the readFileSRAWR function @@ -284,12 +284,10 @@ export function activate(context: vscode.ExtensionContext) { // this method is called when your extension is deactivated export function deactivate() { // deactivate must return a promise if cleanup operations are async. - // turn the server off if vscode is closed (tested via lsof in terminal) // console.log('---deactive function called!!'); // executing the deactivateGQ command seems to achieve a similar effect & is nice because it has // access to the portNumber variable vscode.commands.executeCommand('extension.deactivateGraphQuill'); - // return setTimeout(() => serverOff(3000), 1); } diff --git a/src/modules/client/parseConfigFile.ts b/src/modules/client/parseConfigFile.ts index 4d6dff9..5130f74 100644 --- a/src/modules/client/parseConfigFile.ts +++ b/src/modules/client/parseConfigFile.ts @@ -40,7 +40,8 @@ function parseConfigFile(rootPath: string) { // set the servertimeout config setting allowServerTimeoutConfigSetting = configObject.serverStartupTimeAllowed; } else { - // default it to the current open editor if there is not a config file + // if config file is not found, return an empty string, + // error handle on the other side entryPoint = ''; // ! This will be handled in the outer extension.ts file to notify the user and break out of diff --git a/src/modules/client/parseQuery.ts b/src/modules/client/parseQuery.ts index 83a3187..03464d4 100644 --- a/src/modules/client/parseQuery.ts +++ b/src/modules/client/parseQuery.ts @@ -7,7 +7,7 @@ // add characters to string while within parentheses -export default function parseQuery(input: string) { +module.exports = function parseQuery(input: string) { let queryString: string = ''; // string to be checked for balanced parens let passedQueryString: string = ''; // string to be passed along let closer: boolean = false; // trip to prevent passed along string from overwriting @@ -34,4 +34,4 @@ export default function parseQuery(input: string) { index += 1; } return openParensCount === closeParensCount ? passedQueryString : 'unbalanced parens'; -} +}; diff --git a/src/modules/client/readFileSendReqAndWriteResponse.ts b/src/modules/client/readFileSendReqAndWriteResponse.ts index c93d1d1..f3580e3 100644 --- a/src/modules/client/readFileSendReqAndWriteResponse.ts +++ b/src/modules/client/readFileSendReqAndWriteResponse.ts @@ -70,6 +70,7 @@ function readFileSendReqAndWriteResponse( ).map( (query: string|Error) => ( // should all be strings... + // remove extra quotes typeof query === 'string' && query.slice(1, query.length - 1) ), ); @@ -107,11 +108,12 @@ function readFileSendReqAndWriteResponse( // only append this string to the output channel once channel.append('Responses are:'); - }, 1); // TODO BIG UX FIX NEEDED HERE + }, 1); // then send response back to vscode output channel // console.log('parsed queries are', result); // TODO match these up with the correct queries when there are multiple within a single file + // TODO still the promise all thing channel.append(`GraphQuill Queries are:\n${result.filter((e : string|Error) => (typeof e === 'string' ? e.length : false))}\n`); channel.show(true); } diff --git a/src/test/suite/parser.test.ts b/src/test/suite/parser.test.ts index 91e5281..435f6b4 100644 --- a/src/test/suite/parser.test.ts +++ b/src/test/suite/parser.test.ts @@ -10,18 +10,18 @@ import { expect } from 'chai'; import 'mocha'; -import testParseQuery from '../../modules/client/parseQuery'; +const parseQuery = require('../../modules/client/parseQuery'); // I believe mocha uses the "this" keyboard a lot, so that's why these should NOT be arrow functions describe('Testing parseQuery function', function () { it('should return the inputted query if it has balanced parens', function () { - const result = testParseQuery('(this has balanced parens())'); + const result = parseQuery('(this has balanced parens())'); expect(result).to.equal('(this has balanced parens())'); }); // this test is kind of confusing... ed please fix it it('should return \'unbalanced parens\' if the query has unbalanced parens', function () { - const result = testParseQuery('(unbalanced()) parens)'); + const result = parseQuery('(unbalanced()) parens)'); expect(result).to.equal('unbalanced parens'); }); });