diff --git a/CHANGELOG.md b/CHANGELOG.md index d49a5dd..7908b9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [3.3.1-upgrade-gts-4.1](https://github.com/tibber/tibber-express-utils/compare/v3.3.0...v3.3.1-upgrade-gts-4.1) (2022-08-17) + + +### Bug Fixes + +* upgrade gts to avoid got vulnerability ([b29d6e3](https://github.com/tibber/tibber-express-utils/commit/b29d6e3a7152c086a257512c9669b32c6819af42)) + # [3.3.0](https://github.com/tibber/tibber-express-utils/compare/v3.2.0...v3.3.0) (2022-08-15) diff --git a/package.json b/package.json index 297af3b..66bccd9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tibber-express-utils", - "version": "3.3.0", + "version": "3.3.1-upgrade-gts-4.1", "description": "", "main": "./dist/src/index.js", "scripts": { @@ -36,7 +36,6 @@ "conventional-commits": "^1.6.0", "cz-conventional-changelog": "^3.3.0", "dotenv-cli": "^6.0.0", - "eslint": "7.14.0", "eslint-plugin-jest": "^26.8.2", "eslint-plugin-node": "^11.1.0", "express": "^4.18.1", diff --git a/src/handlers/jsonDelete.ts b/src/handlers/jsonDelete.ts index 805a541..99f438e 100644 --- a/src/handlers/jsonDelete.ts +++ b/src/handlers/jsonDelete.ts @@ -8,20 +8,22 @@ import { Logger, } from '../types'; -export const jsonDelete = ( - jsonRouter: JsonRouter, - _contextSelector: ContextSelector, - logger?: Logger -) => ( - path: PathParams, - handler: JsonRequestHandler -) => - jsonRouter.delete( - path, - jsonMiddleware( - NoContentIfNoCodeOtherwiseOk, - _contextSelector, - handler, - logger - ) - ); +export const jsonDelete = + ( + jsonRouter: JsonRouter, + _contextSelector: ContextSelector, + logger?: Logger + ) => + ( + path: PathParams, + handler: JsonRequestHandler + ) => + jsonRouter.delete( + path, + jsonMiddleware( + NoContentIfNoCodeOtherwiseOk, + _contextSelector, + handler, + logger + ) + ); diff --git a/src/handlers/jsonGet.ts b/src/handlers/jsonGet.ts index a042f92..cff88d9 100644 --- a/src/handlers/jsonGet.ts +++ b/src/handlers/jsonGet.ts @@ -8,20 +8,22 @@ import { Logger, } from '../types'; -export const jsonGet = ( - jsonRouter: JsonRouter, - _contextSelector: ContextSelector, - logger?: Logger -) => ( - path: PathParams, - handler: JsonRequestHandler -) => - jsonRouter.get( - path, - jsonMiddleware( - NotFoundIfNoCodeOtherwiseOk, - _contextSelector, - handler, - logger - ) - ); +export const jsonGet = + ( + jsonRouter: JsonRouter, + _contextSelector: ContextSelector, + logger?: Logger + ) => + ( + path: PathParams, + handler: JsonRequestHandler + ) => + jsonRouter.get( + path, + jsonMiddleware( + NotFoundIfNoCodeOtherwiseOk, + _contextSelector, + handler, + logger + ) + ); diff --git a/src/handlers/jsonPatch.ts b/src/handlers/jsonPatch.ts index 4496c9b..ef74163 100644 --- a/src/handlers/jsonPatch.ts +++ b/src/handlers/jsonPatch.ts @@ -8,20 +8,22 @@ import { Logger, } from '../types'; -export const jsonPatch = ( - jsonRouter: JsonRouter, - _contextSelector: ContextSelector, - logger?: Logger -) => ( - path: PathParams, - handler: JsonRequestHandler -) => - jsonRouter.patch( - path, - jsonMiddleware( - NoContentIfNoCodeOtherwiseOk, - _contextSelector, - handler, - logger - ) - ); +export const jsonPatch = + ( + jsonRouter: JsonRouter, + _contextSelector: ContextSelector, + logger?: Logger + ) => + ( + path: PathParams, + handler: JsonRequestHandler + ) => + jsonRouter.patch( + path, + jsonMiddleware( + NoContentIfNoCodeOtherwiseOk, + _contextSelector, + handler, + logger + ) + ); diff --git a/src/handlers/jsonPost.ts b/src/handlers/jsonPost.ts index d149e33..f125c4f 100644 --- a/src/handlers/jsonPost.ts +++ b/src/handlers/jsonPost.ts @@ -8,20 +8,22 @@ import { Logger, } from '../types'; -export const jsonPost = ( - jsonRouter: JsonRouter, - _contextSelector: ContextSelector, - logger?: Logger -) => ( - path: PathParams, - handler: JsonRequestHandler -) => - jsonRouter.post( - path, - jsonMiddleware( - NoContentIfNoCodeOtherwiseOk, - _contextSelector, - handler, - logger - ) - ); +export const jsonPost = + ( + jsonRouter: JsonRouter, + _contextSelector: ContextSelector, + logger?: Logger + ) => + ( + path: PathParams, + handler: JsonRequestHandler + ) => + jsonRouter.post( + path, + jsonMiddleware( + NoContentIfNoCodeOtherwiseOk, + _contextSelector, + handler, + logger + ) + ); diff --git a/src/handlers/jsonPut.ts b/src/handlers/jsonPut.ts index 683e48e..2d6e30c 100644 --- a/src/handlers/jsonPut.ts +++ b/src/handlers/jsonPut.ts @@ -8,20 +8,22 @@ import { Logger, } from '../types'; -export const jsonPut = ( - jsonRouter: JsonRouter, - _contextSelector: ContextSelector, - logger?: Logger -) => ( - path: PathParams, - handler: JsonRequestHandler -) => - jsonRouter.put( - path, - jsonMiddleware( - NoContentIfNoCodeOtherwiseOk, - _contextSelector, - handler, - logger - ) - ); +export const jsonPut = + ( + jsonRouter: JsonRouter, + _contextSelector: ContextSelector, + logger?: Logger + ) => + ( + path: PathParams, + handler: JsonRequestHandler + ) => + jsonRouter.put( + path, + jsonMiddleware( + NoContentIfNoCodeOtherwiseOk, + _contextSelector, + handler, + logger + ) + ); diff --git a/src/index.ts b/src/index.ts index 4098eeb..20a8bc2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,5 @@ export * from './HttpResult'; -export * from './jsonRouting'; -export * from './jsonMiddleware'; export * as Errors from './errors'; +export * from './jsonMiddleware'; +export * from './jsonRouting'; export * from './types'; diff --git a/src/utils/ContextOf.ts b/src/utils/ContextOf.ts index 3c3a90c..bd53e81 100644 --- a/src/utils/ContextOf.ts +++ b/src/utils/ContextOf.ts @@ -4,6 +4,5 @@ import {ContextSelector} from '../types'; * Given a concrete ContextSelector function, infers the type of the context * that it selects. */ -export type ContextOf< - TContextSelector extends ContextSelector -> = TContextSelector extends ContextSelector ? U : never; +export type ContextOf> = + TContextSelector extends ContextSelector ? U : never; diff --git a/src/utils/hasOwnProperty.ts b/src/utils/hasOwnProperty.ts index 92f493f..e4184c4 100644 --- a/src/utils/hasOwnProperty.ts +++ b/src/utils/hasOwnProperty.ts @@ -11,6 +11,6 @@ export const hasOwnProperty = < >( target: TTarget, propertyKey: TPropertyKey -): target is TTarget & Record => { +): target is Record & TTarget => { return Object.prototype.hasOwnProperty.call(target, propertyKey); }; diff --git a/test/handlers/jsonDelete.spec.ts b/test/handlers/jsonDelete.spec.ts index 12ee7ec..2146ef3 100644 --- a/test/handlers/jsonDelete.spec.ts +++ b/test/handlers/jsonDelete.spec.ts @@ -5,26 +5,28 @@ import {JsonRequestHandlerResult} from '../../src'; import {jsonRouting} from '../../src'; import {HttpError, ProblemDetailsError} from '../../src/errors'; -const run = ( - type: 'return' | 'throw', - result: JsonRequestHandlerResult, - expectCode: number, - expectPayload: TPayload -) => async () => { - const router = Router({}); - const jsonRouter = jsonRouting({expressRouter: router}); +const run = + ( + type: 'return' | 'throw', + result: JsonRequestHandlerResult, + expectCode: number, + expectPayload: TPayload + ) => + async () => { + const router = Router({}); + const jsonRouter = jsonRouting({expressRouter: router}); - jsonRouter.jsonDelete('/test', () => { - if (type === 'throw') throw result; - return result; - }); + jsonRouter.jsonDelete('/test', () => { + if (type === 'throw') throw result; + return result; + }); - const app = express(); - app.use(jsonRouter); + const app = express(); + app.use(jsonRouter); - const response = await request(app).delete('/test').expect(expectCode); - expect(response.body).toStrictEqual(expectPayload); -}; + const response = await request(app).delete('/test').expect(expectCode); + expect(response.body).toStrictEqual(expectPayload); + }; describe('jsonDelete', () => { it( diff --git a/test/handlers/jsonGet.spec.ts b/test/handlers/jsonGet.spec.ts index f102c95..c023886 100644 --- a/test/handlers/jsonGet.spec.ts +++ b/test/handlers/jsonGet.spec.ts @@ -13,29 +13,31 @@ class TestLogger { } } -const run = ( - type: 'return' | 'throw', - result: JsonRequestHandlerResult, - expectCode: number, - expectPayload: TPayload, - expectLogMsg?: string -) => async () => { - const router = Router({}); - const logger = new TestLogger(); - const jsonRouter = jsonRouting({expressRouter: router, logger}); +const run = + ( + type: 'return' | 'throw', + result: JsonRequestHandlerResult, + expectCode: number, + expectPayload: TPayload, + expectLogMsg?: string + ) => + async () => { + const router = Router({}); + const logger = new TestLogger(); + const jsonRouter = jsonRouting({expressRouter: router, logger}); - jsonRouter.jsonGet('/test', () => { - if (type === 'throw') throw result; - return result; - }); + jsonRouter.jsonGet('/test', () => { + if (type === 'throw') throw result; + return result; + }); - const app = express(); - app.use(jsonRouter); + const app = express(); + app.use(jsonRouter); - const response = await request(app).get('/test').expect(expectCode); - expect(response.body).toStrictEqual(expectPayload); - expect(logger.lastError).toBe(expectLogMsg); -}; + const response = await request(app).get('/test').expect(expectCode); + expect(response.body).toStrictEqual(expectPayload); + expect(logger.lastError).toBe(expectLogMsg); + }; describe('jsonGet', () => { it( diff --git a/test/handlers/jsonPatch.spec.ts b/test/handlers/jsonPatch.spec.ts index d612876..6477c98 100644 --- a/test/handlers/jsonPatch.spec.ts +++ b/test/handlers/jsonPatch.spec.ts @@ -5,26 +5,28 @@ import {JsonRequestHandlerResult} from '../../src'; import {jsonRouting} from '../../src'; import {HttpError, ProblemDetailsError} from '../../src/errors'; -const run = ( - type: 'return' | 'throw', - result: JsonRequestHandlerResult, - expectCode: number, - expectPayload: TPayload -) => async () => { - const router = Router({}); - const jsonRouter = jsonRouting({expressRouter: router}); +const run = + ( + type: 'return' | 'throw', + result: JsonRequestHandlerResult, + expectCode: number, + expectPayload: TPayload + ) => + async () => { + const router = Router({}); + const jsonRouter = jsonRouting({expressRouter: router}); - jsonRouter.jsonPatch('/test', () => { - if (type === 'throw') throw result; - return result; - }); + jsonRouter.jsonPatch('/test', () => { + if (type === 'throw') throw result; + return result; + }); - const app = express(); - app.use(jsonRouter); + const app = express(); + app.use(jsonRouter); - const response = await request(app).patch('/test').expect(expectCode); - expect(response.body).toStrictEqual(expectPayload); -}; + const response = await request(app).patch('/test').expect(expectCode); + expect(response.body).toStrictEqual(expectPayload); + }; describe('jsonPatch', () => { it( diff --git a/test/handlers/jsonPost.spec.ts b/test/handlers/jsonPost.spec.ts index 21fb7ce..948a2fc 100644 --- a/test/handlers/jsonPost.spec.ts +++ b/test/handlers/jsonPost.spec.ts @@ -5,26 +5,28 @@ import {JsonRequestHandlerResult} from '../../src'; import {jsonRouting} from '../../src'; import {HttpError, ProblemDetailsError} from '../../src/errors'; -const run = ( - type: 'return' | 'throw', - result: JsonRequestHandlerResult, - expectCode: number, - expectPayload: TPayload -) => async () => { - const router = Router({}); - const jsonRouter = jsonRouting({expressRouter: router}); +const run = + ( + type: 'return' | 'throw', + result: JsonRequestHandlerResult, + expectCode: number, + expectPayload: TPayload + ) => + async () => { + const router = Router({}); + const jsonRouter = jsonRouting({expressRouter: router}); - jsonRouter.jsonPost('/test', () => { - if (type === 'throw') throw result; - return result; - }); + jsonRouter.jsonPost('/test', () => { + if (type === 'throw') throw result; + return result; + }); - const app = express(); - app.use(jsonRouter); + const app = express(); + app.use(jsonRouter); - const response = await request(app).post('/test').expect(expectCode); - expect(response.body).toStrictEqual(expectPayload); -}; + const response = await request(app).post('/test').expect(expectCode); + expect(response.body).toStrictEqual(expectPayload); + }; describe('jsonPost', () => { it( diff --git a/test/handlers/jsonPut.spec.ts b/test/handlers/jsonPut.spec.ts index 32f9ab7..7a3ee1d 100644 --- a/test/handlers/jsonPut.spec.ts +++ b/test/handlers/jsonPut.spec.ts @@ -5,26 +5,28 @@ import {JsonRequestHandlerResult} from '../../src'; import {jsonRouting} from '../../src'; import {HttpError, ProblemDetailsError} from '../../src/errors'; -const run = ( - type: 'return' | 'throw', - result: JsonRequestHandlerResult, - expectCode: number, - expectPayload: TPayload -) => async () => { - const router = Router({}); - const jsonRouter = jsonRouting({expressRouter: router}); +const run = + ( + type: 'return' | 'throw', + result: JsonRequestHandlerResult, + expectCode: number, + expectPayload: TPayload + ) => + async () => { + const router = Router({}); + const jsonRouter = jsonRouting({expressRouter: router}); - jsonRouter.jsonPut('/test', () => { - if (type === 'throw') throw result; - return result; - }); + jsonRouter.jsonPut('/test', () => { + if (type === 'throw') throw result; + return result; + }); - const app = express(); - app.use(jsonRouter); + const app = express(); + app.use(jsonRouter); - const response = await request(app).put('/test').expect(expectCode); - expect(response.body).toStrictEqual(expectPayload); -}; + const response = await request(app).put('/test').expect(expectCode); + expect(response.body).toStrictEqual(expectPayload); + }; describe('jsonPut', () => { it( diff --git a/yarn.lock b/yarn.lock index 049e16b..3adaa5c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -351,22 +351,6 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@eslint/eslintrc@^0.2.1": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.2.tgz#d01fc791e2fc33e88a29d6f3dc7e93d0cd784b76" - integrity sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - lodash "^4.17.19" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - "@eslint/eslintrc@^1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" @@ -1418,7 +1402,7 @@ accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -1428,11 +1412,6 @@ acorn-walk@^8.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - acorn@^8.4.1, acorn@^8.8.0: version "8.8.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" @@ -1462,7 +1441,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4: +ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1489,11 +1468,6 @@ angular-html-parser@^1.0.0: dependencies: tslib "^1.9.3" -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -1508,11 +1482,6 @@ ansi-escapes@^5.0.0: dependencies: type-fest "^1.0.2" -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -1523,7 +1492,7 @@ ansi-regex@^6.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -1630,11 +1599,6 @@ asap@^2.0.0: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" @@ -2322,7 +2286,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -2532,11 +2496,6 @@ emittery@^0.10.2: resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -2559,13 +2518,6 @@ encoding@^0.1.13: dependencies: iconv-lite "^0.6.2" -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - env-ci@^5.0.0: version "5.5.0" resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-5.5.0.tgz#43364e3554d261a586dec707bc32be81112b545f" @@ -2677,7 +2629,7 @@ eslint-scope@^7.1.1: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^2.0.0, eslint-utils@^2.1.0: +eslint-utils@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== @@ -2691,7 +2643,7 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: +eslint-visitor-keys@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== @@ -2706,49 +2658,6 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@7.14.0: - version "7.14.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.14.0.tgz#2d2cac1d28174c510a97b377f122a5507958e344" - integrity sha512-5YubdnPXrlrYAFCKybPuHIAH++PINe1pmKNc5wQRB9HSbqIK1ywAnntE3Wwua4giKu0bjligf1gLF6qxMGOYRA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@eslint/eslintrc" "^0.2.1" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.0" - esquery "^1.2.0" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash "^4.17.19" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - eslint@^8.0.0: version "8.22.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.22.0.tgz#78fcb044196dfa7eef30a9d65944f6f980402c48" @@ -2794,15 +2703,6 @@ eslint@^8.0.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^7.3.0: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - espree@^9.3.2, espree@^9.3.3: version "9.3.3" resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.3.tgz#2dd37c4162bb05f433ad3c1a52ddf8a49dc08e9d" @@ -2817,7 +2717,7 @@ esprima@^4.0.0, esprima@~4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.2.0, esquery@^1.4.0: +esquery@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== @@ -3019,13 +2919,6 @@ figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -3114,15 +3007,6 @@ findup-sync@^4.0.0: micromatch "^4.0.2" resolve-dir "^1.0.1" -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -3131,11 +3015,6 @@ flat-cache@^3.0.4: flatted "^3.1.0" rimraf "^3.0.2" -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - flatted@^3.1.0: version "3.2.6" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" @@ -3289,7 +3168,7 @@ git-log-parser@^1.2.0: through2 "~2.0.0" traverse "~0.6.6" -glob-parent@^5.0.0, glob-parent@^5.1.2: +glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -3358,13 +3237,6 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - globals@^13.15.0: version "13.17.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" @@ -3593,11 +3465,6 @@ ignore-walk@^5.0.1: dependencies: minimatch "^5.0.1" -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - ignore@^5.0.0, ignore@^5.1.1, ignore@^5.1.9, ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" @@ -3762,11 +3629,6 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -4639,7 +4501,7 @@ lodash.uniqby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww== -lodash@4.17.21, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4: +lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -4885,7 +4747,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@1.2.6, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: +minimist@1.2.6, minimist@^1.2.0, minimist@^1.2.5: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== @@ -4961,13 +4823,6 @@ mkdirp-infer-owner@^2.0.0: infer-owner "^1.0.4" mkdirp "^1.0.3" -mkdirp@^0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" @@ -5703,11 +5558,6 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - promise-all-reject-late@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" @@ -5924,7 +5774,7 @@ redeyed@~2.1.0: dependencies: esprima "~4.0.0" -regexpp@^3.0.0, regexpp@^3.1.0, regexpp@^3.2.0: +regexpp@^3.0.0, regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -6020,13 +5870,6 @@ rfdc@^1.3.0: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -6126,7 +5969,7 @@ semver-regex@^3.1.2: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: +semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== @@ -6227,15 +6070,6 @@ slash@^4.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - slice-ansi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" @@ -6426,15 +6260,6 @@ string-length@^4.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - string-width@^5.0.0: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -6458,13 +6283,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -6575,16 +6393,6 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" @@ -7028,13 +6836,6 @@ write-file-atomic@^4.0.0, write-file-atomic@^4.0.1: imurmurhash "^0.1.4" signal-exit "^3.0.7" -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"