From 5b6100d12bb768d53af6fd7b8fd71bf9fcd561f7 Mon Sep 17 00:00:00 2001 From: harttle Date: Sat, 23 Feb 2019 00:49:54 +0800 Subject: [PATCH] refactor: strictly typed --- package-lock.json | 3952 +++++++++++++------------- package.json | 9 +- rollup.config.js => rollup.config.ts | 0 src/builtin/filters/array.ts | 25 +- src/builtin/filters/date.ts | 4 +- src/builtin/filters/html.ts | 10 +- src/builtin/filters/math.ts | 26 +- src/builtin/filters/object.ts | 2 +- src/builtin/filters/string.ts | 40 +- src/builtin/filters/url.ts | 6 +- src/builtin/tags/assign.ts | 11 +- src/builtin/tags/block.ts | 19 +- src/builtin/tags/capture.ts | 7 +- src/builtin/tags/case.ts | 20 +- src/builtin/tags/comment.ts | 10 +- src/builtin/tags/cycle.ts | 16 +- src/builtin/tags/decrement.ts | 5 +- src/builtin/tags/for.ts | 164 +- src/builtin/tags/if.ts | 18 +- src/builtin/tags/include.ts | 10 +- src/builtin/tags/increment.ts | 5 +- src/builtin/tags/layout.ts | 11 +- src/builtin/tags/raw.ts | 12 +- src/builtin/tags/tablerow.ts | 23 +- src/builtin/tags/unless.ts | 14 +- src/fs/browser.ts | 4 +- src/fs/ifs.ts | 2 +- src/fs/node.ts | 6 +- src/liquid-options.ts | 10 +- src/liquid.ts | 22 +- src/parser/delimited-token.ts | 7 +- src/parser/html-token.ts | 4 +- src/parser/lexical.ts | 12 +- src/parser/output-token.ts | 4 +- src/parser/parse-stream.ts | 22 +- src/parser/parser.ts | 3 +- src/parser/tag-token.ts | 4 +- src/parser/token.ts | 7 +- src/parser/tokenizer.ts | 16 +- src/parser/whitespace-ctrl.ts | 4 +- src/render/render.ts | 8 +- src/render/syntax.ts | 34 +- src/scope/icontext.ts | 4 + src/scope/scope.ts | 24 +- src/template/filter/filter-impl.ts | 3 + src/template/{ => filter}/filter.ts | 16 +- src/template/html.ts | 6 +- src/template/output.ts | 2 +- src/template/tag/block-tag.ts | 45 + src/template/tag/hash.ts | 3 +- src/template/tag/itag-impl.ts | 3 +- src/template/tag/tag.ts | 3 +- src/template/template.ts | 8 +- src/template/value.ts | 14 +- src/util/error.ts | 96 +- src/util/promise.ts | 23 +- src/util/strftime.ts | 78 +- src/util/underscore.ts | 58 +- test/e2e/eval-value.ts | 4 +- test/e2e/express.ts | 4 +- test/e2e/parse-and-render.ts | 2 +- test/e2e/render-file.ts | 2 +- test/e2e/xhr.ts | 12 +- test/stub/mockfs.ts | 2 +- test/stub/render.ts | 2 +- test/unit/builtin/tags/for.ts | 3 +- test/unit/builtin/tags/include.ts | 2 +- test/unit/builtin/tags/layout.ts | 2 +- test/unit/builtin/tags/unless.ts | 2 +- test/unit/fs/browser.ts | 6 +- test/unit/liquid/cache.ts | 2 +- test/unit/liquid/liquid.ts | 4 +- test/unit/liquid/strict.ts | 2 +- test/unit/parser/tokenizer.ts | 2 +- test/unit/render/render.ts | 6 +- test/unit/render/syntax.ts | 2 +- test/unit/scope/scope.ts | 7 +- test/unit/template/filter.ts | 4 +- test/unit/template/output.ts | 6 +- test/unit/template/tag.ts | 6 +- test/unit/template/value.ts | 4 +- test/unit/util/error.ts | 46 +- test/unit/util/promise.ts | 54 +- test/unit/util/strftime.ts | 4 +- test/unit/util/underscore.ts | 50 +- tsconfig.json | 4 +- 86 files changed, 2630 insertions(+), 2590 deletions(-) rename rollup.config.js => rollup.config.ts (100%) create mode 100644 src/scope/icontext.ts create mode 100644 src/template/filter/filter-impl.ts rename src/template/{ => filter}/filter.ts (79%) create mode 100644 src/template/tag/block-tag.ts diff --git a/package-lock.json b/package-lock.json index d7eaa7419..c61e33467 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", "dev": true, "requires": { - "@babel/highlight": "7.0.0" + "@babel/highlight": "^7.0.0" } }, "@babel/generator": { @@ -19,11 +19,11 @@ "integrity": "sha512-aEADYwRRZjJyMnKN7llGIlircxTCofm3dtV5pmY6ob18MSIuipHpA2yZWkPlycwu5HJcx/pADS3zssd8eY7/6A==", "dev": true, "requires": { - "@babel/types": "7.3.3", - "jsesc": "2.5.2", - "lodash": "4.17.11", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "@babel/types": "^7.3.3", + "jsesc": "^2.5.1", + "lodash": "^4.17.11", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" } }, "@babel/helper-function-name": { @@ -32,9 +32,9 @@ "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "7.0.0", - "@babel/template": "7.2.2", - "@babel/types": "7.3.3" + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" } }, "@babel/helper-get-function-arity": { @@ -43,7 +43,7 @@ "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", "dev": true, "requires": { - "@babel/types": "7.3.3" + "@babel/types": "^7.0.0" } }, "@babel/helper-split-export-declaration": { @@ -52,7 +52,7 @@ "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", "dev": true, "requires": { - "@babel/types": "7.3.3" + "@babel/types": "^7.0.0" } }, "@babel/highlight": { @@ -61,9 +61,9 @@ "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", "dev": true, "requires": { - "chalk": "2.4.2", - "esutils": "2.0.2", - "js-tokens": "4.0.0" + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" } }, "@babel/parser": { @@ -78,9 +78,9 @@ "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0", - "@babel/parser": "7.3.3", - "@babel/types": "7.3.3" + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.2.2", + "@babel/types": "^7.2.2" } }, "@babel/traverse": { @@ -89,15 +89,15 @@ "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0", - "@babel/generator": "7.3.3", - "@babel/helper-function-name": "7.1.0", - "@babel/helper-split-export-declaration": "7.0.0", - "@babel/parser": "7.3.3", - "@babel/types": "7.3.3", - "debug": "4.1.1", - "globals": "11.11.0", - "lodash": "4.17.11" + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.2.2", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/parser": "^7.2.3", + "@babel/types": "^7.2.2", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.10" } }, "@babel/types": { @@ -106,9 +106,9 @@ "integrity": "sha512-2tACZ80Wg09UnPg5uGAOUvvInaqLk3l/IAhQzlxLQOIXacr6bMsra5SH6AWw/hIDRCSbCdHP2KzSOD+cT7TzMQ==", "dev": true, "requires": { - "esutils": "2.0.2", - "lodash": "4.17.11", - "to-fast-properties": "2.0.0" + "esutils": "^2.0.2", + "lodash": "^4.17.11", + "to-fast-properties": "^2.0.0" } }, "@mrmlnc/readdir-enhanced": { @@ -117,8 +117,8 @@ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", "dev": true, "requires": { - "call-me-maybe": "1.0.1", - "glob-to-regexp": "0.3.0" + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" } }, "@nodelib/fs.stat": { @@ -134,9 +134,9 @@ "dev": true, "requires": { "deepmerge": "3.2.0", - "is-plain-object": "2.0.4", - "universal-user-agent": "2.0.3", - "url-template": "2.0.8" + "is-plain-object": "^2.0.4", + "universal-user-agent": "^2.0.1", + "url-template": "^2.0.8" } }, "@octokit/request": { @@ -145,10 +145,10 @@ "integrity": "sha512-5YRqYNZOAaL7+nt7w3Scp6Sz4P2g7wKFP9npx1xdExMomk8/M/ICXVLYVam2wzxeY0cIc6wcKpjC5KI4jiNbGw==", "dev": true, "requires": { - "@octokit/endpoint": "3.1.3", - "is-plain-object": "2.0.4", - "node-fetch": "2.3.0", - "universal-user-agent": "2.0.3" + "@octokit/endpoint": "^3.1.1", + "is-plain-object": "^2.0.4", + "node-fetch": "^2.3.0", + "universal-user-agent": "^2.0.1" } }, "@octokit/rest": { @@ -158,14 +158,14 @@ "dev": true, "requires": { "@octokit/request": "2.3.0", - "before-after-hook": "1.3.2", - "btoa-lite": "1.0.0", - "lodash.get": "4.4.2", - "lodash.set": "4.3.2", - "lodash.uniq": "4.5.0", - "octokit-pagination-methods": "1.1.0", - "universal-user-agent": "2.0.3", - "url-template": "2.0.8" + "before-after-hook": "^1.2.0", + "btoa-lite": "^1.0.0", + "lodash.get": "^4.4.2", + "lodash.set": "^4.3.2", + "lodash.uniq": "^4.5.0", + "octokit-pagination-methods": "^1.1.0", + "universal-user-agent": "^2.0.0", + "url-template": "^2.0.8" } }, "@semantic-release/changelog": { @@ -174,10 +174,10 @@ "integrity": "sha512-pDUaBNAuPAqQ+ArHwvR160RG2LbfyIVz9EJXgxH0V547rlx/hCs0Sp7L4Rtzi5Z+d6CHcv9g2ynxplE1xAzp2g==", "dev": true, "requires": { - "@semantic-release/error": "2.2.0", - "aggregate-error": "2.0.0", - "fs-extra": "7.0.1", - "lodash": "4.17.11" + "@semantic-release/error": "^2.1.0", + "aggregate-error": "^2.0.0", + "fs-extra": "^7.0.0", + "lodash": "^4.17.4" } }, "@semantic-release/commit-analyzer": { @@ -186,12 +186,12 @@ "integrity": "sha512-2lb+t6muGenI86mYGpZYOgITx9L3oZYF697tJoqXeQEk0uw0fm+OkkOuDTBA3Oax9ftoNIrCKv9bwgYvxrbM6w==", "dev": true, "requires": { - "conventional-changelog-angular": "5.0.3", - "conventional-commits-filter": "2.0.1", - "conventional-commits-parser": "3.0.1", - "debug": "4.1.1", - "import-from": "2.1.0", - "lodash": "4.17.11" + "conventional-changelog-angular": "^5.0.0", + "conventional-commits-filter": "^2.0.0", + "conventional-commits-parser": "^3.0.0", + "debug": "^4.0.0", + "import-from": "^2.1.0", + "lodash": "^4.17.4" } }, "@semantic-release/error": { @@ -206,16 +206,16 @@ "integrity": "sha512-sA+XoPU6GrV+A4YswO0b5JWL1KbzmyyaqUK6Y2poDkIVPlj+oQdi/stpKz/bKF5z9ChMGP87OVPMeUyXGaNFtw==", "dev": true, "requires": { - "@semantic-release/error": "2.2.0", - "aggregate-error": "2.0.0", - "debug": "4.1.1", - "dir-glob": "2.2.2", - "execa": "1.0.0", - "fs-extra": "7.0.1", - "globby": "9.0.0", - "lodash": "4.17.11", - "micromatch": "3.1.10", - "p-reduce": "1.0.0" + "@semantic-release/error": "^2.1.0", + "aggregate-error": "^2.0.0", + "debug": "^4.0.0", + "dir-glob": "^2.0.0", + "execa": "^1.0.0", + "fs-extra": "^7.0.0", + "globby": "^9.0.0", + "lodash": "^4.17.4", + "micromatch": "^3.1.4", + "p-reduce": "^1.0.0" } }, "@semantic-release/github": { @@ -224,23 +224,23 @@ "integrity": "sha512-z/UwIxKb+EMiJDIy/57MBzJ80ar5H9GJQRyML/ILQ8dlrPwXs7cTyTvC7AesrF7t1mJZtg3ht9Qf9RdtR/LGzw==", "dev": true, "requires": { - "@octokit/rest": "16.15.0", - "@semantic-release/error": "2.2.0", - "aggregate-error": "2.0.0", - "bottleneck": "2.16.2", - "debug": "4.1.1", - "dir-glob": "2.2.2", - "fs-extra": "7.0.1", - "globby": "9.0.0", - "http-proxy-agent": "2.1.0", - "https-proxy-agent": "2.2.1", - "issue-parser": "3.0.1", - "lodash": "4.17.11", - "mime": "2.4.0", - "p-filter": "1.0.0", - "p-retry": "3.0.1", - "parse-github-url": "1.0.2", - "url-join": "4.0.0" + "@octokit/rest": "^16.13.1", + "@semantic-release/error": "^2.2.0", + "aggregate-error": "^2.0.0", + "bottleneck": "^2.0.1", + "debug": "^4.0.0", + "dir-glob": "^2.0.0", + "fs-extra": "^7.0.0", + "globby": "^9.0.0", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "issue-parser": "^3.0.0", + "lodash": "^4.17.4", + "mime": "^2.0.3", + "p-filter": "^1.0.0", + "p-retry": "^3.0.0", + "parse-github-url": "^1.0.1", + "url-join": "^4.0.0" }, "dependencies": { "mime": { @@ -257,17 +257,17 @@ "integrity": "sha512-YRl8VTVwnRTl/sVRvTXs1ncYcuvuGrqPEXYy+lUK1YRLq25hkrhIdv3Ju0u1zGLqVCA8qRlF3NzWl7pULJXVog==", "dev": true, "requires": { - "@semantic-release/error": "2.2.0", - "aggregate-error": "2.0.0", - "execa": "1.0.0", - "fs-extra": "7.0.1", - "lodash": "4.17.11", - "nerf-dart": "1.0.0", - "normalize-url": "4.1.0", + "@semantic-release/error": "^2.2.0", + "aggregate-error": "^2.0.0", + "execa": "^1.0.0", + "fs-extra": "^7.0.0", + "lodash": "^4.17.4", + "nerf-dart": "^1.0.0", + "normalize-url": "^4.0.0", "npm": "6.5.0", - "rc": "1.2.8", - "read-pkg": "4.0.1", - "registry-auth-token": "3.3.2" + "rc": "^1.2.8", + "read-pkg": "^4.0.0", + "registry-auth-token": "^3.3.1" }, "dependencies": { "read-pkg": { @@ -276,9 +276,9 @@ "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", "dev": true, "requires": { - "normalize-package-data": "2.5.0", - "parse-json": "4.0.0", - "pify": "3.0.0" + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" } } } @@ -289,15 +289,15 @@ "integrity": "sha512-pWPouZujddgb6t61t9iA9G3yIfp3TeQ7bPbV1ixYSeP6L7gI1+Du82fY/OHfEwyifpymLUQW0XnIKgKct5IMMw==", "dev": true, "requires": { - "conventional-changelog-angular": "5.0.3", - "conventional-changelog-writer": "4.0.3", - "conventional-commits-filter": "2.0.1", - "conventional-commits-parser": "3.0.1", - "debug": "4.1.1", - "get-stream": "4.1.0", - "import-from": "2.1.0", - "into-stream": "4.0.0", - "lodash": "4.17.11" + "conventional-changelog-angular": "^5.0.0", + "conventional-changelog-writer": "^4.0.0", + "conventional-commits-filter": "^2.0.0", + "conventional-commits-parser": "^3.0.0", + "debug": "^4.0.0", + "get-stream": "^4.0.0", + "import-from": "^2.1.0", + "into-stream": "^4.0.0", + "lodash": "^4.17.4" } }, "@sinonjs/commons": { @@ -315,7 +315,7 @@ "integrity": "sha512-ZAR2bPHOl4Xg6eklUGpsdiIJ4+J1SNag1DHHrG/73Uz/nVwXqjgUtRPLoS+aVyieN9cSbc0E4LsU984tWcDyNg==", "dev": true, "requires": { - "@sinonjs/samsam": "3.1.1" + "@sinonjs/samsam": "^2 || ^3" } }, "@sinonjs/samsam": { @@ -324,26 +324,87 @@ "integrity": "sha512-ILlwvQUwAiaVBzr3qz8oT1moM7AIUHqUc2UmEjQcH9lLe+E+BZPwUMuc9FFojMswRK4r96x5zDTTrowMLw/vuA==", "dev": true, "requires": { - "@sinonjs/commons": "1.3.0", - "array-from": "2.1.1", - "lodash": "4.17.11" + "@sinonjs/commons": "^1.0.2", + "array-from": "^2.1.1", + "lodash": "^4.17.11" } }, + "@types/body-parser": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", + "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/chai": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.7.tgz", + "integrity": "sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA==", + "dev": true + }, + "@types/chai-as-promised": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.0.tgz", + "integrity": "sha512-MFiW54UOSt+f2bRw8J7LgQeIvE/9b4oGvwU7XW30S9QGAiHGnU/fmiOprsyMkdmH2rl8xSPc0/yrQw8juXU6bQ==", + "dev": true, + "requires": { + "@types/chai": "*" + } + }, + "@types/connect": { + "version": "3.4.32", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", + "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/cookiejar": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.1.tgz", + "integrity": "sha512-aRnpPa7ysx3aNW60hTiCtLHlQaIFsXFCgQlpakNgDNVFzbtusSY8PwjAQgRWfSk0ekNoBjO51eQRB6upA9uuyw==", + "dev": true + }, "@types/estree": { "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, + "@types/express": { + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.1.tgz", + "integrity": "sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.1.tgz", + "integrity": "sha512-QgbIMRU1EVRry5cIu1ORCQP4flSYqLM1lS5LYyGWfKnFT3E58f0gKto7BR13clBFVrVZ0G0rbLZ1hUpSkgQQOA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/range-parser": "*" + } + }, "@types/jsdom": { "version": "12.2.2", "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-12.2.2.tgz", "integrity": "sha512-+k4AsH9TXsuvucs6EiMxxPPWiXOGyM48P+jL+IPDYhtJ+L7Cl5xbN3Vig6z8tzvo9Lv7mjLGv54j3D/KExQl7Q==", "dev": true, "requires": { - "@types/node": "11.9.4", - "@types/tough-cookie": "2.3.5", - "parse5": "4.0.0" + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^4.0.0" } }, "@types/json5": { @@ -352,6 +413,12 @@ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, + "@types/mime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", + "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==", + "dev": true + }, "@types/mocha": { "version": "5.2.6", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.6.tgz", @@ -364,6 +431,57 @@ "integrity": "sha512-Zl8dGvAcEmadgs1tmSPcvwzO1YRsz38bVJQvH1RvRqSR9/5n61Q1ktcDL0ht3FXWR+ZpVmXVwN1LuH4Ax23NsA==", "dev": true }, + "@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", + "dev": true + }, + "@types/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/mime": "*" + } + }, + "@types/sinon": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-7.0.6.tgz", + "integrity": "sha512-ldQl2p7kyCXHhr//5sQCu9jWgSiDbYuCD5dUp53r/z8T8jmgKpANpy4vqjbdho9P2ldFaQC/gpW31hch+oQ0IQ==", + "dev": true + }, + "@types/sinon-chai": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.2.tgz", + "integrity": "sha512-5zSs2AslzyPZdOsbm2NRtuSNAI2aTWzNKOHa/GRecKo7a5efYD7qGcPxMZXQDayVXT2Vnd5waXxBvV31eCZqiA==", + "dev": true, + "requires": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "@types/superagent": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-3.8.6.tgz", + "integrity": "sha512-YQjdsk27MLb6uyXjjywGyYeuqavwV3CirHt6btBz00HkKJyowdB8gjjB1zIZxrOybDRqO8FLjTZeEtmtC2hqxA==", + "dev": true, + "requires": { + "@types/cookiejar": "*", + "@types/node": "*" + } + }, + "@types/supertest": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.7.tgz", + "integrity": "sha512-GibTh4OTkal71btYe2fpZP/rVHIPnnUsYphEaoywVHo+mo2a/LhlOFkIm5wdN0H0DA0Hx8x+tKgCYMD9elHu5w==", + "dev": true, + "requires": { + "@types/superagent": "*" + } + }, "@types/tough-cookie": { "version": "2.3.5", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.5.tgz", @@ -377,8 +495,8 @@ "dev": true, "requires": { "@typescript-eslint/parser": "1.3.0", - "requireindex": "1.2.0", - "tsutils": "3.8.0" + "requireindex": "^1.2.0", + "tsutils": "^3.7.0" } }, "@typescript-eslint/parser": { @@ -388,8 +506,8 @@ "dev": true, "requires": { "@typescript-eslint/typescript-estree": "1.3.0", - "eslint-scope": "4.0.0", - "eslint-visitor-keys": "1.0.0" + "eslint-scope": "^4.0.0", + "eslint-visitor-keys": "^1.0.0" } }, "@typescript-eslint/typescript-estree": { @@ -416,8 +534,8 @@ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "requires": { - "jsonparse": "1.3.1", - "through": "2.3.8" + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" } }, "abab": { @@ -432,7 +550,7 @@ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "mime-types": "2.1.22", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, @@ -448,8 +566,8 @@ "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==", "dev": true, "requires": { - "acorn": "6.1.0", - "acorn-walk": "6.1.1" + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" } }, "acorn-jsx": { @@ -470,7 +588,7 @@ "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", "dev": true, "requires": { - "es6-promisify": "5.0.0" + "es6-promisify": "^5.0.0" } }, "aggregate-error": { @@ -479,8 +597,8 @@ "integrity": "sha512-xA1VQPApQdDehIIpS3gBFkMGDRb9pDYwZPVUOoX8A0lU3GB0mjiACqsa9ByBurU53erhjamf5I4VNRitCfXhjg==", "dev": true, "requires": { - "clean-stack": "2.0.0", - "indent-string": "3.2.0" + "clean-stack": "^2.0.0", + "indent-string": "^3.0.0" } }, "ajv": { @@ -489,10 +607,10 @@ "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", "dev": true, "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ansi-escapes": { @@ -513,7 +631,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.3" + "color-convert": "^1.9.0" } }, "ansicolors": { @@ -534,7 +652,7 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "argv-formatter": { @@ -597,7 +715,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -624,7 +742,7 @@ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "~2.1.0" } }, "assert-plus": { @@ -657,7 +775,7 @@ "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", "dev": true, "requires": { - "lodash": "4.17.11" + "lodash": "^4.17.11" } }, "async-limiter": { @@ -702,13 +820,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "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": { @@ -717,7 +835,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -726,7 +844,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -735,7 +853,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -744,9 +862,9 @@ "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" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -757,7 +875,7 @@ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "before-after-hook": { @@ -773,15 +891,15 @@ "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", + "depd": "~1.1.2", + "http-errors": "~1.6.3", "iconv-lite": "0.4.23", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.5.2", "raw-body": "2.3.3", - "type-is": "1.6.16" + "type-is": "~1.6.16" }, "dependencies": { "debug": { @@ -799,7 +917,7 @@ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "ms": { @@ -822,7 +940,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -832,16 +950,16 @@ "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.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "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": { @@ -850,7 +968,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -891,15 +1009,15 @@ "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" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "call-me-maybe": { @@ -914,7 +1032,7 @@ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "dev": true, "requires": { - "callsites": "2.0.0" + "callsites": "^2.0.0" }, "dependencies": { "callsites": { @@ -931,7 +1049,7 @@ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", "dev": true, "requires": { - "caller-callsite": "2.0.0" + "caller-callsite": "^2.0.0" } }, "callsites": { @@ -952,9 +1070,9 @@ "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", "dev": true, "requires": { - "camelcase": "4.1.0", - "map-obj": "2.0.0", - "quick-lru": "1.1.0" + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" } }, "cardinal": { @@ -963,8 +1081,8 @@ "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", "dev": true, "requires": { - "ansicolors": "0.3.2", - "redeyed": "2.1.1" + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" } }, "caseless": { @@ -979,12 +1097,12 @@ "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", "dev": true, "requires": { - "assertion-error": "1.1.0", - "check-error": "1.0.2", - "deep-eql": "3.0.1", - "get-func-name": "2.0.0", - "pathval": "1.1.0", - "type-detect": "4.0.8" + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" } }, "chai-as-promised": { @@ -993,7 +1111,7 @@ "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "dev": true, "requires": { - "check-error": "1.0.2" + "check-error": "^1.0.2" } }, "chalk": { @@ -1002,9 +1120,9 @@ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chardet": { @@ -1025,10 +1143,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -1037,7 +1155,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -1054,7 +1172,7 @@ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "2.0.0" + "restore-cursor": "^2.0.0" } }, "cli-table": { @@ -1078,9 +1196,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, "code-point-at": { @@ -1095,8 +1213,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-convert": { @@ -1126,7 +1244,7 @@ "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { @@ -1141,8 +1259,8 @@ "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=", "dev": true, "requires": { - "array-ify": "1.0.0", - "dot-prop": "3.0.0" + "array-ify": "^1.0.0", + "dot-prop": "^3.0.0" } }, "component-emitter": { @@ -1181,8 +1299,8 @@ "integrity": "sha512-YD1xzH7r9yXQte/HF9JBuEDfvjxxwDGGwZU1+ndanbY0oFgA+Po1T9JDSpPLdP0pZT6MhCAsdvFKC4TJ4MTJTA==", "dev": true, "requires": { - "compare-func": "1.3.2", - "q": "1.5.1" + "compare-func": "^1.3.1", + "q": "^1.5.1" } }, "conventional-changelog-writer": { @@ -1191,16 +1309,16 @@ "integrity": "sha512-bIlpSiQtQZ1+nDVHEEh798Erj2jhN/wEjyw9sfxY9es6h7pREE5BNJjfv0hXGH/FTrAsEpHUq4xzK99eePpwuA==", "dev": true, "requires": { - "compare-func": "1.3.2", - "conventional-commits-filter": "2.0.1", - "dateformat": "3.0.3", - "handlebars": "4.1.0", - "json-stringify-safe": "5.0.1", - "lodash": "4.17.11", - "meow": "4.0.1", - "semver": "5.6.0", - "split": "1.0.1", - "through2": "2.0.5" + "compare-func": "^1.3.1", + "conventional-commits-filter": "^2.0.1", + "dateformat": "^3.0.0", + "handlebars": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.2.1", + "meow": "^4.0.0", + "semver": "^5.5.0", + "split": "^1.0.0", + "through2": "^2.0.0" } }, "conventional-commits-filter": { @@ -1209,8 +1327,8 @@ "integrity": "sha512-92OU8pz/977udhBjgPEbg3sbYzIxMDFTlQT97w7KdhR9igNqdJvy8smmedAAgn4tPiqseFloKkrVfbXCVd+E7A==", "dev": true, "requires": { - "is-subset": "0.1.1", - "modify-values": "1.0.1" + "is-subset": "^0.1.1", + "modify-values": "^1.0.0" } }, "conventional-commits-parser": { @@ -1219,13 +1337,13 @@ "integrity": "sha512-P6U5UOvDeidUJ8ebHVDIoXzI7gMlQ1OF/id6oUvp8cnZvOXMt1n8nYl74Ey9YMn0uVQtxmCtjPQawpsssBWtGg==", "dev": true, "requires": { - "JSONStream": "1.3.5", - "is-text-path": "1.0.1", - "lodash": "4.17.11", - "meow": "4.0.1", - "split2": "2.2.0", - "through2": "2.0.5", - "trim-off-newlines": "1.0.1" + "JSONStream": "^1.0.4", + "is-text-path": "^1.0.0", + "lodash": "^4.2.1", + "meow": "^4.0.0", + "split2": "^2.0.0", + "through2": "^2.0.0", + "trim-off-newlines": "^1.0.0" } }, "cookie": { @@ -1264,10 +1382,10 @@ "integrity": "sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA==", "dev": true, "requires": { - "import-fresh": "2.0.0", - "is-directory": "0.3.1", - "js-yaml": "3.12.1", - "parse-json": "4.0.0" + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0" }, "dependencies": { "import-fresh": { @@ -1276,8 +1394,8 @@ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dev": true, "requires": { - "caller-path": "2.0.0", - "resolve-from": "3.0.0" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" } } } @@ -1288,12 +1406,12 @@ "integrity": "sha512-Tv0LKe/MkBOilH2v7WBiTBdudg2ChfGbdXafc/s330djpF3zKOmuehTeRwjXWc7pzfj9FrDUTA7tEx6Div8NFw==", "dev": true, "requires": { - "growl": "1.10.5", - "js-yaml": "3.12.1", - "lcov-parse": "0.0.10", - "log-driver": "1.2.7", - "minimist": "1.2.0", - "request": "2.88.0" + "growl": "~> 1.10.0", + "js-yaml": "^3.11.0", + "lcov-parse": "^0.0.10", + "log-driver": "^1.2.7", + "minimist": "^1.2.0", + "request": "^2.85.0" } }, "cross-env": { @@ -1302,8 +1420,8 @@ "integrity": "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==", "dev": true, "requires": { - "cross-spawn": "6.0.5", - "is-windows": "1.0.2" + "cross-spawn": "^6.0.5", + "is-windows": "^1.0.0" } }, "cross-spawn": { @@ -1312,11 +1430,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.6.0", - "shebang-command": "1.2.0", - "which": "1.3.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "cssom": { @@ -1331,7 +1449,7 @@ "integrity": "sha512-7DYm8qe+gPx/h77QlCyFmX80+fGaE/6A/Ekl0zaszYOubvySO2saYFdQ78P29D0UsULxFKCetDGNaNRUdSF+2A==", "dev": true, "requires": { - "cssom": "0.3.6" + "cssom": "0.3.x" } }, "currently-unhandled": { @@ -1340,7 +1458,7 @@ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "array-find-index": "1.0.2" + "array-find-index": "^1.0.1" } }, "dashdash": { @@ -1349,7 +1467,7 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "data-urls": { @@ -1358,9 +1476,9 @@ "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", "dev": true, "requires": { - "abab": "2.0.0", - "whatwg-mimetype": "2.3.0", - "whatwg-url": "7.0.0" + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" } }, "dateformat": { @@ -1375,7 +1493,7 @@ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "^2.1.1" } }, "decamelize": { @@ -1390,8 +1508,8 @@ "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, "requires": { - "decamelize": "1.2.0", - "map-obj": "1.0.1" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" }, "dependencies": { "map-obj": { @@ -1414,7 +1532,7 @@ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { - "type-detect": "4.0.8" + "type-detect": "^4.0.0" } }, "deep-extend": { @@ -1441,8 +1559,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -1451,7 +1569,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1460,7 +1578,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1469,9 +1587,9 @@ "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" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -1506,7 +1624,7 @@ "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", "dev": true, "requires": { - "path-type": "3.0.0" + "path-type": "^3.0.0" } }, "doctrine": { @@ -1515,7 +1633,7 @@ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { - "esutils": "2.0.2" + "esutils": "^2.0.2" } }, "domexception": { @@ -1524,7 +1642,7 @@ "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", "dev": true, "requires": { - "webidl-conversions": "4.0.2" + "webidl-conversions": "^4.0.2" } }, "dot-prop": { @@ -1533,7 +1651,7 @@ "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", "dev": true, "requires": { - "is-obj": "1.0.1" + "is-obj": "^1.0.0" } }, "duplexer2": { @@ -1542,7 +1660,7 @@ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { - "readable-stream": "2.3.6" + "readable-stream": "^2.0.2" } }, "ecc-jsbn": { @@ -1551,8 +1669,8 @@ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "requires": { - "jsbn": "0.1.1", - "safer-buffer": "2.1.2" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, "ee-first": { @@ -1579,7 +1697,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "env-ci": { @@ -1588,8 +1706,8 @@ "integrity": "sha512-TFjNiDlXrL8/pfHswdvJGEZzJcq3aBPb8Eka83hlGLwuNw9F9BC9S9ETlkfkItLRT9k5JgpGgeP+rL6/3cEbcw==", "dev": true, "requires": { - "execa": "1.0.0", - "java-properties": "0.2.10" + "execa": "^1.0.0", + "java-properties": "^0.2.9" } }, "error-ex": { @@ -1598,7 +1716,7 @@ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "es6-promise": { @@ -1613,7 +1731,7 @@ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { - "es6-promise": "4.2.6" + "es6-promise": "^4.0.3" } }, "escape-html": { @@ -1634,11 +1752,11 @@ "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", "dev": true, "requires": { - "esprima": "3.1.3", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.6.1" + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" }, "dependencies": { "esprima": { @@ -1662,42 +1780,42 @@ "integrity": "sha512-jrOhiYyENRrRnWlMYANlGZTqb89r2FuRT+615AabBoajhNjeh9ywDNlh2LU9vTqf0WYN+L3xdXuIi7xuj/tK9w==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0", - "ajv": "6.9.1", - "chalk": "2.4.2", - "cross-spawn": "6.0.5", - "debug": "4.1.1", - "doctrine": "3.0.0", - "eslint-scope": "4.0.0", - "eslint-utils": "1.3.1", - "eslint-visitor-keys": "1.0.0", - "espree": "5.0.1", - "esquery": "1.0.1", - "esutils": "2.0.2", - "file-entry-cache": "5.0.1", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.3", - "globals": "11.11.0", - "ignore": "4.0.6", - "import-fresh": "3.0.0", - "imurmurhash": "0.1.4", - "inquirer": "6.2.2", - "js-yaml": "3.12.1", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.11", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "progress": "2.0.3", - "regexpp": "2.0.1", - "semver": "5.6.0", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", - "table": "5.2.3", - "text-table": "0.2.0" + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.0", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.12.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" } }, "eslint-config-standard": { @@ -1712,8 +1830,8 @@ "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", "dev": true, "requires": { - "debug": "2.6.9", - "resolve": "1.10.0" + "debug": "^2.6.9", + "resolve": "^1.5.0" }, "dependencies": { "debug": { @@ -1739,8 +1857,8 @@ "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", "dev": true, "requires": { - "debug": "2.6.9", - "pkg-dir": "2.0.0" + "debug": "^2.6.8", + "pkg-dir": "^2.0.0" }, "dependencies": { "debug": { @@ -1766,8 +1884,8 @@ "integrity": "sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==", "dev": true, "requires": { - "eslint-utils": "1.3.1", - "regexpp": "2.0.1" + "eslint-utils": "^1.3.0", + "regexpp": "^2.0.1" } }, "eslint-plugin-import": { @@ -1776,16 +1894,16 @@ "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", "dev": true, "requires": { - "contains-path": "0.1.0", - "debug": "2.6.9", + "contains-path": "^0.1.0", + "debug": "^2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.3.2", - "eslint-module-utils": "2.3.0", - "has": "1.0.3", - "lodash": "4.17.11", - "minimatch": "3.0.4", - "read-pkg-up": "2.0.0", - "resolve": "1.10.0" + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.3.0", + "has": "^1.0.3", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "read-pkg-up": "^2.0.0", + "resolve": "^1.9.0" }, "dependencies": { "debug": { @@ -1803,8 +1921,8 @@ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } }, "load-json-file": { @@ -1813,10 +1931,10 @@ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { - "graceful-fs": "4.1.15", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" } }, "ms": { @@ -1831,7 +1949,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.2" + "error-ex": "^1.2.0" } }, "path-type": { @@ -1840,7 +1958,7 @@ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "2.3.0" + "pify": "^2.0.0" } }, "pify": { @@ -1855,9 +1973,9 @@ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.5.0", - "path-type": "2.0.0" + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" } }, "read-pkg-up": { @@ -1866,8 +1984,8 @@ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } } } @@ -1878,7 +1996,7 @@ "integrity": "sha512-3uwlJVLijjEmBeNyH60nzqgA1gacUWLUmcKV8PIGNvj1kwP/CTgAWQHn2ayyJVwziX+KETkr9opNwT1qD/RZ5A==", "dev": true, "requires": { - "ramda": "0.26.1" + "ramda": "^0.26.1" } }, "eslint-plugin-node": { @@ -1887,12 +2005,12 @@ "integrity": "sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==", "dev": true, "requires": { - "eslint-plugin-es": "1.4.0", - "eslint-utils": "1.3.1", - "ignore": "5.0.5", - "minimatch": "3.0.4", - "resolve": "1.10.0", - "semver": "5.6.0" + "eslint-plugin-es": "^1.3.1", + "eslint-utils": "^1.3.1", + "ignore": "^5.0.2", + "minimatch": "^3.0.4", + "resolve": "^1.8.1", + "semver": "^5.5.0" }, "dependencies": { "ignore": { @@ -1921,8 +2039,8 @@ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "eslint-utils": { @@ -1943,9 +2061,9 @@ "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", "dev": true, "requires": { - "acorn": "6.1.0", - "acorn-jsx": "5.0.1", - "eslint-visitor-keys": "1.0.0" + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" } }, "esprima": { @@ -1960,7 +2078,7 @@ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.0.0" } }, "esrecurse": { @@ -1969,7 +2087,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -2002,13 +2120,13 @@ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "cross-spawn": "6.0.5", - "get-stream": "4.1.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "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": { @@ -2017,13 +2135,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "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": { @@ -2041,7 +2159,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -2050,7 +2168,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "ms": { @@ -2067,7 +2185,7 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "2.2.4" + "fill-range": "^2.1.0" }, "dependencies": { "fill-range": { @@ -2076,11 +2194,11 @@ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "3.1.1", - "repeat-element": "1.1.3", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "is-number": { @@ -2089,7 +2207,7 @@ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "isobject": { @@ -2107,7 +2225,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2118,36 +2236,36 @@ "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.3", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.4", + "proxy-addr": "~2.0.4", "qs": "6.5.2", - "range-parser": "1.2.0", + "range-parser": "~1.2.0", "safe-buffer": "5.1.2", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", + "statuses": "~1.4.0", + "type-is": "~1.6.16", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { "debug": { @@ -2179,8 +2297,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -2189,7 +2307,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -2200,9 +2318,9 @@ "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", "dev": true, "requires": { - "chardet": "0.7.0", - "iconv-lite": "0.4.24", - "tmp": "0.0.33" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" } }, "extglob": { @@ -2211,14 +2329,14 @@ "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.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "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": { @@ -2227,7 +2345,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -2236,7 +2354,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -2245,7 +2363,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -2254,7 +2372,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -2263,9 +2381,9 @@ "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" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -2288,12 +2406,12 @@ "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==", "dev": true, "requires": { - "@mrmlnc/readdir-enhanced": "2.2.1", - "@nodelib/fs.stat": "1.1.3", - "glob-parent": "3.1.0", - "is-glob": "4.0.0", - "merge2": "1.2.3", - "micromatch": "3.1.10" + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" } }, "fast-json-stable-stringify": { @@ -2314,7 +2432,7 @@ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.5" } }, "file-entry-cache": { @@ -2323,7 +2441,7 @@ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, "requires": { - "flat-cache": "2.0.1" + "flat-cache": "^2.0.1" } }, "filename-regex": { @@ -2338,10 +2456,10 @@ "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.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -2350,7 +2468,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -2362,12 +2480,12 @@ "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" }, "dependencies": { "debug": { @@ -2393,7 +2511,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "find-versions": { @@ -2402,8 +2520,8 @@ "integrity": "sha512-IUvtItVFNmTtKoB0PRfbkR0zR9XMG5rWNO3qI1S8L0zdv+v2gqzM0pAunloxqbqAfT8w7bg8n/5gHzTXte8H5A==", "dev": true, "requires": { - "array-uniq": "2.0.0", - "semver-regex": "2.0.0" + "array-uniq": "^2.0.0", + "semver-regex": "^2.0.0" }, "dependencies": { "array-uniq": { @@ -2420,7 +2538,7 @@ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "dev": true, "requires": { - "flatted": "2.0.0", + "flatted": "^2.0.0", "rimraf": "2.6.3", "write": "1.0.3" } @@ -2443,7 +2561,7 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "forever-agent": { @@ -2458,9 +2576,9 @@ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.7", - "mime-types": "2.1.22" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" } }, "formidable": { @@ -2481,7 +2599,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fresh": { @@ -2496,8 +2614,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, "fs-extra": { @@ -2506,9 +2624,9 @@ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { - "graceful-fs": "4.1.15", - "jsonfile": "4.0.0", - "universalify": "0.1.2" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "fs.realpath": { @@ -2547,7 +2665,7 @@ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { - "pump": "3.0.0" + "pump": "^3.0.0" } }, "get-value": { @@ -2562,7 +2680,7 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "git-log-parser": { @@ -2571,12 +2689,12 @@ "integrity": "sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo=", "dev": true, "requires": { - "argv-formatter": "1.0.0", - "spawn-error-forwarder": "1.0.0", - "split2": "1.0.0", - "stream-combiner2": "1.1.1", - "through2": "2.0.5", - "traverse": "0.6.6" + "argv-formatter": "~1.0.0", + "spawn-error-forwarder": "~1.0.0", + "split2": "~1.0.0", + "stream-combiner2": "~1.1.1", + "through2": "~2.0.0", + "traverse": "~0.6.6" }, "dependencies": { "split2": { @@ -2585,7 +2703,7 @@ "integrity": "sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ=", "dev": true, "requires": { - "through2": "2.0.5" + "through2": "~2.0.0" } } } @@ -2596,12 +2714,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-base": { @@ -2610,8 +2728,8 @@ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" }, "dependencies": { "glob-parent": { @@ -2620,7 +2738,7 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "is-extglob": { @@ -2635,7 +2753,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } } } @@ -2646,8 +2764,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -2656,7 +2774,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -2679,13 +2797,13 @@ "integrity": "sha512-q0qiO/p1w/yJ0hk8V9x1UXlgsXUxlGd0AHUOXZVXBO6aznDtpx7M8D1kBrCAItoPm+4l8r6ATXV1JpjY2SBQOw==", "dev": true, "requires": { - "array-union": "1.0.2", - "dir-glob": "2.2.2", - "fast-glob": "2.2.6", - "glob": "7.1.3", - "ignore": "4.0.6", - "pify": "4.0.1", - "slash": "2.0.0" + "array-union": "^1.0.2", + "dir-glob": "^2.2.1", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" }, "dependencies": { "pify": { @@ -2714,10 +2832,10 @@ "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==", "dev": true, "requires": { - "async": "2.6.2", - "optimist": "0.6.1", - "source-map": "0.6.1", - "uglify-js": "3.4.9" + "async": "^2.5.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" }, "dependencies": { "source-map": { @@ -2740,8 +2858,8 @@ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "dev": true, "requires": { - "ajv": "6.9.1", - "har-schema": "2.0.0" + "ajv": "^6.5.5", + "har-schema": "^2.0.0" } }, "has": { @@ -2750,7 +2868,7 @@ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.1.1" } }, "has-flag": { @@ -2765,9 +2883,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -2776,8 +2894,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -2786,7 +2904,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2815,7 +2933,7 @@ "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", "dev": true, "requires": { - "whatwg-encoding": "1.0.5" + "whatwg-encoding": "^1.0.1" } }, "http-errors": { @@ -2824,10 +2942,10 @@ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "1.1.2", + "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": "1.4.0" + "statuses": ">= 1.4.0 < 2" } }, "http-proxy-agent": { @@ -2836,7 +2954,7 @@ "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", "dev": true, "requires": { - "agent-base": "4.2.1", + "agent-base": "4", "debug": "3.1.0" }, "dependencies": { @@ -2863,9 +2981,9 @@ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.16.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "https-proxy-agent": { @@ -2874,8 +2992,8 @@ "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", "dev": true, "requires": { - "agent-base": "4.2.1", - "debug": "3.2.6" + "agent-base": "^4.1.0", + "debug": "^3.1.0" }, "dependencies": { "debug": { @@ -2884,7 +3002,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "^2.1.1" } } } @@ -2895,7 +3013,7 @@ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "ignore": { @@ -2910,8 +3028,8 @@ "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", "dev": true, "requires": { - "parent-module": "1.0.0", - "resolve-from": "4.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "dependencies": { "resolve-from": { @@ -2928,7 +3046,7 @@ "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" } }, "imurmurhash": { @@ -2949,8 +3067,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2971,19 +3089,19 @@ "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", "dev": true, "requires": { - "ansi-escapes": "3.2.0", - "chalk": "2.4.2", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "3.0.3", - "figures": "2.0.0", - "lodash": "4.17.11", + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.11", "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rxjs": "6.4.0", - "string-width": "2.1.1", - "strip-ansi": "5.0.0", - "through": "2.3.8" + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.0.0", + "through": "^2.3.6" }, "dependencies": { "ansi-regex": { @@ -2998,7 +3116,7 @@ "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", "dev": true, "requires": { - "ansi-regex": "4.0.0" + "ansi-regex": "^4.0.0" } } } @@ -3009,8 +3127,8 @@ "integrity": "sha512-i29KNyE5r0Y/UQzcQ0IbZO1MYJ53Jn0EcFRZPj5FzWKYH17kDFEOwuA+3jroymOI06SW1dEDnly9A1CAreC5dg==", "dev": true, "requires": { - "from2": "2.3.0", - "p-is-promise": "2.0.0" + "from2": "^2.1.1", + "p-is-promise": "^2.0.0" } }, "invert-kv": { @@ -3031,7 +3149,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -3040,7 +3158,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3063,7 +3181,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -3072,7 +3190,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3083,9 +3201,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -3114,7 +3232,7 @@ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -3141,7 +3259,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-number": { @@ -3150,7 +3268,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -3159,7 +3277,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3182,7 +3300,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-posix-bracket": { @@ -3221,7 +3339,7 @@ "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", "dev": true, "requires": { - "text-extensions": "1.9.0" + "text-extensions": "^1.0.0" } }, "is-typedarray": { @@ -3266,11 +3384,11 @@ "integrity": "sha512-5wdT3EE8Kq38x/hJD8QZCJ9scGoOZ5QnzwXyClkviSWTS+xOCE6hJ0qco3H5n5jCsFqpbofZCcMWqlXJzF72VQ==", "dev": true, "requires": { - "lodash.capitalize": "4.2.1", - "lodash.escaperegexp": "4.1.2", - "lodash.isplainobject": "4.0.6", - "lodash.isstring": "4.0.1", - "lodash.uniqby": "4.7.0" + "lodash.capitalize": "^4.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.uniqby": "^4.7.0" } }, "istanbul-lib-coverage": { @@ -3285,13 +3403,13 @@ "integrity": "sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA==", "dev": true, "requires": { - "@babel/generator": "7.3.3", - "@babel/parser": "7.3.3", - "@babel/template": "7.2.2", - "@babel/traverse": "7.2.3", - "@babel/types": "7.3.3", - "istanbul-lib-coverage": "2.0.3", - "semver": "5.6.0" + "@babel/generator": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "istanbul-lib-coverage": "^2.0.3", + "semver": "^5.5.0" } }, "java-properties": { @@ -3306,8 +3424,8 @@ "integrity": "sha512-s64/OThpfQvoCeHG963MiEZOAAxu8kHsaL/rCMF7lpdzo7vgF0CtPml9hfguOMgykgH/eOm4jFP4ibfHLruytg==", "dev": true, "requires": { - "merge-stream": "1.0.1", - "supports-color": "6.1.0" + "merge-stream": "^1.0.1", + "supports-color": "^6.1.0" }, "dependencies": { "supports-color": { @@ -3316,7 +3434,7 @@ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -3333,8 +3451,8 @@ "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsbn": { @@ -3349,32 +3467,32 @@ "integrity": "sha512-cG1NtMWO9hWpqRNRR3dSvEQa8bFI6iLlqU2x4kwX51FQjp0qus8T9aBaAO6iGp3DeBrhdwuKxckknohkmfvsFw==", "dev": true, "requires": { - "abab": "2.0.0", - "acorn": "6.1.0", - "acorn-globals": "4.3.0", - "array-equal": "1.0.0", - "cssom": "0.3.6", - "cssstyle": "1.2.1", - "data-urls": "1.1.0", - "domexception": "1.0.1", - "escodegen": "1.11.0", - "html-encoding-sniffer": "1.0.2", - "nwsapi": "2.1.0", + "abab": "^2.0.0", + "acorn": "^6.0.4", + "acorn-globals": "^4.3.0", + "array-equal": "^1.0.0", + "cssom": "^0.3.4", + "cssstyle": "^1.1.1", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.0", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.0.9", "parse5": "5.1.0", - "pn": "1.1.0", - "request": "2.88.0", - "request-promise-native": "1.0.7", - "saxes": "3.1.6", - "symbol-tree": "3.2.2", - "tough-cookie": "2.5.0", - "w3c-hr-time": "1.0.1", - "w3c-xmlserializer": "1.0.1", - "webidl-conversions": "4.0.2", - "whatwg-encoding": "1.0.5", - "whatwg-mimetype": "2.3.0", - "whatwg-url": "7.0.0", - "ws": "6.1.4", - "xml-name-validator": "3.0.0" + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.5", + "saxes": "^3.1.5", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.5.0", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^6.1.2", + "xml-name-validator": "^3.0.0" }, "dependencies": { "parse5": { @@ -3389,8 +3507,8 @@ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "requires": { - "psl": "1.1.31", - "punycode": "2.1.1" + "psl": "^1.1.28", + "punycode": "^2.1.1" } } } @@ -3437,7 +3555,7 @@ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "minimist": "1.2.0" + "minimist": "^1.2.0" } }, "jsonfile": { @@ -3446,7 +3564,7 @@ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "graceful-fs": "4.1.15" + "graceful-fs": "^4.1.6" } }, "jsonparse": { @@ -3485,7 +3603,7 @@ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "invert-kv": "2.0.0" + "invert-kv": "^2.0.0" } }, "lcov-parse": { @@ -3500,8 +3618,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "load-json-file": { @@ -3510,10 +3628,10 @@ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { - "graceful-fs": "4.1.15", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, "locate-path": { @@ -3522,8 +3640,8 @@ "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": { @@ -3616,8 +3734,8 @@ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "macos-release": { @@ -3638,7 +3756,7 @@ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "p-defer": "1.0.0" + "p-defer": "^1.0.0" } }, "map-cache": { @@ -3659,7 +3777,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "marked": { @@ -3674,12 +3792,12 @@ "integrity": "sha512-Yr1yVS0BbDG55vx7be1D0mdv+jGs9AW563o/Tt/7FTsId2J0yqhrTeXAqq/Q0DyyXltIn6CSxzesQuFqXgafjQ==", "dev": true, "requires": { - "ansi-escapes": "3.2.0", - "cardinal": "2.1.1", - "chalk": "2.4.2", - "cli-table": "0.3.1", - "node-emoji": "1.10.0", - "supports-hyperlinks": "1.0.1" + "ansi-escapes": "^3.1.0", + "cardinal": "^2.1.1", + "chalk": "^2.4.1", + "cli-table": "^0.3.1", + "node-emoji": "^1.4.1", + "supports-hyperlinks": "^1.0.1" } }, "math-random": { @@ -3700,9 +3818,9 @@ "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", "dev": true, "requires": { - "map-age-cleaner": "0.1.3", - "mimic-fn": "1.2.0", - "p-is-promise": "2.0.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^2.0.0" } }, "meow": { @@ -3711,15 +3829,15 @@ "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", "dev": true, "requires": { - "camelcase-keys": "4.2.0", - "decamelize-keys": "1.1.0", - "loud-rejection": "1.6.0", - "minimist": "1.2.0", - "minimist-options": "3.0.2", - "normalize-package-data": "2.5.0", - "read-pkg-up": "3.0.0", - "redent": "2.0.0", - "trim-newlines": "2.0.0" + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" } }, "merge-descriptors": { @@ -3734,7 +3852,7 @@ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", "dev": true, "requires": { - "readable-stream": "2.3.6" + "readable-stream": "^2.0.1" } }, "merge2": { @@ -3755,19 +3873,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "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.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "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" } }, "mime": { @@ -3788,7 +3906,7 @@ "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", "dev": true, "requires": { - "mime-db": "1.38.0" + "mime-db": "~1.38.0" } }, "mimic-fn": { @@ -3803,7 +3921,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3818,8 +3936,8 @@ "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", "dev": true, "requires": { - "arrify": "1.0.1", - "is-plain-obj": "1.1.0" + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" } }, "mixin-deep": { @@ -3828,8 +3946,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -3838,7 +3956,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -3900,12 +4018,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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" } }, "ms": { @@ -3920,17 +4038,11 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } }, - "mock-fs": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.8.0.tgz", - "integrity": "sha512-Gwj4KnJOW15YeTJKO5frFd/WDO5Mc0zxXqL9oHx3+e9rBqW8EVARqQHSaIXznUdljrD6pvbNGW2ZGXKPEfYJfw==", - "dev": true - }, "modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", @@ -3955,17 +4067,17 @@ "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.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "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": { @@ -3998,11 +4110,11 @@ "integrity": "sha512-kGASVhuL4tlAV0tvA34yJYZIVihrUt/5bDwpp4tTluigxUr2bBlJeDXmivb6NuEdFkqvdv/Ybb9dm16PSKUhtw==", "dev": true, "requires": { - "@sinonjs/formatio": "3.1.0", - "just-extend": "4.0.2", - "lolex": "2.7.5", - "path-to-regexp": "1.7.0", - "text-encoding": "0.6.4" + "@sinonjs/formatio": "^3.1.0", + "just-extend": "^4.0.2", + "lolex": "^2.3.2", + "path-to-regexp": "^1.7.0", + "text-encoding": "^0.6.4" }, "dependencies": { "isarray": { @@ -4034,7 +4146,7 @@ "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", "dev": true, "requires": { - "lodash.toarray": "4.4.0" + "lodash.toarray": "^4.4.0" } }, "node-fetch": { @@ -4049,10 +4161,10 @@ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { - "hosted-git-info": "2.7.1", - "resolve": "1.10.0", - "semver": "5.6.0", - "validate-npm-package-license": "3.0.4" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -4061,7 +4173,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "normalize-url": { @@ -4076,124 +4188,124 @@ "integrity": "sha512-SPq8zG2Kto+Xrq55E97O14Jla13PmQT5kSnvwBj88BmJZ5Nvw++OmlWfhjkB67pcgP5UEXljEtnGFKZtOgt6MQ==", "dev": true, "requires": { - "JSONStream": "1.3.4", - "abbrev": "1.1.1", - "ansicolors": "0.3.2", - "ansistyles": "0.1.3", - "aproba": "1.2.0", - "archy": "1.0.0", - "bin-links": "1.1.2", - "bluebird": "3.5.3", - "byte-size": "4.0.3", - "cacache": "11.2.0", - "call-limit": "1.1.0", - "chownr": "1.0.1", - "ci-info": "1.6.0", - "cli-columns": "3.1.2", - "cli-table3": "0.5.0", - "cmd-shim": "2.0.2", - "columnify": "1.5.4", - "config-chain": "1.1.12", - "debuglog": "1.0.1", - "detect-indent": "5.0.0", - "detect-newline": "2.1.0", - "dezalgo": "1.0.3", - "editor": "1.0.0", - "figgy-pudding": "3.5.1", - "find-npm-prefix": "1.0.2", - "fs-vacuum": "1.2.10", - "fs-write-stream-atomic": "1.0.10", - "gentle-fs": "2.0.1", - "glob": "7.1.3", - "graceful-fs": "4.1.15", - "has-unicode": "2.0.1", - "hosted-git-info": "2.7.1", - "iferr": "1.0.2", - "imurmurhash": "0.1.4", - "inflight": "1.0.6", - "inherits": "2.0.3", - "ini": "1.3.5", - "init-package-json": "1.10.3", - "is-cidr": "2.0.6", - "json-parse-better-errors": "1.0.2", - "lazy-property": "1.0.0", - "libcipm": "2.0.2", - "libnpmhook": "4.0.1", - "libnpx": "10.2.0", - "lock-verify": "2.0.2", - "lockfile": "1.0.4", - "lodash._baseindexof": "3.1.0", - "lodash._baseuniq": "4.6.0", - "lodash._bindcallback": "3.0.1", - "lodash._cacheindexof": "3.0.2", - "lodash._createcache": "3.1.2", - "lodash._getnative": "3.9.1", - "lodash.clonedeep": "4.5.0", - "lodash.restparam": "3.6.1", - "lodash.union": "4.6.0", - "lodash.uniq": "4.5.0", - "lodash.without": "4.4.0", - "lru-cache": "4.1.3", - "meant": "1.0.1", - "mississippi": "3.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "node-gyp": "3.8.0", - "nopt": "4.0.1", - "normalize-package-data": "2.4.0", - "npm-audit-report": "1.3.1", - "npm-cache-filename": "1.0.2", - "npm-install-checks": "3.0.0", - "npm-lifecycle": "2.1.0", - "npm-package-arg": "6.1.0", - "npm-packlist": "1.1.12", - "npm-pick-manifest": "2.1.0", - "npm-profile": "3.0.2", - "npm-registry-client": "8.6.0", - "npm-registry-fetch": "1.1.0", - "npm-user-validate": "1.0.0", - "npmlog": "4.1.2", - "once": "1.4.0", - "opener": "1.5.1", - "osenv": "0.1.5", - "pacote": "8.1.6", - "path-is-inside": "1.0.2", - "promise-inflight": "1.0.1", - "qrcode-terminal": "0.12.0", - "query-string": "6.1.0", - "qw": "1.0.1", - "read": "1.0.7", - "read-cmd-shim": "1.0.1", - "read-installed": "4.0.3", - "read-package-json": "2.0.13", - "read-package-tree": "5.2.1", - "readable-stream": "2.3.6", - "readdir-scoped-modules": "1.0.2", - "request": "2.88.0", - "retry": "0.12.0", - "rimraf": "2.6.2", - "safe-buffer": "5.1.2", - "semver": "5.5.1", - "sha": "2.0.1", - "slide": "1.1.6", - "sorted-object": "2.0.1", - "sorted-union-stream": "2.1.3", - "ssri": "6.0.1", - "stringify-package": "1.0.0", - "tar": "4.4.8", - "text-table": "0.2.0", - "tiny-relative-date": "1.3.0", + "JSONStream": "^1.3.4", + "abbrev": "~1.1.1", + "ansicolors": "~0.3.2", + "ansistyles": "~0.1.3", + "aproba": "~1.2.0", + "archy": "~1.0.0", + "bin-links": "^1.1.2", + "bluebird": "^3.5.3", + "byte-size": "^4.0.3", + "cacache": "^11.2.0", + "call-limit": "~1.1.0", + "chownr": "~1.0.1", + "ci-info": "^1.6.0", + "cli-columns": "^3.1.2", + "cli-table3": "^0.5.0", + "cmd-shim": "~2.0.2", + "columnify": "~1.5.4", + "config-chain": "^1.1.12", + "debuglog": "*", + "detect-indent": "~5.0.0", + "detect-newline": "^2.1.0", + "dezalgo": "~1.0.3", + "editor": "~1.0.0", + "figgy-pudding": "^3.5.1", + "find-npm-prefix": "^1.0.2", + "fs-vacuum": "~1.2.10", + "fs-write-stream-atomic": "~1.0.10", + "gentle-fs": "^2.0.1", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "has-unicode": "~2.0.1", + "hosted-git-info": "^2.7.1", + "iferr": "^1.0.2", + "imurmurhash": "*", + "inflight": "~1.0.6", + "inherits": "~2.0.3", + "ini": "^1.3.5", + "init-package-json": "^1.10.3", + "is-cidr": "^2.0.6", + "json-parse-better-errors": "^1.0.2", + "lazy-property": "~1.0.0", + "libcipm": "^2.0.2", + "libnpmhook": "^4.0.1", + "libnpx": "^10.2.0", + "lock-verify": "^2.0.2", + "lockfile": "^1.0.4", + "lodash._baseindexof": "*", + "lodash._baseuniq": "~4.6.0", + "lodash._bindcallback": "*", + "lodash._cacheindexof": "*", + "lodash._createcache": "*", + "lodash._getnative": "*", + "lodash.clonedeep": "~4.5.0", + "lodash.restparam": "*", + "lodash.union": "~4.6.0", + "lodash.uniq": "~4.5.0", + "lodash.without": "~4.4.0", + "lru-cache": "^4.1.3", + "meant": "~1.0.1", + "mississippi": "^3.0.0", + "mkdirp": "~0.5.1", + "move-concurrently": "^1.0.1", + "node-gyp": "^3.8.0", + "nopt": "~4.0.1", + "normalize-package-data": "~2.4.0", + "npm-audit-report": "^1.3.1", + "npm-cache-filename": "~1.0.2", + "npm-install-checks": "~3.0.0", + "npm-lifecycle": "^2.1.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.12", + "npm-pick-manifest": "^2.1.0", + "npm-profile": "^3.0.2", + "npm-registry-client": "^8.6.0", + "npm-registry-fetch": "^1.1.0", + "npm-user-validate": "~1.0.0", + "npmlog": "~4.1.2", + "once": "~1.4.0", + "opener": "^1.5.1", + "osenv": "^0.1.5", + "pacote": "^8.1.6", + "path-is-inside": "~1.0.2", + "promise-inflight": "~1.0.1", + "qrcode-terminal": "^0.12.0", + "query-string": "^6.1.0", + "qw": "~1.0.1", + "read": "~1.0.7", + "read-cmd-shim": "~1.0.1", + "read-installed": "~4.0.3", + "read-package-json": "^2.0.13", + "read-package-tree": "^5.2.1", + "readable-stream": "^2.3.6", + "readdir-scoped-modules": "*", + "request": "^2.88.0", + "retry": "^0.12.0", + "rimraf": "~2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.5.1", + "sha": "~2.0.1", + "slide": "~1.1.6", + "sorted-object": "~2.0.1", + "sorted-union-stream": "~2.1.3", + "ssri": "^6.0.1", + "stringify-package": "^1.0.0", + "tar": "^4.4.8", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", "uid-number": "0.0.6", - "umask": "1.1.0", - "unique-filename": "1.1.0", - "unpipe": "1.0.0", - "update-notifier": "2.5.0", - "uuid": "3.3.2", - "validate-npm-package-license": "3.0.4", - "validate-npm-package-name": "3.0.0", - "which": "1.3.1", - "worker-farm": "1.6.0", - "write-file-atomic": "2.3.0" + "umask": "~1.1.0", + "unique-filename": "~1.1.0", + "unpipe": "~1.0.0", + "update-notifier": "^2.5.0", + "uuid": "^3.3.2", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "~3.0.0", + "which": "^1.3.1", + "worker-farm": "^1.6.0", + "write-file-atomic": "^2.3.0" }, "dependencies": { "JSONStream": { @@ -4201,8 +4313,8 @@ "bundled": true, "dev": true, "requires": { - "jsonparse": "1.3.1", - "through": "2.3.8" + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" } }, "abbrev": { @@ -4215,7 +4327,7 @@ "bundled": true, "dev": true, "requires": { - "es6-promisify": "5.0.0" + "es6-promisify": "^5.0.0" } }, "agentkeepalive": { @@ -4223,7 +4335,7 @@ "bundled": true, "dev": true, "requires": { - "humanize-ms": "1.2.1" + "humanize-ms": "^1.2.1" } }, "ajv": { @@ -4231,10 +4343,10 @@ "bundled": true, "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "ansi-align": { @@ -4242,7 +4354,7 @@ "bundled": true, "dev": true, "requires": { - "string-width": "2.1.1" + "string-width": "^2.0.0" } }, "ansi-regex": { @@ -4255,7 +4367,7 @@ "bundled": true, "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "ansicolors": { @@ -4283,8 +4395,8 @@ "bundled": true, "dev": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "asap": { @@ -4297,7 +4409,7 @@ "bundled": true, "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "~2.1.0" } }, "assert-plus": { @@ -4331,7 +4443,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "bin-links": { @@ -4339,11 +4451,11 @@ "bundled": true, "dev": true, "requires": { - "bluebird": "3.5.3", - "cmd-shim": "2.0.2", - "gentle-fs": "2.0.1", - "graceful-fs": "4.1.15", - "write-file-atomic": "2.3.0" + "bluebird": "^3.5.0", + "cmd-shim": "^2.0.2", + "gentle-fs": "^2.0.0", + "graceful-fs": "^4.1.11", + "write-file-atomic": "^2.3.0" } }, "block-stream": { @@ -4351,7 +4463,7 @@ "bundled": true, "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "~2.0.0" } }, "bluebird": { @@ -4364,13 +4476,13 @@ "bundled": true, "dev": true, "requires": { - "ansi-align": "2.0.0", - "camelcase": "4.1.0", - "chalk": "2.4.1", - "cli-boxes": "1.0.0", - "string-width": "2.1.1", - "term-size": "1.2.0", - "widest-line": "2.0.0" + "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" } }, "brace-expansion": { @@ -4378,7 +4490,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -4412,20 +4524,20 @@ "bundled": true, "dev": true, "requires": { - "bluebird": "3.5.3", - "chownr": "1.0.1", - "figgy-pudding": "3.5.1", - "glob": "7.1.3", - "graceful-fs": "4.1.15", - "lru-cache": "4.1.3", - "mississippi": "3.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "6.0.1", - "unique-filename": "1.1.0", - "y18n": "4.0.0" + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "figgy-pudding": "^3.1.0", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.3", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^6.0.0", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" } }, "call-limit": { @@ -4453,9 +4565,9 @@ "bundled": true, "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chownr": { @@ -4473,7 +4585,7 @@ "bundled": true, "dev": true, "requires": { - "ip-regex": "2.1.0" + "ip-regex": "^2.1.0" } }, "cli-boxes": { @@ -4486,8 +4598,8 @@ "bundled": true, "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "3.0.1" + "string-width": "^2.0.0", + "strip-ansi": "^3.0.1" } }, "cli-table3": { @@ -4495,9 +4607,9 @@ "bundled": true, "dev": true, "requires": { - "colors": "1.1.2", - "object-assign": "4.1.1", - "string-width": "2.1.1" + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" } }, "cliui": { @@ -4505,9 +4617,9 @@ "bundled": true, "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" }, "dependencies": { "ansi-regex": { @@ -4520,7 +4632,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -4535,8 +4647,8 @@ "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.15", - "mkdirp": "0.5.1" + "graceful-fs": "^4.1.2", + "mkdirp": "~0.5.0" } }, "co": { @@ -4554,7 +4666,7 @@ "bundled": true, "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "^1.1.1" } }, "color-name": { @@ -4573,8 +4685,8 @@ "bundled": true, "dev": true, "requires": { - "strip-ansi": "3.0.1", - "wcwidth": "1.0.1" + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" } }, "combined-stream": { @@ -4582,7 +4694,7 @@ "bundled": true, "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "concat-map": { @@ -4595,10 +4707,10 @@ "bundled": true, "dev": true, "requires": { - "buffer-from": "1.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "config-chain": { @@ -4606,8 +4718,8 @@ "bundled": true, "dev": true, "requires": { - "ini": "1.3.5", - "proto-list": "1.2.4" + "ini": "^1.3.4", + "proto-list": "~1.2.1" } }, "configstore": { @@ -4615,12 +4727,12 @@ "bundled": true, "dev": true, "requires": { - "dot-prop": "4.2.0", - "graceful-fs": "4.1.15", - "make-dir": "1.3.0", - "unique-string": "1.0.0", - "write-file-atomic": "2.3.0", - "xdg-basedir": "3.0.0" + "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" } }, "console-control-strings": { @@ -4633,12 +4745,12 @@ "bundled": true, "dev": true, "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "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" }, "dependencies": { "iferr": { @@ -4658,7 +4770,7 @@ "bundled": true, "dev": true, "requires": { - "capture-stack-trace": "1.0.0" + "capture-stack-trace": "^1.0.0" } }, "cross-spawn": { @@ -4666,9 +4778,9 @@ "bundled": true, "dev": true, "requires": { - "lru-cache": "4.1.3", - "shebang-command": "1.2.0", - "which": "1.3.1" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "crypto-random-string": { @@ -4686,7 +4798,7 @@ "bundled": true, "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "debug": { @@ -4729,7 +4841,7 @@ "bundled": true, "dev": true, "requires": { - "clone": "1.0.4" + "clone": "^1.0.2" } }, "delayed-stream": { @@ -4757,8 +4869,8 @@ "bundled": true, "dev": true, "requires": { - "asap": "2.0.6", - "wrappy": "1.0.2" + "asap": "^2.0.0", + "wrappy": "1" } }, "dot-prop": { @@ -4766,7 +4878,7 @@ "bundled": true, "dev": true, "requires": { - "is-obj": "1.0.1" + "is-obj": "^1.0.0" } }, "dotenv": { @@ -4784,10 +4896,10 @@ "bundled": true, "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "ecc-jsbn": { @@ -4796,8 +4908,8 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1", - "safer-buffer": "2.1.2" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, "editor": { @@ -4810,7 +4922,7 @@ "bundled": true, "dev": true, "requires": { - "iconv-lite": "0.4.23" + "iconv-lite": "~0.4.13" } }, "end-of-stream": { @@ -4818,7 +4930,7 @@ "bundled": true, "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "err-code": { @@ -4831,7 +4943,7 @@ "bundled": true, "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "es6-promise": { @@ -4844,7 +4956,7 @@ "bundled": true, "dev": true, "requires": { - "es6-promise": "4.2.4" + "es6-promise": "^4.0.3" } }, "escape-string-regexp": { @@ -4857,13 +4969,13 @@ "bundled": true, "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "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" } }, "extend": { @@ -4901,7 +5013,7 @@ "bundled": true, "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "flush-write-stream": { @@ -4909,8 +5021,8 @@ "bundled": true, "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" } }, "forever-agent": { @@ -4923,9 +5035,9 @@ "bundled": true, "dev": true, "requires": { - "asynckit": "0.4.0", + "asynckit": "^0.4.0", "combined-stream": "1.0.6", - "mime-types": "2.1.19" + "mime-types": "^2.1.12" } }, "from2": { @@ -4933,8 +5045,8 @@ "bundled": true, "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, "fs-minipass": { @@ -4942,7 +5054,7 @@ "bundled": true, "dev": true, "requires": { - "minipass": "2.3.3" + "minipass": "^2.2.1" } }, "fs-vacuum": { @@ -4950,9 +5062,9 @@ "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.15", - "path-is-inside": "1.0.2", - "rimraf": "2.6.2" + "graceful-fs": "^4.1.2", + "path-is-inside": "^1.0.1", + "rimraf": "^2.5.2" } }, "fs-write-stream-atomic": { @@ -4960,10 +5072,10 @@ "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.15", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" }, "dependencies": { "iferr": { @@ -4983,10 +5095,10 @@ "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.15", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" } }, "gauge": { @@ -4994,14 +5106,14 @@ "bundled": true, "dev": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "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" }, "dependencies": { "string-width": { @@ -5009,9 +5121,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } } } @@ -5026,14 +5138,14 @@ "bundled": true, "dev": true, "requires": { - "aproba": "1.2.0", - "fs-vacuum": "1.2.10", - "graceful-fs": "4.1.15", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "path-is-inside": "1.0.2", - "read-cmd-shim": "1.0.1", - "slide": "1.1.6" + "aproba": "^1.1.2", + "fs-vacuum": "^1.2.10", + "graceful-fs": "^4.1.11", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "path-is-inside": "^1.0.2", + "read-cmd-shim": "^1.0.1", + "slide": "^1.1.6" }, "dependencies": { "iferr": { @@ -5058,7 +5170,7 @@ "bundled": true, "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "glob": { @@ -5066,12 +5178,12 @@ "bundled": true, "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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" } }, "global-dirs": { @@ -5079,7 +5191,7 @@ "bundled": true, "dev": true, "requires": { - "ini": "1.3.5" + "ini": "^1.3.4" } }, "got": { @@ -5087,17 +5199,17 @@ "bundled": true, "dev": true, "requires": { - "create-error-class": "3.0.2", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.1", - "safe-buffer": "5.1.2", - "timed-out": "4.0.1", - "unzip-response": "2.0.1", - "url-parse-lax": "1.0.0" + "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": { @@ -5115,8 +5227,8 @@ "bundled": true, "dev": true, "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" + "ajv": "^5.3.0", + "har-schema": "^2.0.0" } }, "has-flag": { @@ -5144,7 +5256,7 @@ "bundled": true, "dev": true, "requires": { - "agent-base": "4.2.0", + "agent-base": "4", "debug": "3.1.0" } }, @@ -5153,9 +5265,9 @@ "bundled": true, "dev": true, "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.14.2" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "https-proxy-agent": { @@ -5163,8 +5275,8 @@ "bundled": true, "dev": true, "requires": { - "agent-base": "4.2.0", - "debug": "3.1.0" + "agent-base": "^4.1.0", + "debug": "^3.1.0" } }, "humanize-ms": { @@ -5172,7 +5284,7 @@ "bundled": true, "dev": true, "requires": { - "ms": "2.1.1" + "ms": "^2.0.0" } }, "iconv-lite": { @@ -5180,7 +5292,7 @@ "bundled": true, "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "iferr": { @@ -5193,7 +5305,7 @@ "bundled": true, "dev": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "import-lazy": { @@ -5211,8 +5323,8 @@ "bundled": true, "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -5230,14 +5342,14 @@ "bundled": true, "dev": true, "requires": { - "glob": "7.1.3", - "npm-package-arg": "6.1.0", - "promzard": "0.3.0", - "read": "1.0.7", - "read-package-json": "2.0.13", - "semver": "5.5.1", - "validate-npm-package-license": "3.0.4", - "validate-npm-package-name": "3.0.0" + "glob": "^7.1.1", + "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "1 || 2", + "semver": "2.x || 3.x || 4 || 5", + "validate-npm-package-license": "^3.0.1", + "validate-npm-package-name": "^3.0.0" } }, "invert-kv": { @@ -5260,7 +5372,7 @@ "bundled": true, "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-ci": { @@ -5268,7 +5380,7 @@ "bundled": true, "dev": true, "requires": { - "ci-info": "1.6.0" + "ci-info": "^1.0.0" } }, "is-cidr": { @@ -5276,7 +5388,7 @@ "bundled": true, "dev": true, "requires": { - "cidr-regex": "2.0.9" + "cidr-regex": "^2.0.8" } }, "is-fullwidth-code-point": { @@ -5284,7 +5396,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-installed-globally": { @@ -5292,8 +5404,8 @@ "bundled": true, "dev": true, "requires": { - "global-dirs": "0.1.1", - "is-path-inside": "1.0.1" + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" } }, "is-npm": { @@ -5311,7 +5423,7 @@ "bundled": true, "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-redirect": { @@ -5396,7 +5508,7 @@ "bundled": true, "dev": true, "requires": { - "package-json": "4.0.1" + "package-json": "^4.0.0" } }, "lazy-property": { @@ -5409,7 +5521,7 @@ "bundled": true, "dev": true, "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "libcipm": { @@ -5417,20 +5529,20 @@ "bundled": true, "dev": true, "requires": { - "bin-links": "1.1.2", - "bluebird": "3.5.3", - "find-npm-prefix": "1.0.2", - "graceful-fs": "4.1.15", - "lock-verify": "2.0.2", - "mkdirp": "0.5.1", - "npm-lifecycle": "2.1.0", - "npm-logical-tree": "1.2.1", - "npm-package-arg": "6.1.0", - "pacote": "8.1.6", - "protoduck": "5.0.0", - "read-package-json": "2.0.13", - "rimraf": "2.6.2", - "worker-farm": "1.6.0" + "bin-links": "^1.1.2", + "bluebird": "^3.5.1", + "find-npm-prefix": "^1.0.2", + "graceful-fs": "^4.1.11", + "lock-verify": "^2.0.2", + "mkdirp": "^0.5.1", + "npm-lifecycle": "^2.0.3", + "npm-logical-tree": "^1.2.1", + "npm-package-arg": "^6.1.0", + "pacote": "^8.1.6", + "protoduck": "^5.0.0", + "read-package-json": "^2.0.13", + "rimraf": "^2.6.2", + "worker-farm": "^1.6.0" } }, "libnpmhook": { @@ -5438,8 +5550,8 @@ "bundled": true, "dev": true, "requires": { - "figgy-pudding": "3.5.1", - "npm-registry-fetch": "3.1.1" + "figgy-pudding": "^3.1.0", + "npm-registry-fetch": "^3.0.0" }, "dependencies": { "npm-registry-fetch": { @@ -5447,11 +5559,11 @@ "bundled": true, "dev": true, "requires": { - "bluebird": "3.5.3", - "figgy-pudding": "3.5.1", - "lru-cache": "4.1.3", - "make-fetch-happen": "4.0.1", - "npm-package-arg": "6.1.0" + "bluebird": "^3.5.1", + "figgy-pudding": "^3.1.0", + "lru-cache": "^4.1.2", + "make-fetch-happen": "^4.0.0", + "npm-package-arg": "^6.0.0" } } } @@ -5461,14 +5573,14 @@ "bundled": true, "dev": true, "requires": { - "dotenv": "5.0.1", - "npm-package-arg": "6.1.0", - "rimraf": "2.6.2", - "safe-buffer": "5.1.2", - "update-notifier": "2.5.0", - "which": "1.3.1", - "y18n": "4.0.0", - "yargs": "11.0.0" + "dotenv": "^5.0.1", + "npm-package-arg": "^6.0.0", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.0", + "update-notifier": "^2.3.0", + "which": "^1.3.0", + "y18n": "^4.0.0", + "yargs": "^11.0.0" } }, "locate-path": { @@ -5476,8 +5588,8 @@ "bundled": true, "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lock-verify": { @@ -5485,8 +5597,8 @@ "bundled": true, "dev": true, "requires": { - "npm-package-arg": "6.1.0", - "semver": "5.5.1" + "npm-package-arg": "^5.1.2 || 6", + "semver": "^5.4.1" } }, "lockfile": { @@ -5494,7 +5606,7 @@ "bundled": true, "dev": true, "requires": { - "signal-exit": "3.0.2" + "signal-exit": "^3.0.2" } }, "lodash._baseindexof": { @@ -5507,8 +5619,8 @@ "bundled": true, "dev": true, "requires": { - "lodash._createset": "4.0.3", - "lodash._root": "3.0.1" + "lodash._createset": "~4.0.0", + "lodash._root": "~3.0.0" } }, "lodash._bindcallback": { @@ -5526,7 +5638,7 @@ "bundled": true, "dev": true, "requires": { - "lodash._getnative": "3.9.1" + "lodash._getnative": "^3.0.0" } }, "lodash._createset": { @@ -5579,8 +5691,8 @@ "bundled": true, "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "make-dir": { @@ -5588,7 +5700,7 @@ "bundled": true, "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "make-fetch-happen": { @@ -5596,17 +5708,17 @@ "bundled": true, "dev": true, "requires": { - "agentkeepalive": "3.4.1", - "cacache": "11.2.0", - "http-cache-semantics": "3.8.1", - "http-proxy-agent": "2.1.0", - "https-proxy-agent": "2.2.1", - "lru-cache": "4.1.3", - "mississippi": "3.0.0", - "node-fetch-npm": "2.0.2", - "promise-retry": "1.1.1", - "socks-proxy-agent": "4.0.1", - "ssri": "6.0.1" + "agentkeepalive": "^3.4.1", + "cacache": "^11.0.1", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "lru-cache": "^4.1.2", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" } }, "meant": { @@ -5619,7 +5731,7 @@ "bundled": true, "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "mime-db": { @@ -5632,7 +5744,7 @@ "bundled": true, "dev": true, "requires": { - "mime-db": "1.35.0" + "mime-db": "~1.35.0" } }, "mimic-fn": { @@ -5645,7 +5757,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -5658,8 +5770,8 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.2", - "yallist": "3.0.2" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" }, "dependencies": { "yallist": { @@ -5674,7 +5786,7 @@ "bundled": true, "dev": true, "requires": { - "minipass": "2.3.3" + "minipass": "^2.2.1" } }, "mississippi": { @@ -5682,16 +5794,16 @@ "bundled": true, "dev": true, "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.6.0", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.3", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "3.0.0", - "pumpify": "1.5.1", - "stream-each": "1.2.2", - "through2": "2.0.3" + "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" } }, "mkdirp": { @@ -5707,12 +5819,12 @@ "bundled": true, "dev": true, "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "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": { @@ -5730,9 +5842,9 @@ "bundled": true, "dev": true, "requires": { - "encoding": "0.1.12", - "json-parse-better-errors": "1.0.2", - "safe-buffer": "5.1.2" + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" } }, "node-gyp": { @@ -5740,18 +5852,18 @@ "bundled": true, "dev": true, "requires": { - "fstream": "1.0.11", - "glob": "7.1.3", - "graceful-fs": "4.1.15", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "npmlog": "4.1.2", - "osenv": "0.1.5", - "request": "2.88.0", - "rimraf": "2.6.2", - "semver": "5.3.0", - "tar": "2.2.1", - "which": "1.3.1" + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" }, "dependencies": { "nopt": { @@ -5759,7 +5871,7 @@ "bundled": true, "dev": true, "requires": { - "abbrev": "1.1.1" + "abbrev": "1" } }, "semver": { @@ -5772,9 +5884,9 @@ "bundled": true, "dev": true, "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" } } } @@ -5784,8 +5896,8 @@ "bundled": true, "dev": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "normalize-package-data": { @@ -5793,10 +5905,10 @@ "bundled": true, "dev": true, "requires": { - "hosted-git-info": "2.7.1", - "is-builtin-module": "1.0.0", - "semver": "5.5.1", - "validate-npm-package-license": "3.0.4" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "npm-audit-report": { @@ -5804,8 +5916,8 @@ "bundled": true, "dev": true, "requires": { - "cli-table3": "0.5.0", - "console-control-strings": "1.1.0" + "cli-table3": "^0.5.0", + "console-control-strings": "^1.1.0" } }, "npm-bundled": { @@ -5823,7 +5935,7 @@ "bundled": true, "dev": true, "requires": { - "semver": "5.5.1" + "semver": "^2.3.0 || 3.x || 4 || 5" } }, "npm-lifecycle": { @@ -5831,14 +5943,14 @@ "bundled": true, "dev": true, "requires": { - "byline": "5.0.0", - "graceful-fs": "4.1.15", - "node-gyp": "3.8.0", - "resolve-from": "4.0.0", - "slide": "1.1.6", + "byline": "^5.0.0", + "graceful-fs": "^4.1.11", + "node-gyp": "^3.8.0", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", "uid-number": "0.0.6", - "umask": "1.1.0", - "which": "1.3.1" + "umask": "^1.1.0", + "which": "^1.3.1" } }, "npm-logical-tree": { @@ -5851,10 +5963,10 @@ "bundled": true, "dev": true, "requires": { - "hosted-git-info": "2.7.1", - "osenv": "0.1.5", - "semver": "5.5.1", - "validate-npm-package-name": "3.0.0" + "hosted-git-info": "^2.6.0", + "osenv": "^0.1.5", + "semver": "^5.5.0", + "validate-npm-package-name": "^3.0.0" } }, "npm-packlist": { @@ -5862,8 +5974,8 @@ "bundled": true, "dev": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.5" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npm-pick-manifest": { @@ -5871,8 +5983,8 @@ "bundled": true, "dev": true, "requires": { - "npm-package-arg": "6.1.0", - "semver": "5.5.1" + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" } }, "npm-profile": { @@ -5880,8 +5992,8 @@ "bundled": true, "dev": true, "requires": { - "aproba": "1.2.0", - "make-fetch-happen": "4.0.1" + "aproba": "^1.1.2 || 2", + "make-fetch-happen": "^2.5.0 || 3 || 4" } }, "npm-registry-client": { @@ -5889,18 +6001,18 @@ "bundled": true, "dev": true, "requires": { - "concat-stream": "1.6.2", - "graceful-fs": "4.1.15", - "normalize-package-data": "2.4.0", - "npm-package-arg": "6.1.0", - "npmlog": "4.1.2", - "once": "1.4.0", - "request": "2.88.0", - "retry": "0.10.1", - "safe-buffer": "5.1.2", - "semver": "5.5.1", - "slide": "1.1.6", - "ssri": "5.3.0" + "concat-stream": "^1.5.2", + "graceful-fs": "^4.1.6", + "normalize-package-data": "~1.0.1 || ^2.0.0", + "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", + "npmlog": "2 || ^3.1.0 || ^4.0.0", + "once": "^1.3.3", + "request": "^2.74.0", + "retry": "^0.10.0", + "safe-buffer": "^5.1.1", + "semver": "2 >=2.2.1 || 3.x || 4 || 5", + "slide": "^1.1.3", + "ssri": "^5.2.4" }, "dependencies": { "retry": { @@ -5913,7 +6025,7 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.1" } } } @@ -5923,12 +6035,12 @@ "bundled": true, "dev": true, "requires": { - "bluebird": "3.5.3", - "figgy-pudding": "2.0.1", - "lru-cache": "4.1.3", - "make-fetch-happen": "3.0.0", - "npm-package-arg": "6.1.0", - "safe-buffer": "5.1.2" + "bluebird": "^3.5.1", + "figgy-pudding": "^2.0.1", + "lru-cache": "^4.1.2", + "make-fetch-happen": "^3.0.0", + "npm-package-arg": "^6.0.0", + "safe-buffer": "^5.1.1" }, "dependencies": { "cacache": { @@ -5936,19 +6048,19 @@ "bundled": true, "dev": true, "requires": { - "bluebird": "3.5.3", - "chownr": "1.0.1", - "glob": "7.1.3", - "graceful-fs": "4.1.15", - "lru-cache": "4.1.3", - "mississippi": "2.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.3.0", - "unique-filename": "1.1.0", - "y18n": "4.0.0" + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" }, "dependencies": { "mississippi": { @@ -5956,16 +6068,16 @@ "bundled": true, "dev": true, "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.6.0", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.3", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "2.0.1", - "pumpify": "1.5.1", - "stream-each": "1.2.2", - "through2": "2.0.3" + "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": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } } } @@ -5980,17 +6092,17 @@ "bundled": true, "dev": true, "requires": { - "agentkeepalive": "3.4.1", - "cacache": "10.0.4", - "http-cache-semantics": "3.8.1", - "http-proxy-agent": "2.1.0", - "https-proxy-agent": "2.2.1", - "lru-cache": "4.1.3", - "mississippi": "3.0.0", - "node-fetch-npm": "2.0.2", - "promise-retry": "1.1.1", - "socks-proxy-agent": "3.0.1", - "ssri": "5.3.0" + "agentkeepalive": "^3.4.1", + "cacache": "^10.0.4", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.0", + "lru-cache": "^4.1.2", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^3.0.1", + "ssri": "^5.2.4" } }, "pump": { @@ -5998,8 +6110,8 @@ "bundled": true, "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "smart-buffer": { @@ -6012,8 +6124,8 @@ "bundled": true, "dev": true, "requires": { - "ip": "1.1.5", - "smart-buffer": "1.1.15" + "ip": "^1.1.4", + "smart-buffer": "^1.0.13" } }, "socks-proxy-agent": { @@ -6021,8 +6133,8 @@ "bundled": true, "dev": true, "requires": { - "agent-base": "4.2.0", - "socks": "1.1.10" + "agent-base": "^4.1.0", + "socks": "^1.1.10" } }, "ssri": { @@ -6030,7 +6142,7 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.1" } } } @@ -6040,7 +6152,7 @@ "bundled": true, "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "npm-user-validate": { @@ -6053,10 +6165,10 @@ "bundled": true, "dev": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "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": { @@ -6079,7 +6191,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "opener": { @@ -6097,9 +6209,9 @@ "bundled": true, "dev": true, "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, "os-tmpdir": { @@ -6112,8 +6224,8 @@ "bundled": true, "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "p-finally": { @@ -6126,7 +6238,7 @@ "bundled": true, "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -6134,7 +6246,7 @@ "bundled": true, "dev": true, "requires": { - "p-limit": "1.2.0" + "p-limit": "^1.1.0" } }, "p-try": { @@ -6147,10 +6259,10 @@ "bundled": true, "dev": true, "requires": { - "got": "6.7.1", - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0", - "semver": "5.5.1" + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" } }, "pacote": { @@ -6158,31 +6270,31 @@ "bundled": true, "dev": true, "requires": { - "bluebird": "3.5.3", - "cacache": "11.2.0", - "get-stream": "3.0.0", - "glob": "7.1.3", - "lru-cache": "4.1.3", - "make-fetch-happen": "4.0.1", - "minimatch": "3.0.4", - "minipass": "2.3.3", - "mississippi": "3.0.0", - "mkdirp": "0.5.1", - "normalize-package-data": "2.4.0", - "npm-package-arg": "6.1.0", - "npm-packlist": "1.1.12", - "npm-pick-manifest": "2.1.0", - "osenv": "0.1.5", - "promise-inflight": "1.0.1", - "promise-retry": "1.1.1", - "protoduck": "5.0.0", - "rimraf": "2.6.2", - "safe-buffer": "5.1.2", - "semver": "5.5.1", - "ssri": "6.0.1", - "tar": "4.4.8", - "unique-filename": "1.1.0", - "which": "1.3.1" + "bluebird": "^3.5.1", + "cacache": "^11.0.2", + "get-stream": "^3.0.0", + "glob": "^7.1.2", + "lru-cache": "^4.1.3", + "make-fetch-happen": "^4.0.1", + "minimatch": "^3.0.4", + "minipass": "^2.3.3", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.10", + "npm-pick-manifest": "^2.1.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.0", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.5.0", + "ssri": "^6.0.0", + "tar": "^4.4.3", + "unique-filename": "^1.1.0", + "which": "^1.3.0" } }, "parallel-transform": { @@ -6190,9 +6302,9 @@ "bundled": true, "dev": true, "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, "path-exists": { @@ -6245,8 +6357,8 @@ "bundled": true, "dev": true, "requires": { - "err-code": "1.1.2", - "retry": "0.10.1" + "err-code": "^1.0.0", + "retry": "^0.10.0" }, "dependencies": { "retry": { @@ -6261,7 +6373,7 @@ "bundled": true, "dev": true, "requires": { - "read": "1.0.7" + "read": "1" } }, "proto-list": { @@ -6274,7 +6386,7 @@ "bundled": true, "dev": true, "requires": { - "genfun": "4.0.1" + "genfun": "^4.0.1" } }, "prr": { @@ -6297,8 +6409,8 @@ "bundled": true, "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { @@ -6306,9 +6418,9 @@ "bundled": true, "dev": true, "requires": { - "duplexify": "3.6.0", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" }, "dependencies": { "pump": { @@ -6316,8 +6428,8 @@ "bundled": true, "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } } } @@ -6342,8 +6454,8 @@ "bundled": true, "dev": true, "requires": { - "decode-uri-component": "0.2.0", - "strict-uri-encode": "2.0.0" + "decode-uri-component": "^0.2.0", + "strict-uri-encode": "^2.0.0" } }, "qw": { @@ -6356,10 +6468,10 @@ "bundled": true, "dev": true, "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -6374,7 +6486,7 @@ "bundled": true, "dev": true, "requires": { - "mute-stream": "0.0.7" + "mute-stream": "~0.0.4" } }, "read-cmd-shim": { @@ -6382,7 +6494,7 @@ "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.15" + "graceful-fs": "^4.1.2" } }, "read-installed": { @@ -6390,13 +6502,13 @@ "bundled": true, "dev": true, "requires": { - "debuglog": "1.0.1", - "graceful-fs": "4.1.15", - "read-package-json": "2.0.13", - "readdir-scoped-modules": "1.0.2", - "semver": "5.5.1", - "slide": "1.1.6", - "util-extend": "1.0.3" + "debuglog": "^1.0.1", + "graceful-fs": "^4.1.2", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "slide": "~1.1.3", + "util-extend": "^1.0.1" } }, "read-package-json": { @@ -6404,11 +6516,11 @@ "bundled": true, "dev": true, "requires": { - "glob": "7.1.3", - "graceful-fs": "4.1.15", - "json-parse-better-errors": "1.0.2", - "normalize-package-data": "2.4.0", - "slash": "1.0.0" + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "json-parse-better-errors": "^1.0.1", + "normalize-package-data": "^2.0.0", + "slash": "^1.0.0" } }, "read-package-tree": { @@ -6416,11 +6528,11 @@ "bundled": true, "dev": true, "requires": { - "debuglog": "1.0.1", - "dezalgo": "1.0.3", - "once": "1.4.0", - "read-package-json": "2.0.13", - "readdir-scoped-modules": "1.0.2" + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "once": "^1.3.0", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0" } }, "readable-stream": { @@ -6428,13 +6540,13 @@ "bundled": true, "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "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" } }, "readdir-scoped-modules": { @@ -6442,10 +6554,10 @@ "bundled": true, "dev": true, "requires": { - "debuglog": "1.0.1", - "dezalgo": "1.0.3", - "graceful-fs": "4.1.15", - "once": "1.4.0" + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" } }, "registry-auth-token": { @@ -6453,8 +6565,8 @@ "bundled": true, "dev": true, "requires": { - "rc": "1.2.7", - "safe-buffer": "5.1.2" + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" } }, "registry-url": { @@ -6462,7 +6574,7 @@ "bundled": true, "dev": true, "requires": { - "rc": "1.2.7" + "rc": "^1.0.1" } }, "request": { @@ -6470,26 +6582,26 @@ "bundled": true, "dev": true, "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.8.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.2", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.1.0", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.19", - "oauth-sign": "0.9.0", - "performance-now": "2.1.0", - "qs": "6.5.2", - "safe-buffer": "5.1.2", - "tough-cookie": "2.4.3", - "tunnel-agent": "0.6.0", - "uuid": "3.3.2" + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" } }, "require-directory": { @@ -6517,7 +6629,7 @@ "bundled": true, "dev": true, "requires": { - "glob": "7.1.3" + "glob": "^7.0.5" } }, "run-queue": { @@ -6525,7 +6637,7 @@ "bundled": true, "dev": true, "requires": { - "aproba": "1.2.0" + "aproba": "^1.1.1" } }, "safe-buffer": { @@ -6548,7 +6660,7 @@ "bundled": true, "dev": true, "requires": { - "semver": "5.5.1" + "semver": "^5.0.3" } }, "set-blocking": { @@ -6561,8 +6673,8 @@ "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.15", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.2", + "readable-stream": "^2.0.2" } }, "shebang-command": { @@ -6570,7 +6682,7 @@ "bundled": true, "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -6603,8 +6715,8 @@ "bundled": true, "dev": true, "requires": { - "ip": "1.1.5", - "smart-buffer": "4.0.1" + "ip": "^1.1.5", + "smart-buffer": "^4.0.1" } }, "socks-proxy-agent": { @@ -6612,8 +6724,8 @@ "bundled": true, "dev": true, "requires": { - "agent-base": "4.2.0", - "socks": "2.2.0" + "agent-base": "~4.2.0", + "socks": "~2.2.0" } }, "sorted-object": { @@ -6626,8 +6738,8 @@ "bundled": true, "dev": true, "requires": { - "from2": "1.3.0", - "stream-iterate": "1.2.0" + "from2": "^1.3.0", + "stream-iterate": "^1.1.0" }, "dependencies": { "from2": { @@ -6635,8 +6747,8 @@ "bundled": true, "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "1.1.14" + "inherits": "~2.0.1", + "readable-stream": "~1.1.10" } }, "isarray": { @@ -6649,10 +6761,10 @@ "bundled": true, "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -6667,8 +6779,8 @@ "bundled": true, "dev": true, "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.0" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { @@ -6681,8 +6793,8 @@ "bundled": true, "dev": true, "requires": { - "spdx-exceptions": "2.1.0", - "spdx-license-ids": "3.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { @@ -6695,15 +6807,15 @@ "bundled": true, "dev": true, "requires": { - "asn1": "0.2.4", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.2", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.2", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "safer-buffer": "2.1.2", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" } }, "ssri": { @@ -6711,7 +6823,7 @@ "bundled": true, "dev": true, "requires": { - "figgy-pudding": "3.5.1" + "figgy-pudding": "^3.5.1" } }, "stream-each": { @@ -6719,8 +6831,8 @@ "bundled": true, "dev": true, "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-iterate": { @@ -6728,8 +6840,8 @@ "bundled": true, "dev": true, "requires": { - "readable-stream": "2.3.6", - "stream-shift": "1.0.0" + "readable-stream": "^2.1.5", + "stream-shift": "^1.0.0" } }, "stream-shift": { @@ -6747,8 +6859,8 @@ "bundled": true, "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { @@ -6766,7 +6878,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -6776,7 +6888,7 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "stringify-package": { @@ -6789,7 +6901,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-eof": { @@ -6807,7 +6919,7 @@ "bundled": true, "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "tar": { @@ -6815,13 +6927,13 @@ "bundled": true, "dev": true, "requires": { - "chownr": "1.1.1", - "fs-minipass": "1.2.5", - "minipass": "2.3.5", - "minizlib": "1.1.1", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.2", - "yallist": "3.0.3" + "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" }, "dependencies": { "chownr": { @@ -6834,8 +6946,8 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.2", - "yallist": "3.0.3" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, "yallist": { @@ -6850,7 +6962,7 @@ "bundled": true, "dev": true, "requires": { - "execa": "0.7.0" + "execa": "^0.7.0" } }, "text-table": { @@ -6868,8 +6980,8 @@ "bundled": true, "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "timed-out": { @@ -6887,8 +6999,8 @@ "bundled": true, "dev": true, "requires": { - "psl": "1.1.29", - "punycode": "1.4.1" + "psl": "^1.1.24", + "punycode": "^1.4.1" } }, "tunnel-agent": { @@ -6896,7 +7008,7 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -6925,7 +7037,7 @@ "bundled": true, "dev": true, "requires": { - "unique-slug": "2.0.0" + "unique-slug": "^2.0.0" } }, "unique-slug": { @@ -6933,7 +7045,7 @@ "bundled": true, "dev": true, "requires": { - "imurmurhash": "0.1.4" + "imurmurhash": "^0.1.4" } }, "unique-string": { @@ -6941,7 +7053,7 @@ "bundled": true, "dev": true, "requires": { - "crypto-random-string": "1.0.0" + "crypto-random-string": "^1.0.0" } }, "unpipe": { @@ -6959,16 +7071,16 @@ "bundled": true, "dev": true, "requires": { - "boxen": "1.3.0", - "chalk": "2.4.1", - "configstore": "3.1.2", - "import-lazy": "2.1.0", - "is-ci": "1.1.0", - "is-installed-globally": "0.1.0", - "is-npm": "1.0.0", - "latest-version": "3.1.0", - "semver-diff": "2.1.0", - "xdg-basedir": "3.0.0" + "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" } }, "url-parse-lax": { @@ -6976,7 +7088,7 @@ "bundled": true, "dev": true, "requires": { - "prepend-http": "1.0.4" + "prepend-http": "^1.0.1" } }, "util-deprecate": { @@ -6999,8 +7111,8 @@ "bundled": true, "dev": true, "requires": { - "spdx-correct": "3.0.0", - "spdx-expression-parse": "3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "validate-npm-package-name": { @@ -7008,7 +7120,7 @@ "bundled": true, "dev": true, "requires": { - "builtins": "1.0.3" + "builtins": "^1.0.3" } }, "verror": { @@ -7016,9 +7128,9 @@ "bundled": true, "dev": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" } }, "wcwidth": { @@ -7026,7 +7138,7 @@ "bundled": true, "dev": true, "requires": { - "defaults": "1.0.3" + "defaults": "^1.0.3" } }, "which": { @@ -7034,7 +7146,7 @@ "bundled": true, "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -7047,7 +7159,7 @@ "bundled": true, "dev": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" }, "dependencies": { "string-width": { @@ -7055,9 +7167,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } } } @@ -7067,7 +7179,7 @@ "bundled": true, "dev": true, "requires": { - "string-width": "2.1.1" + "string-width": "^2.1.1" } }, "worker-farm": { @@ -7075,7 +7187,7 @@ "bundled": true, "dev": true, "requires": { - "errno": "0.1.7" + "errno": "~0.1.7" } }, "wrap-ansi": { @@ -7083,8 +7195,8 @@ "bundled": true, "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "string-width": { @@ -7092,9 +7204,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } } } @@ -7109,9 +7221,9 @@ "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.15", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, "xdg-basedir": { @@ -7139,18 +7251,18 @@ "bundled": true, "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "9.0.2" + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" }, "dependencies": { "y18n": { @@ -7165,7 +7277,7 @@ "bundled": true, "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } @@ -7176,7 +7288,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "number-is-nan": { @@ -7197,30 +7309,30 @@ "integrity": "sha512-P+FwIuro2aFG6B0Esd9ZDWUd51uZrAEoGutqZxzrVmYl3qSfkLgcQpBPBjtDFsUQLFY1dvTQJPOyeqr8S9GF8w==", "dev": true, "requires": { - "archy": "1.0.0", - "arrify": "1.0.1", - "caching-transform": "3.0.1", - "convert-source-map": "1.6.0", - "find-cache-dir": "2.0.0", - "find-up": "3.0.0", - "foreground-child": "1.5.6", - "glob": "7.1.3", - "istanbul-lib-coverage": "2.0.3", - "istanbul-lib-hook": "2.0.3", - "istanbul-lib-instrument": "3.1.0", - "istanbul-lib-report": "2.0.4", - "istanbul-lib-source-maps": "3.0.2", - "istanbul-reports": "2.1.1", - "make-dir": "1.3.0", - "merge-source-map": "1.1.0", - "resolve-from": "4.0.0", - "rimraf": "2.6.3", - "signal-exit": "3.0.2", - "spawn-wrap": "1.4.2", - "test-exclude": "5.1.0", - "uuid": "3.3.2", - "yargs": "12.0.5", - "yargs-parser": "11.1.1" + "archy": "^1.0.0", + "arrify": "^1.0.1", + "caching-transform": "^3.0.1", + "convert-source-map": "^1.6.0", + "find-cache-dir": "^2.0.0", + "find-up": "^3.0.0", + "foreground-child": "^1.5.6", + "glob": "^7.1.3", + "istanbul-lib-coverage": "^2.0.3", + "istanbul-lib-hook": "^2.0.3", + "istanbul-lib-instrument": "^3.1.0", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.2", + "istanbul-reports": "^2.1.1", + "make-dir": "^1.3.0", + "merge-source-map": "^1.1.0", + "resolve-from": "^4.0.0", + "rimraf": "^2.6.3", + "signal-exit": "^3.0.2", + "spawn-wrap": "^1.4.2", + "test-exclude": "^5.1.0", + "uuid": "^3.3.2", + "yargs": "^12.0.5", + "yargs-parser": "^11.1.1" }, "dependencies": { "ansi-regex": { @@ -7233,7 +7345,7 @@ "bundled": true, "dev": true, "requires": { - "default-require-extensions": "2.0.0" + "default-require-extensions": "^2.0.0" } }, "archy": { @@ -7251,7 +7363,7 @@ "bundled": true, "dev": true, "requires": { - "lodash": "4.17.11" + "lodash": "^4.17.11" } }, "balanced-match": { @@ -7264,7 +7376,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -7273,10 +7385,10 @@ "bundled": true, "dev": true, "requires": { - "hasha": "3.0.0", - "make-dir": "1.3.0", - "package-hash": "3.0.0", - "write-file-atomic": "2.4.2" + "hasha": "^3.0.0", + "make-dir": "^1.3.0", + "package-hash": "^3.0.0", + "write-file-atomic": "^2.3.0" } }, "camelcase": { @@ -7289,9 +7401,9 @@ "bundled": true, "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, "code-point-at": { @@ -7320,7 +7432,7 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.1" } }, "cross-spawn": { @@ -7328,8 +7440,8 @@ "bundled": true, "dev": true, "requires": { - "lru-cache": "4.1.5", - "which": "1.3.1" + "lru-cache": "^4.0.1", + "which": "^1.2.9" } }, "debug": { @@ -7337,7 +7449,7 @@ "bundled": true, "dev": true, "requires": { - "ms": "2.1.1" + "ms": "^2.1.1" } }, "decamelize": { @@ -7350,7 +7462,7 @@ "bundled": true, "dev": true, "requires": { - "strip-bom": "3.0.0" + "strip-bom": "^3.0.0" } }, "end-of-stream": { @@ -7358,7 +7470,7 @@ "bundled": true, "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "error-ex": { @@ -7366,7 +7478,7 @@ "bundled": true, "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "es6-error": { @@ -7379,13 +7491,13 @@ "bundled": true, "dev": true, "requires": { - "cross-spawn": "6.0.5", - "get-stream": "4.1.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "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" }, "dependencies": { "cross-spawn": { @@ -7393,11 +7505,11 @@ "bundled": true, "dev": true, "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.6.0", - "shebang-command": "1.2.0", - "which": "1.3.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } } } @@ -7407,9 +7519,9 @@ "bundled": true, "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "3.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^3.0.0" } }, "find-up": { @@ -7417,7 +7529,7 @@ "bundled": true, "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "foreground-child": { @@ -7425,8 +7537,8 @@ "bundled": true, "dev": true, "requires": { - "cross-spawn": "4.0.2", - "signal-exit": "3.0.2" + "cross-spawn": "^4", + "signal-exit": "^3.0.0" } }, "fs.realpath": { @@ -7444,7 +7556,7 @@ "bundled": true, "dev": true, "requires": { - "pump": "3.0.0" + "pump": "^3.0.0" } }, "glob": { @@ -7452,12 +7564,12 @@ "bundled": true, "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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" } }, "graceful-fs": { @@ -7470,10 +7582,10 @@ "bundled": true, "dev": true, "requires": { - "async": "2.6.2", - "optimist": "0.6.1", - "source-map": "0.6.1", - "uglify-js": "3.4.9" + "async": "^2.5.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" }, "dependencies": { "source-map": { @@ -7493,7 +7605,7 @@ "bundled": true, "dev": true, "requires": { - "is-stream": "1.1.0" + "is-stream": "^1.0.1" } }, "hosted-git-info": { @@ -7511,8 +7623,8 @@ "bundled": true, "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -7555,7 +7667,7 @@ "bundled": true, "dev": true, "requires": { - "append-transform": "1.0.0" + "append-transform": "^1.0.0" } }, "istanbul-lib-report": { @@ -7563,9 +7675,9 @@ "bundled": true, "dev": true, "requires": { - "istanbul-lib-coverage": "2.0.3", - "make-dir": "1.3.0", - "supports-color": "6.1.0" + "istanbul-lib-coverage": "^2.0.3", + "make-dir": "^1.3.0", + "supports-color": "^6.0.0" }, "dependencies": { "supports-color": { @@ -7573,7 +7685,7 @@ "bundled": true, "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -7583,11 +7695,11 @@ "bundled": true, "dev": true, "requires": { - "debug": "4.1.1", - "istanbul-lib-coverage": "2.0.3", - "make-dir": "1.3.0", - "rimraf": "2.6.3", - "source-map": "0.6.1" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.3", + "make-dir": "^1.3.0", + "rimraf": "^2.6.2", + "source-map": "^0.6.1" }, "dependencies": { "source-map": { @@ -7602,7 +7714,7 @@ "bundled": true, "dev": true, "requires": { - "handlebars": "4.1.0" + "handlebars": "^4.1.0" } }, "json-parse-better-errors": { @@ -7615,7 +7727,7 @@ "bundled": true, "dev": true, "requires": { - "invert-kv": "2.0.0" + "invert-kv": "^2.0.0" } }, "load-json-file": { @@ -7623,10 +7735,10 @@ "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.15", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, "locate-path": { @@ -7634,8 +7746,8 @@ "bundled": true, "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -7653,8 +7765,8 @@ "bundled": true, "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "make-dir": { @@ -7662,7 +7774,7 @@ "bundled": true, "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "map-age-cleaner": { @@ -7670,7 +7782,7 @@ "bundled": true, "dev": true, "requires": { - "p-defer": "1.0.0" + "p-defer": "^1.0.0" } }, "mem": { @@ -7678,9 +7790,9 @@ "bundled": true, "dev": true, "requires": { - "map-age-cleaner": "0.1.3", - "mimic-fn": "1.2.0", - "p-is-promise": "2.0.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^2.0.0" } }, "merge-source-map": { @@ -7688,7 +7800,7 @@ "bundled": true, "dev": true, "requires": { - "source-map": "0.6.1" + "source-map": "^0.6.1" }, "dependencies": { "source-map": { @@ -7708,7 +7820,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -7746,10 +7858,10 @@ "bundled": true, "dev": true, "requires": { - "hosted-git-info": "2.7.1", - "resolve": "1.10.0", - "semver": "5.6.0", - "validate-npm-package-license": "3.0.4" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "npm-run-path": { @@ -7757,7 +7869,7 @@ "bundled": true, "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "number-is-nan": { @@ -7770,7 +7882,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "optimist": { @@ -7778,8 +7890,8 @@ "bundled": true, "dev": true, "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" } }, "os-homedir": { @@ -7792,9 +7904,9 @@ "bundled": true, "dev": true, "requires": { - "execa": "1.0.0", - "lcid": "2.0.0", - "mem": "4.1.0" + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, "p-defer": { @@ -7817,7 +7929,7 @@ "bundled": true, "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -7825,7 +7937,7 @@ "bundled": true, "dev": true, "requires": { - "p-limit": "2.1.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -7838,10 +7950,10 @@ "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.15", - "hasha": "3.0.0", - "lodash.flattendeep": "4.4.0", - "release-zalgo": "1.0.0" + "graceful-fs": "^4.1.15", + "hasha": "^3.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" } }, "parse-json": { @@ -7849,8 +7961,8 @@ "bundled": true, "dev": true, "requires": { - "error-ex": "1.3.2", - "json-parse-better-errors": "1.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "path-exists": { @@ -7878,7 +7990,7 @@ "bundled": true, "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "pify": { @@ -7891,7 +8003,7 @@ "bundled": true, "dev": true, "requires": { - "find-up": "3.0.0" + "find-up": "^3.0.0" } }, "pseudomap": { @@ -7904,8 +8016,8 @@ "bundled": true, "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "read-pkg": { @@ -7913,9 +8025,9 @@ "bundled": true, "dev": true, "requires": { - "load-json-file": "4.0.0", - "normalize-package-data": "2.5.0", - "path-type": "3.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, "read-pkg-up": { @@ -7923,8 +8035,8 @@ "bundled": true, "dev": true, "requires": { - "find-up": "3.0.0", - "read-pkg": "3.0.0" + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" } }, "release-zalgo": { @@ -7932,7 +8044,7 @@ "bundled": true, "dev": true, "requires": { - "es6-error": "4.1.1" + "es6-error": "^4.0.1" } }, "require-directory": { @@ -7950,7 +8062,7 @@ "bundled": true, "dev": true, "requires": { - "path-parse": "1.0.6" + "path-parse": "^1.0.6" } }, "resolve-from": { @@ -7963,7 +8075,7 @@ "bundled": true, "dev": true, "requires": { - "glob": "7.1.3" + "glob": "^7.1.3" } }, "safe-buffer": { @@ -7986,7 +8098,7 @@ "bundled": true, "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -8004,12 +8116,12 @@ "bundled": true, "dev": true, "requires": { - "foreground-child": "1.5.6", - "mkdirp": "0.5.1", - "os-homedir": "1.0.2", - "rimraf": "2.6.3", - "signal-exit": "3.0.2", - "which": "1.3.1" + "foreground-child": "^1.5.6", + "mkdirp": "^0.5.0", + "os-homedir": "^1.0.1", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "which": "^1.3.0" } }, "spdx-correct": { @@ -8017,8 +8129,8 @@ "bundled": true, "dev": true, "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.3" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { @@ -8031,8 +8143,8 @@ "bundled": true, "dev": true, "requires": { - "spdx-exceptions": "2.2.0", - "spdx-license-ids": "3.0.3" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { @@ -8045,8 +8157,8 @@ "bundled": true, "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { @@ -8054,7 +8166,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "strip-bom": { @@ -8072,10 +8184,10 @@ "bundled": true, "dev": true, "requires": { - "arrify": "1.0.1", - "minimatch": "3.0.4", - "read-pkg-up": "4.0.0", - "require-main-filename": "1.0.1" + "arrify": "^1.0.1", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^1.0.1" } }, "uglify-js": { @@ -8084,8 +8196,8 @@ "dev": true, "optional": true, "requires": { - "commander": "2.17.1", - "source-map": "0.6.1" + "commander": "~2.17.1", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -8106,8 +8218,8 @@ "bundled": true, "dev": true, "requires": { - "spdx-correct": "3.1.0", - "spdx-expression-parse": "3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "which": { @@ -8115,7 +8227,7 @@ "bundled": true, "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -8133,8 +8245,8 @@ "bundled": true, "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -8147,7 +8259,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -8155,9 +8267,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -8165,7 +8277,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -8180,9 +8292,9 @@ "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.15", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, "y18n": { @@ -8200,18 +8312,18 @@ "bundled": true, "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.3", - "os-locale": "3.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "11.1.1" + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" } }, "yargs-parser": { @@ -8219,8 +8331,8 @@ "bundled": true, "dev": true, "requires": { - "camelcase": "5.0.0", - "decamelize": "1.2.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } @@ -8237,9 +8349,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -8248,7 +8360,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "kind-of": { @@ -8257,7 +8369,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -8268,7 +8380,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.omit": { @@ -8277,8 +8389,8 @@ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "object.pick": { @@ -8287,7 +8399,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "octokit-pagination-methods": { @@ -8311,7 +8423,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { @@ -8320,7 +8432,7 @@ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "optimist": { @@ -8329,8 +8441,8 @@ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" }, "dependencies": { "minimist": { @@ -8347,12 +8459,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" }, "dependencies": { "wordwrap": { @@ -8369,9 +8481,9 @@ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", "dev": true, "requires": { - "execa": "1.0.0", - "lcid": "2.0.0", - "mem": "4.1.0" + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, "os-name": { @@ -8380,8 +8492,8 @@ "integrity": "sha512-7c74tib2FsdFbQ3W+qj8Tyd1R3Z6tuVRNNxXjJcZ4NgjIEQU9N/prVMqcW29XZPXGACqaXN3jq58/6hoaoXH6g==", "dev": true, "requires": { - "macos-release": "2.0.0", - "windows-release": "3.1.0" + "macos-release": "^2.0.0", + "windows-release": "^3.1.0" } }, "os-tmpdir": { @@ -8402,7 +8514,7 @@ "integrity": "sha1-Yp0xcVAgnI/VCLoTdxPvS7kg6ds=", "dev": true, "requires": { - "p-map": "1.2.0" + "p-map": "^1.0.0" } }, "p-finally": { @@ -8423,7 +8535,7 @@ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -8432,7 +8544,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.3.0" + "p-limit": "^1.1.0" } }, "p-map": { @@ -8453,7 +8565,7 @@ "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", "dev": true, "requires": { - "retry": "0.12.0" + "retry": "^0.12.0" } }, "p-try": { @@ -8468,7 +8580,7 @@ "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", "dev": true, "requires": { - "callsites": "3.0.0" + "callsites": "^3.0.0" } }, "parse-github-url": { @@ -8483,10 +8595,10 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" }, "dependencies": { "is-extglob": { @@ -8501,7 +8613,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } } } @@ -8512,8 +8624,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "1.3.2", - "json-parse-better-errors": "1.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "parse5": { @@ -8582,7 +8694,7 @@ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "pathval": { @@ -8609,8 +8721,8 @@ "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", "dev": true, "requires": { - "find-up": "2.1.0", - "load-json-file": "4.0.0" + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" } }, "pkg-dir": { @@ -8619,7 +8731,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" } }, "pn": { @@ -8664,7 +8776,7 @@ "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "dev": true, "requires": { - "forwarded": "0.1.2", + "forwarded": "~0.1.2", "ipaddr.js": "1.8.0" } }, @@ -8680,8 +8792,8 @@ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "punycode": { @@ -8720,9 +8832,9 @@ "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", "dev": true, "requires": { - "is-number": "4.0.0", - "kind-of": "6.0.2", - "math-random": "1.0.4" + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" }, "dependencies": { "is-number": { @@ -8757,7 +8869,7 @@ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } } } @@ -8768,10 +8880,10 @@ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "requires": { - "deep-extend": "0.6.0", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" } }, "read-pkg": { @@ -8780,9 +8892,9 @@ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "load-json-file": "4.0.0", - "normalize-package-data": "2.5.0", - "path-type": "3.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, "read-pkg-up": { @@ -8791,8 +8903,8 @@ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "3.0.0" + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" } }, "readable-stream": { @@ -8801,13 +8913,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "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" } }, "redent": { @@ -8816,8 +8928,8 @@ "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", "dev": true, "requires": { - "indent-string": "3.2.0", - "strip-indent": "2.0.0" + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" } }, "redeyed": { @@ -8826,7 +8938,7 @@ "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", "dev": true, "requires": { - "esprima": "4.0.1" + "esprima": "~4.0.0" } }, "regenerator-runtime": { @@ -8841,7 +8953,7 @@ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "regex-not": { @@ -8850,8 +8962,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "regexpp": { @@ -8866,8 +8978,8 @@ "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", "dev": true, "requires": { - "rc": "1.2.8", - "safe-buffer": "5.1.2" + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" } }, "remove-trailing-separator": { @@ -8894,26 +9006,26 @@ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "dev": true, "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.8.0", - "caseless": "0.12.0", - "combined-stream": "1.0.7", - "extend": "3.0.2", - "forever-agent": "0.6.1", - "form-data": "2.3.3", - "har-validator": "5.1.3", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.22", - "oauth-sign": "0.9.0", - "performance-now": "2.1.0", - "qs": "6.5.2", - "safe-buffer": "5.1.2", - "tough-cookie": "2.4.3", - "tunnel-agent": "0.6.0", - "uuid": "3.3.2" + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" } }, "request-promise-core": { @@ -8922,7 +9034,7 @@ "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", "dev": true, "requires": { - "lodash": "4.17.11" + "lodash": "^4.17.11" } }, "request-promise-native": { @@ -8932,8 +9044,8 @@ "dev": true, "requires": { "request-promise-core": "1.1.2", - "stealthy-require": "1.1.1", - "tough-cookie": "2.4.3" + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" } }, "require-directory": { @@ -8960,7 +9072,7 @@ "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", "dev": true, "requires": { - "path-parse": "1.0.6" + "path-parse": "^1.0.6" } }, "resolve-from": { @@ -8981,8 +9093,8 @@ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "ret": { @@ -9003,7 +9115,7 @@ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { - "glob": "7.1.3" + "glob": "^7.1.3" } }, "rollup": { @@ -9013,8 +9125,8 @@ "dev": true, "requires": { "@types/estree": "0.0.39", - "@types/node": "11.9.4", - "acorn": "6.1.0" + "@types/node": "*", + "acorn": "^6.0.5" } }, "rollup-plugin-shim": { @@ -9041,7 +9153,7 @@ "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", "dev": true, "requires": { - "path-parse": "1.0.6" + "path-parse": "^1.0.5" } } } @@ -9052,10 +9164,10 @@ "integrity": "sha512-qwz2Tryspn5QGtPUowq5oumKSxANKdrnfz7C0jm4lKxvRDsNe/hSGsB9FntUul7UeC4TsZEWKErVgE1qWSO0gw==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0", - "jest-worker": "24.0.0", - "serialize-javascript": "1.6.1", - "uglify-js": "3.4.9" + "@babel/code-frame": "^7.0.0", + "jest-worker": "^24.0.0", + "serialize-javascript": "^1.6.1", + "uglify-js": "^3.4.9" } }, "rollup-pluginutils": { @@ -9064,8 +9176,8 @@ "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==", "dev": true, "requires": { - "estree-walker": "0.5.2", - "micromatch": "2.3.11" + "estree-walker": "^0.5.2", + "micromatch": "^2.3.11" }, "dependencies": { "arr-diff": { @@ -9074,7 +9186,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "array-unique": { @@ -9089,9 +9201,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.3" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "expand-brackets": { @@ -9100,7 +9212,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "extglob": { @@ -9109,7 +9221,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "is-extglob": { @@ -9124,7 +9236,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "kind-of": { @@ -9133,7 +9245,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "micromatch": { @@ -9142,19 +9254,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } } } @@ -9165,7 +9277,7 @@ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" } }, "rxjs": { @@ -9174,7 +9286,7 @@ "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", "dev": true, "requires": { - "tslib": "1.9.3" + "tslib": "^1.9.0" } }, "safe-buffer": { @@ -9189,7 +9301,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "safer-buffer": { @@ -9204,7 +9316,7 @@ "integrity": "sha512-LAYs+lChg1v5uKNzPtsgTxSS5hLo8aIhSMCJt1WMpefAxm3D1RTpMwSpb6ebdL31cubiLTnhokVktBW+cv9Y9w==", "dev": true, "requires": { - "xmlchars": "1.3.1" + "xmlchars": "^1.3.1" } }, "semantic-release": { @@ -9213,32 +9325,32 @@ "integrity": "sha512-cax0xPPTtsxHlrty2HxhPql2TTvS74Ni2O8BzwFHxNY/mviVKEhI4OxHzBYJkpVxx1fMVj36+oH7IlP+SJtPNA==", "dev": true, "requires": { - "@semantic-release/commit-analyzer": "6.1.0", - "@semantic-release/error": "2.2.0", - "@semantic-release/github": "5.2.10", - "@semantic-release/npm": "5.1.4", - "@semantic-release/release-notes-generator": "7.1.4", - "aggregate-error": "2.0.0", - "cosmiconfig": "5.0.7", - "debug": "4.1.1", - "env-ci": "3.2.0", - "execa": "1.0.0", - "figures": "2.0.0", - "find-versions": "3.0.0", - "get-stream": "4.1.0", - "git-log-parser": "1.2.0", - "hook-std": "1.2.0", - "hosted-git-info": "2.7.1", - "lodash": "4.17.11", - "marked": "0.6.0", - "marked-terminal": "3.2.0", - "p-locate": "3.0.0", - "p-reduce": "1.0.0", - "read-pkg-up": "4.0.0", - "resolve-from": "4.0.0", - "semver": "5.6.0", - "signale": "1.3.0", - "yargs": "12.0.5" + "@semantic-release/commit-analyzer": "^6.1.0", + "@semantic-release/error": "^2.2.0", + "@semantic-release/github": "^5.1.0", + "@semantic-release/npm": "^5.0.5", + "@semantic-release/release-notes-generator": "^7.1.2", + "aggregate-error": "^2.0.0", + "cosmiconfig": "^5.0.1", + "debug": "^4.0.0", + "env-ci": "^3.0.0", + "execa": "^1.0.0", + "figures": "^2.0.0", + "find-versions": "^3.0.0", + "get-stream": "^4.0.0", + "git-log-parser": "^1.2.0", + "hook-std": "^1.1.0", + "hosted-git-info": "^2.7.1", + "lodash": "^4.17.4", + "marked": "^0.6.0", + "marked-terminal": "^3.2.0", + "p-locate": "^3.0.0", + "p-reduce": "^1.0.0", + "read-pkg-up": "^4.0.0", + "resolve-from": "^4.0.0", + "semver": "^5.4.1", + "signale": "^1.2.1", + "yargs": "^12.0.0" }, "dependencies": { "find-up": { @@ -9247,7 +9359,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -9256,8 +9368,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -9266,7 +9378,7 @@ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -9275,7 +9387,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.1.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -9290,8 +9402,8 @@ "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", "dev": true, "requires": { - "find-up": "3.0.0", - "read-pkg": "3.0.0" + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" } }, "resolve-from": { @@ -9321,18 +9433,18 @@ "dev": true, "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.3", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" }, "dependencies": { "debug": { @@ -9364,9 +9476,9 @@ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dev": true, "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", "send": "0.16.2" } }, @@ -9382,10 +9494,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -9394,7 +9506,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -9411,7 +9523,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -9432,9 +9544,9 @@ "integrity": "sha512-TyFhsQ9wZDYDfsPqWMyjCxsDoMwfpsT0130Mce7wDiVCSDdtWSg83dOqoj8aGpGCs3n1YPcam6sT1OFPuGT/OQ==", "dev": true, "requires": { - "chalk": "2.4.2", - "figures": "2.0.0", - "pkg-conf": "2.1.0" + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" } }, "sinon": { @@ -9443,13 +9555,13 @@ "integrity": "sha512-i6j7sqcLEqTYqUcMV327waI745VASvYuSuQMCjbAwlpAeuCgKZ3LtrjDxAbu+GjNQR0FEDpywtwGCIh8GicNyg==", "dev": true, "requires": { - "@sinonjs/commons": "1.3.0", - "@sinonjs/formatio": "3.1.0", - "@sinonjs/samsam": "3.1.1", - "diff": "3.5.0", - "lolex": "3.1.0", - "nise": "1.4.8", - "supports-color": "5.5.0" + "@sinonjs/commons": "^1.3.0", + "@sinonjs/formatio": "^3.1.0", + "@sinonjs/samsam": "^3.0.2", + "diff": "^3.5.0", + "lolex": "^3.0.0", + "nise": "^1.4.8", + "supports-color": "^5.5.0" } }, "sinon-chai": { @@ -9470,9 +9582,9 @@ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "astral-regex": "1.0.0", - "is-fullwidth-code-point": "2.0.0" + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" } }, "snapdragon": { @@ -9481,14 +9593,14 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" + "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": { @@ -9506,7 +9618,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -9515,7 +9627,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "ms": { @@ -9532,9 +9644,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -9543,7 +9655,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -9552,7 +9664,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -9561,7 +9673,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -9570,9 +9682,9 @@ "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" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -9583,7 +9695,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" }, "dependencies": { "kind-of": { @@ -9592,7 +9704,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -9609,11 +9721,11 @@ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "2.1.2", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "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": { @@ -9622,8 +9734,8 @@ "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", "dev": true, "requires": { - "buffer-from": "1.1.1", - "source-map": "0.6.1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" }, "dependencies": { "source-map": { @@ -9652,8 +9764,8 @@ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "dev": true, "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.3" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { @@ -9668,8 +9780,8 @@ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { - "spdx-exceptions": "2.2.0", - "spdx-license-ids": "3.0.3" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { @@ -9684,7 +9796,7 @@ "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, "requires": { - "through": "2.3.8" + "through": "2" } }, "split-string": { @@ -9693,7 +9805,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "split2": { @@ -9702,7 +9814,7 @@ "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", "dev": true, "requires": { - "through2": "2.0.5" + "through2": "^2.0.2" } }, "sprintf-js": { @@ -9717,15 +9829,15 @@ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "requires": { - "asn1": "0.2.4", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.2", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.2", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "safer-buffer": "2.1.2", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" } }, "static-extend": { @@ -9734,8 +9846,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -9744,7 +9856,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -9767,8 +9879,8 @@ "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", "dev": true, "requires": { - "duplexer2": "0.1.4", - "readable-stream": "2.3.6" + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" } }, "string-width": { @@ -9777,8 +9889,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "string_decoder": { @@ -9787,7 +9899,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -9796,7 +9908,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "strip-bom": { @@ -9829,16 +9941,16 @@ "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", "dev": true, "requires": { - "component-emitter": "1.2.1", - "cookiejar": "2.1.2", - "debug": "3.2.6", - "extend": "3.0.2", - "form-data": "2.3.3", - "formidable": "1.2.1", - "methods": "1.1.2", - "mime": "1.4.1", - "qs": "6.5.2", - "readable-stream": "2.3.6" + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.0", + "debug": "^3.1.0", + "extend": "^3.0.0", + "form-data": "^2.3.1", + "formidable": "^1.2.0", + "methods": "^1.1.1", + "mime": "^1.4.1", + "qs": "^6.5.1", + "readable-stream": "^2.3.5" }, "dependencies": { "debug": { @@ -9847,7 +9959,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "^2.1.1" } } } @@ -9858,8 +9970,8 @@ "integrity": "sha512-WZWbwceHUo2P36RoEIdXvmqfs47idNNZjCuJOqDz6rvtkk8ym56aU5oglORCpPeXGxT7l9rkJ41+O1lffQXYSA==", "dev": true, "requires": { - "methods": "1.1.2", - "superagent": "3.8.3" + "methods": "^1.1.2", + "superagent": "^3.8.3" } }, "supports-color": { @@ -9868,7 +9980,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "supports-hyperlinks": { @@ -9877,8 +9989,8 @@ "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==", "dev": true, "requires": { - "has-flag": "2.0.0", - "supports-color": "5.5.0" + "has-flag": "^2.0.0", + "supports-color": "^5.0.0" }, "dependencies": { "has-flag": { @@ -9901,10 +10013,10 @@ "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", "dev": true, "requires": { - "ajv": "6.9.1", - "lodash": "4.17.11", - "slice-ansi": "2.1.0", - "string-width": "3.0.0" + "ajv": "^6.9.1", + "lodash": "^4.17.11", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" }, "dependencies": { "ansi-regex": { @@ -9919,9 +10031,9 @@ "integrity": "sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew==", "dev": true, "requires": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.0.0" } }, "strip-ansi": { @@ -9930,7 +10042,7 @@ "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", "dev": true, "requires": { - "ansi-regex": "4.0.0" + "ansi-regex": "^4.0.0" } } } @@ -9965,8 +10077,8 @@ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, "tmp": { @@ -9975,7 +10087,7 @@ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.2" } }, "to-fast-properties": { @@ -9990,7 +10102,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -9999,7 +10111,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -10010,10 +10122,10 @@ "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" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -10022,8 +10134,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "tough-cookie": { @@ -10032,8 +10144,8 @@ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "dev": true, "requires": { - "psl": "1.1.31", - "punycode": "1.4.1" + "psl": "^1.1.24", + "punycode": "^1.4.1" }, "dependencies": { "punycode": { @@ -10050,7 +10162,7 @@ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "dev": true, "requires": { - "punycode": "2.1.1" + "punycode": "^2.1.0" } }, "traverse": { @@ -10083,11 +10195,11 @@ "integrity": "sha512-MosTrinKmaAcWgO8tqMjMJB22h+sp3Rd1i4fdoWY4mhBDekOwIAKI/bzmRi7IcbCmjquccYg2gcF6NBkLgr0Tw==", "dev": true, "requires": { - "arg": "4.1.0", - "diff": "3.5.0", - "make-error": "1.3.5", - "source-map-support": "0.5.10", - "yn": "3.0.0" + "arg": "^4.1.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "source-map-support": "^0.5.6", + "yn": "^3.0.0" } }, "tsconfig-paths": { @@ -10096,11 +10208,11 @@ "integrity": "sha512-zZEYFo4sjORK8W58ENkRn9s+HmQFkkwydDG7My5s/fnfr2YYCaiyXe/HBUcIgU8epEKOXwiahOO+KZYjiXlWyQ==", "dev": true, "requires": { - "@types/json5": "0.0.29", - "deepmerge": "2.2.1", - "json5": "1.0.1", - "minimist": "1.2.0", - "strip-bom": "3.0.0" + "@types/json5": "^0.0.29", + "deepmerge": "^2.0.1", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" }, "dependencies": { "deepmerge": { @@ -10123,7 +10235,7 @@ "integrity": "sha512-XQdPhgcoTbCD8baXC38PQ0vpTZ8T3YrE+vR66YIj/xvDt1//8iAhafpIT/4DmvzzC1QFapEImERu48Pa01dIUA==", "dev": true, "requires": { - "tslib": "1.9.3" + "tslib": "^1.8.1" } }, "tunnel-agent": { @@ -10132,7 +10244,7 @@ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -10147,7 +10259,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-detect": { @@ -10163,7 +10275,7 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.22" + "mime-types": "~2.1.18" } }, "typescript": { @@ -10178,8 +10290,8 @@ "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "dev": true, "requires": { - "commander": "2.17.1", - "source-map": "0.6.1" + "commander": "~2.17.1", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -10196,10 +10308,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -10208,7 +10320,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -10217,10 +10329,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -10231,7 +10343,7 @@ "integrity": "sha512-eRHEHhChCBHrZsA4WEhdgiOKgdvgrMIHwnwnqD0r5C6AO8kwKcG7qSku3iXdhvHL3YvsS9ZkSGN8h/hIpoFC8g==", "dev": true, "requires": { - "os-name": "3.0.0" + "os-name": "^3.0.0" } }, "universalify": { @@ -10252,8 +10364,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -10262,9 +10374,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -10292,7 +10404,7 @@ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, "requires": { - "punycode": "2.1.1" + "punycode": "^2.1.0" } }, "urix": { @@ -10343,8 +10455,8 @@ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "spdx-correct": "3.1.0", - "spdx-expression-parse": "3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "vary": { @@ -10359,9 +10471,9 @@ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" } }, "w3c-hr-time": { @@ -10370,7 +10482,7 @@ "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", "dev": true, "requires": { - "browser-process-hrtime": "0.1.3" + "browser-process-hrtime": "^0.1.2" } }, "w3c-xmlserializer": { @@ -10379,9 +10491,9 @@ "integrity": "sha512-XZGI1OH/OLQr/NaJhhPmzhngwcAnZDLytsvXnRmlYeRkmbb0I7sqFFA22erq4WQR0sUu17ZSQOAV9mFwCqKRNg==", "dev": true, "requires": { - "domexception": "1.0.1", - "webidl-conversions": "4.0.2", - "xml-name-validator": "3.0.0" + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" } }, "webidl-conversions": { @@ -10411,9 +10523,9 @@ "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", "dev": true, "requires": { - "lodash.sortby": "4.7.0", - "tr46": "1.0.1", - "webidl-conversions": "4.0.2" + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } }, "which": { @@ -10422,7 +10534,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -10437,7 +10549,7 @@ "integrity": "sha512-hBb7m7acFgQPQc222uEQTmdcGLeBmQLNLFIh0rDk3CwFOBrfjefLzEfEfmpMq8Af/n/GnFf3eYf203FY1PmudA==", "dev": true, "requires": { - "execa": "0.10.0" + "execa": "^0.10.0" }, "dependencies": { "execa": { @@ -10446,13 +10558,13 @@ "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", "dev": true, "requires": { - "cross-spawn": "6.0.5", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^6.0.0", + "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" } }, "get-stream": { @@ -10475,8 +10587,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -10491,7 +10603,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -10500,9 +10612,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -10511,7 +10623,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -10528,7 +10640,7 @@ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "dev": true, "requires": { - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" } }, "ws": { @@ -10537,7 +10649,7 @@ "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", "dev": true, "requires": { - "async-limiter": "1.0.0" + "async-limiter": "~1.0.0" } }, "xml-name-validator": { @@ -10570,18 +10682,18 @@ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.3", - "os-locale": "3.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "11.1.1" + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" }, "dependencies": { "find-up": { @@ -10590,7 +10702,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -10599,8 +10711,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -10609,7 +10721,7 @@ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -10618,7 +10730,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.1.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -10635,8 +10747,8 @@ "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, "requires": { - "camelcase": "5.0.0", - "decamelize": "1.2.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" }, "dependencies": { "camelcase": { diff --git a/package.json b/package.json index 15d7512ca..9c9568958 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "test": "npm run unit && npm run e2e", "coverage-html": "nyc npm run unit && nyc report --reporter=html", "coverage-coveralls": "nyc npm run unit && nyc report --reporter=text-lcov | coveralls", - "build": "rollup -c && ls -lh dist", + "build": "rollup -c rollup.config.ts && ls -lh dist", "version": "npm run build && git add -A dist" }, "repository": { @@ -46,8 +46,14 @@ "@semantic-release/git": "^7.0.8", "@semantic-release/npm": "^5.1.4", "@semantic-release/release-notes-generator": "^7.1.4", + "@types/chai": "^4.1.7", + "@types/chai-as-promised": "^7.1.0", + "@types/express": "^4.16.1", "@types/jsdom": "^12.2.2", "@types/mocha": "^5.2.6", + "@types/sinon": "^7.0.6", + "@types/sinon-chai": "^3.2.2", + "@types/supertest": "^2.0.7", "@typescript-eslint/eslint-plugin": "^1.3.0", "chai": "^4.2.0", "chai-as-promised": "^7.1.1", @@ -75,6 +81,7 @@ "supertest": "^3.4.2", "ts-node": "^8.0.2", "tsconfig-paths": "^3.8.0", + "tslib": "^1.9.3", "typescript": "^3.3.3" }, "release": { diff --git a/rollup.config.js b/rollup.config.ts similarity index 100% rename from rollup.config.js rename to rollup.config.ts diff --git a/src/builtin/filters/array.ts b/src/builtin/filters/array.ts index f6f63ba25..fb9f8f46d 100644 --- a/src/builtin/filters/array.ts +++ b/src/builtin/filters/array.ts @@ -1,24 +1,23 @@ import { last } from 'src/util/underscore' export default { - 'join': (v, arg) => v.join(arg === undefined ? ' ' : arg), - 'last': v => last(v), - 'first': v => v[0], - 'map': (arr, arg) => arr.map(v => v[arg]), - 'reverse': v => v.reverse(), - 'sort': (v, arg) => v.sort(arg), - 'size': v => v.length, - 'slice': (v, begin, length) => { + 'join': (v: any[], arg: string) => v.join(arg === undefined ? ' ' : arg), + 'last': (v: T[]): T => last(v), + 'first': (v: T[]): T => v[0], + 'map': (arr: {[key: string]: T1}[], arg: string): T1[] => arr.map(v => v[arg]), + 'reverse': (v: any[]) => v.reverse(), + 'sort': (v: T[], arg: (lhs: T, rhs: T) => number) => v.sort(arg), + 'size': (v: string | any[]) => v.length, + 'concat': (v: T1[], arg: T2[] | T2): Array => Array.prototype.concat.call(v, arg), + 'slice': (v: T[], begin: number, length: number): T[] => { if (length === undefined) length = 1 return v.slice(begin, begin + length) }, - 'uniq': function (arr) { + 'uniq': function (arr: T[]): T[] { const u = {} return (arr || []).filter(val => { - if (u.hasOwnProperty(val)) { - return false - } - u[val] = true + if (u.hasOwnProperty(String(val))) return false + u[String(val)] = true return true }) } diff --git a/src/builtin/filters/date.ts b/src/builtin/filters/date.ts index 06f807c28..59e1400a0 100644 --- a/src/builtin/filters/date.ts +++ b/src/builtin/filters/date.ts @@ -2,7 +2,7 @@ import strftime from 'src/util/strftime' import { isString } from 'src/util/underscore' export default { - 'date': (v, arg) => { + 'date': (v: string | Date, arg: string) => { let date = v if (v === 'now') { date = new Date() @@ -13,6 +13,6 @@ export default { } } -function isValidDate (date) { +function isValidDate (date: any): date is Date { return date instanceof Date && !isNaN(date.getTime()) } diff --git a/src/builtin/filters/html.ts b/src/builtin/filters/html.ts index 2ba3a6453..4fb1977a2 100644 --- a/src/builtin/filters/html.ts +++ b/src/builtin/filters/html.ts @@ -13,17 +13,17 @@ const unescapeMap = { ''': "'" } -function escape (str) { +function escape (str: string) { return String(str).replace(/&|<|>|"|'/g, m => escapeMap[m]) } -function unescape (str) { +function unescape (str: string) { return String(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m]) } export default { 'escape': escape, - 'escape_once': str => escape(unescape(str)), - 'newline_to_br': v => v.replace(/\n/g, '
'), - 'strip_html': v => String(v).replace(/|||<.*?>/g, '') + 'escape_once': (str: string) => escape(unescape(str)), + 'newline_to_br': (v: string) => v.replace(/\n/g, '
'), + 'strip_html': (v: string) => v.replace(/|||<.*?>/g, '') } diff --git a/src/builtin/filters/math.ts b/src/builtin/filters/math.ts index 378248e1c..d2b9e2c47 100644 --- a/src/builtin/filters/math.ts +++ b/src/builtin/filters/math.ts @@ -1,25 +1,25 @@ export default { - 'abs': v => Math.abs(v), - 'ceil': v => Math.ceil(v), - 'divided_by': (v, arg) => v / arg, - 'floor': v => Math.floor(v), - 'minus': bindFixed((v, arg) => v - arg), - 'modulo': bindFixed((v, arg) => v % arg), - 'round': (v, arg) => { - const amp = Math.pow(10, arg || 0) + 'abs': (v: number) => Math.abs(v), + 'ceil': (v: number) => Math.ceil(v), + 'divided_by': (v: number, arg: number) => v / arg, + 'floor': (v: number) => Math.floor(v), + 'minus': bindFixed((v: number, arg: number) => v - arg), + 'modulo': bindFixed((v: number, arg: number) => v % arg), + 'round': (v: number, arg: number = 0) => { + const amp = Math.pow(10, arg) return Math.round(v * amp) / amp }, - 'plus': bindFixed((v, arg) => Number(v) + Number(arg)), - 'times': (v, arg) => v * arg + 'plus': bindFixed((v: number, arg: number) => Number(v) + Number(arg)), + 'times': (v: number, arg: number) => v * arg } -function getFixed (v) { +function getFixed (v: number) { const p = String(v).split('.') return (p.length > 1) ? p[1].length : 0 } -function bindFixed (cb) { - return (l, r) => { +function bindFixed (cb: (v: number, arg: number) => number) { + return (l: number, r: number) => { const f = Math.max(getFixed(l), getFixed(r)) return cb(l, r).toFixed(f) } diff --git a/src/builtin/filters/object.ts b/src/builtin/filters/object.ts index 8cc0dcccc..3e96bad2d 100644 --- a/src/builtin/filters/object.ts +++ b/src/builtin/filters/object.ts @@ -1,5 +1,5 @@ import { isTruthy } from 'src/render/syntax' export default { - 'default': (v, arg) => isTruthy(v) ? v : arg + 'default': (v: T1, arg: T2): T1 | T2 => isTruthy(v) ? v : arg } diff --git a/src/builtin/filters/string.ts b/src/builtin/filters/string.ts index 1a5f1c054..0e8bf3eb9 100644 --- a/src/builtin/filters/string.ts +++ b/src/builtin/filters/string.ts @@ -1,32 +1,30 @@ +import FilterImpl from "src/template/filter/filter-impl"; + export default { - 'append': (v, arg) => v + arg, - 'prepend': (v, arg) => arg + v, - 'capitalize': str => String(str).charAt(0).toUpperCase() + str.slice(1), - 'concat': (v, arg) => Array.prototype.concat.call(v, arg), - 'lstrip': v => String(v).replace(/^\s+/, ''), - 'downcase': v => v.toLowerCase(), - 'upcase': str => String(str).toUpperCase(), - 'remove': (v, arg) => v.split(arg).join(''), - 'remove_first': (v, l) => v.replace(l, ''), - 'replace': (v, pattern, replacement) => + 'append': (v: string, arg: string) => v + arg, + 'prepend': (v: string, arg: string) => arg + v, + 'capitalize': (str: string) => String(str).charAt(0).toUpperCase() + str.slice(1), + 'lstrip': (v: string) => String(v).replace(/^\s+/, ''), + 'downcase': (v: string) => v.toLowerCase(), + 'upcase': (str: string) => String(str).toUpperCase(), + 'remove': (v: string, arg: string) => v.split(arg).join(''), + 'remove_first': (v: string, l: string) => v.replace(l, ''), + 'replace': (v: string, pattern: string, replacement: string) => String(v).split(pattern).join(replacement), - 'replace_first': (v, arg1, arg2) => String(v).replace(arg1, arg2), - 'rstrip': str => String(str).replace(/\s+$/, ''), - 'split': (v, arg) => String(v).split(arg), - 'strip': (v) => String(v).trim(), - 'strip_newlines': v => String(v).replace(/\n/g, ''), - 'truncate': (v, l, o) => { + 'replace_first': (v: string, arg1: string, arg2: string) => String(v).replace(arg1, arg2), + 'rstrip': (str: string) => String(str).replace(/\s+$/, ''), + 'split': (v: string, arg: string) => String(v).split(arg), + 'strip': (v: string) => String(v).trim(), + 'strip_newlines': (v: string) => String(v).replace(/\n/g, ''), + 'truncate': (v: string, l: number = 16, o: string = '...') => { v = String(v) - o = (o === undefined) ? '...' : o - l = l || 16 if (v.length <= l) return v return v.substr(0, l - o.length) + o }, - 'truncatewords': (v, l, o) => { - if (o === undefined) o = '...' + 'truncatewords': (v: string, l: number = v.length, o: string = '...') => { const arr = v.split(' ') let ret = arr.slice(0, l).join(' ') if (arr.length > l) ret += o return ret } -} +} as {[key: string]: FilterImpl} \ No newline at end of file diff --git a/src/builtin/filters/url.ts b/src/builtin/filters/url.ts index 9cedeb3d2..f43025062 100644 --- a/src/builtin/filters/url.ts +++ b/src/builtin/filters/url.ts @@ -1,4 +1,4 @@ export default { - 'url_decode': x => x.split('+').map(decodeURIComponent).join(' '), - 'url_encode': x => x.split(' ').map(encodeURIComponent).join('+') -} + 'url_decode': (x: string) => x.split('+').map(decodeURIComponent).join(' '), + 'url_encode': (x: string) => x.split(' ').map(encodeURIComponent).join('+') +} \ No newline at end of file diff --git a/src/builtin/tags/assign.ts b/src/builtin/tags/assign.ts index 0ee516490..c8edfbc6b 100644 --- a/src/builtin/tags/assign.ts +++ b/src/builtin/tags/assign.ts @@ -1,20 +1,23 @@ import assert from 'src/util/assert' import { identifier } from 'src/parser/lexical' import { AssignScope } from 'src/scope/scopes' +import TagToken from 'src/parser/tag-token'; +import Scope from 'src/scope/scope'; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; const re = new RegExp(`(${identifier.source})\\s*=([^]*)`) export default { - parse: function (token) { - const match = token.args.match(re) + parse: function (token: TagToken) { + const match = token.args.match(re) as RegExpMatchArray assert(match, `illegal token ${token.raw}`) this.key = match[1] this.value = match[2] }, - render: function (scope) { + render: function (scope: Scope) { const ctx = new AssignScope() ctx[this.key] = this.liquid.evalValue(this.value, scope) scope.push(ctx) return Promise.resolve('') } -} +} as ITagImplOptions \ No newline at end of file diff --git a/src/builtin/tags/block.ts b/src/builtin/tags/block.ts index 38926e5ef..a5b83c7eb 100644 --- a/src/builtin/tags/block.ts +++ b/src/builtin/tags/block.ts @@ -1,20 +1,25 @@ import BlockMode from 'src/scope/block-mode' +import TagToken from 'src/parser/tag-token'; +import Token from 'src/parser/token'; +import ITemplate from 'src/template/itemplate' +import Scope from 'src/scope/scope'; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +import ParseStream from 'src/parser/parse-stream'; export default { - parse: function (token, remainTokens) { + parse: function (token: TagToken, remainTokens: Token[]) { const match = /\w+/.exec(token.args) this.block = match ? match[0] : '' - - this.tpls = [] - const stream = this.liquid.parser.parseStream(remainTokens) + this.tpls = [] as ITemplate[] + const stream: ParseStream = this.liquid.parser.parseStream(remainTokens) .on('tag:endblock', () => stream.stop()) - .on('template', tpl => this.tpls.push(tpl)) + .on('template', (tpl: ITemplate) => this.tpls.push(tpl)) .on('end', () => { throw new Error(`tag ${token.raw} not closed`) }) stream.start() }, - render: async function (scope) { + render: async function (scope: Scope) { const childDefined = scope.blocks[this.block] const html = childDefined !== undefined ? childDefined @@ -26,4 +31,4 @@ export default { } return html } -} +} as ITagImplOptions diff --git a/src/builtin/tags/capture.ts b/src/builtin/tags/capture.ts index 273991fd5..dad1bec47 100644 --- a/src/builtin/tags/capture.ts +++ b/src/builtin/tags/capture.ts @@ -4,12 +4,13 @@ import { CaptureScope } from 'src/scope/scopes' import TagToken from 'src/parser/tag-token' import Token from 'src/parser/token' import Scope from 'src/scope/scope' +import ITagImplOptions from 'src/template/tag/itag-impl-options'; const re = new RegExp(`(${identifier.source})`) export default { parse: function (tagToken: TagToken, remainTokens: Token[]) { - const match = tagToken.args.match(re) + const match = tagToken.args.match(re) as RegExpMatchArray assert(match, `${tagToken.args} not valid identifier`) this.variable = match[1] @@ -17,7 +18,7 @@ export default { const stream = this.liquid.parser.parseStream(remainTokens) stream.on('tag:endcapture', () => stream.stop()) - .on('template', tpl => this.templates.push(tpl)) + .on('template', (tpl) => this.templates.push(tpl)) .on('end', () => { throw new Error(`tag ${tagToken.raw} not closed`) }) @@ -29,4 +30,4 @@ export default { ctx[this.variable] = html scope.push(ctx) } -} +} as ITagImplOptions diff --git a/src/builtin/tags/case.ts b/src/builtin/tags/case.ts index cbc29d4b6..18a7f654f 100644 --- a/src/builtin/tags/case.ts +++ b/src/builtin/tags/case.ts @@ -1,14 +1,20 @@ import { evalExp } from 'src/render/syntax' +import TagToken from 'src/parser/tag-token'; +import Token from 'src/parser/token'; +import Scope from 'src/scope/scope'; +import ITemplate from 'src/template/itemplate'; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +import ParseStream from 'src/parser/parse-stream'; export default { - parse: function (tagToken, remainTokens) { + parse: function (tagToken: TagToken, remainTokens: Token[]) { this.cond = tagToken.args this.cases = [] this.elseTemplates = [] - let p = [] - const stream = this.liquid.parser.parseStream(remainTokens) - .on('tag:when', token => { + let p: ITemplate[] = [] + const stream: ParseStream = this.liquid.parser.parseStream(remainTokens) + .on('tag:when', (token: TagToken) => { this.cases.push({ val: token.args, templates: p = [] @@ -16,7 +22,7 @@ export default { }) .on('tag:else', () => (p = this.elseTemplates)) .on('tag:endcase', () => stream.stop()) - .on('template', tpl => p.push(tpl)) + .on('template', (tpl: ITemplate) => p.push(tpl)) .on('end', () => { throw new Error(`tag ${tagToken.raw} not closed`) }) @@ -24,7 +30,7 @@ export default { stream.start() }, - render: function (scope) { + render: function (scope: Scope) { for (let i = 0; i < this.cases.length; i++) { const branch = this.cases[i] const val = evalExp(branch.val, scope) @@ -35,4 +41,4 @@ export default { } return this.liquid.renderer.renderTemplates(this.elseTemplates, scope) } -} +} as ITagImplOptions \ No newline at end of file diff --git a/src/builtin/tags/comment.ts b/src/builtin/tags/comment.ts index 6f0cc1beb..64612b58d 100644 --- a/src/builtin/tags/comment.ts +++ b/src/builtin/tags/comment.ts @@ -1,8 +1,12 @@ +import TagToken from "src/parser/tag-token"; +import Token from "src/parser/token"; +import ITagImplOptions from "src/template/tag/itag-impl-options"; + export default { - parse: function (tagToken, remainTokens) { + parse: function (tagToken: TagToken, remainTokens: Token[]) { const stream = this.liquid.parser.parseStream(remainTokens) stream - .on('token', token => { + .on('token', (token: TagToken) => { if (token.name === 'endcomment') stream.stop() }) .on('end', () => { @@ -10,4 +14,4 @@ export default { }) stream.start() } -} +} as ITagImplOptions \ No newline at end of file diff --git a/src/builtin/tags/cycle.ts b/src/builtin/tags/cycle.ts index 6b3df487d..ef51c16e1 100644 --- a/src/builtin/tags/cycle.ts +++ b/src/builtin/tags/cycle.ts @@ -1,13 +1,16 @@ import assert from 'src/util/assert' import { value as rValue } from 'src/parser/lexical' import { evalValue } from 'src/render/syntax' +import TagToken from 'src/parser/tag-token'; +import Scope from 'src/scope/scope'; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; const groupRE = new RegExp(`^(?:(${rValue.source})\\s*:\\s*)?(.*)$`) const candidatesRE = new RegExp(rValue.source, 'g') -export default { - parse: function (tagToken) { - let match = groupRE.exec(tagToken.args) +export default { + parse: function (tagToken: TagToken) { + let match: RegExpExecArray | null = groupRE.exec(tagToken.args) as RegExpExecArray assert(match, `illegal tag: ${tagToken.raw}`) this.group = match[1] || '' @@ -21,11 +24,10 @@ export default { assert(this.candidates.length, `empty candidates: ${tagToken.raw}`) }, - render: function (scope) { + render: function (scope: Scope) { const group = evalValue(this.group, scope) const fingerprint = `cycle:${group}:` + this.candidates.join(',') - - const groups = scope.opts.groups = scope.opts.groups || {} + const groups = scope.groups let idx = groups[fingerprint] if (idx === undefined) { @@ -38,4 +40,4 @@ export default { return evalValue(candidate, scope) } -} +} \ No newline at end of file diff --git a/src/builtin/tags/decrement.ts b/src/builtin/tags/decrement.ts index ba0adeacf..6fa56b422 100644 --- a/src/builtin/tags/decrement.ts +++ b/src/builtin/tags/decrement.ts @@ -3,10 +3,11 @@ import { identifier } from 'src/parser/lexical' import { CaptureScope, AssignScope, DecrementScope } from 'src/scope/scopes' import TagToken from 'src/parser/tag-token' import Scope from 'src/scope/scope' +import ITagImplOptions from 'src/template/tag/itag-impl-options'; export default { parse: function (token: TagToken) { - const match = token.args.match(identifier) + const match = token.args.match(identifier) as RegExpMatchArray assert(match, `illegal identifier ${token.args}`) this.variable = match[0] }, @@ -26,4 +27,4 @@ export default { } return --context[this.variable] } -} +} as ITagImplOptions \ No newline at end of file diff --git a/src/builtin/tags/for.ts b/src/builtin/tags/for.ts index 0d511a3b8..8b4429c6a 100644 --- a/src/builtin/tags/for.ts +++ b/src/builtin/tags/for.ts @@ -3,7 +3,13 @@ import { isString, isObject, isArray } from 'src/util/underscore' import { evalExp } from 'src/render/syntax' import assert from 'src/util/assert' import { identifier, value, hash } from 'src/parser/lexical' -import { RenderBreakError } from 'src/util/error' +import TagToken from 'src/parser/tag-token'; +import Token from 'src/parser/token'; +import Scope from 'src/scope/scope'; +import Hash from 'src/template/tag/hash'; +import ITemplate from 'src/template/itemplate'; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +import ParseStream from 'src/parser/parse-stream'; const re = new RegExp(`^(${identifier.source})\\s+in\\s+` + `(${value.source})` + @@ -11,83 +17,83 @@ const re = new RegExp(`^(${identifier.source})\\s+in\\s+` + `(?:\\s+(reversed))?` + `(?:\\s+${hash.source})*$`) -function parse (tagToken, remainTokens) { - const match = re.exec(tagToken.args) - assert(match, `illegal tag: ${tagToken.raw}`) - this.variable = match[1] - this.collection = match[2] - this.reversed = !!match[3] - - this.templates = [] - this.elseTemplates = [] - - let p - const stream = this.liquid.parser.parseStream(remainTokens) - .on('start', () => (p = this.templates)) - .on('tag:else', () => (p = this.elseTemplates)) - .on('tag:endfor', () => stream.stop()) - .on('template', tpl => p.push(tpl)) - .on('end', () => { - throw new Error(`tag ${tagToken.raw} not closed`) +export default { + type: 'block', + parse: function (tagToken: TagToken, remainTokens: Token[]) { + const match = re.exec(tagToken.args) as RegExpExecArray + assert(match, `illegal tag: ${tagToken.raw}`) + this.variable = match[1] + this.collection = match[2] + this.reversed = !!match[3] + + this.templates = [] + this.elseTemplates = [] + + let p + const stream: ParseStream = this.liquid.parser.parseStream(remainTokens) + .on('start', () => (p = this.templates)) + .on('tag:else', () => (p = this.elseTemplates)) + .on('tag:endfor', () => stream.stop()) + .on('template', (tpl: ITemplate) => p.push(tpl)) + .on('end', () => { + throw new Error(`tag ${tagToken.raw} not closed`) + }) + + stream.start() + }, + render: async function (scope: Scope, hash: Hash) { + let collection = evalExp(this.collection, scope) + + if (!isArray(collection)) { + if (isString(collection) && collection.length > 0) { + collection = [collection] as string[] + } else if (isObject(collection)) { + collection = Object.keys(collection).map((key) => [key, collection[key]]) as Array<[string, any]> + } + } + if (!isArray(collection) || !collection.length) { + return this.liquid.renderer.renderTemplates(this.elseTemplates, scope) + } + + const offset = hash.offset || 0 + const limit = (hash.limit === undefined) ? collection.length : hash.limit + + collection = collection.slice(offset, offset + limit) + if (this.reversed) collection.reverse() + + const contexts = collection.map((item: string, i: number) => { + const ctx = {} + ctx[this.variable] = item + ctx['forloop'] = { + first: i === 0, + index: i + 1, + index0: i, + last: i === collection.length - 1, + length: collection.length, + rindex: collection.length - i, + rindex0: collection.length - i - 1 + } + return ctx }) - - stream.start() -} - -async function render (scope, hash) { - let collection = evalExp(this.collection, scope) - - if (!isArray(collection)) { - if (isString(collection) && collection.length > 0) { - collection = [collection] - } else if (isObject(collection)) { - collection = Object.keys(collection).map((key) => [key, collection[key]]) - } + + let html = '' + let finished = false + await mapSeries(contexts, async context => { + if (finished) return + + scope.push(context) + try { + html += await this.liquid.renderer.renderTemplates(this.templates, scope) + } catch (e) { + if (e.name === 'RenderBreakError') { + html += e.resolvedHTML + if (e.message === 'break') { + finished = true + } + } else throw e + } + scope.pop(context) + }) + return html } - if (!isArray(collection) || !collection.length) { - return this.liquid.renderer.renderTemplates(this.elseTemplates, scope) - } - - const offset = hash.offset || 0 - const limit = (hash.limit === undefined) ? collection.length : hash.limit - - collection = collection.slice(offset, offset + limit) - if (this.reversed) collection.reverse() - - const contexts = collection.map((item, i) => { - const ctx = {} - ctx[this.variable] = item - ctx['forloop'] = { - first: i === 0, - index: i + 1, - index0: i, - last: i === collection.length - 1, - length: collection.length, - rindex: collection.length - i, - rindex0: collection.length - i - 1 - } - return ctx - }) - - let html = '' - let finished = false - await mapSeries(contexts, async context => { - if (finished) return - - scope.push(context) - try { - html += await this.liquid.renderer.renderTemplates(this.templates, scope) - } catch (e) { - if (e instanceof RenderBreakError) { - html += e.resolvedHTML - if (e.message === 'break') { - finished = true - } - } else throw e - } - scope.pop(context) - }) - return html -} - -export default { parse, render } +} \ No newline at end of file diff --git a/src/builtin/tags/if.ts b/src/builtin/tags/if.ts index e3f5dc226..eabce1ba6 100644 --- a/src/builtin/tags/if.ts +++ b/src/builtin/tags/if.ts @@ -1,17 +1,23 @@ import { evalExp, isTruthy } from 'src/render/syntax' +import TagToken from 'src/parser/tag-token'; +import Token from 'src/parser/token'; +import Scope from 'src/scope/scope'; +import ITemplate from 'src/template/itemplate'; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +import ParseStream from 'src/parser/parse-stream'; export default { - parse: function (tagToken, remainTokens) { + parse: function (tagToken: TagToken, remainTokens: Token[]) { this.branches = [] this.elseTemplates = [] let p - const stream = this.liquid.parser.parseStream(remainTokens) + const stream: ParseStream = this.liquid.parser.parseStream(remainTokens) .on('start', () => this.branches.push({ cond: tagToken.args, templates: (p = []) })) - .on('tag:elsif', token => { + .on('tag:elsif', (token: TagToken) => { this.branches.push({ cond: token.args, templates: p = [] @@ -19,7 +25,7 @@ export default { }) .on('tag:else', () => (p = this.elseTemplates)) .on('tag:endif', () => stream.stop()) - .on('template', tpl => p.push(tpl)) + .on('template', (tpl: ITemplate) => p.push(tpl)) .on('end', () => { throw new Error(`tag ${tagToken.raw} not closed`) }) @@ -27,7 +33,7 @@ export default { stream.start() }, - render: function (scope) { + render: function (scope: Scope) { for (const branch of this.branches) { const cond = evalExp(branch.cond, scope) if (isTruthy(cond)) { @@ -36,4 +42,4 @@ export default { } return this.liquid.renderer.renderTemplates(this.elseTemplates, scope) } -} +} as ITagImplOptions diff --git a/src/builtin/tags/include.ts b/src/builtin/tags/include.ts index 615d65d84..3e2f0d6aa 100644 --- a/src/builtin/tags/include.ts +++ b/src/builtin/tags/include.ts @@ -2,12 +2,16 @@ import assert from 'src/util/assert' import { value, quotedLine } from 'src/parser/lexical' import { evalValue } from 'src/render/syntax' import BlockMode from 'src/scope/block-mode' +import TagToken from 'src/parser/tag-token'; +import Scope from 'src/scope/scope'; +import Hash from 'src/template/tag/hash'; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; const staticFileRE = /[^\s,]+/ const withRE = new RegExp(`with\\s+(${value.source})`) -export default { - parse: function (token) { +export default { + parse: function (token: TagToken) { let match = staticFileRE.exec(token.args) if (match) { this.staticValue = match[0] @@ -23,7 +27,7 @@ export default { this.with = match[1] } }, - render: async function (scope, hash) { + render: async function (scope: Scope, hash: Hash) { let filepath if (scope.opts.dynamicPartials) { if (quotedLine.exec(this.value)) { diff --git a/src/builtin/tags/increment.ts b/src/builtin/tags/increment.ts index 5cadcf10d..c5d91e306 100644 --- a/src/builtin/tags/increment.ts +++ b/src/builtin/tags/increment.ts @@ -1,12 +1,13 @@ import assert from 'src/util/assert' import { identifier } from 'src/parser/lexical' import { CaptureScope, AssignScope, IncrementScope } from 'src/scope/scopes' +import ITagImplOptions from 'src/template/tag/itag-impl-options'; export default { parse: function (token) { const match = token.args.match(identifier) assert(match, `illegal identifier ${token.args}`) - this.variable = match[0] + this.variable = match![0] }, render: function (scope) { let context = scope.findContextFor( @@ -26,4 +27,4 @@ export default { context[this.variable]++ return val } -} +} as ITagImplOptions \ No newline at end of file diff --git a/src/builtin/tags/layout.ts b/src/builtin/tags/layout.ts index 69942e102..f6ccb9f62 100644 --- a/src/builtin/tags/layout.ts +++ b/src/builtin/tags/layout.ts @@ -2,11 +2,16 @@ import assert from 'src/util/assert' import { value as rValue } from 'src/parser/lexical' import { evalValue } from 'src/render/syntax' import BlockMode from 'src/scope/block-mode' +import TagToken from 'src/parser/tag-token'; +import Token from 'src/parser/token'; +import Scope from 'src/scope/scope'; +import Hash from 'src/template/tag/hash'; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; const staticFileRE = /\S+/ export default { - parse: function (token, remainTokens) { + parse: function (token: TagToken, remainTokens: Token[]) { let match = staticFileRE.exec(token.args) if (match) { this.staticLayout = match[0] @@ -19,7 +24,7 @@ export default { this.tpls = this.liquid.parser.parse(remainTokens) }, - render: async function (scope, hash) { + render: async function (scope: Scope, hash: Hash) { const layout = scope.opts.dynamicPartials ? evalValue(this.layout, scope) : this.staticLayout @@ -38,4 +43,4 @@ export default { scope.pop(hash) return partial } -} +} as ITagImplOptions diff --git a/src/builtin/tags/raw.ts b/src/builtin/tags/raw.ts index 280f09a04..8c6579d29 100644 --- a/src/builtin/tags/raw.ts +++ b/src/builtin/tags/raw.ts @@ -1,10 +1,14 @@ -export default { - parse: function (tagToken, remainTokens) { +import TagToken from "src/parser/tag-token"; +import Token from "src/parser/token"; +import ITagImplOptions from "src/template/tag/itag-impl-options"; + +export default { + parse: function (tagToken: TagToken, remainTokens: Token[]) { this.tokens = [] const stream = this.liquid.parser.parseStream(remainTokens) stream - .on('token', token => { + .on('token', (token: TagToken) => { if (token.name === 'endraw') stream.stop() else this.tokens.push(token) }) @@ -14,6 +18,6 @@ export default { stream.start() }, render: function () { - return this.tokens.map(token => token.raw).join('') + return this.tokens.map((token: Token) => token.raw).join('') } } diff --git a/src/builtin/tags/tablerow.ts b/src/builtin/tags/tablerow.ts index 1c05d58c9..2494a07fc 100644 --- a/src/builtin/tags/tablerow.ts +++ b/src/builtin/tags/tablerow.ts @@ -2,14 +2,21 @@ import { mapSeries } from 'src/util/promise' import assert from 'src/util/assert' import { evalExp } from 'src/render/syntax' import { identifier, value, hash } from 'src/parser/lexical' +import TagToken from 'src/parser/tag-token'; +import Token from 'src/parser/token'; +import ITemplate from 'src/template/itemplate'; +import Scope from 'src/scope/scope'; +import Hash from 'src/template/tag/hash'; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +import ParseStream from 'src/parser/parse-stream'; const re = new RegExp(`^(${identifier.source})\\s+in\\s+` + `(${value.source})` + `(?:\\s+${hash.source})*$`) export default { - parse: function (tagToken, remainTokens) { - const match = re.exec(tagToken.args) + parse: function (tagToken: TagToken, remainTokens: Token[]) { + const match = re.exec(tagToken.args) as RegExpExecArray assert(match, `illegal tag: ${tagToken.raw}`) this.variable = match[1] @@ -17,10 +24,10 @@ export default { this.templates = [] let p - const stream = this.liquid.parser.parseStream(remainTokens) + const stream: ParseStream = this.liquid.parser.parseStream(remainTokens) .on('start', () => (p = this.templates)) .on('tag:endtablerow', () => stream.stop()) - .on('template', tpl => p.push(tpl)) + .on('template', (tpl: ITemplate) => p.push(tpl)) .on('end', () => { throw new Error(`tag ${tagToken.raw} not closed`) }) @@ -28,20 +35,20 @@ export default { stream.start() }, - render: async function (scope, hash) { + render: async function (scope: Scope, hash: Hash) { let collection = evalExp(this.collection, scope) || [] const offset = hash.offset || 0 const limit = (hash.limit === undefined) ? collection.length : hash.limit collection = collection.slice(offset, offset + limit) const cols = hash.cols || collection.length - const contexts = collection.map(item => { + const contexts = collection.map((item: any) => { const ctx = {} ctx[this.variable] = item return ctx }) - let row + let row: number = 0 let html = '' await mapSeries(contexts, async (context, idx) => { row = Math.floor(idx / cols) + 1 @@ -65,4 +72,4 @@ export default { } return html } -} +} as ITagImplOptions \ No newline at end of file diff --git a/src/builtin/tags/unless.ts b/src/builtin/tags/unless.ts index ff93fc742..e50e158e6 100644 --- a/src/builtin/tags/unless.ts +++ b/src/builtin/tags/unless.ts @@ -1,11 +1,17 @@ import { evalExp, isFalsy } from 'src/render/syntax' +import TagToken from 'src/parser/tag-token'; +import Token from 'src/parser/token'; +import ITemplate from 'src/template/itemplate'; +import Scope from 'src/scope/scope'; +import ITagImplOptions from 'src/template/tag/itag-impl-options'; +import ParseStream from 'src/parser/parse-stream'; export default { - parse: function (tagToken, remainTokens) { + parse: function (tagToken: TagToken, remainTokens: Token[]) { this.templates = [] this.elseTemplates = [] let p - const stream = this.liquid.parser.parseStream(remainTokens) + const stream: ParseStream = this.liquid.parser.parseStream(remainTokens) .on('start', () => { p = this.templates this.cond = tagToken.args @@ -20,10 +26,10 @@ export default { stream.start() }, - render: function (scope) { + render: function (scope: Scope) { const cond = evalExp(this.cond, scope) return isFalsy(cond) ? this.liquid.renderer.renderTemplates(this.templates, scope) : this.liquid.renderer.renderTemplates(this.elseTemplates, scope) } -} +} as ITagImplOptions \ No newline at end of file diff --git a/src/fs/browser.ts b/src/fs/browser.ts index 50356b34f..643f858d5 100644 --- a/src/fs/browser.ts +++ b/src/fs/browser.ts @@ -1,7 +1,7 @@ import { last } from '../util/underscore' import IFS from './ifs' -function domResolve (root, path) { +function domResolve (root: string, path: string) { const base = document.createElement('base') base.href = root @@ -16,7 +16,7 @@ function domResolve (root, path) { return resolved } -function resolve (root, filepath, ext) { +function resolve (root: string, filepath: string, ext: string) { if (root.length && last(root) !== '/') root += '/' const url = domResolve(root, filepath) return url.replace(/^(\w+:\/\/[^/]+)(\/[^?]+)/, (str, origin, path) => { diff --git a/src/fs/ifs.ts b/src/fs/ifs.ts index 637a0e7c4..cc4392c23 100644 --- a/src/fs/ifs.ts +++ b/src/fs/ifs.ts @@ -1,5 +1,5 @@ export default interface IFS { - exists: (filepath?: string) => Promise + exists: (filepath: string) => Promise readFile: (filepath:string) => Promise resolve: (root: string, file: string, ext: string) => string } diff --git a/src/fs/node.ts b/src/fs/node.ts index 7ee93c966..a1b83e2ee 100644 --- a/src/fs/node.ts +++ b/src/fs/node.ts @@ -3,11 +3,11 @@ import { resolve, extname } from 'path' import { stat, readFile } from 'fs' import IFS from './ifs' -const statAsync = _.promisify(stat) as (filepath: string) => Promise -const readFileAsync = _.promisify(readFile) as (filepath: string, encoding: string) => Promise +const statAsync = _.promisify(stat) +const readFileAsync = _.promisify(readFile) const fs: IFS = { - exists: filepath => { + exists: (filepath: string) => { return statAsync(filepath).then(() => true).catch(() => false) }, readFile: filepath => { diff --git a/src/liquid-options.ts b/src/liquid-options.ts index 25fc5d248..52cb42710 100644 --- a/src/liquid-options.ts +++ b/src/liquid-options.ts @@ -48,6 +48,10 @@ export interface NormalizedFullOptions extends NormalizedOptions { trim_tag_left: boolean trim_output_right: boolean trim_output_left: boolean + tag_delimiter_left: string, + tag_delimiter_right: string, + output_delimiter_left: string, + output_delimiter_right: string, greedy: boolean } @@ -69,7 +73,7 @@ const defaultOptions: NormalizedFullOptions = { strict_variables: false } -export function normalize (options: LiquidOptions): NormalizedOptions { +export function normalize (options?: LiquidOptions): NormalizedOptions { options = options || {} if (options.hasOwnProperty('root')) { options.root = normalizeStringArray(options.root) @@ -77,11 +81,11 @@ export function normalize (options: LiquidOptions): NormalizedOptions { return options as NormalizedOptions } -export function applyDefault (options: NormalizedOptions): NormalizedFullOptions { +export function applyDefault (options?: NormalizedOptions): NormalizedFullOptions { return { ...defaultOptions, ...options } } -function normalizeStringArray (value: string | string[]): string[] { +function normalizeStringArray (value: any): string[] { if (_.isArray(value)) return value as string[] if (_.isString(value)) return [value as string] return [] diff --git a/src/liquid.ts b/src/liquid.ts index 7b86e6b60..f70eb1493 100644 --- a/src/liquid.ts +++ b/src/liquid.ts @@ -6,7 +6,7 @@ import ITemplate from './template/itemplate' import Tokenizer from './parser/tokenizer' import Render from './render/render' import Tag from './template/tag/tag' -import Filter from './template/filter' +import Filter from './template/filter/filter' import Parser from './parser/parser' import ITagImplOptions from './template/tag/itag-impl-options' import Value from './template/value' @@ -14,19 +14,17 @@ import { isTruthy, isFalsy, evalExp, evalValue } from './render/syntax' import builtinTags from './builtin/tags' import builtinFilters from './builtin/filters' import { LiquidOptions, NormalizedFullOptions, applyDefault, normalize } from './liquid-options' +import FilterImpl from './template/filter/filter-impl'; export default class Liquid { public options: NormalizedFullOptions - private cache: object - private parser: Parser - private renderer: Render + public renderer: Render + public parser: Parser + private cache: object = {} private tokenizer: Tokenizer constructor (opts: LiquidOptions = {}) { this.options = applyDefault(normalize(opts)) - if (this.options.cache) { - this.cache = {} - } this.parser = new Parser(this) this.renderer = new Render() this.tokenizer = new Tokenizer(this.options) @@ -47,7 +45,7 @@ export default class Liquid { const tpl = await this.parse(html) return this.render(tpl, ctx, opts) } - async getTemplate (file, opts?: LiquidOptions) { + async getTemplate (file: string, opts?: LiquidOptions) { const options = normalize(opts) const roots = options.root ? [...options.root, ...this.options.root] : this.options.root const paths = roots.map(root => fs.resolve(root, file, this.options.extname)) @@ -66,7 +64,7 @@ export default class Liquid { err.code = 'ENOENT' throw err } - async renderFile (file, ctx?: object, opts?: LiquidOptions) { + async renderFile (file: string, ctx?: object, opts?: LiquidOptions) { const options = normalize(opts) const templates = await this.getTemplate(file, options) return this.render(templates, ctx, opts) @@ -74,18 +72,18 @@ export default class Liquid { evalValue (str: string, scope: Scope) { return new Value(str, this.options.strict_filters).value(scope) } - registerFilter (name, filter) { + registerFilter (name: string, filter: FilterImpl) { return Filter.register(name, filter) } registerTag (name: string, tag: ITagImplOptions) { return Tag.register(name, tag) } - plugin (plugin) { + plugin (plugin: (this: Liquid, L: typeof Liquid) => void) { return plugin.call(this, Liquid) } express () { const self = this - return function (filePath: string, ctx: object, cb: (err: Error, html?: string) => void) { + return function (this: any, filePath: string, ctx: object, cb: (err: Error | null, html?: string) => void) { const opts = { root: this.root } self.renderFile(filePath, ctx, opts).then(html => cb(null, html), cb) } diff --git a/src/parser/delimited-token.ts b/src/parser/delimited-token.ts index b2b4e32b8..048bb7a68 100644 --- a/src/parser/delimited-token.ts +++ b/src/parser/delimited-token.ts @@ -1,12 +1,13 @@ import Token from './token' +import { last } from 'src/util/underscore' export default class DelimitedToken extends Token { trimLeft: boolean trimRight: boolean - constructor (raw, value, pos, input, file, line) { - super(raw, pos, input, file, line) + constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) { + super(raw, input, line, pos, file) this.trimLeft = value[0] === '-' - this.trimRight = value[value.length - 1] === '-' + this.trimRight = last(value) === '-' this.value = value .slice( this.trimLeft ? 1 : 0, diff --git a/src/parser/html-token.ts b/src/parser/html-token.ts index c87c63ba1..5418388d5 100644 --- a/src/parser/html-token.ts +++ b/src/parser/html-token.ts @@ -1,8 +1,8 @@ import Token from './token' export default class HTMLToken extends Token { - constructor (str, begin, input, file, line) { - super(str, begin, input, file, line) + constructor (str: string, input: string, line: number, col: number, file?: string) { + super(str, input, line, col, file) this.type = 'html' this.value = str } diff --git a/src/parser/lexical.ts b/src/parser/lexical.ts index dbc5af844..c379bba36 100644 --- a/src/parser/lexical.ts +++ b/src/parser/lexical.ts @@ -49,27 +49,27 @@ export const operators = [ /==|!=|<=|>=|<|>|\s+contains\s+/ ] -export function isInteger (str) { +export function isInteger (str: string) { return integerLine.test(str) } -export function isLiteral (str) { +export function isLiteral (str: string) { return literalLine.test(str) } -export function isRange (str) { +export function isRange (str: string) { return rangeLine.test(str) } -export function isVariable (str) { +export function isVariable (str: string) { return variableLine.test(str) } -export function matchValue (str) { +export function matchValue (str: string) { return value.exec(str) } -export function parseLiteral (str) { +export function parseLiteral (str: string) { let res = str.match(numberLine) if (res) { return Number(str) diff --git a/src/parser/output-token.ts b/src/parser/output-token.ts index 294ddc57b..31b9f7be8 100644 --- a/src/parser/output-token.ts +++ b/src/parser/output-token.ts @@ -1,8 +1,8 @@ import DelimitedToken from './delimited-token' export default class OutputToken extends DelimitedToken { - constructor (raw, value, pos, input, file, line) { - super(raw, value, pos, input, file, line) + constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) { + super(raw, value, input, line, pos, file) this.type = 'output' } } diff --git a/src/parser/parse-stream.ts b/src/parser/parse-stream.ts index a86e97d07..da0fe61ba 100644 --- a/src/parser/parse-stream.ts +++ b/src/parser/parse-stream.ts @@ -1,37 +1,37 @@ import Token from 'src/parser/token' import ITemplate from 'src/template/itemplate' +import TagToken from './tag-token'; -type parseToken = (token: Token, remainTokens: Array) => ITemplate -type eventHandler = ((arg?: Token | ITemplate) => void) +type ParseToken = ((token: Token, remainTokens: Array) => ITemplate) export default class ParseStream { private tokens: Array - private handlers: {[key: string]: eventHandler} = {} - private stopRequested: boolean - private parseToken: parseToken + private handlers: {[key: string]: (arg: any) => void} = {} + private stopRequested: boolean = false + private parseToken: ParseToken - constructor (tokens: Array, parseToken: parseToken) { + constructor (tokens: Array, parseToken: ParseToken) { this.tokens = tokens this.parseToken = parseToken } - on (name: string, cb: eventHandler) { + on (name: string, cb: (arg: T) => void): ParseStream { this.handlers[name] = cb return this } - trigger (event: string, arg?: Token | ITemplate) { + trigger (event: string, arg?: T) { const h = this.handlers[event] if (typeof h === 'function') { h(arg) return true } + return false } start () { this.trigger('start') - let token + let token: Token | undefined while (!this.stopRequested && (token = this.tokens.shift())) { if (this.trigger('token', token)) continue - if (token.type === 'tag' && - this.trigger(`tag:${token.name}`, token)) { + if (token.type === 'tag' && this.trigger(`tag:${(token).name}`, token)) { continue } const template = this.parseToken(token, this.tokens) diff --git a/src/parser/parser.ts b/src/parser/parser.ts index a480bb35b..9e9feee88 100644 --- a/src/parser/parser.ts +++ b/src/parser/parser.ts @@ -7,6 +7,7 @@ import OutputToken from './output-token' import Tag from 'src/template/tag/tag' import Output from 'src/template/output' import HTML from 'src/template/html' +import ITemplate from 'src/template/itemplate' export default class Parser { liquid: Liquid @@ -16,7 +17,7 @@ export default class Parser { } parse (tokens: Array) { let token - const templates = [] + const templates: ITemplate[] = [] while ((token = tokens.shift())) { templates.push(this.parseToken(token, tokens)) } diff --git a/src/parser/tag-token.ts b/src/parser/tag-token.ts index 2bc6c303d..9a19a6966 100644 --- a/src/parser/tag-token.ts +++ b/src/parser/tag-token.ts @@ -5,8 +5,8 @@ import * as lexical from './lexical' export default class TagToken extends DelimitedToken { name: string args: string - constructor (raw, value, pos, input, file, line) { - super(raw, value, pos, input, file, line) + constructor (raw: string, value: string, input: string, line: number, pos: number, file?: string) { + super(raw, value, input, line, pos, file) this.type = 'tag' const match = this.value.match(lexical.tagLine) if (!match) { diff --git a/src/parser/token.ts b/src/parser/token.ts index 569d2f626..a13b539c9 100644 --- a/src/parser/token.ts +++ b/src/parser/token.ts @@ -1,15 +1,16 @@ export default class Token { - type: string + type: string = 'notset' line: number col: number raw: string input: string - file: string + file?: string value: string - constructor (raw, col, input, file, line) { + constructor (raw: string, input: string, line: number, col: number, file?: string) { this.col = col this.line = line this.raw = raw + this.value = raw this.input = input this.file = file } diff --git a/src/parser/tokenizer.ts b/src/parser/tokenizer.ts index 7db681379..0eab47cb6 100644 --- a/src/parser/tokenizer.ts +++ b/src/parser/tokenizer.ts @@ -14,7 +14,7 @@ export default class Tokenizer { this.options = applyDefault(options) } tokenize (input: string, file?: string) { - const tokens = [] + const tokens: Token[] = [] const tagL = this.options.tag_delimiter_left const tagR = this.options.tag_delimiter_right const outputL = this.options.output_delimiter_left @@ -34,7 +34,7 @@ export default class Tokenizer { } if (state === ParseState.HTML) { if (input.substr(p, outputL.length) === outputL) { - if (buffer) tokens.push(new HTMLToken(buffer, col, input, file, line)) + if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file)) buffer = outputL line = curLine col = p - lineBegin + 1 @@ -42,7 +42,7 @@ export default class Tokenizer { state = ParseState.OUTPUT continue } else if (input.substr(p, tagL.length) === tagL) { - if (buffer) tokens.push(new HTMLToken(buffer, col, input, file, line)) + if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file)) buffer = tagL line = curLine col = p - lineBegin + 1 @@ -52,7 +52,7 @@ export default class Tokenizer { } } else if (state === ParseState.OUTPUT && input.substr(p, outputR.length) === outputR) { buffer += outputR - tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), col, input, file, line)) + tokens.push(new OutputToken(buffer, buffer.slice(outputL.length, -outputR.length), input, line, col, file)) p += outputR.length buffer = '' line = curLine @@ -61,7 +61,7 @@ export default class Tokenizer { continue } else if (input.substr(p, tagR.length) === tagR) { buffer += tagR - tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), col, input, file, line)) + tokens.push(new TagToken(buffer, buffer.slice(tagL.length, -tagR.length), input, line, col, file)) p += tagR.length buffer = '' line = curLine @@ -75,11 +75,11 @@ export default class Tokenizer { const t = state === ParseState.OUTPUT ? 'output' : 'tag' const str = buffer.length > 16 ? buffer.slice(0, 13) + '...' : buffer throw new TokenizationError( - new Error(`${t} "${str}" not closed`), - new Token(buffer, col, input, file, line) + `${t} "${str}" not closed`, + new Token(buffer, input, line, col, file) ) } - if (buffer) tokens.push(new HTMLToken(buffer, col, input, file, line)) + if (buffer) tokens.push(new HTMLToken(buffer, input, line, col, file)) whiteSpaceCtrl(tokens, this.options) return tokens diff --git a/src/parser/whitespace-ctrl.ts b/src/parser/whitespace-ctrl.ts index 99a8e1379..8c285833e 100644 --- a/src/parser/whitespace-ctrl.ts +++ b/src/parser/whitespace-ctrl.ts @@ -21,13 +21,13 @@ export default function whiteSpaceCtrl (tokens: Token[], options: NormalizedFull }) } -function shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options) { +function shouldTrimLeft (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) { if (inRaw) return false if (token.type === 'tag') return token.trimLeft || options.trim_tag_left if (token.type === 'output') return token.trimLeft || options.trim_output_left } -function shouldTrimRight (token: DelimitedToken, inRaw: boolean, options) { +function shouldTrimRight (token: DelimitedToken, inRaw: boolean, options: NormalizedFullOptions) { if (inRaw) return false if (token.type === 'tag') return token.trimRight || options.trim_tag_right if (token.type === 'output') return token.trimRight || options.trim_output_right diff --git a/src/render/render.ts b/src/render/render.ts index b1d3d9218..6ea49ecc3 100644 --- a/src/render/render.ts +++ b/src/render/render.ts @@ -1,8 +1,10 @@ import { RenderBreakError, RenderError } from 'src/util/error' import assert from 'src/util/assert' +import Scope from 'src/scope/scope'; +import ITemplate from 'src/template/itemplate'; export default class Render { - async renderTemplates (templates, scope) { + async renderTemplates (templates: ITemplate[], scope: Scope) { assert(scope, 'unable to evalTemplates: scope undefined') let html = '' @@ -10,11 +12,11 @@ export default class Render { try { html += await tpl.render(scope) } catch (e) { - if (e instanceof RenderBreakError) { + if (e.name === 'RenderBreakError') { e.resolvedHTML = html throw e } - throw e instanceof RenderError ? e : new RenderError(e, tpl) + throw e.name === 'RenderError' ? e : new RenderError(e, tpl) } } return html diff --git a/src/render/syntax.ts b/src/render/syntax.ts index f4742ec44..074469618 100644 --- a/src/render/syntax.ts +++ b/src/render/syntax.ts @@ -1,23 +1,25 @@ import * as lexical from '../parser/lexical' import assert from '../util/assert' +import Scope from 'src/scope/scope' +import { range } from 'src/util/underscore' const operators = { - '==': (l, r) => l === r, - '!=': (l, r) => l !== r, - '>': (l, r) => l !== null && r !== null && l > r, - '<': (l, r) => l !== null && r !== null && l < r, - '>=': (l, r) => l !== null && r !== null && l >= r, - '<=': (l, r) => l !== null && r !== null && l <= r, - 'contains': (l, r) => { + '==': (l: any, r: any) => l === r, + '!=': (l: any, r: any) => l !== r, + '>': (l: any, r: any) => l !== null && r !== null && l > r, + '<': (l: any, r: any) => l !== null && r !== null && l < r, + '>=': (l: any, r: any) => l !== null && r !== null && l >= r, + '<=': (l: any, r: any) => l !== null && r !== null && l <= r, + 'contains': (l: any, r: any) => { if (!l) return false if (typeof l.indexOf !== 'function') return false return l.indexOf(r) > -1 }, - 'and': (l, r) => isTruthy(l) && isTruthy(r), - 'or': (l, r) => isTruthy(l) || isTruthy(r) + 'and': (l: any, r: any) => isTruthy(l) && isTruthy(r), + 'or': (l: any, r: any) => isTruthy(l) || isTruthy(r) } -export function evalExp (exp, scope) { +export function evalExp (exp: string, scope: Scope): any { assert(scope, 'unable to evalExp: scope undefined') const operatorREs = lexical.operators let match @@ -35,17 +37,13 @@ export function evalExp (exp, scope) { if ((match = exp.match(lexical.rangeLine))) { const low = evalValue(match[1], scope) const high = evalValue(match[2], scope) - const range = [] - for (let j = low; j <= high; j++) { - range.push(j) - } - return range + return range(low, high + 1) } return evalValue(exp, scope) } -export function evalValue (str, scope) { +export function evalValue (str: string, scope: Scope) { str = str && str.trim() if (!str) return undefined @@ -58,10 +56,10 @@ export function evalValue (str, scope) { throw new TypeError(`cannot eval '${str}' as value`) } -export function isTruthy (val) { +export function isTruthy (val: any): boolean { return !isFalsy(val) } -export function isFalsy (val) { +export function isFalsy (val: any): boolean { return val === false || undefined === val || val === null } diff --git a/src/scope/icontext.ts b/src/scope/icontext.ts new file mode 100644 index 000000000..e156f84d2 --- /dev/null +++ b/src/scope/icontext.ts @@ -0,0 +1,4 @@ +export default interface IContext { + [key: string]: any; + liquid_method_missing?: (key: string) => any; +} \ No newline at end of file diff --git a/src/scope/scope.ts b/src/scope/scope.ts index f003bd474..31f3017f6 100644 --- a/src/scope/scope.ts +++ b/src/scope/scope.ts @@ -1,20 +1,23 @@ import * as _ from '../util/underscore' +import { __assign } from 'tslib' import * as lexical from '../parser/lexical' import assert from '../util/assert' import { NormalizedFullOptions, applyDefault } from '../liquid-options' import BlockMode from './block-mode' +import IContext from './icontext'; export default class Scope { opts: NormalizedFullOptions - contexts: Array + contexts: Array blocks: object = {} + groups: {[key: string]: number} = {} blockMode: BlockMode = BlockMode.OUTPUT constructor (ctx: object = {}, opts?: NormalizedFullOptions) { this.opts = applyDefault(opts) this.contexts = [ctx || {}] } getAll () { - return this.contexts.reduce((ctx, val) => _.assign(ctx, val), _.create(null)) + return this.contexts.reduce((ctx, val) => __assign(ctx, val), {}) } get (path: string): any { const paths = this.propertyAccessSeq(path) @@ -36,6 +39,7 @@ export default class Scope { scope[key] = {} } scope = scope[key] + return false }) } unshift (ctx: object) { @@ -44,7 +48,7 @@ export default class Scope { push (ctx: object) { return this.contexts.push(ctx) } - pop (ctx?: object): object { + pop (ctx?: object): object | undefined { if (!arguments.length) { return this.contexts.pop() } @@ -64,7 +68,7 @@ export default class Scope { } return null } - readProperty (obj, key) { + readProperty (obj: IContext, key: string) { let val if (_.isNil(obj)) { val = undefined @@ -72,7 +76,7 @@ export default class Scope { obj = toLiquid(obj) val = key === 'size' ? readSize(obj) : obj[key] if (_.isFunction(obj.liquid_method_missing)) { - val = obj.liquid_method_missing(key) + val = obj.liquid_method_missing!(key) } } if (_.isNil(val) && this.opts.strict_variables) { @@ -89,9 +93,9 @@ export default class Scope { * accessSeq("foo['b]r']") // ['foo', 'b]r'] * accessSeq("foo[bar.coo]") // ['foo', 'bar'], for bar.coo == 'bar' */ - propertyAccessSeq (str) { + propertyAccessSeq (str: string) { str = String(str) - const seq = [] + const seq: string[] = [] let name = '' let j let i = 0 @@ -141,7 +145,7 @@ export default class Scope { } } -function toLiquid (obj) { +function toLiquid (obj: IContext) { if (_.isFunction(obj.to_liquid)) { return obj.to_liquid() } @@ -151,13 +155,13 @@ function toLiquid (obj) { return obj } -function readSize (obj) { +function readSize (obj: IContext) { if (!_.isNil(obj.size)) return obj.size if (_.isArray(obj) || _.isString(obj)) return obj.length return obj.size } -function matchRightBracket (str, begin) { +function matchRightBracket (str: string, begin: number) { let stack = 1 // count of '[' - count of ']' for (let i = begin; i < str.length; i++) { if (str[i] === '[') { diff --git a/src/template/filter/filter-impl.ts b/src/template/filter/filter-impl.ts new file mode 100644 index 000000000..5fb626f07 --- /dev/null +++ b/src/template/filter/filter-impl.ts @@ -0,0 +1,3 @@ +type FilterImpl = (value: any, ...args: any[]) => any + +export default FilterImpl diff --git a/src/template/filter.ts b/src/template/filter/filter.ts similarity index 79% rename from src/template/filter.ts rename to src/template/filter/filter.ts index 49a08f9fa..578daf913 100644 --- a/src/template/filter.ts +++ b/src/template/filter/filter.ts @@ -2,19 +2,18 @@ import assert from 'src/util/assert' import * as lexical from 'src/parser/lexical' import { evalValue } from 'src/render/syntax' import Scope from 'src/scope/scope' - -type impl = (value: any, ...args: any[]) => any +import FilterImpl from './filter-impl' const valueRE = new RegExp(`${lexical.value.source}`, 'g') export default class Filter { name: string - impl: impl + impl: FilterImpl args: string[] - private static impls: {[key: string]: impl} = {} + private static impls: {[key: string]: FilterImpl} = {} constructor (str: string, strictFilters: boolean = false) { - const match = lexical.filterLine.exec(str) + const match = lexical.filterLine.exec(str) as string[] assert(match, 'illegal filter: ' + str) const name = match[1] @@ -27,7 +26,7 @@ export default class Filter { this.args = this.parseArgs(argList) } parseArgs (argList: string): string[] { - let match; const args = [] + let match; const args: string[] = [] while ((match = valueRE.exec(argList.trim()))) { const v = match[0] const re = new RegExp(`${v}\\s*:`, 'g') @@ -39,10 +38,9 @@ export default class Filter { } render (value: any, scope: Scope): any { const args = this.args.map(arg => evalValue(arg, scope)) - args.unshift(value) - return this.impl.apply(null, args) + return this.impl.apply(null, [value, ...args]) } - static register (name, filter) { + static register (name: string, filter: FilterImpl) { Filter.impls[name] = filter } static clear () { diff --git a/src/template/html.ts b/src/template/html.ts index 5e867364b..a4e1c4e92 100644 --- a/src/template/html.ts +++ b/src/template/html.ts @@ -1,10 +1,10 @@ import Template from 'src/template/template' import ITemplate from 'src/template/itemplate' -import Token from 'src/parser/token' +import HTMLToken from 'src/parser/html-token' -export default class extends Template implements ITemplate { +export default class extends Template implements ITemplate { str: string - constructor (token: Token) { + constructor (token: HTMLToken) { super(token) this.str = token.value } diff --git a/src/template/output.ts b/src/template/output.ts index 15e09435c..54e973fc2 100644 --- a/src/template/output.ts +++ b/src/template/output.ts @@ -5,7 +5,7 @@ import ITemplate from 'src/template/itemplate' import Scope from 'src/scope/scope' import OutputToken from 'src/parser/output-token' -export default class Output extends Template implements ITemplate { +export default class Output extends Template implements ITemplate { value: Value constructor (token: OutputToken, strictFilters?: boolean) { super(token) diff --git a/src/template/tag/block-tag.ts b/src/template/tag/block-tag.ts new file mode 100644 index 000000000..656312681 --- /dev/null +++ b/src/template/tag/block-tag.ts @@ -0,0 +1,45 @@ +import { create, stringify } from 'src/util/underscore' +import assert from 'src/util/assert' +import Scope from 'src/scope/scope' +import ITagImpl from './itag-impl' +import ITagImplOptions from './itag-impl-options' +import Liquid from 'src/liquid' +import Hash from './hash' +import Template from 'src/template/template' +import ITemplate from 'src/template/itemplate' +import TagToken from 'src/parser/tag-token' +import Token from 'src/parser/token' + +export default class Tag extends Template implements ITemplate { + name: string + private impl: ITagImpl + static impls: { [key: string]: ITagImplOptions } = {} + + constructor (token: TagToken, tokens: Token[], liquid: Liquid) { + super(token) + this.name = token.name + + const impl = Tag.impls[token.name] + assert(impl, `tag ${token.name} not found`) + this.impl = create(impl) + this.impl.liquid = liquid + if (this.impl.parse) { + this.impl.parse(token, tokens) + } + } + async render (scope: Scope) { + const hash = new Hash(this.token.args, scope) + const impl = this.impl + if (typeof impl.render !== 'function') { + return '' + } + const html = await impl.render(scope, hash) + return stringify(html) + } + static register (name: string, tag: ITagImplOptions) { + Tag.impls[name] = tag + } + static clear () { + Tag.impls = {} + } +} diff --git a/src/template/tag/hash.ts b/src/template/tag/hash.ts index 28e76fd0b..87543069d 100644 --- a/src/template/tag/hash.ts +++ b/src/template/tag/hash.ts @@ -1,5 +1,6 @@ import { hashCapture } from 'src/parser/lexical' import { evalValue } from 'src/render/syntax' +import Scope from 'src/scope/scope'; /** * Key-Value Pairs Representing Tag Arguments @@ -9,7 +10,7 @@ import { evalValue } from 'src/render/syntax' */ export default class Hash { [key: string]: any - constructor (markup, scope) { + constructor (markup: string, scope: Scope) { let match hashCapture.lastIndex = 0 while ((match = hashCapture.exec(markup))) { diff --git a/src/template/tag/itag-impl.ts b/src/template/tag/itag-impl.ts index 28b2d47f9..b0b7182bb 100644 --- a/src/template/tag/itag-impl.ts +++ b/src/template/tag/itag-impl.ts @@ -2,5 +2,6 @@ import Liquid from 'src/liquid' import ITagImplOptions from './itag-impl-options' export default interface ITagImpl extends ITagImplOptions { - liquid: Liquid + liquid: Liquid, + [key: string]: any } diff --git a/src/template/tag/tag.ts b/src/template/tag/tag.ts index 265dd232f..656312681 100644 --- a/src/template/tag/tag.ts +++ b/src/template/tag/tag.ts @@ -10,9 +10,8 @@ import ITemplate from 'src/template/itemplate' import TagToken from 'src/parser/tag-token' import Token from 'src/parser/token' -export default class Tag extends Template implements ITemplate { +export default class Tag extends Template implements ITemplate { name: string - token: TagToken private impl: ITagImpl static impls: { [key: string]: ITagImplOptions } = {} diff --git a/src/template/template.ts b/src/template/template.ts index 46f2c4b71..431d056d5 100644 --- a/src/template/template.ts +++ b/src/template/template.ts @@ -1,8 +1,6 @@ -import Token from 'src/parser/token' - -export default class Template { - token: Token; - constructor (token) { +export default abstract class Template { + token: T; + constructor (token: T) { this.token = token } } diff --git a/src/template/value.ts b/src/template/value.ts index 4fe5f4130..3af6ad648 100644 --- a/src/template/value.ts +++ b/src/template/value.ts @@ -1,26 +1,22 @@ import { evalExp } from 'src/render/syntax' import * as lexical from 'src/parser/lexical' import assert from 'src/util/assert' -import Filter from './filter' +import Filter from './filter/filter' import Scope from 'src/scope/scope' export default class { initial: any - filters: Array + filters: Array = [] constructor (str: string, strictFilters?: boolean) { - let match = lexical.matchValue(str) + let match: RegExpExecArray | null = lexical.matchValue(str) as RegExpExecArray assert(match, `illegal value string: ${str}`) - const initial = match[0] + this.initial = match[0] str = str.substr(match.index + match[0].length) - const filters = [] while ((match = lexical.filter.exec(str))) { - filters.push([match[0].trim()]) + this.filters.push(new Filter(match[0].trim(), strictFilters)) } - - this.initial = initial - this.filters = filters.map(str => new Filter(str, strictFilters)) } value (scope: Scope) { return this.filters.reduce( diff --git a/src/util/error.ts b/src/util/error.ts index 7e6ad3ff5..241e0abac 100644 --- a/src/util/error.ts +++ b/src/util/error.ts @@ -1,98 +1,77 @@ import * as _ from './underscore' +import { __extends } from 'tslib' import Token from 'src/parser/token' +import ITemplate from 'src/template/itemplate' -function captureStack () { - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor) - } -} - -abstract class LiquidError { - name: string - message: string - stack: string - private file: string - private input: string +abstract class LiquidError extends Error { private token: Token private originalError: Error - constructor (err, token) { - this.input = token.input - this.file = token.file + constructor (err: Error, token: Token) { + super(err.message) this.originalError = err this.token = token } - captureStackTrace (obj) { - this.name = obj.constructor.name - - captureStack.call(obj) + protected update() { const err = this.originalError - const context = mkContext(this.input, this.token.line) + const context = mkContext(this.token) this.message = mkMessage(err.message, this.token) this.stack = this.message + '\n' + context + - '\n' + (this.stack || this.message) + - (err.stack ? '\nFrom ' + err.stack : '') + '\n' + this.stack + '\nFrom ' + err.stack } } export class TokenizationError extends LiquidError { - constructor (message, token) { - super({ message }, token) - super.captureStackTrace(this) + constructor (message: string, token: Token) { + super(new Error(message), token) + this.name = 'TokenizationError' + super.update() } } -TokenizationError.prototype = _.create(Error.prototype) as any -TokenizationError.prototype.constructor = TokenizationError export class ParseError extends LiquidError { - constructor (err, token) { + constructor (err: Error, token: Token) { super(err, token) + this.name = 'ParseError' this.message = err.message - super.captureStackTrace(this) + super.update() } } -ParseError.prototype = _.create(Error.prototype) as any -ParseError.prototype.constructor = ParseError export class RenderError extends LiquidError { - constructor (err, tpl) { + constructor (err: Error, tpl: ITemplate) { super(err, tpl.token) + this.name = 'RenderError' this.message = err.message - super.captureStackTrace(this) + super.update() } } -RenderError.prototype = _.create(Error.prototype) as any -RenderError.prototype.constructor = RenderError -export class RenderBreakError { - message: string - resolvedHTML: string - constructor (message) { - captureStack.call(this) +export class RenderBreakError extends Error { + resolvedHTML: string = '' + constructor (message: string) { + super(message) + this.name = 'RenderBreakError' this.message = message + '' } } -RenderBreakError.prototype = _.create(Error.prototype) as any -RenderBreakError.prototype.constructor = RenderBreakError -export class AssertionError { - message: string - constructor (message) { - captureStack.call(this) +export class AssertionError extends Error { + constructor (message: string) { + super(message) + this.name = 'AssertionError' this.message = message + '' } } -AssertionError.prototype = _.create(Error.prototype) as any -AssertionError.prototype.constructor = AssertionError -function mkContext (input, targetLine) { - const lines = input.split('\n') - const begin = Math.max(targetLine - 2, 1) - const end = Math.min(targetLine + 3, lines.length) +function mkContext (token: Token) { + const lines = token.input.split('\n') + const begin = Math.max(token.line - 2, 1) + const end = Math.min(token.line + 3, lines.length) const context = _ .range(begin, end + 1) .map(lineNumber => { - const indicator = (lineNumber === targetLine) ? '>> ' : ' ' + const indicator = (lineNumber === token.line) ? '>> ' : ' ' const num = _.padStart(String(lineNumber), String(end).length) const text = lines[lineNumber - 1] return `${indicator}${num}| ${text}` @@ -102,13 +81,8 @@ function mkContext (input, targetLine) { return context } -function mkMessage (msg, token) { - msg = msg || '' - if (token.file) { - msg += ', file:' + token.file - } - if (token.line) { - msg += `, line:${token.line}, col:${token.col}` - } +function mkMessage (msg: string, token: Token) { + if (token.file) msg += `, file:${token.file}` + msg += `, line:${token.line}, col:${token.col}` return msg } diff --git a/src/util/promise.ts b/src/util/promise.ts index d529442e4..d62c71b74 100644 --- a/src/util/promise.ts +++ b/src/util/promise.ts @@ -1,26 +1,15 @@ -/* - * Call functions in serial until someone resolved. - * @param iterable the array to iterate with. - * @param iteratee returns a new promise. - * The iteratee is invoked with three arguments: (value, index, iterable). - */ -export function anySeries (iterable, iteratee) { - let ret: Promise = Promise.reject(new Error('init')) - iterable.forEach(function (item, idx) { - ret = ret.catch(() => iteratee(item, idx, iterable)) - }) - return ret -} - /* * Call functions in serial until someone rejected. * @param {Array} iterable the array to iterate with. * @param {Array} iteratee returns a new promise. * The iteratee is invoked with three arguments: (value, index, iterable). */ -export function mapSeries (iterable, iteratee) { - let ret: Promise = Promise.resolve('init') - const result = [] +export function mapSeries ( + iterable: T1[], + iteratee: (item: T1, idx: number, iterable: T1[]) => Promise | T2 +): Promise { + let ret = Promise.resolve(0) + const result: T2[] = [] iterable.forEach(function (item, idx) { ret = ret .then(() => iteratee(item, idx, iterable)) diff --git a/src/util/strftime.ts b/src/util/strftime.ts index a4a90ce13..c14e89178 100644 --- a/src/util/strftime.ts +++ b/src/util/strftime.ts @@ -16,18 +16,18 @@ const suffixes = { 'default': 'th' } -function abbr (str) { +function abbr (str: string) { return str.slice(0, 3) } // prototype extensions const _date = { - daysInMonth: function (d) { + daysInMonth: function (d: Date) { const feb = _date.isLeapYear(d) ? 29 : 28 return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] }, - getDayOfYear: function (d) { + getDayOfYear: function (d: Date) { let num = 0 for (let i = 0; i < d.getMonth(); ++i) { num += _date.daysInMonth(d)[i] @@ -35,7 +35,7 @@ const _date = { return num + d.getDate() }, - getWeekOfYear: function (d, startDay) { + getWeekOfYear: function (d: Date, startDay: number) { // Skip to startDay of this week const now = this.getDayOfYear(d) + (startDay - d.getDay()) // Find the first startDay of the year @@ -44,111 +44,111 @@ const _date = { return padStart(String(Math.floor((now - then) / 7) + 1), 2, '0') }, - isLeapYear: function (d) { + isLeapYear: function (d: Date) { const year = d.getFullYear() return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year))) }, - getSuffix: function (d) { + getSuffix: function (d: Date) { const str = d.getDate().toString() const index = parseInt(str.slice(-1)) return suffixes[index] || suffixes['default'] }, - century: function (d) { + century: function (d: Date) { return parseInt(d.getFullYear().toString().substring(0, 2), 10) } } const formatCodes = { - a: function (d) { + a: function (d: Date) { return dayNamesShort[d.getDay()] }, - A: function (d) { + A: function (d: Date) { return dayNames[d.getDay()] }, - b: function (d) { + b: function (d: Date) { return monthNamesShort[d.getMonth()] }, - B: function (d) { + B: function (d: Date) { return monthNames[d.getMonth()] }, - c: function (d) { + c: function (d: Date) { return d.toLocaleString() }, - C: function (d) { + C: function (d: Date) { return _date.century(d) }, - d: function (d) { + d: function (d: Date) { return padStart(d.getDate(), 2, '0') }, - e: function (d) { + e: function (d: Date) { return padStart(d.getDate(), 2) }, - H: function (d) { + H: function (d: Date) { return padStart(d.getHours(), 2, '0') }, - I: function (d) { + I: function (d: Date) { return padStart(String(d.getHours() % 12 || 12), 2, '0') }, - j: function (d) { + j: function (d: Date) { return padStart(_date.getDayOfYear(d), 3, '0') }, - k: function (d) { + k: function (d: Date) { return padStart(d.getHours(), 2) }, - l: function (d) { + l: function (d: Date) { return padStart(String(d.getHours() % 12 || 12), 2) }, - L: function (d) { + L: function (d: Date) { return padStart(d.getMilliseconds(), 3, '0') }, - m: function (d) { + m: function (d: Date) { return padStart(d.getMonth() + 1, 2, '0') }, - M: function (d) { + M: function (d: Date) { return padStart(d.getMinutes(), 2, '0') }, - p: function (d) { + p: function (d: Date) { return (d.getHours() < 12 ? 'AM' : 'PM') }, - P: function (d) { + P: function (d: Date) { return (d.getHours() < 12 ? 'am' : 'pm') }, - q: function (d) { + q: function (d: Date) { return _date.getSuffix(d) }, - s: function (d) { + s: function (d: Date) { return Math.round(d.valueOf() / 1000) }, - S: function (d) { + S: function (d: Date) { return padStart(d.getSeconds(), 2, '0') }, - u: function (d) { + u: function (d: Date) { return d.getDay() || 7 }, - U: function (d) { + U: function (d: Date) { return _date.getWeekOfYear(d, 0) }, - w: function (d) { + w: function (d: Date) { return d.getDay() }, - W: function (d) { + W: function (d: Date) { return _date.getWeekOfYear(d, 1) }, - x: function (d) { + x: function (d: Date) { return d.toLocaleDateString() }, - X: function (d) { + X: function (d: Date) { return d.toLocaleTimeString() }, - y: function (d) { + y: function (d: Date) { return d.getFullYear().toString().substring(2, 4) }, - Y: function (d) { + Y: function (d: Date) { return d.getFullYear() }, - z: function (d) { + z: function (d: Date) { const tz = d.getTimezoneOffset() / 60 * 100 return (tz > 0 ? '-' : '+') + padStart(String(Math.abs(tz)), 4, '0') }, @@ -159,7 +159,7 @@ const formatCodes = { (formatCodes as any).h = formatCodes.b; (formatCodes as any).N = formatCodes.L -export default function (d, format) { +export default function (d: Date, format: string) { let output = '' let remaining = format @@ -179,6 +179,6 @@ export default function (d, format) { // Add the format code const ch = results[0].charAt(1) const func = formatCodes[ch] - output += func ? func.call(this, d) : '%' + ch + output += func ? func.call(null, d) : '%' + ch } } diff --git a/src/util/underscore.ts b/src/util/underscore.ts index b9544e190..c7345e568 100644 --- a/src/util/underscore.ts +++ b/src/util/underscore.ts @@ -14,10 +14,12 @@ export function isFunction (value: any) { return typeof value === 'function' } -export function promisify (fn) { - return function (...args) { +export function promisify (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise; +export function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void):(arg1: T1, arg2: T2) => Promise; +export function promisify (fn: any) { + return function (...args: any[]) { return new Promise((resolve, reject) => { - fn(...args, (err, result) => { + fn(...args, (err: Error, result: any) => { err ? reject(err) : resolve(result) }) }) @@ -35,7 +37,7 @@ export function stringify (value: any): string { } function defaultToString (value: any): string { - const cache = [] + const cache: string[] = [] return JSON.stringify(value, (key, value) => { if (isObject(value)) { if (cache.indexOf(value) !== -1) { @@ -75,7 +77,10 @@ export function isError (value: any): boolean { * @param {Function} iteratee The function invoked per iteration. * @return {Object} Returns object. */ -export function forOwn (object, iteratee: ((val: any, key: string, obj: object) => boolean | void)) { +export function forOwn ( + object: {[key: string]: T} | undefined, + iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void) + ) { object = object || {} for (const k in object) { if (object.hasOwnProperty(k)) { @@ -85,45 +90,12 @@ export function forOwn (object, iteratee: ((val: any, key: string, obj: object) return object } -/* - * Assigns own enumerable string keyed properties of source objects to the destination object. - * Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * Note: This method mutates object and is loosely based on Object.assign. - * - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @return {Object} Returns object. - */ -export function assign (obj: object, ...srcs: object[]): object { - obj = isObject(obj) ? obj : {} - srcs.forEach(src => binaryAssign(obj, src)) - return obj -} - -function binaryAssign (target: object, src: object): object { - for (const key in src) if (src.hasOwnProperty(key)) target[key] = src[key] - return target -} - -export function last (arr: any[]): any { +export function last (arr: T[]): T; +export function last (arr: string): string; +export function last (arr: any[] | string): any | string { return arr[arr.length - 1] } -export function uniq (arr: any[]): any[] { - const u = {} - const a = [] - for (let i = 0, l = arr.length; i < l; ++i) { - if (u.hasOwnProperty(arr[i])) { - continue - } - a.push(arr[i]) - u[arr[i]] = 1 - } - return a -} - /* * Checks if value is the language type of Object. * (e.g. arrays, functions, objects, regexes, new Number(0), and new String('')) @@ -144,13 +116,13 @@ export function isObject (value: any): boolean { * negative — if you'd like a negative range, use a negative step. */ export function range (start: number, stop?: number, step?: number) { - if (arguments.length === 1) { + if (stop === undefined) { stop = start start = 0 } step = step || 1 - const arr = [] + const arr: number[] = [] for (let i = start; i < stop; i += step) { arr.push(i) } diff --git a/test/e2e/eval-value.ts b/test/e2e/eval-value.ts index 8efbbe490..cba0f539c 100644 --- a/test/e2e/eval-value.ts +++ b/test/e2e/eval-value.ts @@ -2,10 +2,10 @@ import { expect } from 'chai' import Liquid from '../..' describe('.evalValue()', function () { - var engine + var engine: Liquid beforeEach(() => { engine = new Liquid() }) it('should throw when scope undefined', function () { - expect(() => engine.evalValue('{{"foo"}}')).to.throw(/scope undefined/) + expect(() => engine.evalValue('{{"foo"}}', null as any)).to.throw(/scope undefined/) }) }) diff --git a/test/e2e/express.ts b/test/e2e/express.ts index 3d0fa3260..023821967 100644 --- a/test/e2e/express.ts +++ b/test/e2e/express.ts @@ -8,7 +8,7 @@ describe('express()', function () { const root = resolve(__dirname, '../stub/root') const views = resolve(__dirname, '../stub/views') const partials = resolve(__dirname, '../stub/partials') - let app, engine + let app: express.Application, engine: Liquid beforeEach(function () { app = express() @@ -45,7 +45,7 @@ describe('express()', function () { } const file = '/not-exist.html' const ctx = {} - engine.express().call(view, file, ctx, function (err) { + engine.express().call(view, file, ctx, function (err: any) { try { expect(err.code).to.equal('ENOENT') expect(err.message).to.match(/Failed to lookup/) diff --git a/test/e2e/parse-and-render.ts b/test/e2e/parse-and-render.ts index c942267b9..a23e9d6ac 100644 --- a/test/e2e/parse-and-render.ts +++ b/test/e2e/parse-and-render.ts @@ -5,7 +5,7 @@ import * as chaiAsPromised from 'chai-as-promised' use(chaiAsPromised) describe('.parseAndRender()', function () { - var engine, strictEngine + var engine: Liquid, strictEngine: Liquid beforeEach(function () { engine = new Liquid() strictEngine = new Liquid({ diff --git a/test/e2e/render-file.ts b/test/e2e/render-file.ts index 699ade7b0..ef09f8d89 100644 --- a/test/e2e/render-file.ts +++ b/test/e2e/render-file.ts @@ -8,7 +8,7 @@ use(chaiAsPromised) describe('#renderFile()', function () { const root = resolve(__dirname, '../stub/root') const views = resolve(__dirname, '../stub/views') - let engine + let engine: Liquid beforeEach(function () { engine = new Liquid({ root, diff --git a/test/e2e/xhr.ts b/test/e2e/xhr.ts index b6c164512..a29156ca9 100644 --- a/test/e2e/xhr.ts +++ b/test/e2e/xhr.ts @@ -1,5 +1,5 @@ import Liquid from '../../dist/liquid.js' -import { createFakeServer, useFakeXMLHttpRequest } from 'sinon' +import * as sinon from 'sinon' import { expect, use } from 'chai' import { JSDOM } from 'jsdom' import * as chaiAsPromised from 'chai-as-promised' @@ -7,13 +7,13 @@ import * as chaiAsPromised from 'chai-as-promised' use(chaiAsPromised) describe('xhr', () => { - if (+process.version.match(/^v(\d+)/)[1] < 8) { + if (+(process.version.match(/^v(\d+)/) as RegExpMatchArray)[1] < 8) { console.info('jsdom not supported, skipping xhr...') return } - let server, engine + let server: sinon.SinonFakeServer, engine: Liquid beforeEach(() => { - server = createFakeServer() + server = sinon.fakeServer.create() server.autoRespond = true server.respondWith('GET', 'https://example.com/views/hello.html', [200, { 'Content-Type': 'text/plain' }, 'hello {{name}}']) @@ -22,7 +22,7 @@ describe('xhr', () => { contentType: 'text/html', includeNodeLocations: true }); - (global as any).XMLHttpRequest = useFakeXMLHttpRequest(); + (global as any).XMLHttpRequest = sinon.FakeXMLHttpRequest; (global as any).document = dom.window.document engine = new Liquid({ root: 'https://example.com/views/', @@ -68,7 +68,7 @@ describe('xhr', () => { it('should throw error', function () { const result = expect(engine.renderFile('hello.html')) .to.be.rejectedWith('An error occurred whilst receiving the response.'); - (global as any).XMLHttpRequest.onCreate = function (request) { + (global as any).XMLHttpRequest.onCreate = function (request: sinon.SinonFakeXMLHttpRequest) { setTimeout(() => request.error()) } return result diff --git a/test/stub/mockfs.ts b/test/stub/mockfs.ts index aa600309f..3806f7c25 100644 --- a/test/stub/mockfs.ts +++ b/test/stub/mockfs.ts @@ -21,7 +21,7 @@ export function mock (options: { [path: string]: (string | fileDescriptor) }) { return file.content } - fs.exists = async function (path) { + fs.exists = async function (path: string) { console.log('mock fs exists called', path) return !!files[path] } diff --git a/test/stub/render.ts b/test/stub/render.ts index fc8f152ea..47ff2d5dd 100644 --- a/test/stub/render.ts +++ b/test/stub/render.ts @@ -12,7 +12,7 @@ export const ctx = { posts: [{ category: 'foo' }, { category: 'bar' }] } -export async function test (src, dst) { +export async function test (src: string, dst: string) { const html = await liquid.parseAndRender(src, ctx) return expect(html).to.equal(dst) } diff --git a/test/unit/builtin/tags/for.ts b/test/unit/builtin/tags/for.ts index db56b3c1b..0d12bcb95 100644 --- a/test/unit/builtin/tags/for.ts +++ b/test/unit/builtin/tags/for.ts @@ -1,11 +1,12 @@ import Liquid from 'src/liquid' import { expect, use } from 'chai' import * as chaiAsPromised from 'chai-as-promised' +import IContext from 'src/scope/icontext'; use(chaiAsPromised) describe('tags/for', function () { - let liquid, ctx + let liquid: Liquid, ctx: IContext before(function () { liquid = new Liquid() liquid.registerTag('throwingTag', { diff --git a/test/unit/builtin/tags/include.ts b/test/unit/builtin/tags/include.ts index 7a9613a69..f994f86de 100644 --- a/test/unit/builtin/tags/include.ts +++ b/test/unit/builtin/tags/include.ts @@ -3,7 +3,7 @@ import { expect } from 'chai' import { mock, restore } from 'test/stub/mockfs' describe('tags/include', function () { - let liquid + let liquid: Liquid before(function () { liquid = new Liquid({ root: '/', diff --git a/test/unit/builtin/tags/layout.ts b/test/unit/builtin/tags/layout.ts index 53a579388..c15f09914 100644 --- a/test/unit/builtin/tags/layout.ts +++ b/test/unit/builtin/tags/layout.ts @@ -3,7 +3,7 @@ import { expect } from 'chai' import { mock, restore } from 'test/stub/mockfs' describe('tags/layout', function () { - let liquid + let liquid: Liquid before(function () { liquid = new Liquid({ root: '/', diff --git a/test/unit/builtin/tags/unless.ts b/test/unit/builtin/tags/unless.ts index 37eac9c1b..04f2e36a5 100644 --- a/test/unit/builtin/tags/unless.ts +++ b/test/unit/builtin/tags/unless.ts @@ -5,7 +5,7 @@ import * as chaiAsPromised from 'chai-as-promised' use(chaiAsPromised) describe('tags/unless', function () { - let liquid + let liquid: Liquid before(() => { liquid = new Liquid() }) it('should render else when predicate yields true', async function () { diff --git a/test/unit/fs/browser.ts b/test/unit/fs/browser.ts index 3dd4a8de4..b36d8b3b9 100644 --- a/test/unit/fs/browser.ts +++ b/test/unit/fs/browser.ts @@ -8,7 +8,7 @@ const resolve = fs.resolve describe('fs/browser', function () { describe('#resolve()', function () { - if (+process.version.match(/^v(\d+)/)[1] < 8) { + if (+(process.version.match(/^v(\d+)/) as RegExpMatchArray)[1] < 8) { console.info('jsdom not supported, skipping template-browser...') return } @@ -54,9 +54,9 @@ describe('fs/browser', function () { }) describe('#readFile()', () => { - let server + let server: sinon.SinonFakeServer beforeEach(() => { - server = sinon.createFakeServer() + server = sinon.fakeServer.create() server.autoRespond = true server.respondWith('GET', 'https://example.com/views/hello.html', [200, { 'Content-Type': 'text/plain' }, 'hello {{name}}']); diff --git a/test/unit/liquid/cache.ts b/test/unit/liquid/cache.ts index f55e48703..b1d2bdfcf 100644 --- a/test/unit/liquid/cache.ts +++ b/test/unit/liquid/cache.ts @@ -3,7 +3,7 @@ import Liquid from 'src/liquid' import { mock, restore } from 'test/stub/mockfs' describe('LiquidOptions#cache', function () { - let engine + let engine: Liquid beforeEach(function () { engine = new Liquid({ root: '/root/', diff --git a/test/unit/liquid/liquid.ts b/test/unit/liquid/liquid.ts index 6535fc3d8..edf81a36d 100644 --- a/test/unit/liquid/liquid.ts +++ b/test/unit/liquid/liquid.ts @@ -33,14 +33,14 @@ describe('Liquid', function () { }) after(restore) it('should render single template', function (done) { - render.call({ root: '.' }, 'foo', null, (err, result) => { + render.call({ root: '.' }, 'foo', null as any, (err: Error | null, result: string | undefined) => { if (err) return done(err) expect(result).to.equal('foo') done() }) }) it('should render single template with Array-typed root', function (done) { - render.call({ root: ['.'] }, 'foo', null, (err, result) => { + render.call({ root: ['.'] }, 'foo', null as any, (err: Error | null, result: string | undefined) => { if (err) return done(err) expect(result).to.equal('foo') done() diff --git a/test/unit/liquid/strict.ts b/test/unit/liquid/strict.ts index 04c30d53d..e8fce1d27 100644 --- a/test/unit/liquid/strict.ts +++ b/test/unit/liquid/strict.ts @@ -2,7 +2,7 @@ import Liquid from 'src/liquid' import { expect } from 'chai' describe('LiquidOptions#strict_*', function () { - let engine + let engine: Liquid const ctx = {} beforeEach(function () { engine = new Liquid({ diff --git a/test/unit/parser/tokenizer.ts b/test/unit/parser/tokenizer.ts index a267d227c..9b4514764 100644 --- a/test/unit/parser/tokenizer.ts +++ b/test/unit/parser/tokenizer.ts @@ -56,7 +56,7 @@ describe('tokenizer', function () { const tokens = tokenizer.tokenize(html) expect(tokens.length).to.equal(1) expect(tokens[0]).instanceOf(TagToken) - expect(tokens[0].args).to.equal('a:a\nb:1.23') + expect((tokens[0] as TagToken).args).to.equal('a:a\nb:1.23') expect(tokens[0].raw).to.equal('{%foo\na:a\nb:1.23\n%}') }) it('should handle multiple lines value', function () { diff --git a/test/unit/render/render.ts b/test/unit/render/render.ts index 8d66f3b91..9f169114b 100644 --- a/test/unit/render/render.ts +++ b/test/unit/render/render.ts @@ -2,12 +2,12 @@ import { expect } from 'chai' import Scope from 'src/scope/scope' import Token from 'src/parser/token' import Tag from 'src/template/tag/tag' -import Filter from 'src/template/filter' +import Filter from 'src/template/filter/Filter' import Render from 'src/render/render' import HTML from 'src/template/html' describe('render', function () { - let render + let render: Render before(function () { Filter.clear() Tag.clear() @@ -16,7 +16,7 @@ describe('render', function () { describe('.renderTemplates()', function () { it('should throw when scope undefined', function () { - expect(render.renderTemplates([])).to.be.rejectedWith(/scope undefined/) + expect(render.renderTemplates([], null as any)).to.be.rejectedWith(/scope undefined/) }) it('should render html', async function () { diff --git a/test/unit/render/syntax.ts b/test/unit/render/syntax.ts index e3e4b7f1f..ed87f5d3f 100644 --- a/test/unit/render/syntax.ts +++ b/test/unit/render/syntax.ts @@ -3,7 +3,7 @@ import { expect } from 'chai' import { evalExp, evalValue, isTruthy } from 'src/render/syntax' describe('expression', function () { - let scope + let scope: Scope beforeEach(function () { scope = new Scope({ diff --git a/test/unit/scope/scope.ts b/test/unit/scope/scope.ts index 0a7c7ec9f..b24050927 100644 --- a/test/unit/scope/scope.ts +++ b/test/unit/scope/scope.ts @@ -1,10 +1,11 @@ import * as chai from 'chai' import Scope from 'src/scope/scope' +import IContext from 'src/scope/icontext'; const expect = chai.expect describe('scope', function () { - let scope, ctx + let scope: Scope, ctx: IContext beforeEach(function () { ctx = { foo: 'zoo', @@ -68,7 +69,7 @@ describe('scope', function () { } expect(fn).to.not.throw() expect(scope.get('notdefined')).to.equal(undefined) - expect(scope.get(false)).to.equal(undefined) + expect(scope.get(false as any)).to.equal(undefined) }) it('should throw for invalid path', function () { @@ -169,7 +170,7 @@ describe('scope', function () { }) }) describe('strict_variables', function () { - let scope + let scope: Scope beforeEach(function () { scope = new Scope(ctx, { strict_variables: true diff --git a/test/unit/template/filter.ts b/test/unit/template/filter.ts index f76498118..2f542e26d 100644 --- a/test/unit/template/filter.ts +++ b/test/unit/template/filter.ts @@ -1,14 +1,14 @@ import * as chai from 'chai' import * as sinon from 'sinon' import * as sinonChai from 'sinon-chai' -import Filter from 'src/template/filter' +import Filter from 'src/template/filter/filter' import Scope from 'src/scope/scope' chai.use(sinonChai) const expect = chai.expect describe('filter', function () { - let scope + let scope: Scope beforeEach(function () { Filter.clear() scope = new Scope() diff --git a/test/unit/template/output.ts b/test/unit/template/output.ts index 6a1cd3874..ab5706e56 100644 --- a/test/unit/template/output.ts +++ b/test/unit/template/output.ts @@ -2,7 +2,7 @@ import * as chai from 'chai' import Scope from 'src/scope/scope' import Output from 'src/template/output' import OutputToken from 'src/parser/output-token' -import Filter from 'src/template/filter' +import Filter from 'src/template/filter/filter' const expect = chai.expect @@ -35,7 +35,7 @@ describe('Output', function () { return expect(html).equal('{"num":2,"circular":{"bar":"bar"}}') }) it('should skip function property', async function () { - const scope = new Scope({ obj: { foo: 'foo', bar: x => x } }) + const scope = new Scope({ obj: { foo: 'foo', bar: (x: any) => x } }) const output = new Output({ value: 'obj' } as OutputToken) const html = await output.render(scope) return expect(html).to.equal('{"foo":"foo"}') @@ -53,7 +53,7 @@ describe('Output', function () { return expect(str).to.equal('FOO') }) it('should respect to .liquid_method_missing()', async () => { - const scope = new Scope({ obj: { liquid_method_missing: x => x.toUpperCase() } }) + const scope = new Scope({ obj: { liquid_method_missing: (x: string) => x.toUpperCase() } }) const output = new Output({ value: 'obj.foo' } as OutputToken) const str = await output.render(scope) return expect(str).to.equal('FOO') diff --git a/test/unit/template/tag.ts b/test/unit/template/tag.ts index ef8701bcb..bc9cef447 100644 --- a/test/unit/template/tag.ts +++ b/test/unit/template/tag.ts @@ -11,7 +11,7 @@ const expect = chai.expect const liquid = new Liquid() describe('tag', function () { - let scope + let scope: Scope before(function () { scope = new Scope({ foo: 'bar', @@ -56,7 +56,7 @@ describe('tag', function () { }) describe('hash', function () { - let spy, token + let spy: sinon.SinonSpy, token: TagToken beforeEach(function () { spy = sinon.spy() Tag.register('foo', { @@ -67,7 +67,7 @@ describe('tag', function () { value: 'foo aa:foo bb: arr[0] cc: 2.3\ndd:bar.coo', name: 'foo', args: 'aa:foo bb: arr[0] cc: 2.3\ndd:bar.coo' - } + } as TagToken }) it('should call tag.render with scope', async function () { await new Tag(token, [], liquid).render(scope) diff --git a/test/unit/template/value.ts b/test/unit/template/value.ts index bfa46d5f6..5d0285db4 100644 --- a/test/unit/template/value.ts +++ b/test/unit/template/value.ts @@ -2,13 +2,13 @@ import * as chai from 'chai' import * as sinonChai from 'sinon-chai' import * as sinon from 'sinon' import Scope from 'src/scope/scope' -import Filter from 'src/template/filter' +import Filter from 'src/template/filter/filter' import Value from 'src/template/value' chai.use(sinonChai) const expect = chai.expect -const add = (l, r) => l + r +const add = (l: number, r: number) => l + r describe('Value', function () { beforeEach(() => Filter.clear()) diff --git a/test/unit/util/error.ts b/test/unit/util/error.ts index 1e7d948aa..ebab9c5f9 100644 --- a/test/unit/util/error.ts +++ b/test/unit/util/error.ts @@ -32,10 +32,10 @@ describe('error', function () { expect(err.stack).to.contain(message.join('\n')) expect(err.name).to.equal('TokenizationError') }) - it('should contain the whole template content in err.input', async function () { + it('should contain the whole template content in err.token.input', async function () { const html = 'bar\nfoo{% . a %}\nfoo' const err = await expect(engine.parseAndRender(html)).be.rejected - expect(err.input).to.equal(html) + expect(err.token.input).to.equal(html) }) it('should contain line number in err.token.line', async function () { const err = await expect(engine.parseAndRender('1\n2\n{% . a %}\n4')).be.rejected @@ -49,25 +49,12 @@ describe('error', function () { expect(err.stack).to.contain('at Liquid.parse') }) describe('captureStackTrace compatibility', function () { - const captureStackTrace = Error.captureStackTrace - before(() => (Error.captureStackTrace = null)) - after(() => (Error.captureStackTrace = captureStackTrace)) it('should be empty when captureStackTrace undefined', async function () { const err = await expect(engine.parseAndRender('{% . a %}')).be.rejected expect(err.stack).to.contain('illegal tag syntax') expect(err.stack).to.not.contain('at Object.parse') }) }) - it('should contain file path in err.file', async function () { - const html = '\n\n\n{% . a %}\n\n' - mock({ - '/foo.html': html - }) - const err = await expect(engine.renderFile('/foo.html')).be.rejected - restore() - expect(err.name).to.equal('TokenizationError') - expect(err.file).to.equal(path.resolve('/foo.html')) - }) it('should throw error with line and pos if tag unmatched', async function () { const err = await expect(engine.parseAndRender('1\n2\nfoo{% assign a = 4 }\n4')).be.rejected expect(err.name).to.equal('TokenizationError') @@ -187,12 +174,6 @@ describe('error', function () { expect(err.stack).to.contain(message.join('\n')) expect(err.name).to.equal('RenderError') }) - it('should contain the whole template content in err.input', async function () { - const html = 'bar\nfoo{%throwingTag%}\nfoo' - const err = await expect(engine.parseAndRender(html)).be.rejected - expect(err.input).to.equal(html) - expect(err.name).to.equal('RenderError') - }) it('should contain line number in err.token.line', async function () { const src = '1\n2\n{{1|throwingFilter}}\n4' const err = await expect(engine.parseAndRender(src)).be.rejected @@ -204,18 +185,6 @@ describe('error', function () { expect(err.message).to.contain('intended render reject') expect(err.stack).to.match(/at .*:\d+:\d+/) }) - - it('should contain file path in err.file', async function () { - const html = '\n\n\n{% throwingTag %}\n\n' - mock({ - '/foo.html': html - }) - const err = await expect(engine.renderFile('/foo.html')).be.rejected - restore() - console.log(err, err.name) - expect(err.name).to.equal('RenderError') - expect(err.file).to.equal(path.resolve('/foo.html')) - }) }) describe('ParseError', function () { @@ -296,16 +265,5 @@ describe('error', function () { expect(err.stack).to.contain('ParseError: tag -a not found') expect(err.stack).to.match(/at .*:\d+:\d+\)/) }) - - it('should contain file path in err.file', async function () { - const html = '\n\n\n{% raw %}\n\n' - mock({ - '/foo.html': html - }) - const err = await expect(engine.renderFile('/foo.html')).be.rejected - restore() - expect(err.name).to.equal('ParseError') - expect(err.file).to.equal(path.resolve('/foo.html')) - }) }) }) diff --git a/test/unit/util/promise.ts b/test/unit/util/promise.ts index 661e02e18..381a791b2 100644 --- a/test/unit/util/promise.ts +++ b/test/unit/util/promise.ts @@ -1,68 +1,26 @@ import * as chai from 'chai' import * as sinon from 'sinon' import * as sinonChai from 'sinon-chai' +import * as chaiAsPromised from 'chai-as-promised' const expect = chai.expect chai.use(sinonChai) +chai.use(chaiAsPromised) const P = require('src/util/promise') describe('util/promise', function () { - describe('.anySeries()', function () { - it('should resolve in series', function () { - const spy1 = sinon.spy() - const spy2 = sinon.spy() - return P - .anySeries( - ['first', 'second'], - (item, idx) => new Promise(function (resolve, reject) { - if (idx === 0) { - setTimeout(function () { - spy1() - reject(new Error('first cb')) - }, 10) - } else { - spy2() - resolve('foo') - } - })) - .then(() => expect(spy2).to.have.been.calledAfter(spy1)) - }) - it('should reject when all rejected', function () { - const p = P.anySeries(['first', 'second', 'third'], - item => Promise.reject(new Error(item))) - return expect(p).to.be.rejectedWith('third') - }) - it('should resolve the value that first callback resolved', async () => { - const result = await P.anySeries( - ['first', 'second'], - item => Promise.resolve(item) - ) - return expect(result).to.equal('first') - }) - it('should not call rest of callbacks once resolved', () => { - const spy = sinon.spy() - return P - .anySeries(['first', 'second'], (item, idx) => { - if (idx > 0) { - spy() - } - return Promise.resolve(item) - }) - .then(() => expect(spy).to.not.have.been.called) - }) - }) describe('.mapSeries()', async function () { it('should resolve when all resolved', async function () { const result = await P.mapSeries( ['first', 'second', 'third'], - item => Promise.resolve(item) + (item: string) => Promise.resolve(item) ) return expect(result).to.deep.equal(['first', 'second', 'third']) }) it('should reject with the error that first callback rejected', () => { const p = P.mapSeries(['first', 'second'], - item => Promise.reject(item)) + (item: string) => Promise.reject(item)) return expect(p).to.rejectedWith('first') }) it('should resolve in series', function () { @@ -71,7 +29,7 @@ describe('util/promise', function () { return P .mapSeries( ['first', 'second'], - (item, idx) => new Promise(function (resolve) { + (item: string, idx: number) => new Promise(function (resolve) { if (idx === 0) { setTimeout(function () { spy1() @@ -87,7 +45,7 @@ describe('util/promise', function () { it('should not call rest of callbacks once rejected', () => { const spy = sinon.spy() return P - .mapSeries(['first', 'second'], (item, idx) => { + .mapSeries(['first', 'second'], (item: string, idx: number) => { if (idx > 0) { spy() } diff --git a/test/unit/util/strftime.ts b/test/unit/util/strftime.ts index 16ccbd1e4..6517cf82a 100644 --- a/test/unit/util/strftime.ts +++ b/test/unit/util/strftime.ts @@ -4,8 +4,8 @@ import t from 'src/util/strftime' const expect = chai.expect describe('util/strftime', function () { - let now - let then + let now: Date + let then: Date before(function () { mockUTC() now = new Date('2016-01-04T13:15:23.000Z') diff --git a/test/unit/util/underscore.ts b/test/unit/util/underscore.ts index f03540dbf..585b01fa6 100644 --- a/test/unit/util/underscore.ts +++ b/test/unit/util/underscore.ts @@ -3,6 +3,7 @@ import * as sinonChai from 'sinon-chai' import * as sinon from 'sinon' import { RenderError, RenderBreakError } from 'src/util/error' import * as _ from 'src/util/underscore' +import ITemplate from 'src/template/itemplate' const expect = chai.expect chai.use(sinonChai) @@ -17,7 +18,7 @@ describe('util/underscore', function () { token: { input: 'xx' } - } + } as ITemplate expect(_.isError(new RenderError(new Error(), tpl))).to.be.true }) it('should return true for RenderBreakError', function () { @@ -104,7 +105,7 @@ describe('util/underscore', function () { }) describe('.isObject()', function () { it('should return true for function', function () { - expect(_.isObject(x => x)).to.be.true + expect(_.isObject((x: any) => x)).to.be.true }) it('should return true for plain object', function () { expect(_.isObject({})).to.be.true @@ -116,49 +117,4 @@ describe('util/underscore', function () { expect(_.isObject(2)).to.be.false }) }) - describe('.assign()', function () { - it('should handle null dst', function () { - expect(_.assign(null, { - foo: 'bar' - })).to.deep.equal({ - foo: 'bar' - }) - }) - it('should assign 2 objects', function () { - const src = { - foo: 'foo', - bar: 'bar' - } - const dst = { - foo: 'bar', - kaa: 'kaa' - } - expect(_.assign(dst, src)).to.deep.equal({ - foo: 'foo', - bar: 'bar', - kaa: 'kaa' - }) - }) - it('should assign 3 objects', function () { - expect(_.assign({ - foo: 'foo' - }, { - bar: 'bar' - }, { - car: 'car' - })).to.deep.equal({ - foo: 'foo', - bar: 'bar', - car: 'car' - }) - }) - }) - describe('.uniq()', function () { - it('should handle empty array', function () { - expect(_.uniq([])).to.deep.equal([]) - }) - it('should do uniq', function () { - expect(_.uniq([1, 'a', 'a', 1])).to.deep.equal([1, 'a']) - }) - }) }) diff --git a/tsconfig.json b/tsconfig.json index 7cc23e7ae..3cd2d81b7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,8 +6,8 @@ "sourceMap": true, "declaration": true, "allowSyntheticDefaultImports": true, - "experimentalDecorators": true, - "emitDecoratorMetadata": true, + "strict": true, + "suppressImplicitAnyIndexErrors": true, "baseUrl": ".", "paths": { "src/fs": ["src/fs/node"],