From 08e1b3a014c49f673dc87042462290cbc5cff063 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Thu, 28 Jan 2021 10:18:34 +0100 Subject: [PATCH 01/46] Update Jest and related packages to latest versions --- package-lock.json | 4548 ++++++++++----------------------------------- package.json | 12 +- 2 files changed, 981 insertions(+), 3579 deletions(-) diff --git a/package-lock.json b/package-lock.json index 99312e41e8..f9f8b78e7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -107,25 +107,24 @@ } }, "@babel/core": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", - "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz", + "integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.6", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.5", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.5", - "@babel/types": "^7.11.5", + "@babel/generator": "^7.12.10", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", "lodash": "^4.17.19", - "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, @@ -145,12 +144,12 @@ } }, "@babel/generator": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz", - "integrity": "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", + "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", "dev": true, "requires": { - "@babel/types": "^7.11.5", + "@babel/types": "^7.12.11", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -164,65 +163,67 @@ } }, "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", + "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-get-function-arity": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/types": "^7.12.11" } }, "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", + "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.10" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", - "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", "dev": true, "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.12.7" } }, "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.5" } }, "@babel/helper-module-transforms": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", - "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", "@babel/template": "^7.10.4", - "@babel/types": "^7.11.0", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", "lodash": "^4.17.19" } }, "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", + "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.10" } }, "@babel/helper-plugin-utils": { @@ -232,34 +233,33 @@ "dev": true }, "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", + "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-member-expression-to-functions": "^7.12.7", + "@babel/helper-optimise-call-expression": "^7.12.10", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.11" } }, "@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", "dev": true, "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.1" } }, "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", + "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", "dev": true, "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.12.11" } }, "@babel/helper-validator-identifier": { @@ -269,14 +269,14 @@ "dev": true }, "@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", + "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", "dev": true, "requires": { "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" } }, "@babel/highlight": { @@ -343,9 +343,9 @@ } }, "@babel/parser": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", - "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", + "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -367,9 +367,9 @@ } }, "@babel/plugin-syntax-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", - "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", + "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" @@ -447,43 +447,71 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", + "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" } }, "@babel/traverse": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", - "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", + "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.5", - "@babel/types": "^7.11.5", + "@babel/code-frame": "^7.12.11", + "@babel/generator": "^7.12.11", + "@babel/helper-function-name": "^7.12.11", + "@babel/helper-split-export-declaration": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/types": "^7.12.12", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + } } }, "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", + "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.12.11", "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + } } }, "@bcoe/v8-coverage": { @@ -1038,330 +1066,129 @@ "dev": true }, "@jest/console": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz", - "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", "dev": true, "requires": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "jest-message-util": "^25.5.0", - "jest-util": "^25.5.0", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } } }, "@jest/core": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-25.5.4.tgz", - "integrity": "sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", + "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", "dev": true, "requires": { - "@jest/console": "^25.5.0", - "@jest/reporters": "^25.5.1", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", + "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-changed-files": "^25.5.0", - "jest-config": "^25.5.4", - "jest-haste-map": "^25.5.1", - "jest-message-util": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-resolve-dependencies": "^25.5.4", - "jest-runner": "^25.5.4", - "jest-runtime": "^25.5.4", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "jest-watcher": "^25.5.0", + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", "micromatch": "^4.0.2", "p-each-series": "^2.1.0", - "realpath-native": "^2.0.0", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } } }, "@jest/environment": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz", - "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", + "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", "dev": true, "requires": { - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2" } }, "@jest/fake-timers": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", - "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", "dev": true, "requires": { - "@jest/types": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "lolex": "^5.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } + "@jest/types": "^26.6.2", + "@sinonjs/fake-timers": "^6.0.1", + "@types/node": "*", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" } }, "@jest/globals": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-25.5.2.tgz", - "integrity": "sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", + "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", "dev": true, "requires": { - "@jest/environment": "^25.5.0", - "@jest/types": "^25.5.0", - "expect": "^25.5.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" } }, "@jest/reporters": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-25.5.1.tgz", - "integrity": "sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", + "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.2", "graceful-fs": "^4.2.4", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-instrument": "^4.0.3", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", - "jest-haste-map": "^25.5.1", - "jest-resolve": "^25.5.1", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "node-notifier": "^6.0.0", + "jest-haste-map": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "node-notifier": "^8.0.0", "slash": "^3.0.0", "source-map": "^0.6.0", - "string-length": "^3.1.0", + "string-length": "^4.0.1", "terminal-link": "^2.0.0", - "v8-to-istanbul": "^4.1.3" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } + "v8-to-istanbul": "^7.0.0" } }, "@jest/source-map": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.5.0.tgz", - "integrity": "sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", + "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", "dev": true, "requires": { "callsites": "^3.0.0", @@ -1370,126 +1197,57 @@ } }, "@jest/test-result": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", - "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", "dev": true, "requires": { - "@jest/console": "^25.5.0", - "@jest/types": "^25.5.0", + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } } }, "@jest/test-sequencer": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz", - "integrity": "sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", + "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", "dev": true, "requires": { - "@jest/test-result": "^25.5.0", + "@jest/test-result": "^26.6.2", "graceful-fs": "^4.2.4", - "jest-haste-map": "^25.5.1", - "jest-runner": "^25.5.4", - "jest-runtime": "^25.5.4" + "jest-haste-map": "^26.6.2", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" } }, "@jest/transform": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.5.1.tgz", - "integrity": "sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^25.5.0", + "@jest/types": "^26.6.2", "babel-plugin-istanbul": "^6.0.0", - "chalk": "^3.0.0", + "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.4", - "jest-haste-map": "^25.5.1", - "jest-regex-util": "^25.2.6", - "jest-util": "^25.5.0", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", "micromatch": "^4.0.2", "pirates": "^4.0.1", - "realpath-native": "^2.0.0", "slash": "^3.0.0", "source-map": "^0.6.1", "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } } }, "@jest/types": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.3.0.tgz", - "integrity": "sha512-BDPG23U0qDeAvU4f99haztXwdAg3hz4El95LkAM+tHAqqhiVzRpEGHHU8EDxT/AnxOrA65YjLBwDahdJ9pTLJQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -3115,11 +2873,22 @@ "dev": true }, "@npmcli/move-file": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", - "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.0.tgz", + "integrity": "sha512-Iv2iq0JuyYjKeFkSR4LPaCdDZwlGK9X2cP/01nJcp3yMJ1FjNd9vpiEYvLUgzBxKPg2SFmaOhizoQsPc0LWeOQ==", "requires": { - "mkdirp": "^1.0.4" + "mkdirp": "^1.0.4", + "rimraf": "^2.7.1" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + } } }, "@octokit/auth-token": { @@ -3360,14 +3129,23 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@sinonjs/commons": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", - "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz", + "integrity": "sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw==", "dev": true, "requires": { "type-detect": "4.0.8" } }, + "@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -3382,9 +3160,9 @@ } }, "@types/babel__core": { - "version": "7.1.9", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.9.tgz", - "integrity": "sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw==", + "version": "7.1.12", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", + "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -3395,18 +3173,18 @@ } }, "@types/babel__generator": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", - "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", "dev": true, "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", - "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", + "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -3414,9 +3192,9 @@ } }, "@types/babel__traverse": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.13.tgz", - "integrity": "sha512-i+zS7t6/s9cdQvbqKDARrcbrPvtJGlbYsMkazo03nTAK3RX9FNrLllXys22uiTGJapPOTZTQ35nHh4ISph4SLQ==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.0.tgz", + "integrity": "sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg==", "dev": true, "requires": { "@babel/types": "^7.3.0" @@ -3431,11 +3209,6 @@ "@types/node": "*" } }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, "@types/connect": { "version": "3.4.34", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz", @@ -3509,9 +3282,9 @@ } }, "@types/graceful-fs": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.3.tgz", - "integrity": "sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz", + "integrity": "sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg==", "dev": true, "requires": { "@types/node": "*" @@ -3567,59 +3340,13 @@ } }, "@types/jest": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.2.3.tgz", - "integrity": "sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw==", + "version": "26.0.20", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.20.tgz", + "integrity": "sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA==", "dev": true, "requires": { - "jest-diff": "^25.2.1", - "pretty-format": "^25.2.1" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - } - } + "jest-diff": "^26.0.0", + "pretty-format": "^26.0.0" } }, "@types/keygrip": { @@ -3722,9 +3449,9 @@ "dev": true }, "@types/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.6.tgz", + "integrity": "sha512-6gOkRe7OIioWAXfnO/2lFiv+SJichKVSys1mSsgyrYHSEjk8Ctv4tSR/Odvnu+HWlH2C8j53dahU03XmQdd5fA==", "dev": true }, "@types/qs": { @@ -3747,9 +3474,15 @@ } }, "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", + "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "dev": true + }, + "@types/uuid": { + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.9.tgz", + "integrity": "sha512-XDwyIlt/47l2kWLTzw/mtrpLdB+GPSskR2n/PIcPn+VYhVO77rGhRncIR5GPU0KRzXuqkDO+J5qqrG0Y8P6jzQ==", "dev": true }, "@types/ws": { @@ -3761,17 +3494,17 @@ } }, "@types/yargs": { - "version": "15.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.5.tgz", - "integrity": "sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==", + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.12.tgz", + "integrity": "sha512-f+fD/fQAo3BCbCDlrUpznF1A5Zp9rB0noS5vnoormHSIPFKL0Z2DcUJ3Gxp5ytH4uLRNxy7AwYUC9exZzqGMAw==", "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==" + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", + "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==" }, "@wry/equality": { "version": "0.1.11", @@ -3803,9 +3536,9 @@ } }, "abab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.4.tgz", - "integrity": "sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", "dev": true }, "abbrev": { @@ -3825,33 +3558,25 @@ } }, "acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - } + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" } }, "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true }, "agent-base": { @@ -3916,11 +3641,10 @@ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, @@ -4053,9 +3777,9 @@ } }, "apollo-reporting-protobuf": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-0.6.0.tgz", - "integrity": "sha512-AFLQIuO0QhkoCF+41Be/B/YU0C33BZ0opfyXorIjM3MNNiEDSyjZqmUozlB3LqgfhT9mn2IR5RSsA+1b4VovDQ==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-0.6.2.tgz", + "integrity": "sha512-WJTJxLM+MRHNUxt1RTl4zD0HrLdH44F2mDzMweBj1yHL0kSt8I1WwoiF/wiGVSpnG48LZrBegCaOJeuVbJTbtw==", "requires": { "@apollo/protobufjs": "^1.0.3" } @@ -4334,12 +4058,6 @@ "integrity": "sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w==", "dev": true }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", @@ -4412,12 +4130,6 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, "async": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", @@ -4476,53 +4188,19 @@ } }, "babel-jest": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz", - "integrity": "sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", "dev": true, "requires": { - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", "@types/babel__core": "^7.1.7", "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^25.5.0", - "chalk": "^3.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } } }, "babel-plugin-istanbul": { @@ -4539,20 +4217,21 @@ } }, "babel-plugin-jest-hoist": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz", - "integrity": "sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", "dev": true, "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", "@types/babel__traverse": "^7.0.6" } }, "babel-preset-current-node-syntax": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.3.tgz", - "integrity": "sha512-uyexu1sVwcdFnyq9o8UQYsXwXflIh8LvrF5+cKrYam93ned1CStffB3+BEcsxGSgagoA3GEyjDqO4a/58hyPYQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, "requires": { "@babel/plugin-syntax-async-generators": "^7.8.4", @@ -4565,17 +4244,18 @@ "@babel/plugin-syntax-numeric-separator": "^7.8.3", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" } }, "babel-preset-jest": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz", - "integrity": "sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", + "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^25.5.0", - "babel-preset-current-node-syntax": "^0.1.2" + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" } }, "backo2": { @@ -4709,16 +4389,6 @@ } } }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -4818,23 +4488,6 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, "bs-logger": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", @@ -5044,6 +4697,12 @@ "supports-color": "^7.1.0" } }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", @@ -5061,6 +4720,12 @@ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, + "cjs-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", + "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "dev": true + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -5921,6 +5586,25 @@ } } }, + "cucumber-messages": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/cucumber-messages/-/cucumber-messages-8.0.0.tgz", + "integrity": "sha512-lUnWRMjwA9+KhDec/5xRZV3Du67ISumHnVLywWQXyvzmc4P+Eqx8CoeQrBQoau3Pw1hs4kJLTDyV85hFBF00SQ==", + "dev": true, + "requires": { + "@types/uuid": "^3.4.6", + "protobufjs": "^6.8.8", + "uuid": "^3.3.3" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", @@ -5955,14 +5639,42 @@ } }, "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", "dev": true, "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "dependencies": { + "tr46": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", + "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, + "whatwg-url": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", + "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" + } + } } }, "date-format": { @@ -6015,6 +5727,12 @@ } } }, + "decimal.js": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", + "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", + "dev": true + }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -6167,9 +5885,9 @@ } }, "diff-sequences": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", - "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", "dev": true }, "dir-glob": { @@ -6182,12 +5900,20 @@ } }, "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", "dev": true, "requires": { - "webidl-conversions": "^4.0.2" + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } } }, "dot-prop": { @@ -6243,6 +5969,12 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, + "emittery": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", + "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", + "dev": true + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -6479,51 +6211,17 @@ } }, "expect": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz", - "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", + "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", "dev": true, "requires": { - "@jest/types": "^25.5.0", + "@jest/types": "^26.6.2", "ansi-styles": "^4.0.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-regex-util": "^25.2.6" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" } }, "express": { @@ -6906,13 +6604,6 @@ "escape-string-regexp": "^1.0.5" } }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -7107,9 +6798,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", + "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", "dev": true, "optional": true }, @@ -7178,9 +6869,9 @@ "dev": true }, "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, "get-caller-file": { @@ -7409,10 +7100,23 @@ } }, "gherkin": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/gherkin/-/gherkin-5.1.0.tgz", - "integrity": "sha1-aEu7A63STq9731RPWAM+so+zxtU=", - "dev": true + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/gherkin/-/gherkin-9.0.0.tgz", + "integrity": "sha512-6xoAepoxo5vhkBXjB4RCfVnSKHu5z9SqXIQVUyj+Jw8BQX8odATlee5otXgdN8llZvyvHokuvNiBeB3naEnnIQ==", + "dev": true, + "requires": { + "commander": "^4.0.1", + "cucumber-messages": "8.0.0", + "source-map-support": "^0.5.16" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + } + } }, "git-raw-commits": { "version": "2.0.0", @@ -7932,7 +7636,8 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true + "dev": true, + "optional": true }, "handlebars": { "version": "4.7.6", @@ -8058,12 +7763,12 @@ "dev": true }, "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", "dev": true, "requires": { - "whatwg-encoding": "^1.0.1" + "whatwg-encoding": "^1.0.5" } }, "html-escaper": { @@ -8378,15 +8083,6 @@ } } }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, "ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", @@ -8450,6 +8146,15 @@ "ci-info": "^2.0.0" } }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -8578,6 +8283,12 @@ "isobject": "^3.0.1" } }, + "is-potential-custom-element-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", + "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", + "dev": true + }, "is-regex": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", @@ -8726,115 +8437,50 @@ "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==" }, "jest": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest/-/jest-25.5.4.tgz", - "integrity": "sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", + "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", "dev": true, "requires": { - "@jest/core": "^25.5.4", + "@jest/core": "^26.6.3", "import-local": "^3.0.2", - "jest-cli": "^25.5.4" + "jest-cli": "^26.6.3" }, "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, "jest-cli": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.5.4.tgz", - "integrity": "sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", "dev": true, "requires": { - "@jest/core": "^25.5.4", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.4", "import-local": "^3.0.2", "is-ci": "^2.0.0", - "jest-config": "^25.5.4", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", "prompts": "^2.0.1", - "realpath-native": "^2.0.0", - "yargs": "^15.3.1" + "yargs": "^15.4.1" } } } }, "jest-changed-files": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-25.5.0.tgz", - "integrity": "sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", + "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", "dev": true, "requires": { - "@jest/types": "^25.5.0", - "execa": "^3.2.0", + "@jest/types": "^26.6.2", + "execa": "^4.0.0", "throat": "^5.0.0" }, "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -8847,9 +8493,9 @@ } }, "execa": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", - "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, "requires": { "cross-spawn": "^7.0.0", @@ -8859,7 +8505,6 @@ "merge-stream": "^2.0.0", "npm-run-path": "^4.0.0", "onetime": "^5.1.0", - "p-finally": "^2.0.0", "signal-exit": "^3.0.2", "strip-final-newline": "^2.0.0" } @@ -8888,12 +8533,6 @@ "path-key": "^3.0.0" } }, - "p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", - "dev": true - }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -8918,1962 +8557,190 @@ } }, "jest-config": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.5.4.tgz", - "integrity": "sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", + "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^25.5.4", - "@jest/types": "^25.5.0", - "babel-jest": "^25.5.1", - "chalk": "^3.0.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^25.5.0", - "jest-environment-node": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-jasmine2": "^25.5.4", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", "micromatch": "^4.0.2", - "pretty-format": "^25.5.0", - "realpath-native": "^2.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - } - } + "pretty-format": "^26.6.2" } }, "jest-cucumber": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/jest-cucumber/-/jest-cucumber-2.0.13.tgz", - "integrity": "sha512-GBlS6OtUIU1E7SBYryN6m4pEl4jy/Fga6dpvXt5nehg3ItnxTRINK6CcYwJq9ToJMV0pkdHd0AhvBwBOiJ19Zw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jest-cucumber/-/jest-cucumber-3.0.0.tgz", + "integrity": "sha512-LV/s3O1HI65QsZg1PMqhskmZOY4GLklXlZ6CYL1MKxJWG9MN/BCPvM5NrFs64Bh1zJJjhQLAfbH6beDWAiNUng==", "dev": true, "requires": { - "@types/jest": "^24.0.7", + "@types/glob": "^7.1.3", + "@types/jest": "^26.0.7", "@types/node": "^11.9.4", "callsites": "^3.0.0", - "gherkin": "^5.0.0", - "jest": "^24.1.0" + "gherkin": "^9.0.0", + "glob": "^7.1.6", + "jest": "^26.1.0", + "uuid": "^8.2.0" }, "dependencies": { - "@jest/console": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", - "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", - "dev": true, - "requires": { - "@jest/source-map": "^24.9.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" - } - }, - "@jest/core": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", - "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/reporters": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.9.0", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-resolve-dependencies": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "jest-watcher": "^24.9.0", - "micromatch": "^3.1.10", - "p-each-series": "^1.0.0", - "realpath-native": "^1.1.0", - "rimraf": "^2.5.4", - "slash": "^2.0.0", - "strip-ansi": "^5.0.0" - } - }, - "@jest/environment": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", - "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", - "dev": true, - "requires": { - "@jest/fake-timers": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/fake-timers": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", - "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/reporters": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", - "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", - "dev": true, - "requires": { - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.2", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.2.6", - "jest-haste-map": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "node-notifier": "^5.4.2", - "slash": "^2.0.0", - "source-map": "^0.6.0", - "string-length": "^2.0.0" - } - }, - "@jest/source-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", - "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", - "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", - "dev": true, - "requires": { - "@jest/console": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/istanbul-lib-coverage": "^2.0.0" - } - }, - "@jest/test-sequencer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", - "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", - "dev": true, - "requires": { - "@jest/test-result": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0" - } - }, - "@jest/transform": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", - "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^24.9.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.9.0", - "jest-regex-util": "^24.9.0", - "jest-util": "^24.9.0", - "micromatch": "^3.1.10", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" - } - }, - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "24.9.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.9.1.tgz", - "integrity": "sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q==", - "dev": true, - "requires": { - "jest-diff": "^24.3.0" - } - }, "@types/node": { - "version": "11.15.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.15.21.tgz", - "integrity": "sha512-pYC/tp6UctD/laukjIoO48Owmf4OacwEKaDErnlarkatott0j3B5wp9q2M0zn/XgZUpebuFeKMX4UFf578/+Vw==", - "dev": true - }, - "@types/yargs": { - "version": "13.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.10.tgz", - "integrity": "sha512-MU10TSgzNABgdzKvQVW1nuuT+sgBMWeXNc3XOs5YXV5SDAK+PPja2eUuBNB9iqElu03xyEDqlnGw0jgl4nbqGQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "11.15.44", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.15.44.tgz", + "integrity": "sha512-fHAcNn2FlzDMA9rV5KP73r1cMZdbommWic2foHAEWoa/LITi91AueHDsJpnqjBEJ7bYoT2WC+KN1RL0vsM20zA==", "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "babel-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", - "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", - "dev": true, - "requires": { - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/babel__core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.9.0", - "chalk": "^2.4.2", - "slash": "^2.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", - "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" - } - }, - "babel-plugin-jest-hoist": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", - "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", - "dev": true, - "requires": { - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", - "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", - "dev": true, - "requires": { - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.9.0" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", - "dev": true - }, - "diff-sequences": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", - "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "expect": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", - "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-styles": "^3.2.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.9.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", - "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0" - } - }, - "jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", - "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", - "dev": true, - "requires": { - "import-local": "^2.0.0", - "jest-cli": "^24.9.0" - }, - "dependencies": { - "jest-cli": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", - "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", - "dev": true, - "requires": { - "@jest/core": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "import-local": "^2.0.0", - "is-ci": "^2.0.0", - "jest-config": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "prompts": "^2.0.1", - "realpath-native": "^1.1.0", - "yargs": "^13.3.0" - } - } - } - }, - "jest-changed-files": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", - "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "execa": "^1.0.0", - "throat": "^4.0.0" - } - }, - "jest-config": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", - "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.9.0", - "@jest/types": "^24.9.0", - "babel-jest": "^24.9.0", - "chalk": "^2.0.1", - "glob": "^7.1.1", - "jest-environment-jsdom": "^24.9.0", - "jest-environment-node": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "micromatch": "^3.1.10", - "pretty-format": "^24.9.0", - "realpath-native": "^1.1.0" - } - }, - "jest-diff": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", - "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-docblock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", - "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", - "dev": true, - "requires": { - "detect-newline": "^2.1.0" - } - }, - "jest-each": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", - "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-environment-jsdom": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", - "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", - "dev": true, - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0", - "jsdom": "^11.5.1" - } - }, - "jest-environment-node": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", - "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", - "dev": true, - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0" - } - }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "dev": true - }, - "jest-haste-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", - "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.9.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", - "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "co": "^4.6.0", - "expect": "^24.9.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0", - "throat": "^4.0.0" - } - }, - "jest-leak-detector": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", - "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", - "dev": true, - "requires": { - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-matcher-utils": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", - "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-message-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", - "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" - } - }, - "jest-mock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", - "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0" - } - }, - "jest-regex-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", - "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", - "dev": true - }, - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - }, - "jest-resolve-dependencies": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", - "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.9.0" - } - }, - "jest-runner": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", - "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.4.2", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-leak-detector": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "source-map-support": "^0.5.6", - "throat": "^4.0.0" - } - }, - "jest-runtime": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", - "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "strip-bom": "^3.0.0", - "yargs": "^13.3.0" - } - }, - "jest-serializer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", - "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", - "dev": true - }, - "jest-snapshot": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", - "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "expect": "^24.9.0", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^24.9.0", - "semver": "^6.2.0" - } - }, - "jest-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", - "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", - "dev": true, - "requires": { - "@jest/console": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/source-map": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", - "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" - } - }, - "jest-validate": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", - "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "camelcase": "^5.3.1", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "leven": "^3.1.0", - "pretty-format": "^24.9.0" - } - }, - "jest-watcher": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", - "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", - "dev": true, - "requires": { - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "jest-util": "^24.9.0", - "string-length": "^2.0.0" - } - }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "dev": true, - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", - "xml-name-validator": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "node-notifier": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", - "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", - "dev": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", - "shellwords": "^0.1.1", - "which": "^1.3.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", - "dev": true, - "requires": { - "p-reduce": "^1.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "realpath-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", - "dev": true, - "requires": { - "util.promisify": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", - "dev": true, - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - } - }, - "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", - "dev": true - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "write-file-atomic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } }, "jest-diff": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", - "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", "dev": true, "requires": { - "chalk": "^3.0.0", - "diff-sequences": "^25.2.6", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - } - } + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" } }, "jest-docblock": { - "version": "25.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz", - "integrity": "sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==", + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", + "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-25.5.0.tgz", - "integrity": "sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", + "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", "dev": true, "requires": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "jest-get-type": "^25.2.6", - "jest-util": "^25.5.0", - "pretty-format": "^25.5.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - } - } + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" } }, "jest-environment-jsdom": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz", - "integrity": "sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", + "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", "dev": true, "requires": { - "@jest/environment": "^25.5.0", - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "jsdom": "^15.2.1" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" } }, "jest-environment-node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.5.0.tgz", - "integrity": "sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", + "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", "dev": true, "requires": { - "@jest/environment": "^25.5.0", - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "semver": "^6.3.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" } }, "jest-get-type": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", - "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", "dev": true }, "jest-haste-map": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz", - "integrity": "sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", "dev": true, "requires": { - "@jest/types": "^25.5.0", + "@jest/types": "^26.6.2", "@types/graceful-fs": "^4.1.2", + "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.1.2", "graceful-fs": "^4.2.4", - "jest-serializer": "^25.5.0", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", "micromatch": "^4.0.2", "sane": "^4.0.3", - "walker": "^1.0.7", - "which": "^2.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } + "walker": "^1.0.7" } }, "jest-jasmine2": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz", - "integrity": "sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", + "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^25.5.0", - "@jest/source-map": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^25.5.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^25.5.0", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-runtime": "^25.5.4", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "pretty-format": "^25.5.0", - "throat": "^5.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - } - } - } - }, - "jest-junit": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-10.0.0.tgz", - "integrity": "sha512-dbOVRyxHprdSpwSAR9/YshLwmnwf+RSl5hf0kCGlhAcEeZY9aRqo4oNmaT0tLC16Zy9D0zekDjWkjHGjXlglaQ==", - "dev": true, - "requires": { - "jest-validate": "^24.9.0", - "mkdirp": "^0.5.1", - "strip-ansi": "^5.2.0", - "uuid": "^3.3.3", - "xml": "^1.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "@types/yargs": { - "version": "13.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.10.tgz", - "integrity": "sha512-MU10TSgzNABgdzKvQVW1nuuT+sgBMWeXNc3XOs5YXV5SDAK+PPja2eUuBNB9iqElu03xyEDqlnGw0jgl4nbqGQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, + "expect": "^26.6.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" + } + }, + "jest-junit": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-12.0.0.tgz", + "integrity": "sha512-+8K35LlboWiPuCnXSyiid7rFdxNlpCWWM20WEYe6IZH6psfUWKZmSpSRQ5tk0C0cBeDsvsnIzcef5mYhyJsbug==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "strip-ansi": "^5.2.0", + "uuid": "^3.3.3", + "xml": "^1.0.1" + }, + "dependencies": { "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "dev": true - }, - "jest-validate": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", - "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "camelcase": "^5.3.1", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "leven": "^3.1.0", - "pretty-format": "^24.9.0" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -10883,15 +8750,6 @@ "ansi-regex": "^4.1.0" } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -10901,210 +8759,52 @@ } }, "jest-leak-detector": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz", - "integrity": "sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", + "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", "dev": true, "requires": { - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - } - } + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" } }, "jest-matcher-utils": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz", - "integrity": "sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", "dev": true, "requires": { - "chalk": "^3.0.0", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - } - } + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" } }, "jest-message-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", - "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^3.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", "graceful-fs": "^4.2.4", "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", "slash": "^3.0.0", - "stack-utils": "^1.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } + "stack-utils": "^2.0.2" } }, "jest-mock": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", - "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", "dev": true, "requires": { - "@jest/types": "^25.5.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } + "@jest/types": "^26.6.2", + "@types/node": "*" } }, "jest-pnp-resolver": { @@ -11114,475 +8814,231 @@ "dev": true }, "jest-regex-util": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", - "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", "dev": true }, "jest-resolve": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.1.tgz", - "integrity": "sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", "dev": true, "requires": { - "@jest/types": "^25.5.0", - "browser-resolve": "^1.11.3", - "chalk": "^3.0.0", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", "read-pkg-up": "^7.0.1", - "realpath-native": "^2.0.0", - "resolve": "^1.17.0", + "resolve": "^1.18.1", "slash": "^3.0.0" }, "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" } } } }, "jest-resolve-dependencies": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz", - "integrity": "sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", + "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", "dev": true, "requires": { - "@jest/types": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-snapshot": "^25.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" } }, "jest-runner": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.4.tgz", - "integrity": "sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", + "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", "dev": true, "requires": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-docblock": "^25.3.0", - "jest-haste-map": "^25.5.1", - "jest-jasmine2": "^25.5.4", - "jest-leak-detector": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "jest-runtime": "^25.5.4", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", "source-map-support": "^0.5.6", "throat": "^5.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } } }, "jest-runtime": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.4.tgz", - "integrity": "sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==", - "dev": true, - "requires": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/globals": "^25.5.2", - "@jest/source-map": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", + "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", "@types/yargs": "^15.0.0", - "chalk": "^3.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-haste-map": "^25.5.1", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "realpath-native": "^2.0.0", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", "slash": "^3.0.0", "strip-bom": "^4.0.0", - "yargs": "^15.3.1" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } + "yargs": "^15.4.1" } }, "jest-serializer": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.5.0.tgz", - "integrity": "sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.1.tgz", - "integrity": "sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", "dev": true, "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/prettier": "^1.19.0", - "chalk": "^3.0.0", - "expect": "^25.5.0", - "graceful-fs": "^4.2.4", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "make-dir": "^3.0.0", - "natural-compare": "^1.4.0", - "pretty-format": "^25.5.0", - "semver": "^6.3.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - } - } + "@types/node": "*", + "graceful-fs": "^4.2.4" } }, - "jest-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", - "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", + "jest-snapshot": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", "dev": true, "requires": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "make-dir": "^3.0.0" + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" }, "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" + "yallist": "^4.0.0" } }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" + "lru-cache": "^6.0.0" } }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, + "jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + } + }, "jest-validate": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", - "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", "dev": true, "requires": { - "@jest/types": "^25.5.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "jest-get-type": "^25.2.6", + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", "leven": "^3.1.0", - "pretty-format": "^25.5.0" + "pretty-format": "^26.6.2" }, "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - } + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true } } }, "jest-watcher": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.5.0.tgz", - "integrity": "sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", + "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", "dev": true, "requires": { - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "jest-util": "^25.5.0", - "string-length": "^3.1.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" } }, "jest-worker": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", - "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, "requires": { + "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^7.0.0" } @@ -11610,43 +9066,69 @@ "dev": true }, "jsdom": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", - "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^7.1.0", - "acorn-globals": "^4.3.2", - "array-equal": "^1.0.0", - "cssom": "^0.4.1", - "cssstyle": "^2.0.0", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.1", - "html-encoding-sniffer": "^1.0.2", + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", + "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "acorn": "^7.1.1", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.2.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.0", + "domexception": "^2.0.1", + "escodegen": "^1.14.1", + "html-encoding-sniffer": "^2.0.1", + "is-potential-custom-element-name": "^1.0.0", "nwsapi": "^2.2.0", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.7", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", + "parse5": "5.1.1", + "request": "^2.88.2", + "request-promise-native": "^1.0.8", + "saxes": "^5.0.0", + "symbol-tree": "^3.2.4", "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^7.0.0", + "whatwg-url": "^8.0.0", + "ws": "^7.2.3", "xml-name-validator": "^3.0.0" }, "dependencies": { + "tr46": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", + "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, + "whatwg-url": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", + "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" + } + }, "ws": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", - "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", + "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==", "dev": true } } @@ -11741,12 +9223,6 @@ "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", "dev": true }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "dev": true - }, "lerna": { "version": "3.22.1", "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.22.1.tgz", @@ -12012,29 +9488,11 @@ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==" }, - "lolex": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", - "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, "long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, "loud-rejection": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", @@ -12076,22 +9534,22 @@ "dev": true }, "make-fetch-happen": { - "version": "8.0.9", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.9.tgz", - "integrity": "sha512-uHa4gv/NIdm9cUvfOhYb57nxrCY08iyMRXru0jbpaH57Q3NCge/ypY7fOvgCr8tPyucKrGbVndKhjXE0IX0VfQ==", + "version": "8.0.13", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.13.tgz", + "integrity": "sha512-rQ5NijwwdU8tIaBrpTtSVrNCcAJfyDRcKBC76vOQlyJX588/88+TE+UpjWl4BgG7gCkp29wER7xcRqkeg+x64Q==", "requires": { - "agentkeepalive": "^4.1.0", - "cacache": "^15.0.0", - "http-cache-semantics": "^4.0.4", + "agentkeepalive": "^4.1.3", + "cacache": "^15.0.5", + "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^6.0.0", "minipass": "^3.1.3", "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.0", + "minipass-fetch": "^1.3.2", "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", + "minipass-pipeline": "^1.2.4", "promise-retry": "^1.1.1", "socks-proxy-agent": "^5.0.0", "ssri": "^8.0.0" @@ -12289,9 +9747,9 @@ } }, "minipass-fetch": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.3.1.tgz", - "integrity": "sha512-N0ddPAD8OZnoAHUYj1ZH4ZJVna+ucy7if777LrdeIV1ko8f46af4jbyM5EC1gN4xc9Wq5c3C38GnxRJ2gneXRA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.3.3.tgz", + "integrity": "sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ==", "requires": { "encoding": "^0.1.12", "minipass": "^3.1.0", @@ -12722,28 +10180,46 @@ "dev": true }, "node-notifier": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-6.0.0.tgz", - "integrity": "sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz", + "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==", "dev": true, "optional": true, "requires": { "growly": "^1.3.0", - "is-wsl": "^2.1.1", - "semver": "^6.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", "shellwords": "^0.1.1", - "which": "^1.3.1" + "uuid": "^8.3.0", + "which": "^2.0.2" }, "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "optional": true, "requires": { - "isexe": "^2.0.0" + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "^6.0.0" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "optional": true } } }, @@ -13104,9 +10580,9 @@ } }, "p-each-series": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.1.0.tgz", - "integrity": "sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", "dev": true }, "p-finally": { @@ -13238,9 +10714,9 @@ } }, "parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", "dev": true }, "parseurl": { @@ -13350,12 +10826,6 @@ "find-up": "^4.0.0" } }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -13375,14 +10845,14 @@ "dev": true }, "pretty-format": { - "version": "26.4.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.4.2.tgz", - "integrity": "sha512-zK6Gd8zDsEiVydOCGLkoBoZuqv8VTiHyAbKznXe/gaph/DAeZOmit9yMfgIz5adIgAMMs5XfoYSwAX3jcCO1tA==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "requires": { - "@jest/types": "^26.3.0", + "@jest/types": "^26.6.2", "ansi-regex": "^5.0.0", "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" + "react-is": "^17.0.1" } }, "process-nextick-args": { @@ -13413,13 +10883,13 @@ } }, "prompts": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", - "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", + "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", "dev": true, "requires": { "kleur": "^3.0.3", - "sisteransi": "^1.0.4" + "sisteransi": "^1.0.5" } }, "promzard": { @@ -13443,6 +10913,35 @@ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", "dev": true }, + "protobufjs": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.2.tgz", + "integrity": "sha512-27yj+04uF6ya9l+qfpH187aqEzfCF4+Uit0I9ZBQVqK09hk/SQzKa2MUqUpXaVa7LOFRg1TSSr3lVxGOk6c0SQ==", + "dev": true, + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": "^13.7.0", + "long": "^4.0.0" + }, + "dependencies": { + "@types/node": { + "version": "13.13.40", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.40.tgz", + "integrity": "sha512-eKaRo87lu1yAXrzEJl0zcJxfUMDT5/mZalFyOkT44rnQps41eS2pfWzbaulSPpQLFNy29bFqn+Y5lOTL8ATlEQ==", + "dev": true + } + } + }, "protocols": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", @@ -13586,9 +11085,9 @@ } }, "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", + "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==" }, "read": { "version": "1.0.7", @@ -13697,12 +11196,6 @@ "once": "^1.3.0" } }, - "realpath-native": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-2.0.0.tgz", - "integrity": "sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==", - "dev": true - }, "redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -14136,19 +11629,13 @@ } } }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, "saxes": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", - "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, "requires": { - "xmlchars": "^2.1.1" + "xmlchars": "^2.2.0" } }, "semver": { @@ -14305,7 +11792,8 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true + "dev": true, + "optional": true }, "signal-exit": { "version": "3.0.3", @@ -14482,9 +11970,9 @@ } }, "socks": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.4.2.tgz", - "integrity": "sha512-cE6P9R+/CET9XhIMvqhRgaNT1GXKIahioMjwwhgYOd+8UQWP50rrFm+faqG/4xkZsjTdVeBYr0Tb246BSC9/fg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.5.1.tgz", + "integrity": "sha512-oZCsJJxapULAYJaEYBSzMcz8m3jqgGrHaGhkmU/o/PQfFWYWxkAaA0UMGImb6s6tEXfKi959X6VJjMMQ3P6TTQ==", "requires": { "ip": "^1.1.5", "smart-buffer": "^4.1.0" @@ -14627,9 +12115,9 @@ } }, "ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "requires": { "minipass": "^3.1.1" } @@ -14641,10 +12129,21 @@ "dev": true }, "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } }, "static-extend": { "version": "0.1.2", @@ -14728,30 +12227,13 @@ "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" }, "string-length": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", - "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", + "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", "dev": true, "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" } }, "string-width": { @@ -14905,9 +12387,9 @@ "dev": true }, "tar": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", - "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", + "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -15185,130 +12667,52 @@ } }, "ts-jest": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.3.0.tgz", - "integrity": "sha512-Jq2uKfx6bPd9+JDpZNMBJMdMQUC3sJ08acISj8NXlVgR2d5OqslEHOR2KHMgwymu8h50+lKIm0m0xj/ioYdW2Q==", + "version": "26.4.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.4.4.tgz", + "integrity": "sha512-3lFWKbLxJm34QxyVNNCgXX1u4o/RV0myvA2y2Bxm46iGIjKlaY0own9gIckbjZJPn+WaJEnfPPJ20HHGpoq4yg==", "dev": true, "requires": { "@types/jest": "26.x", "bs-logger": "0.x", "buffer-from": "1.x", "fast-json-stable-stringify": "2.x", - "jest-util": "26.x", + "jest-util": "^26.1.0", "json5": "2.x", "lodash.memoize": "4.x", "make-error": "1.x", "mkdirp": "1.x", "semver": "7.x", - "yargs-parser": "18.x" + "yargs-parser": "20.x" }, "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "26.0.13", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.13.tgz", - "integrity": "sha512-sCzjKow4z9LILc6DhBvn5AkIfmQzDZkgtVVKmGwVrs5tuid38ws281D4l+7x1kP487+FlKDh5kfMZ8WSPAdmdA==", - "dev": true, - "requires": { - "jest-diff": "^25.2.1", - "pretty-format": "^25.2.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "yallist": "^4.0.0" } }, - "jest-util": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.3.0.tgz", - "integrity": "sha512-4zpn6bwV0+AMFN0IYhH/wnzIQzRaYVrz1A8sYnRnj4UXDXbOVtWmlaZkO9mipFqZ13okIfN87aDoJWB7VH6hcw==", + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, "requires": { - "@jest/types": "^26.3.0", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.3.0.tgz", - "integrity": "sha512-BDPG23U0qDeAvU4f99haztXwdAg3hz4El95LkAM+tHAqqhiVzRpEGHHU8EDxT/AnxOrA65YjLBwDahdJ9pTLJQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } + "lru-cache": "^6.0.0" } }, - "pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - } + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true } } @@ -15574,9 +12978,9 @@ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "v8-to-istanbul": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz", - "integrity": "sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz", + "integrity": "sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -15638,13 +13042,11 @@ } }, "w3c-xmlserializer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", - "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, "requires": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", "xml-name-validator": "^3.0.0" } }, diff --git a/package.json b/package.json index 84d14092c3..8e83024530 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "apollo-federation-integration-testsuite": "file:federation-integration-testsuite-js" }, "devDependencies": { - "@types/jest": "25.2.3", + "@types/jest": "26.0.20", "@types/lodash.xorby": "4.7.6", "@types/loglevel": "1.5.4", "@types/nock": "10.0.3", @@ -48,16 +48,16 @@ "deep-freeze": "0.0.1", "graphql": "14.7.0", "graphql-tag": "2.11.0", - "jest": "25.5.4", - "jest-config": "25.5.4", - "jest-cucumber": "2.0.13", - "jest-junit": "10.0.0", + "jest": "26.6.3", + "jest-config": "26.6.3", + "jest-cucumber": "3.0.0", + "jest-junit": "12.0.0", "lerna": "3.22.1", "log4js": "6.3.0", "nock": "13.0.4", "node-fetch": "2.6.1", "prettier": "2.1.1", - "ts-jest": "26.3.0", + "ts-jest": "26.4.4", "typescript": "3.9.7", "wasm-pack": "^0.9.1", "winston": "3.3.3", From 1f470ad23bcbd1dd2e2ddc841ac4654ddd7fff4a Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Thu, 28 Jan 2021 13:01:25 +0100 Subject: [PATCH 02/46] Rename `ts-jest` `tsConfig` option to `tsconfig` --- jest.config.base.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jest.config.base.js b/jest.config.base.js index d8ba10c587..d2219f6adb 100644 --- a/jest.config.base.js +++ b/jest.config.base.js @@ -20,7 +20,7 @@ module.exports = { clearMocks: true, globals: { "ts-jest": { - tsConfig: "/src/__tests__/tsconfig.json", + tsconfig: "/src/__tests__/tsconfig.json", diagnostics: false } } From 2e32c0546c551eb97e98f0360d40dc2597c6d04c Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Thu, 28 Jan 2021 13:05:36 +0100 Subject: [PATCH 03/46] Remove use of `moduleNameMapper` for local imports Previously, we used Jest's `moduleNameMapper` option to import files from their `src` instead of their `dist` directory. That means we rely on `ts-jest` to compile not just the package currently under test, but also any imported code from other packages in the same repository. The main benefit of that was that we didn't have to compile all packages before each test run. Jest would only compile what was imported, and only when the file had changed (because Jest includes its own file cache). That did sometimes lead to issues however, because the file cache doesn't correctly keep track of dependencies. `ts-jest` was also often unable to apply the right `tsconfig.json` to imported projects. Nowadays, `tsc`'s support for incremental compilation means that whole project compiles are really fast. Relying on `tsc` to compile our code is often even faster than the per file compilation that `ts-jest` is forced to perform. And it means dependencies are tracked correctly and the right configs are applied. The project is compiled before each run of `npm test` through a `pretest` script, so the code your tests import should never be out of date. --- jest.config.base.js | 4 ---- package.json | 1 + 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/jest.config.base.js b/jest.config.base.js index d2219f6adb..8007aa3a2e 100644 --- a/jest.config.base.js +++ b/jest.config.base.js @@ -12,10 +12,6 @@ module.exports = { moduleFileExtensions: [...defaults.moduleFileExtensions, "ts", "tsx"], moduleNameMapper: { '^__mocks__/(.*)$': '/src/__mocks__/$1', - // This regex should match the packages that we want compiled from source - // through `ts-jest`, as opposed to loaded from their output files in - // `dist`. - '^((?:federation-js|gateway-js)[^/]*)(?:/dist)?((?:/.*)|$)': '/../$1/src$2' }, clearMocks: true, globals: { diff --git a/package.json b/package.json index 8e83024530..133c5c47cf 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "release:version-bump": "lerna version --force-publish=@apollo/query-planner-wasm", "release:start-ci-publish": "node -p '`Publish (dist-tag:${process.env.APOLLO_DIST_TAG || \"latest\"})`' | git tag -F - \"publish/$(date -u '+%Y%m%d%H%M%S')\" && git push origin \"$(git describe --match='publish/*' --tags --exact-match HEAD)\"", "postinstall": "npm run rustup-ensure && lerna run monorepo-prepare --stream && npm run compile", + "pretest": "npm run compile", "test": "jest --verbose", "test:clean": "jest --clearCache", "test:watch": "jest --verbose --watchAll", From 806b9599bc0f37cd69901b8ead01540e13d98213 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Thu, 28 Jan 2021 13:39:59 +0100 Subject: [PATCH 04/46] Update TypeScript to 4.1.3 TypeScript 4.0 introduced support for `noEmit` with composite projects, which is needed to make our test project configurations valid. --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index f9f8b78e7e..ace0e40dac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12784,9 +12784,9 @@ } }, "typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.3.tgz", + "integrity": "sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==", "dev": true }, "uglify-js": { diff --git a/package.json b/package.json index 133c5c47cf..6604e313a3 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "node-fetch": "2.6.1", "prettier": "2.1.1", "ts-jest": "26.4.4", - "typescript": "3.9.7", + "typescript": "4.1.3", "wasm-pack": "^0.9.1", "winston": "3.3.3", "winston-transport": "4.4.0" From 7e86ef7dd41b422498665d8e7d036d4871fc74e5 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Thu, 28 Jan 2021 13:46:05 +0100 Subject: [PATCH 05/46] Clean up test projects and reference all tests from root tsconfig.test.json This allows our root `tsconfig.test.json` to indirectly reference all test files, which makes it possible for `tsc` to compile them all at the same time (or rather type check, because we use `noEmit`). Unfortunately, we still need an additional `tsconfig.json` per `__tests__` directory to satisfy VS Code due to microsoft/vscode/#12463. --- federation-js/src/composition/__tests__/tsconfig.json | 4 +++- federation-js/src/service/__tests__/tsconfig.json | 4 +++- federation-js/tsconfig.test.json | 7 +++++++ gateway-js/src/utilities/__tests__/tsconfig.json | 7 +++++++ gateway-js/tsconfig.test.json | 7 +++++++ tsconfig.test.json | 8 ++++---- 6 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 federation-js/tsconfig.test.json create mode 100644 gateway-js/src/utilities/__tests__/tsconfig.json create mode 100644 gateway-js/tsconfig.test.json diff --git a/federation-js/src/composition/__tests__/tsconfig.json b/federation-js/src/composition/__tests__/tsconfig.json index 4a90c6e8e9..c530f7d167 100644 --- a/federation-js/src/composition/__tests__/tsconfig.json +++ b/federation-js/src/composition/__tests__/tsconfig.json @@ -4,5 +4,7 @@ "strictNullChecks": false }, "include": ["**/*"], - "references": [{ "path": "../../../../../" }] + "references": [ + { "path": "../../.." } + ] } diff --git a/federation-js/src/service/__tests__/tsconfig.json b/federation-js/src/service/__tests__/tsconfig.json index 4a7651f708..871b790512 100644 --- a/federation-js/src/service/__tests__/tsconfig.json +++ b/federation-js/src/service/__tests__/tsconfig.json @@ -1,5 +1,7 @@ { "extends": "../../../../tsconfig.test.base", "include": ["**/*"], - "references": [{ "path": "../../../" }] + "references": [ + { "path": "../../../" } + ] } diff --git a/federation-js/tsconfig.test.json b/federation-js/tsconfig.test.json new file mode 100644 index 0000000000..189bd93707 --- /dev/null +++ b/federation-js/tsconfig.test.json @@ -0,0 +1,7 @@ +{ + "extends": "../tsconfig.test.base", + "include": ["**/__tests__/**/*"], + "references": [ + { "path": "./" }, + ] +} diff --git a/gateway-js/src/utilities/__tests__/tsconfig.json b/gateway-js/src/utilities/__tests__/tsconfig.json new file mode 100644 index 0000000000..c1e0db227d --- /dev/null +++ b/gateway-js/src/utilities/__tests__/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../../tsconfig.test.base", + "include": ["**/*"], + "references": [ + { "path": "../../../" }, + ] +} diff --git a/gateway-js/tsconfig.test.json b/gateway-js/tsconfig.test.json new file mode 100644 index 0000000000..189bd93707 --- /dev/null +++ b/gateway-js/tsconfig.test.json @@ -0,0 +1,7 @@ +{ + "extends": "../tsconfig.test.base", + "include": ["**/__tests__/**/*"], + "references": [ + { "path": "./" }, + ] +} diff --git a/tsconfig.test.json b/tsconfig.test.json index 688b867a9a..b34f5e7c14 100644 --- a/tsconfig.test.json +++ b/tsconfig.test.json @@ -1,8 +1,8 @@ { - "compilerOptions": { - "composite": true - }, "files": [], "include": [], - "references": [] + "references": [ + { "path": "./federation-js/tsconfig.test.json" }, + { "path": "./gateway-js/tsconfig.test.json" }, + ] } From cf7368e0c76bbe3be98712419d02966628f5c4be Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Thu, 28 Jan 2021 14:24:01 +0100 Subject: [PATCH 06/46] Add a TypeScript watch task to VS Code Running this task watches both regular source files and test files, and incrementally compiles any changed files to show errors and warnings in the problem panel. --- .vscode/tasks.json | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .vscode/tasks.json diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000000..f8c3d6b992 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,25 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "TypeScript watch", + "type": "typescript", + "tsconfig": "tsconfig.json", + "option": "watch", + "problemMatcher": ["$tsc-watch"], + "group": { + "kind": "build", + "isDefault": true + }, + "presentation": { + "reveal": "never", + "revealProblems": "onProblem", + "panel": "shared", + "clear": true + }, + "runOptions": { + "runOn": "folderOpen" + } + } + ] +} From 879ddd0cc6ab73e01cfc66b435332f4f7b655cba Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Thu, 28 Jan 2021 14:36:57 +0100 Subject: [PATCH 07/46] Re-enable `strictNullChecks` for composition tests and fix using null coalescing Having a `__tests__` directory specific override leads to a discrepancy with the package-wide `tsconfig.test.json`. Fortunately, the addition of null coalescing makes it a lot easier to avoid these errors. --- .../src/composition/__tests__/compose.test.ts | 64 +++++++++---------- .../src/composition/__tests__/tsconfig.json | 3 - 2 files changed, 32 insertions(+), 35 deletions(-) diff --git a/federation-js/src/composition/__tests__/compose.test.ts b/federation-js/src/composition/__tests__/compose.test.ts index 7197228c37..00c101f363 100644 --- a/federation-js/src/composition/__tests__/compose.test.ts +++ b/federation-js/src/composition/__tests__/compose.test.ts @@ -66,8 +66,8 @@ describe('composeServices', () => { const product = schema.getType('Product') as GraphQLObjectType; const user = schema.getType('User') as GraphQLObjectType; - expect(getFederationMetadata(product).serviceName).toEqual('serviceA'); - expect(getFederationMetadata(user).serviceName).toEqual('serviceB'); + expect(getFederationMetadata(product)?.serviceName).toEqual('serviceA'); + expect(getFederationMetadata(user)?.serviceName).toEqual('serviceB'); }); it("doesn't leave federation directives in the final schema", () => { @@ -123,8 +123,8 @@ describe('composeServices', () => { const product = schema.getType('Product') as GraphQLObjectType; - expect(getFederationMetadata(product).serviceName).toEqual('serviceA'); - expect(getFederationMetadata(product.getFields()['price']).serviceName).toEqual( + expect(getFederationMetadata(product)?.serviceName).toEqual('serviceA'); + expect(getFederationMetadata(product.getFields()['price'])?.serviceName).toEqual( 'serviceB', ); }); @@ -163,8 +163,8 @@ describe('composeServices', () => { const product = schema.getType('Product') as GraphQLObjectType; - expect(getFederationMetadata(product).serviceName).toEqual('serviceB'); - expect(getFederationMetadata(product.getFields()['price']).serviceName).toEqual( + expect(getFederationMetadata(product)?.serviceName).toEqual('serviceB'); + expect(getFederationMetadata(product.getFields()['price'])?.serviceName).toEqual( 'serviceA', ); }); @@ -214,11 +214,11 @@ describe('composeServices', () => { const product = schema.getType('Product') as GraphQLObjectType; - expect(getFederationMetadata(product).serviceName).toEqual('serviceB'); - expect(getFederationMetadata(product.getFields()['price']).serviceName).toEqual( + expect(getFederationMetadata(product)?.serviceName).toEqual('serviceB'); + expect(getFederationMetadata(product.getFields()['price'])?.serviceName).toEqual( 'serviceA', ); - expect(getFederationMetadata(product.getFields()['color']).serviceName).toEqual( + expect(getFederationMetadata(product.getFields()['color'])?.serviceName).toEqual( 'serviceC', ); }); @@ -273,8 +273,8 @@ describe('composeServices', () => { } `); - expect(getFederationMetadata(product).serviceName).toEqual('serviceB'); - expect(getFederationMetadata(product.getFields()['price']).serviceName).toEqual( + expect(getFederationMetadata(product)?.serviceName).toEqual('serviceB'); + expect(getFederationMetadata(product.getFields()['price'])?.serviceName).toEqual( 'serviceC', ); }); @@ -360,10 +360,10 @@ describe('composeServices', () => { name: String! } `); - expect(getFederationMetadata(product.getFields()['sku']).serviceName).toEqual( + expect(getFederationMetadata(product.getFields()['sku'])?.serviceName).toEqual( 'serviceB', ); - expect(getFederationMetadata(product.getFields()['name']).serviceName).toEqual( + expect(getFederationMetadata(product.getFields()['name'])?.serviceName).toEqual( 'serviceB', ); }); @@ -407,7 +407,7 @@ describe('composeServices', () => { name: String! } `); - expect(getFederationMetadata(product.getFields()['name']).serviceName).toEqual( + expect(getFederationMetadata(product.getFields()['name'])?.serviceName).toEqual( 'serviceB', ); }); @@ -456,7 +456,7 @@ describe('composeServices', () => { name: String! } `); - expect(getFederationMetadata(product.getFields()['name']).serviceName).toEqual( + expect(getFederationMetadata(product.getFields()['name'])?.serviceName).toEqual( 'serviceB', ); }); @@ -610,8 +610,8 @@ describe('composeServices', () => { const product = schema.getType('Product') as GraphQLObjectType; - expect(getFederationMetadata(product).serviceName).toEqual('serviceA'); - expect(getFederationMetadata(product.getFields()['id']).serviceName).toEqual( + expect(getFederationMetadata(product)?.serviceName).toEqual('serviceA'); + expect(getFederationMetadata(product.getFields()['id'])?.serviceName).toEqual( 'serviceB', ); }); @@ -651,7 +651,7 @@ describe('composeServices', () => { const query = schema.getQueryType(); - expect(getFederationMetadata(query).serviceName).toBeUndefined(); + expect(getFederationMetadata(query)?.serviceName).toBeUndefined(); }); it('treats root Query type definition as an extension, not base definitions', () => { @@ -693,7 +693,7 @@ describe('composeServices', () => { const query = schema.getType('Query') as GraphQLObjectType; - expect(getFederationMetadata(query).serviceName).toBeUndefined(); + expect(getFederationMetadata(query)?.serviceName).toBeUndefined(); }); it('allows extension of the Mutation type with no base type definition', () => { @@ -826,7 +826,7 @@ describe('composeServices', () => { const product = schema.getType('Product'); - expect(getFederationMetadata(product).externals).toMatchInlineSnapshot(` + expect(getFederationMetadata(product)?.externals).toMatchInlineSnapshot(` Object { "serviceB--MISSING": Array [ Object { @@ -885,10 +885,10 @@ describe('composeServices', () => { price: Int! } `); - expect(getFederationMetadata(product.getFields()['price']).serviceName).toEqual( + expect(getFederationMetadata(product.getFields()['price'])?.serviceName).toEqual( 'serviceB', ); - expect(getFederationMetadata(product).serviceName).toEqual('serviceA'); + expect(getFederationMetadata(product)?.serviceName).toEqual('serviceA'); }); }); @@ -919,7 +919,7 @@ describe('composeServices', () => { const product = schema.getType('Product') as GraphQLObjectType; expect( - getFederationMetadata(product.getFields()['price']).requires, + getFederationMetadata(product.getFields()['price'])?.requires, ).toMatchInlineSnapshot(`sku`); }); @@ -953,7 +953,7 @@ describe('composeServices', () => { const { schema } = compositionResult; const product = schema.getType('Product') as GraphQLObjectType; - expect(getFederationMetadata(product.getFields()['price']).requires) + expect(getFederationMetadata(product.getFields()['price'])?.requires) .toMatchInlineSnapshot(` sku { id @@ -1038,7 +1038,7 @@ describe('composeServices', () => { const { schema } = compositionResult; const review = schema.getType('Review') as GraphQLObjectType; - expect(getFederationMetadata(review.getFields()['product']).provides) + expect(getFederationMetadata(review.getFields()['product'])?.provides) .toMatchInlineSnapshot(` sku { id @@ -1127,8 +1127,8 @@ describe('composeServices', () => { const valueType = schema.getType('ValueType') as GraphQLObjectType; const userFieldFederationMetadata = getFederationMetadata(valueType.getFields()['user']); - expect(userFieldFederationMetadata.belongsToValueType).toBe(true); - expect(userFieldFederationMetadata.serviceName).toBe(null); + expect(userFieldFederationMetadata?.belongsToValueType).toBe(true); + expect(userFieldFederationMetadata?.serviceName).toBe(null); }); }); @@ -1159,7 +1159,7 @@ describe('composeServices', () => { const { schema } = compositionResult; const product = schema.getType('Product') as GraphQLObjectType; - expect(getFederationMetadata(product).keys).toMatchInlineSnapshot(` + expect(getFederationMetadata(product)?.keys).toMatchInlineSnapshot(` Object { "serviceA": Array [ sku, @@ -1201,7 +1201,7 @@ describe('composeServices', () => { const { schema } = compositionResult; const product = schema.getType('Product') as GraphQLObjectType; - expect(getFederationMetadata(product).keys).toMatchInlineSnapshot(` + expect(getFederationMetadata(product)?.keys).toMatchInlineSnapshot(` Object { "serviceA": Array [ color { @@ -1245,7 +1245,7 @@ describe('composeServices', () => { const { schema } = compositionResult; const product = schema.getType('Product') as GraphQLObjectType; - expect(getFederationMetadata(product).keys).toMatchInlineSnapshot(` + expect(getFederationMetadata(product)?.keys).toMatchInlineSnapshot(` Object { "serviceA": Array [ color { @@ -1416,8 +1416,8 @@ describe('composeServices', () => { assertCompositionSuccess(compositionResult); const { schema } = compositionResult; expect(schema).toBeDefined(); - expect(schema.extensions.serviceList).toBeDefined(); - expect(schema.extensions.serviceList).toHaveLength(2); + expect(schema.extensions?.serviceList).toBeDefined(); + expect(schema.extensions?.serviceList).toHaveLength(2); }); }); diff --git a/federation-js/src/composition/__tests__/tsconfig.json b/federation-js/src/composition/__tests__/tsconfig.json index c530f7d167..c1d4d8d74b 100644 --- a/federation-js/src/composition/__tests__/tsconfig.json +++ b/federation-js/src/composition/__tests__/tsconfig.json @@ -1,8 +1,5 @@ { "extends": "../../../../tsconfig.test.base", - "compilerOptions": { - "strictNullChecks": false - }, "include": ["**/*"], "references": [ { "path": "../../.." } From 22395b6c7d0e72f0fb8f7871e714bed9476ea408 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Feb 2021 09:49:30 +0100 Subject: [PATCH 08/46] Rely on `queryPlanSerializer` instead of pretty printing the query plan manually This seems to have been a contributor PR that slipped through, because we use `queryPlanSerializer` everywhere else. --- .../__tests__/integration/requires.test.ts | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/gateway-js/src/__tests__/integration/requires.test.ts b/gateway-js/src/__tests__/integration/requires.test.ts index 1ea07cce2b..02b5bdf615 100644 --- a/gateway-js/src/__tests__/integration/requires.test.ts +++ b/gateway-js/src/__tests__/integration/requires.test.ts @@ -1,7 +1,9 @@ import gql from 'graphql-tag'; import { execute } from '../execution-utils'; -import { serializeQueryPlan } from '../..'; +import { astSerializer, queryPlanSerializer } from '../snapshotSerializers'; +expect.addSnapshotSerializer(astSerializer); +expect.addSnapshotSerializer(queryPlanSerializer); it('supports passing additional fields defined by a requires', async () => { const query = `#graphql query GetReviwedBookNames { @@ -128,10 +130,10 @@ it('collapses nested requires', async () => { expect(errors).toEqual(undefined); - expect(serializeQueryPlan(queryPlan)).toMatchInlineSnapshot(` - "QueryPlan { + expect(queryPlan).toMatchInlineSnapshot(` + QueryPlan { Sequence { - Fetch(service: \\"a\\") { + Fetch(service: "a") { { user { __typename @@ -145,8 +147,8 @@ it('collapses nested requires', async () => { } } }, - Flatten(path: \\"user\\") { - Fetch(service: \\"b\\") { + Flatten(path: "user") { + Fetch(service: "b") { { ... on User { __typename @@ -168,7 +170,7 @@ it('collapses nested requires', async () => { }, }, }, - }" + } `); expect(data).toEqual({ @@ -209,10 +211,10 @@ it('collapses nested requires with user-defined fragments', async () => { expect(errors).toEqual(undefined); - expect(serializeQueryPlan(queryPlan)).toMatchInlineSnapshot(` - "QueryPlan { + expect(queryPlan).toMatchInlineSnapshot(` + QueryPlan { Sequence { - Fetch(service: \\"a\\") { + Fetch(service: "a") { { user { __typename @@ -226,8 +228,8 @@ it('collapses nested requires with user-defined fragments', async () => { } } }, - Flatten(path: \\"user\\") { - Fetch(service: \\"b\\") { + Flatten(path: "user") { + Fetch(service: "b") { { ... on User { __typename @@ -247,7 +249,7 @@ it('collapses nested requires with user-defined fragments', async () => { }, }, }, - }" + } `); expect(data).toEqual({ From 68ef9d615d7b20274da247b38476191f43e54304 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Feb 2021 09:54:34 +0100 Subject: [PATCH 09/46] Move snapshot serializers and matchers to federaton-integration-testsuite Snapshot serializers were duplicated in `@apollo/federation` and `@apollo/gateway`. This moves both the snapshot serializers and the matchers to `apollo-federaton-integration-testsuite` (we may want to rename that package). I temporarily disabled the option for the gateway to include the pretty printed query plan under `__queryPlanExperimental` (which is used to show the query plan in the Playground we ship with Apollo Server), because this lead to a circular dependency between `@apollo/gateway` and apollo-federaton-integration-testsuite`. We should either solve that or switch Playground to use the JSON serialization format for the query plan. --- .../src/index.ts | 4 ++++ .../src/matchers/index.ts | 4 ++++ .../src}/matchers/toCallService.ts | 7 +++---- .../src}/matchers/toHaveBeenCalledBefore.ts | 0 .../src}/matchers/toHaveFetched.ts | 4 ++-- .../src}/matchers/toMatchAST.ts | 0 .../src/prettyFormatQueryPlan.ts | 9 ++++++++ .../src/snapshotSerializers/astSerializer.ts | 3 +-- .../graphqlErrorSerializer.ts | 0 .../src/snapshotSerializers/index.ts | 1 + .../queryPlanSerializer.ts | 2 +- .../selectionSetSerializer.ts | 0 .../src/snapshotSerializers/typeSerializer.ts | 0 .../tsconfig.json | 6 +++--- .../src/composition/__tests__/compose.test.ts | 2 +- .../__tests__/composeAndValidate.test.ts | 2 +- .../composition/__tests__/normalize.test.ts | 2 +- .../src/composition/__tests__/utils.test.ts | 2 +- .../executableDirectivesIdentical.test.ts | 2 +- .../executableDirectivesInAllServices.test.ts | 2 +- .../__tests__/externalMissingOnBase.test.ts | 2 +- .../__tests__/externalTypeMismatch.test.ts | 2 +- .../__tests__/externalUnused.test.ts | 2 +- .../__tests__/keyFieldsMissingOnBase.test.ts | 2 +- .../keyFieldsSelectInvalidType.test.ts | 2 +- .../__tests__/keysMatchBaseService.test.ts | 2 +- .../providesFieldsMissingExternals.test.ts | 2 +- .../providesFieldsSelectInvalidType.test.ts | 2 +- .../__tests__/providesNotOnEntity.test.ts | 2 +- .../requiresFieldsMissingExternals.test.ts | 2 +- .../requiresFieldsMissingOnBase.test.ts | 2 +- .../__tests__/duplicateEnumOrScalar.test.ts | 2 +- .../__tests__/duplicateEnumValue.test.ts | 2 +- .../__tests__/externalUsedOnBase.test.ts | 2 +- .../keyFieldsMissingExternal.test.ts | 2 +- .../__tests__/requiresUsedOnBase.test.ts | 2 +- .../__tests__/reservedFieldUsed.test.ts | 2 +- .../__tests__/rootFieldUsed.test.ts | 2 +- .../sdl/__tests__/matchingEnums.test.ts | 2 +- .../sdl/__tests__/matchingUnions.test.ts | 2 +- .../__tests__/possibleTypeExtensions.test.ts | 2 +- .../uniqueFieldDefinitionNames.test.ts | 2 +- .../uniqueTypeNamesWithFields.test.ts | 2 +- .../__tests__/buildFederatedSchema.test.ts | 2 +- .../src/snapshotSerializers/astSerializer.ts | 21 ------------------- federation-js/tsconfig.json | 4 +--- federation-js/tsconfig.test.json | 1 + gateway-js/src/QueryPlan.ts | 8 ------- .../src/__tests__/buildQueryPlan.test.ts | 2 +- .../src/__tests__/executeQueryPlan.test.ts | 2 +- gateway-js/src/__tests__/execution-utils.ts | 3 +-- .../integration/abstract-types.test.ts | 2 +- .../src/__tests__/integration/boolean.test.ts | 2 +- .../__tests__/integration/complex-key.test.ts | 2 +- .../integration/custom-directives.test.ts | 2 +- .../__tests__/integration/list-key.test.ts | 2 +- .../integration/multiple-key.test.ts | 2 +- .../__tests__/integration/mutations.test.ts | 2 +- .../__tests__/integration/requires.test.ts | 2 +- .../src/__tests__/integration/unions.test.ts | 2 +- .../__tests__/integration/value-types.test.ts | 2 +- gateway-js/src/__tests__/testSetup.ts | 5 +---- gateway-js/src/index.ts | 13 +++++++----- gateway-js/src/snapshotSerializers/index.ts | 21 ------------------- .../selectionSetSerializer.ts | 13 ------------ .../src/snapshotSerializers/typeSerializer.ts | 11 ---------- gateway-js/tsconfig.json | 1 - gateway-js/tsconfig.test.json | 1 + tsconfig.build.json | 1 + 69 files changed, 84 insertions(+), 143 deletions(-) create mode 100644 federation-integration-testsuite-js/src/matchers/index.ts rename {gateway-js/src/__tests__ => federation-integration-testsuite-js/src}/matchers/toCallService.ts (91%) rename {gateway-js/src/__tests__ => federation-integration-testsuite-js/src}/matchers/toHaveBeenCalledBefore.ts (100%) rename {gateway-js/src/__tests__ => federation-integration-testsuite-js/src}/matchers/toHaveFetched.ts (94%) rename {gateway-js/src/__tests__ => federation-integration-testsuite-js/src}/matchers/toMatchAST.ts (100%) create mode 100644 federation-integration-testsuite-js/src/prettyFormatQueryPlan.ts rename {gateway-js => federation-integration-testsuite-js}/src/snapshotSerializers/astSerializer.ts (98%) rename {federation-js => federation-integration-testsuite-js}/src/snapshotSerializers/graphqlErrorSerializer.ts (100%) rename {federation-js => federation-integration-testsuite-js}/src/snapshotSerializers/index.ts (88%) rename {gateway-js => federation-integration-testsuite-js}/src/snapshotSerializers/queryPlanSerializer.ts (98%) rename {federation-js => federation-integration-testsuite-js}/src/snapshotSerializers/selectionSetSerializer.ts (100%) rename {federation-js => federation-integration-testsuite-js}/src/snapshotSerializers/typeSerializer.ts (100%) delete mode 100644 federation-js/src/snapshotSerializers/astSerializer.ts delete mode 100644 gateway-js/src/snapshotSerializers/index.ts delete mode 100644 gateway-js/src/snapshotSerializers/selectionSetSerializer.ts delete mode 100644 gateway-js/src/snapshotSerializers/typeSerializer.ts diff --git a/federation-integration-testsuite-js/src/index.ts b/federation-integration-testsuite-js/src/index.ts index 995b5bc6e1..2521c24d30 100644 --- a/federation-integration-testsuite-js/src/index.ts +++ b/federation-integration-testsuite-js/src/index.ts @@ -1 +1,5 @@ +export * from './matchers'; +export * from './snapshotSerializers'; export * from './fixtures'; + +export { prettyFormatQueryPlan } from './prettyFormatQueryPlan'; diff --git a/federation-integration-testsuite-js/src/matchers/index.ts b/federation-integration-testsuite-js/src/matchers/index.ts new file mode 100644 index 0000000000..4442028ed3 --- /dev/null +++ b/federation-integration-testsuite-js/src/matchers/index.ts @@ -0,0 +1,4 @@ +import './toCallService'; +import './toHaveBeenCalledBefore'; +import './toHaveFetched'; +import './toMatchAST'; diff --git a/gateway-js/src/__tests__/matchers/toCallService.ts b/federation-integration-testsuite-js/src/matchers/toCallService.ts similarity index 91% rename from gateway-js/src/__tests__/matchers/toCallService.ts rename to federation-integration-testsuite-js/src/matchers/toCallService.ts index 1640861fa6..aba0a3927c 100644 --- a/gateway-js/src/__tests__/matchers/toCallService.ts +++ b/federation-integration-testsuite-js/src/matchers/toCallService.ts @@ -1,7 +1,6 @@ -import { QueryPlan } from '@apollo/gateway'; -import { PlanNode } from '../../QueryPlan'; -import astSerializer from '../../snapshotSerializers/astSerializer'; -import queryPlanSerializer from '../../snapshotSerializers/queryPlanSerializer'; +import { QueryPlan, PlanNode } from '@apollo/gateway'; +import astSerializer from '../snapshotSerializers/astSerializer'; +import queryPlanSerializer from '../snapshotSerializers/queryPlanSerializer'; const prettyFormat = require('pretty-format'); declare global { diff --git a/gateway-js/src/__tests__/matchers/toHaveBeenCalledBefore.ts b/federation-integration-testsuite-js/src/matchers/toHaveBeenCalledBefore.ts similarity index 100% rename from gateway-js/src/__tests__/matchers/toHaveBeenCalledBefore.ts rename to federation-integration-testsuite-js/src/matchers/toHaveBeenCalledBefore.ts diff --git a/gateway-js/src/__tests__/matchers/toHaveFetched.ts b/federation-integration-testsuite-js/src/matchers/toHaveFetched.ts similarity index 94% rename from gateway-js/src/__tests__/matchers/toHaveFetched.ts rename to federation-integration-testsuite-js/src/matchers/toHaveFetched.ts index 3bbed40d6d..bb2fb269c7 100644 --- a/gateway-js/src/__tests__/matchers/toHaveFetched.ts +++ b/federation-integration-testsuite-js/src/matchers/toHaveFetched.ts @@ -15,8 +15,8 @@ function prepareHttpOptions(requestUrl: string, requestOpts: RequestInit): Reque const headers = new Headers(); headers.set('Content-Type', 'application/json'); if (requestOpts.headers) { - for (let name in requestOpts.headers) { - headers.set(name, requestOpts.headers[name]); + for (const [name, value] of new Headers(requestOpts.headers)) { + headers.set(name, value); } } diff --git a/gateway-js/src/__tests__/matchers/toMatchAST.ts b/federation-integration-testsuite-js/src/matchers/toMatchAST.ts similarity index 100% rename from gateway-js/src/__tests__/matchers/toMatchAST.ts rename to federation-integration-testsuite-js/src/matchers/toMatchAST.ts diff --git a/federation-integration-testsuite-js/src/prettyFormatQueryPlan.ts b/federation-integration-testsuite-js/src/prettyFormatQueryPlan.ts new file mode 100644 index 0000000000..22f3ebff92 --- /dev/null +++ b/federation-integration-testsuite-js/src/prettyFormatQueryPlan.ts @@ -0,0 +1,9 @@ +import { QueryPlan } from '@apollo/gateway'; +import prettyFormat from 'pretty-format'; +import { astSerializer, queryPlanSerializer } from './snapshotSerializers'; + +export function prettyFormatQueryPlan(queryPlan: QueryPlan) { + return prettyFormat(queryPlan, { + plugins: [queryPlanSerializer, astSerializer], + }); +} diff --git a/gateway-js/src/snapshotSerializers/astSerializer.ts b/federation-integration-testsuite-js/src/snapshotSerializers/astSerializer.ts similarity index 98% rename from gateway-js/src/snapshotSerializers/astSerializer.ts rename to federation-integration-testsuite-js/src/snapshotSerializers/astSerializer.ts index f3cee95e79..cc8a70bddf 100644 --- a/gateway-js/src/snapshotSerializers/astSerializer.ts +++ b/federation-integration-testsuite-js/src/snapshotSerializers/astSerializer.ts @@ -1,6 +1,6 @@ import { ASTNode, print, Kind, visit } from 'graphql'; import { Plugin, Config, Refs } from 'pretty-format'; -import { QueryPlanSelectionNode, QueryPlanInlineFragmentNode } from '../QueryPlan'; +import { QueryPlanSelectionNode, QueryPlanInlineFragmentNode } from '@apollo/gateway'; import { SelectionNode as GraphQLJSSelectionNode } from 'graphql'; export default { @@ -18,7 +18,6 @@ export default { ): string { return print(remapInlineFragmentNodes(value)) .trim() - .replace(/\n\n/g, '\n') .replace(/\n/g, '\n' + indentation); }, } as Plugin; diff --git a/federation-js/src/snapshotSerializers/graphqlErrorSerializer.ts b/federation-integration-testsuite-js/src/snapshotSerializers/graphqlErrorSerializer.ts similarity index 100% rename from federation-js/src/snapshotSerializers/graphqlErrorSerializer.ts rename to federation-integration-testsuite-js/src/snapshotSerializers/graphqlErrorSerializer.ts diff --git a/federation-js/src/snapshotSerializers/index.ts b/federation-integration-testsuite-js/src/snapshotSerializers/index.ts similarity index 88% rename from federation-js/src/snapshotSerializers/index.ts rename to federation-integration-testsuite-js/src/snapshotSerializers/index.ts index df46968bab..bebfe285ba 100644 --- a/federation-js/src/snapshotSerializers/index.ts +++ b/federation-integration-testsuite-js/src/snapshotSerializers/index.ts @@ -2,6 +2,7 @@ export { default as astSerializer } from './astSerializer'; export { default as selectionSetSerializer } from './selectionSetSerializer'; export { default as typeSerializer } from './typeSerializer'; export { default as graphqlErrorSerializer } from './graphqlErrorSerializer'; +export { default as queryPlanSerializer } from './queryPlanSerializer'; declare global { namespace jest { diff --git a/gateway-js/src/snapshotSerializers/queryPlanSerializer.ts b/federation-integration-testsuite-js/src/snapshotSerializers/queryPlanSerializer.ts similarity index 98% rename from gateway-js/src/snapshotSerializers/queryPlanSerializer.ts rename to federation-integration-testsuite-js/src/snapshotSerializers/queryPlanSerializer.ts index 08023fe2e4..5a4c1b2804 100644 --- a/gateway-js/src/snapshotSerializers/queryPlanSerializer.ts +++ b/federation-integration-testsuite-js/src/snapshotSerializers/queryPlanSerializer.ts @@ -1,5 +1,5 @@ import { Config, Plugin, Refs } from 'pretty-format'; -import { PlanNode, QueryPlan } from '../QueryPlan'; +import { PlanNode, QueryPlan } from '@apollo/gateway'; import { parse, Kind, visit, DocumentNode } from 'graphql'; export default { diff --git a/federation-js/src/snapshotSerializers/selectionSetSerializer.ts b/federation-integration-testsuite-js/src/snapshotSerializers/selectionSetSerializer.ts similarity index 100% rename from federation-js/src/snapshotSerializers/selectionSetSerializer.ts rename to federation-integration-testsuite-js/src/snapshotSerializers/selectionSetSerializer.ts diff --git a/federation-js/src/snapshotSerializers/typeSerializer.ts b/federation-integration-testsuite-js/src/snapshotSerializers/typeSerializer.ts similarity index 100% rename from federation-js/src/snapshotSerializers/typeSerializer.ts rename to federation-integration-testsuite-js/src/snapshotSerializers/typeSerializer.ts diff --git a/federation-integration-testsuite-js/tsconfig.json b/federation-integration-testsuite-js/tsconfig.json index 264aa3844d..fe56ee43c9 100644 --- a/federation-integration-testsuite-js/tsconfig.json +++ b/federation-integration-testsuite-js/tsconfig.json @@ -3,11 +3,11 @@ "compilerOptions": { "rootDir": "./src", "outDir": "./dist", - "noImplicitAny": false, - "strictNullChecks": false, "types": ["node", "jest"] }, "include": ["src/**/*"], "exclude": ["**/__tests__"], - "references": [] + "references": [ + { "path": "../gateway-js" } + ] } diff --git a/federation-js/src/composition/__tests__/compose.test.ts b/federation-js/src/composition/__tests__/compose.test.ts index 00c101f363..4ce7f95957 100644 --- a/federation-js/src/composition/__tests__/compose.test.ts +++ b/federation-js/src/composition/__tests__/compose.test.ts @@ -9,7 +9,7 @@ import { astSerializer, typeSerializer, selectionSetSerializer, -} from '../../snapshotSerializers'; +} from 'apollo-federation-integration-testsuite'; import { normalizeTypeDefs } from '../normalize'; import { assertCompositionFailure, diff --git a/federation-js/src/composition/__tests__/composeAndValidate.test.ts b/federation-js/src/composition/__tests__/composeAndValidate.test.ts index 1b73569705..3ccfb98bd3 100644 --- a/federation-js/src/composition/__tests__/composeAndValidate.test.ts +++ b/federation-js/src/composition/__tests__/composeAndValidate.test.ts @@ -11,7 +11,7 @@ import { astSerializer, typeSerializer, graphqlErrorSerializer, -} from '../../snapshotSerializers'; +} from 'apollo-federation-integration-testsuite'; import { assertCompositionFailure, assertCompositionSuccess, diff --git a/federation-js/src/composition/__tests__/normalize.test.ts b/federation-js/src/composition/__tests__/normalize.test.ts index 6ce8b5367d..9f68e50f19 100644 --- a/federation-js/src/composition/__tests__/normalize.test.ts +++ b/federation-js/src/composition/__tests__/normalize.test.ts @@ -5,7 +5,7 @@ import { normalizeTypeDefs, stripCommonPrimitives, } from '../normalize'; -import { astSerializer } from '../../snapshotSerializers'; +import { astSerializer } from 'apollo-federation-integration-testsuite'; import { specifiedDirectives } from 'graphql'; expect.addSnapshotSerializer(astSerializer); diff --git a/federation-js/src/composition/__tests__/utils.test.ts b/federation-js/src/composition/__tests__/utils.test.ts index 90164b06a1..690dca767c 100644 --- a/federation-js/src/composition/__tests__/utils.test.ts +++ b/federation-js/src/composition/__tests__/utils.test.ts @@ -1,7 +1,7 @@ import gql from 'graphql-tag'; import deepFreeze from 'deep-freeze'; import { stripExternalFieldsFromTypeDefs } from '../utils'; -import { astSerializer } from '../../snapshotSerializers'; +import { astSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(astSerializer); diff --git a/federation-js/src/composition/validate/postComposition/__tests__/executableDirectivesIdentical.test.ts b/federation-js/src/composition/validate/postComposition/__tests__/executableDirectivesIdentical.test.ts index 695e24efbb..1c1ebf7f2d 100644 --- a/federation-js/src/composition/validate/postComposition/__tests__/executableDirectivesIdentical.test.ts +++ b/federation-js/src/composition/validate/postComposition/__tests__/executableDirectivesIdentical.test.ts @@ -1,7 +1,7 @@ import gql from 'graphql-tag'; import { composeServices } from '../../../compose'; import { executableDirectivesIdentical } from '../'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/postComposition/__tests__/executableDirectivesInAllServices.test.ts b/federation-js/src/composition/validate/postComposition/__tests__/executableDirectivesInAllServices.test.ts index 3e090dcab9..7cffdc5887 100644 --- a/federation-js/src/composition/validate/postComposition/__tests__/executableDirectivesInAllServices.test.ts +++ b/federation-js/src/composition/validate/postComposition/__tests__/executableDirectivesInAllServices.test.ts @@ -1,7 +1,7 @@ import gql from 'graphql-tag'; import { composeServices } from '../../../compose'; import { executableDirectivesInAllServices } from '../'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/postComposition/__tests__/externalMissingOnBase.test.ts b/federation-js/src/composition/validate/postComposition/__tests__/externalMissingOnBase.test.ts index 5f9f086bbc..1cd0c13864 100644 --- a/federation-js/src/composition/validate/postComposition/__tests__/externalMissingOnBase.test.ts +++ b/federation-js/src/composition/validate/postComposition/__tests__/externalMissingOnBase.test.ts @@ -1,7 +1,7 @@ import gql from 'graphql-tag'; import { composeServices } from '../../../compose'; import { externalMissingOnBase as validateExternalMissingOnBase } from '../'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/postComposition/__tests__/externalTypeMismatch.test.ts b/federation-js/src/composition/validate/postComposition/__tests__/externalTypeMismatch.test.ts index 4669beb091..8d3d4d29df 100644 --- a/federation-js/src/composition/validate/postComposition/__tests__/externalTypeMismatch.test.ts +++ b/federation-js/src/composition/validate/postComposition/__tests__/externalTypeMismatch.test.ts @@ -1,7 +1,7 @@ import gql from 'graphql-tag'; import { externalTypeMismatch as validateExternalTypeMismatch } from '../'; import { composeServices } from '../../../compose'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/postComposition/__tests__/externalUnused.test.ts b/federation-js/src/composition/validate/postComposition/__tests__/externalUnused.test.ts index e3156c0177..16b9a399e0 100644 --- a/federation-js/src/composition/validate/postComposition/__tests__/externalUnused.test.ts +++ b/federation-js/src/composition/validate/postComposition/__tests__/externalUnused.test.ts @@ -1,7 +1,7 @@ import gql from 'graphql-tag'; import { composeServices } from '../../../compose'; import { externalUnused as validateExternalUnused } from '../'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/postComposition/__tests__/keyFieldsMissingOnBase.test.ts b/federation-js/src/composition/validate/postComposition/__tests__/keyFieldsMissingOnBase.test.ts index fb3c578935..2901c3bc44 100644 --- a/federation-js/src/composition/validate/postComposition/__tests__/keyFieldsMissingOnBase.test.ts +++ b/federation-js/src/composition/validate/postComposition/__tests__/keyFieldsMissingOnBase.test.ts @@ -1,7 +1,7 @@ import gql from 'graphql-tag'; import { composeServices } from '../../../compose'; import { keyFieldsMissingOnBase as validateKeyFieldsMissingOnBase } from '../'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; import { assertCompositionSuccess } from '../../../utils'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/postComposition/__tests__/keyFieldsSelectInvalidType.test.ts b/federation-js/src/composition/validate/postComposition/__tests__/keyFieldsSelectInvalidType.test.ts index e6f80778ab..f37d66aec9 100644 --- a/federation-js/src/composition/validate/postComposition/__tests__/keyFieldsSelectInvalidType.test.ts +++ b/federation-js/src/composition/validate/postComposition/__tests__/keyFieldsSelectInvalidType.test.ts @@ -1,7 +1,7 @@ import gql from 'graphql-tag'; import { composeServices } from '../../../compose'; import { keyFieldsSelectInvalidType as validateKeyFieldsSelectInvalidType } from '../'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; import { assertCompositionSuccess } from '../../../utils'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/postComposition/__tests__/keysMatchBaseService.test.ts b/federation-js/src/composition/validate/postComposition/__tests__/keysMatchBaseService.test.ts index a740180417..0d76733aa7 100644 --- a/federation-js/src/composition/validate/postComposition/__tests__/keysMatchBaseService.test.ts +++ b/federation-js/src/composition/validate/postComposition/__tests__/keysMatchBaseService.test.ts @@ -1,7 +1,7 @@ import gql from 'graphql-tag'; import { composeServices } from '../../../compose'; import { keysMatchBaseService as validateKeysMatchBaseService } from '../'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; import { assertCompositionSuccess } from '../../../utils'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/postComposition/__tests__/providesFieldsMissingExternals.test.ts b/federation-js/src/composition/validate/postComposition/__tests__/providesFieldsMissingExternals.test.ts index 34966c3639..7e544e4bf5 100644 --- a/federation-js/src/composition/validate/postComposition/__tests__/providesFieldsMissingExternals.test.ts +++ b/federation-js/src/composition/validate/postComposition/__tests__/providesFieldsMissingExternals.test.ts @@ -1,7 +1,7 @@ import gql from 'graphql-tag'; import { composeServices } from '../../../compose'; import { providesFieldsMissingExternal as validateProdivesFieldsMissingExternal } from '../'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; import { assertCompositionSuccess } from '../../../utils'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/postComposition/__tests__/providesFieldsSelectInvalidType.test.ts b/federation-js/src/composition/validate/postComposition/__tests__/providesFieldsSelectInvalidType.test.ts index 263165bdc5..70275b957f 100644 --- a/federation-js/src/composition/validate/postComposition/__tests__/providesFieldsSelectInvalidType.test.ts +++ b/federation-js/src/composition/validate/postComposition/__tests__/providesFieldsSelectInvalidType.test.ts @@ -1,7 +1,7 @@ import gql from 'graphql-tag'; import { composeServices } from '../../../compose'; import { providesFieldsSelectInvalidType as validateprovidesFieldsSelectInvalidType } from '../'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; import { assertCompositionSuccess } from '../../../utils'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/postComposition/__tests__/providesNotOnEntity.test.ts b/federation-js/src/composition/validate/postComposition/__tests__/providesNotOnEntity.test.ts index 1a87fc985f..34a41c5adb 100644 --- a/federation-js/src/composition/validate/postComposition/__tests__/providesNotOnEntity.test.ts +++ b/federation-js/src/composition/validate/postComposition/__tests__/providesNotOnEntity.test.ts @@ -1,7 +1,7 @@ import gql from 'graphql-tag'; import { composeServices } from '../../../compose'; import { providesNotOnEntity as validateProvidesNotOnEntity } from '../'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/postComposition/__tests__/requiresFieldsMissingExternals.test.ts b/federation-js/src/composition/validate/postComposition/__tests__/requiresFieldsMissingExternals.test.ts index c1e824f816..64587378ba 100644 --- a/federation-js/src/composition/validate/postComposition/__tests__/requiresFieldsMissingExternals.test.ts +++ b/federation-js/src/composition/validate/postComposition/__tests__/requiresFieldsMissingExternals.test.ts @@ -1,7 +1,7 @@ import gql from 'graphql-tag'; import { composeServices } from '../../../compose'; import { requiresFieldsMissingExternal as validateRequiresFieldsMissingExternal } from '../'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/postComposition/__tests__/requiresFieldsMissingOnBase.test.ts b/federation-js/src/composition/validate/postComposition/__tests__/requiresFieldsMissingOnBase.test.ts index 945a505807..5a9aa4e58b 100644 --- a/federation-js/src/composition/validate/postComposition/__tests__/requiresFieldsMissingOnBase.test.ts +++ b/federation-js/src/composition/validate/postComposition/__tests__/requiresFieldsMissingOnBase.test.ts @@ -1,7 +1,7 @@ import gql from 'graphql-tag'; import { composeServices } from '../../../compose'; import { requiresFieldsMissingOnBase as validateRequiresFieldsMissingOnBase } from '../'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/preComposition/__tests__/duplicateEnumOrScalar.test.ts b/federation-js/src/composition/validate/preComposition/__tests__/duplicateEnumOrScalar.test.ts index cde9552c3b..ebadfe6a65 100644 --- a/federation-js/src/composition/validate/preComposition/__tests__/duplicateEnumOrScalar.test.ts +++ b/federation-js/src/composition/validate/preComposition/__tests__/duplicateEnumOrScalar.test.ts @@ -1,6 +1,6 @@ import gql from 'graphql-tag'; import { duplicateEnumOrScalar as validateDuplicateEnumOrScalar } from '../'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/preComposition/__tests__/duplicateEnumValue.test.ts b/federation-js/src/composition/validate/preComposition/__tests__/duplicateEnumValue.test.ts index 6bc91a5662..8700bcb66e 100644 --- a/federation-js/src/composition/validate/preComposition/__tests__/duplicateEnumValue.test.ts +++ b/federation-js/src/composition/validate/preComposition/__tests__/duplicateEnumValue.test.ts @@ -1,6 +1,6 @@ import gql from 'graphql-tag'; import { duplicateEnumValue as validateDuplicateEnumValue } from '../'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/preComposition/__tests__/externalUsedOnBase.test.ts b/federation-js/src/composition/validate/preComposition/__tests__/externalUsedOnBase.test.ts index 2b1cad013c..c8506f303c 100644 --- a/federation-js/src/composition/validate/preComposition/__tests__/externalUsedOnBase.test.ts +++ b/federation-js/src/composition/validate/preComposition/__tests__/externalUsedOnBase.test.ts @@ -1,6 +1,6 @@ import gql from 'graphql-tag'; import { externalUsedOnBase as validateExternalUsedOnBase } from '../'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/preComposition/__tests__/keyFieldsMissingExternal.test.ts b/federation-js/src/composition/validate/preComposition/__tests__/keyFieldsMissingExternal.test.ts index 3811694310..d024db3a9a 100644 --- a/federation-js/src/composition/validate/preComposition/__tests__/keyFieldsMissingExternal.test.ts +++ b/federation-js/src/composition/validate/preComposition/__tests__/keyFieldsMissingExternal.test.ts @@ -1,6 +1,6 @@ import gql from 'graphql-tag'; import { keyFieldsMissingExternal as validateKeyFieldsMissingExternal } from '../'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/preComposition/__tests__/requiresUsedOnBase.test.ts b/federation-js/src/composition/validate/preComposition/__tests__/requiresUsedOnBase.test.ts index fc5d42c66f..8af1564b04 100644 --- a/federation-js/src/composition/validate/preComposition/__tests__/requiresUsedOnBase.test.ts +++ b/federation-js/src/composition/validate/preComposition/__tests__/requiresUsedOnBase.test.ts @@ -1,6 +1,6 @@ import gql from 'graphql-tag'; import { requiresUsedOnBase as validateRequiresUsedOnBase } from '../'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/preComposition/__tests__/reservedFieldUsed.test.ts b/federation-js/src/composition/validate/preComposition/__tests__/reservedFieldUsed.test.ts index 8d03a00e73..4b380b54c0 100644 --- a/federation-js/src/composition/validate/preComposition/__tests__/reservedFieldUsed.test.ts +++ b/federation-js/src/composition/validate/preComposition/__tests__/reservedFieldUsed.test.ts @@ -1,6 +1,6 @@ import gql from 'graphql-tag'; import { reservedFieldUsed as validateReservedFieldUsed } from '..'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/preNormalization/__tests__/rootFieldUsed.test.ts b/federation-js/src/composition/validate/preNormalization/__tests__/rootFieldUsed.test.ts index 69f46733eb..33daea7390 100644 --- a/federation-js/src/composition/validate/preNormalization/__tests__/rootFieldUsed.test.ts +++ b/federation-js/src/composition/validate/preNormalization/__tests__/rootFieldUsed.test.ts @@ -1,6 +1,6 @@ import gql from 'graphql-tag'; import { rootFieldUsed as validateRootFieldUsed } from '../'; -import { graphqlErrorSerializer } from '../../../../snapshotSerializers'; +import { graphqlErrorSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(graphqlErrorSerializer); diff --git a/federation-js/src/composition/validate/sdl/__tests__/matchingEnums.test.ts b/federation-js/src/composition/validate/sdl/__tests__/matchingEnums.test.ts index 77b86452c0..27366d4537 100644 --- a/federation-js/src/composition/validate/sdl/__tests__/matchingEnums.test.ts +++ b/federation-js/src/composition/validate/sdl/__tests__/matchingEnums.test.ts @@ -13,7 +13,7 @@ import { astSerializer, typeSerializer, selectionSetSerializer, -} from '../../../../snapshotSerializers'; +} from 'apollo-federation-integration-testsuite'; import { normalizeTypeDefs } from '../../../normalize'; import federationDirectives from '../../../../directives'; import { ServiceDefinition } from '../../../types'; diff --git a/federation-js/src/composition/validate/sdl/__tests__/matchingUnions.test.ts b/federation-js/src/composition/validate/sdl/__tests__/matchingUnions.test.ts index 7a3ec2b7ed..a0d41bbe0c 100644 --- a/federation-js/src/composition/validate/sdl/__tests__/matchingUnions.test.ts +++ b/federation-js/src/composition/validate/sdl/__tests__/matchingUnions.test.ts @@ -9,7 +9,7 @@ import gql from 'graphql-tag'; import { typeSerializer, graphqlErrorSerializer, -} from '../../../../snapshotSerializers'; +} from 'apollo-federation-integration-testsuite'; import { UniqueUnionTypes } from '..'; import { ServiceDefinition } from '../../../types'; import { buildMapsFromServiceList } from '../../../compose'; diff --git a/federation-js/src/composition/validate/sdl/__tests__/possibleTypeExtensions.test.ts b/federation-js/src/composition/validate/sdl/__tests__/possibleTypeExtensions.test.ts index 7be01981c1..4c925f8b7e 100644 --- a/federation-js/src/composition/validate/sdl/__tests__/possibleTypeExtensions.test.ts +++ b/federation-js/src/composition/validate/sdl/__tests__/possibleTypeExtensions.test.ts @@ -11,7 +11,7 @@ import { buildMapsFromServiceList } from '../../../compose'; import { typeSerializer, graphqlErrorSerializer, -} from '../../../../snapshotSerializers'; +} from 'apollo-federation-integration-testsuite'; import federationDirectives from '../../../../directives'; import { ServiceDefinition } from '../../../types'; import { PossibleTypeExtensions } from '../possibleTypeExtensions'; diff --git a/federation-js/src/composition/validate/sdl/__tests__/uniqueFieldDefinitionNames.test.ts b/federation-js/src/composition/validate/sdl/__tests__/uniqueFieldDefinitionNames.test.ts index 94cb8da6cf..af8670dcec 100644 --- a/federation-js/src/composition/validate/sdl/__tests__/uniqueFieldDefinitionNames.test.ts +++ b/federation-js/src/composition/validate/sdl/__tests__/uniqueFieldDefinitionNames.test.ts @@ -7,7 +7,7 @@ import { } from 'graphql'; import { validateSDL } from 'graphql/validation/validate'; import gql from 'graphql-tag'; -import { typeSerializer } from '../../../../snapshotSerializers'; +import { typeSerializer } from 'apollo-federation-integration-testsuite'; import { buildMapsFromServiceList } from '../../../compose'; import federationDirectives from '../../../../directives'; import { UniqueFieldDefinitionNames } from '..'; diff --git a/federation-js/src/composition/validate/sdl/__tests__/uniqueTypeNamesWithFields.test.ts b/federation-js/src/composition/validate/sdl/__tests__/uniqueTypeNamesWithFields.test.ts index fef8201dd7..7d7ce6d829 100644 --- a/federation-js/src/composition/validate/sdl/__tests__/uniqueTypeNamesWithFields.test.ts +++ b/federation-js/src/composition/validate/sdl/__tests__/uniqueTypeNamesWithFields.test.ts @@ -9,7 +9,7 @@ import gql from 'graphql-tag'; import { typeSerializer, graphqlErrorSerializer, -} from '../../../../snapshotSerializers'; +} from 'apollo-federation-integration-testsuite'; import federationDirectives from '../../../../directives'; import { UniqueTypeNamesWithFields } from '..'; import { ServiceDefinition } from '../../../types'; diff --git a/federation-js/src/service/__tests__/buildFederatedSchema.test.ts b/federation-js/src/service/__tests__/buildFederatedSchema.test.ts index 3693b1b5aa..32ab4208d6 100644 --- a/federation-js/src/service/__tests__/buildFederatedSchema.test.ts +++ b/federation-js/src/service/__tests__/buildFederatedSchema.test.ts @@ -1,7 +1,7 @@ import gql from 'graphql-tag'; import { Kind, graphql, DocumentNode, execute } from 'graphql'; import { buildFederatedSchema } from '../buildFederatedSchema'; -import { typeSerializer } from '../../snapshotSerializers'; +import { typeSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(typeSerializer); diff --git a/federation-js/src/snapshotSerializers/astSerializer.ts b/federation-js/src/snapshotSerializers/astSerializer.ts deleted file mode 100644 index b3dc7eb543..0000000000 --- a/federation-js/src/snapshotSerializers/astSerializer.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { ASTNode, print } from 'graphql'; -import { Plugin, Config, Refs } from 'pretty-format'; - -export default { - test(value: any) { - return value && typeof value.kind === 'string'; - }, - - serialize( - value: ASTNode, - _config: Config, - indentation: string, - _depth: number, - _refs: Refs, - _printer: any, - ): string { - return print(value) - .trim() - .replace(/\n/g, '\n' + indentation); - }, -} as Plugin; diff --git a/federation-js/tsconfig.json b/federation-js/tsconfig.json index 7f3725d43f..1a1000c4d7 100644 --- a/federation-js/tsconfig.json +++ b/federation-js/tsconfig.json @@ -6,7 +6,5 @@ }, "include": ["src/**/*"], "exclude": ["**/__tests__"], - "references": [ - { "path": "../federation-integration-testsuite-js" } - ] + "references": [] } diff --git a/federation-js/tsconfig.test.json b/federation-js/tsconfig.test.json index 189bd93707..3c215436c9 100644 --- a/federation-js/tsconfig.test.json +++ b/federation-js/tsconfig.test.json @@ -3,5 +3,6 @@ "include": ["**/__tests__/**/*"], "references": [ { "path": "./" }, + { "path": "../federation-integration-testsuite-js" }, ] } diff --git a/gateway-js/src/QueryPlan.ts b/gateway-js/src/QueryPlan.ts index 664806ebe9..158591b880 100644 --- a/gateway-js/src/QueryPlan.ts +++ b/gateway-js/src/QueryPlan.ts @@ -5,8 +5,6 @@ import { SelectionNode as GraphQLJSSelectionNode, GraphQLSchema, } from 'graphql'; -import prettyFormat from 'pretty-format'; -import { queryPlanSerializer, astSerializer } from './snapshotSerializers'; export type ResponsePath = (string | number)[]; @@ -74,12 +72,6 @@ export interface QueryPlanInlineFragmentNode { readonly selections: QueryPlanSelectionNode[]; } -export function serializeQueryPlan(queryPlan: QueryPlan) { - return prettyFormat(queryPlan, { - plugins: [queryPlanSerializer, astSerializer], - }); -} - export function getResponseName(node: QueryPlanFieldNode): string { return node.alias ? node.alias : node.name; } diff --git a/gateway-js/src/__tests__/buildQueryPlan.test.ts b/gateway-js/src/__tests__/buildQueryPlan.test.ts index 27627490ea..68928ea9d4 100644 --- a/gateway-js/src/__tests__/buildQueryPlan.test.ts +++ b/gateway-js/src/__tests__/buildQueryPlan.test.ts @@ -1,7 +1,7 @@ import { GraphQLSchema } from 'graphql'; import gql from 'graphql-tag'; import { buildQueryPlan, buildOperationContext } from '../buildQueryPlan'; -import { astSerializer, queryPlanSerializer } from '../snapshotSerializers'; +import { astSerializer, queryPlanSerializer } from 'apollo-federation-integration-testsuite'; import { getFederatedTestingSchema } from './execution-utils'; import { WasmPointer } from '../QueryPlan'; diff --git a/gateway-js/src/__tests__/executeQueryPlan.test.ts b/gateway-js/src/__tests__/executeQueryPlan.test.ts index 62439012df..8227d585f8 100644 --- a/gateway-js/src/__tests__/executeQueryPlan.test.ts +++ b/gateway-js/src/__tests__/executeQueryPlan.test.ts @@ -6,7 +6,7 @@ import { AuthenticationError } from 'apollo-server-core'; import { buildQueryPlan, buildOperationContext } from '../buildQueryPlan'; import { executeQueryPlan } from '../executeQueryPlan'; import { LocalGraphQLDataSource } from '../datasources/LocalGraphQLDataSource'; -import { astSerializer, queryPlanSerializer } from '../snapshotSerializers'; +import { astSerializer, queryPlanSerializer } from 'apollo-federation-integration-testsuite'; import { getFederatedTestingSchema } from './execution-utils'; import { WasmPointer } from '../QueryPlan'; diff --git a/gateway-js/src/__tests__/execution-utils.ts b/gateway-js/src/__tests__/execution-utils.ts index e3a189743f..e387b07122 100644 --- a/gateway-js/src/__tests__/execution-utils.ts +++ b/gateway-js/src/__tests__/execution-utils.ts @@ -20,8 +20,7 @@ import { import { LocalGraphQLDataSource } from '../datasources/LocalGraphQLDataSource'; import { mergeDeep } from 'apollo-utilities'; -import queryPlanSerializer from '../snapshotSerializers/queryPlanSerializer'; -import astSerializer from '../snapshotSerializers/astSerializer'; +import { queryPlanSerializer, astSerializer } from 'apollo-federation-integration-testsuite'; import gql from 'graphql-tag'; import { fixtures } from 'apollo-federation-integration-testsuite'; import { getQueryPlanner } from '@apollo/query-planner-wasm'; diff --git a/gateway-js/src/__tests__/integration/abstract-types.test.ts b/gateway-js/src/__tests__/integration/abstract-types.test.ts index 2bad0c2710..5ff10e8937 100644 --- a/gateway-js/src/__tests__/integration/abstract-types.test.ts +++ b/gateway-js/src/__tests__/integration/abstract-types.test.ts @@ -1,7 +1,7 @@ import gql from 'graphql-tag'; import { execute } from '../execution-utils'; -import { astSerializer, queryPlanSerializer } from '../../snapshotSerializers'; +import { astSerializer, queryPlanSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(astSerializer); expect.addSnapshotSerializer(queryPlanSerializer); diff --git a/gateway-js/src/__tests__/integration/boolean.test.ts b/gateway-js/src/__tests__/integration/boolean.test.ts index 2e50eb8375..c6c9dda27a 100644 --- a/gateway-js/src/__tests__/integration/boolean.test.ts +++ b/gateway-js/src/__tests__/integration/boolean.test.ts @@ -1,5 +1,5 @@ import { execute } from '../execution-utils'; -import { astSerializer, queryPlanSerializer } from '../../snapshotSerializers'; +import { astSerializer, queryPlanSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(astSerializer); expect.addSnapshotSerializer(queryPlanSerializer); diff --git a/gateway-js/src/__tests__/integration/complex-key.test.ts b/gateway-js/src/__tests__/integration/complex-key.test.ts index a413c3a7ad..74c9e15f09 100644 --- a/gateway-js/src/__tests__/integration/complex-key.test.ts +++ b/gateway-js/src/__tests__/integration/complex-key.test.ts @@ -1,6 +1,6 @@ import gql from 'graphql-tag'; import { execute, ServiceDefinitionModule } from '../execution-utils'; -import { astSerializer, queryPlanSerializer } from '../../snapshotSerializers'; +import { astSerializer, queryPlanSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(astSerializer); expect.addSnapshotSerializer(queryPlanSerializer); diff --git a/gateway-js/src/__tests__/integration/custom-directives.test.ts b/gateway-js/src/__tests__/integration/custom-directives.test.ts index 5b490fbb72..abf7f1f3c6 100644 --- a/gateway-js/src/__tests__/integration/custom-directives.test.ts +++ b/gateway-js/src/__tests__/integration/custom-directives.test.ts @@ -1,6 +1,6 @@ import gql from 'graphql-tag'; import { execute } from '../execution-utils'; -import { astSerializer, queryPlanSerializer } from '../../snapshotSerializers'; +import { astSerializer, queryPlanSerializer } from 'apollo-federation-integration-testsuite'; import { fixtures } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(astSerializer); diff --git a/gateway-js/src/__tests__/integration/list-key.test.ts b/gateway-js/src/__tests__/integration/list-key.test.ts index 1573ecd99f..1e759663bb 100644 --- a/gateway-js/src/__tests__/integration/list-key.test.ts +++ b/gateway-js/src/__tests__/integration/list-key.test.ts @@ -1,6 +1,6 @@ import gql from 'graphql-tag'; import { execute, ServiceDefinitionModule } from '../execution-utils'; -import { astSerializer, queryPlanSerializer } from '../../snapshotSerializers'; +import { astSerializer, queryPlanSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(astSerializer); expect.addSnapshotSerializer(queryPlanSerializer); diff --git a/gateway-js/src/__tests__/integration/multiple-key.test.ts b/gateway-js/src/__tests__/integration/multiple-key.test.ts index 60450252d4..dcb9554e77 100644 --- a/gateway-js/src/__tests__/integration/multiple-key.test.ts +++ b/gateway-js/src/__tests__/integration/multiple-key.test.ts @@ -1,6 +1,6 @@ import gql from 'graphql-tag'; import { execute, ServiceDefinitionModule } from '../execution-utils'; -import { astSerializer, queryPlanSerializer } from '../../snapshotSerializers'; +import { astSerializer, queryPlanSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(astSerializer); expect.addSnapshotSerializer(queryPlanSerializer); diff --git a/gateway-js/src/__tests__/integration/mutations.test.ts b/gateway-js/src/__tests__/integration/mutations.test.ts index fef0a5089b..069a549d1b 100644 --- a/gateway-js/src/__tests__/integration/mutations.test.ts +++ b/gateway-js/src/__tests__/integration/mutations.test.ts @@ -1,5 +1,5 @@ import { execute } from '../execution-utils'; -import { astSerializer, queryPlanSerializer } from '../../snapshotSerializers'; +import { astSerializer, queryPlanSerializer } from 'apollo-federation-integration-testsuite'; import { accounts, reviews } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(astSerializer); diff --git a/gateway-js/src/__tests__/integration/requires.test.ts b/gateway-js/src/__tests__/integration/requires.test.ts index 02b5bdf615..a2a571fb6b 100644 --- a/gateway-js/src/__tests__/integration/requires.test.ts +++ b/gateway-js/src/__tests__/integration/requires.test.ts @@ -1,6 +1,6 @@ import gql from 'graphql-tag'; import { execute } from '../execution-utils'; -import { astSerializer, queryPlanSerializer } from '../snapshotSerializers'; +import { astSerializer, queryPlanSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(astSerializer); expect.addSnapshotSerializer(queryPlanSerializer); diff --git a/gateway-js/src/__tests__/integration/unions.test.ts b/gateway-js/src/__tests__/integration/unions.test.ts index 42827bb355..bc8bd7fdae 100644 --- a/gateway-js/src/__tests__/integration/unions.test.ts +++ b/gateway-js/src/__tests__/integration/unions.test.ts @@ -1,5 +1,5 @@ import gql from 'graphql-tag'; -import { astSerializer, queryPlanSerializer } from '../../snapshotSerializers'; +import { astSerializer, queryPlanSerializer } from 'apollo-federation-integration-testsuite'; import { execute } from '../execution-utils'; expect.addSnapshotSerializer(astSerializer); diff --git a/gateway-js/src/__tests__/integration/value-types.test.ts b/gateway-js/src/__tests__/integration/value-types.test.ts index 58064ce173..8372bf1c47 100644 --- a/gateway-js/src/__tests__/integration/value-types.test.ts +++ b/gateway-js/src/__tests__/integration/value-types.test.ts @@ -1,6 +1,6 @@ import gql from 'graphql-tag'; import { execute } from '../execution-utils'; -import { astSerializer, queryPlanSerializer } from '../../snapshotSerializers'; +import { astSerializer, queryPlanSerializer } from 'apollo-federation-integration-testsuite'; expect.addSnapshotSerializer(astSerializer); expect.addSnapshotSerializer(queryPlanSerializer); diff --git a/gateway-js/src/__tests__/testSetup.ts b/gateway-js/src/__tests__/testSetup.ts index eab33782f0..afb18fd762 100644 --- a/gateway-js/src/__tests__/testSetup.ts +++ b/gateway-js/src/__tests__/testSetup.ts @@ -1,4 +1 @@ -import './matchers/toMatchAST'; -import './matchers/toCallService'; -import './matchers/toHaveBeenCalledBefore'; -import './matchers/toHaveFetched'; +import 'apollo-federation-integration-testsuite'; diff --git a/gateway-js/src/index.ts b/gateway-js/src/index.ts index 95ea033885..3b9c5e5870 100644 --- a/gateway-js/src/index.ts +++ b/gateway-js/src/index.ts @@ -41,8 +41,7 @@ import { getServiceDefinitionsFromStorage, CompositionMetadata, } from './loadServicesFromStorage'; - -import { serializeQueryPlan, QueryPlan, OperationContext, WasmPointer } from './QueryPlan'; +import { QueryPlan, OperationContext, WasmPointer } from './QueryPlan'; import { GraphQLDataSource } from './datasources/types'; import { RemoteGraphQLDataSource } from './datasources/RemoteGraphQLDataSource'; import { getVariableValues } from 'graphql/execution/values'; @@ -772,7 +771,12 @@ export class ApolloGateway implements GraphQLService { // 2) non-empty query plan and shouldShowQueryPlan === true const serializedQueryPlan = queryPlan.node && (this.config.debug || shouldShowQueryPlan) - ? serializeQueryPlan(queryPlan) + // FIXME: I disabled printing the query plan because this lead to a + // circular dependency between the `@apollo/gateway` and + // `apollo-federation-integration-testsuite` packages. + // We should either solve that or switch Playground to + // the JSON serialization format. + ? {} // prettyPrintQueryPlan(queryPlan) : null; if (this.config.debug && serializedQueryPlan) { @@ -850,9 +854,7 @@ function wrapSchemaWithAliasResolver( export { buildQueryPlan, executeQueryPlan, - serializeQueryPlan, buildOperationContext, - QueryPlan, ServiceMap, Experimental_DidFailCompositionCallback, Experimental_DidResolveQueryPlanCallback, @@ -863,4 +865,5 @@ export { Experimental_CompositionInfo, }; +export * from './QueryPlan'; export * from './datasources'; diff --git a/gateway-js/src/snapshotSerializers/index.ts b/gateway-js/src/snapshotSerializers/index.ts deleted file mode 100644 index 3a768cfc19..0000000000 --- a/gateway-js/src/snapshotSerializers/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -import astSerializer from './astSerializer'; -import selectionSetSerializer from './selectionSetSerializer'; -import typeSerializer from './typeSerializer'; -import queryPlanSerializer from './queryPlanSerializer'; -export { - astSerializer, - selectionSetSerializer, - typeSerializer, - queryPlanSerializer, -}; - -declare global { - namespace jest { - interface Expect { - /** - * Adds a module to format application-specific data structures for serialization. - */ - addSnapshotSerializer(serializer: import('pretty-format').Plugin): void; - } - } -} diff --git a/gateway-js/src/snapshotSerializers/selectionSetSerializer.ts b/gateway-js/src/snapshotSerializers/selectionSetSerializer.ts deleted file mode 100644 index 33dfba417a..0000000000 --- a/gateway-js/src/snapshotSerializers/selectionSetSerializer.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { print, SelectionNode, isSelectionNode } from 'graphql'; -import { Plugin } from 'pretty-format'; - -export default { - test(value: any) { - return ( - Array.isArray(value) && value.length > 0 && value.every(isSelectionNode) - ); - }, - print(selectionNodes: SelectionNode[]): string { - return selectionNodes.map(node => print(node)).join('\n'); - }, -} as Plugin; diff --git a/gateway-js/src/snapshotSerializers/typeSerializer.ts b/gateway-js/src/snapshotSerializers/typeSerializer.ts deleted file mode 100644 index 7b78e18cac..0000000000 --- a/gateway-js/src/snapshotSerializers/typeSerializer.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { isNamedType, GraphQLNamedType, printType } from 'graphql'; -import { Plugin } from 'pretty-format'; - -export default { - test(value: any) { - return value && isNamedType(value); - }, - print(value: GraphQLNamedType) { - return printType(value); - }, -} as Plugin; diff --git a/gateway-js/tsconfig.json b/gateway-js/tsconfig.json index 250392ca7f..304a6af6fb 100644 --- a/gateway-js/tsconfig.json +++ b/gateway-js/tsconfig.json @@ -8,6 +8,5 @@ "exclude": ["**/__tests__", "**/__mocks__"], "references": [ { "path": "../federation-js" }, - { "path": "../federation-integration-testsuite-js" }, ] } diff --git a/gateway-js/tsconfig.test.json b/gateway-js/tsconfig.test.json index 189bd93707..0294d0cd8b 100644 --- a/gateway-js/tsconfig.test.json +++ b/gateway-js/tsconfig.test.json @@ -3,5 +3,6 @@ "include": ["**/__tests__/**/*"], "references": [ { "path": "./" }, + { "path": "../federation-integration-testsuite-js" } ] } diff --git a/tsconfig.build.json b/tsconfig.build.json index d75c8d1eed..c2b21ed43a 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -7,5 +7,6 @@ "references": [ { "path": "./federation-js" }, { "path": "./gateway-js" }, + { "path": "./federation-integration-testsuite-js" }, ] } From 2cb72765ea0d991deb707703e63583b731a0dbb2 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Thu, 4 Feb 2021 10:42:42 +0100 Subject: [PATCH 10/46] Fix Jest snapshot indentation for `graphql-js` AST We need to re-indent the lines printed from `graphql-js` in `astSerializer`, because Jest has started to ignore indentation when diffing snapshots, and it does this by invoking snapshot serializers with these values set to 0. Without re-indenting, every line printed from `graphql-js` would be shown as changed. See facebook/jest#9203. --- .../src/snapshotSerializers/astSerializer.ts | 51 +++++++++++++++---- .../queryPlanSerializer.ts | 4 +- 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/federation-integration-testsuite-js/src/snapshotSerializers/astSerializer.ts b/federation-integration-testsuite-js/src/snapshotSerializers/astSerializer.ts index cc8a70bddf..0edd08082f 100644 --- a/federation-integration-testsuite-js/src/snapshotSerializers/astSerializer.ts +++ b/federation-integration-testsuite-js/src/snapshotSerializers/astSerializer.ts @@ -1,26 +1,57 @@ -import { ASTNode, print, Kind, visit } from 'graphql'; -import { Plugin, Config, Refs } from 'pretty-format'; -import { QueryPlanSelectionNode, QueryPlanInlineFragmentNode } from '@apollo/gateway'; -import { SelectionNode as GraphQLJSSelectionNode } from 'graphql'; +import { QueryPlanInlineFragmentNode, QueryPlanSelectionNode } from '@apollo/gateway'; +import { ASTNode, Kind, print, SelectionNode as GraphQLJSSelectionNode, visit } from 'graphql'; +import { Config, NewPlugin, Refs } from 'pretty-format'; export default { test(value: any) { + // Note that this isn't a reliable test because other objects may also have a `kind` property + // (like query plans!). + // `graphql-js` does have an unexported `isNode` function, but that currently performs the same check + // and doesn't check whether `kind` represents a valid AST node either: + // https://github.com/graphql/graphql-js/blob/998bea680d6e11e1c055a400a887a9539de08f75/src/language/ast.js#L135-L137 + // Perhaps we should attempt to contribute an improved `isNode` function. return value && typeof value.kind === 'string'; }, serialize( value: ASTNode, - _config: Config, + config: Config, indentation: string, _depth: number, _refs: Refs, _printer: any, ): string { - return print(remapInlineFragmentNodes(value)) - .trim() - .replace(/\n/g, '\n' + indentation); + const lines = print(remapInlineFragmentNodes(value)).trim().split('\n'); + + // Avoid adding newlines for single line results. + if (lines.length === 0) { + return ''; + } else if (lines.length === 1) { + return lines[0]; + } + + return lines.map(line => { + // We re-indent the lines printed from `graphql-js` to respect the passed in `indentation` + // and`config.indent` values. + // This is important because Jest has started to ignore indentation when diffing snapshots, + // and it does this by invoking snapshot serializers with these values set to 0. + // Without re-indenting, every line printed from `graphql-js` would be shown as changed. + // See https://github.com/facebook/jest/pull/9203 + const indentationLength = getIndentationLength(line); + const dedentedLine = line.slice(indentationLength); + // `graphql-js` always indents with 2 spaces + const indentationDepth = indentationLength / 2; + + return indentation + config.indent.repeat(indentationDepth) + dedentedLine; + }).join(config.spacingOuter); }, -} as Plugin; +} as NewPlugin; + +// From https://github.com/facebook/jest/blob/32aaff83f02c347ccd591727544002490fb4ee9a/packages/jest-snapshot/src/dedentLines.ts#L8 +function getIndentationLength(line: string): number { + const result = /^( {2})+/.exec(line); + return result === null ? 0 : result[0].length; +}; /** * This function converts potential InlineFragmentNodes that WE created @@ -78,7 +109,7 @@ export function remapInlineFragmentNodes(node: ASTNode): ASTNode { function remapSelections( selections: QueryPlanSelectionNode[], -): ReadonlyArray { +): readonly GraphQLJSSelectionNode[] { return selections.map((selection) => { switch (selection.kind) { case Kind.FIELD: diff --git a/federation-integration-testsuite-js/src/snapshotSerializers/queryPlanSerializer.ts b/federation-integration-testsuite-js/src/snapshotSerializers/queryPlanSerializer.ts index 5a4c1b2804..e37e344f3d 100644 --- a/federation-integration-testsuite-js/src/snapshotSerializers/queryPlanSerializer.ts +++ b/federation-integration-testsuite-js/src/snapshotSerializers/queryPlanSerializer.ts @@ -48,7 +48,6 @@ function printNode( `Fetch(service: "${node.serviceName}")` + ' {' + config.spacingOuter + - indentationNext + (node.requires ? printer( // this is an array of selections, so we need to make it a proper @@ -61,8 +60,7 @@ function printNode( printer, ) + ' =>' + - config.spacingOuter + - indentationNext + config.spacingOuter : '') + printer( flattenEntitiesField(parse(node.operation)), From 417c79e84f3cc684f07e35560292032657b7a0b4 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Thu, 4 Feb 2021 10:47:11 +0100 Subject: [PATCH 11/46] Add expected newlines in gateway snapshots It turns out the `astSerializer` in `@apollo/gateway` (not the one in `@apollo/federation`) reduced double newlines to single ones. Since we no longer do this (and can't because that would break other tests), correcting the snapshots to account for that. --- gateway-js/src/__tests__/buildQueryPlan.test.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gateway-js/src/__tests__/buildQueryPlan.test.ts b/gateway-js/src/__tests__/buildQueryPlan.test.ts index 68928ea9d4..a19e69f6f4 100644 --- a/gateway-js/src/__tests__/buildQueryPlan.test.ts +++ b/gateway-js/src/__tests__/buildQueryPlan.test.ts @@ -1079,6 +1079,7 @@ describe('buildQueryPlan', () => { ...__QueryPlanFragment_1__ } } + fragment __QueryPlanFragment_0__ on Product { __typename ... on Book { @@ -1090,6 +1091,7 @@ describe('buildQueryPlan', () => { upc } } + fragment __QueryPlanFragment_1__ on Review { body author @@ -1238,6 +1240,7 @@ describe('buildQueryPlan', () => { ...__QueryPlanFragment_0__ } } + fragment __QueryPlanFragment_0__ on Review { id body @@ -1286,6 +1289,7 @@ describe('buildQueryPlan', () => { ...__QueryPlanFragment_1__ } } + fragment __QueryPlanFragment_0__ on Product { __typename ... on Book { @@ -1297,6 +1301,7 @@ describe('buildQueryPlan', () => { upc } } + fragment __QueryPlanFragment_1__ on Review { content: body author From 6d338b960513698d98cb9ec97b9759783b486cf6 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Thu, 4 Feb 2021 11:29:24 +0100 Subject: [PATCH 12/46] Update `ts-jest` to latest version --- package-lock.json | 14 ++++---------- package.json | 2 +- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index ace0e40dac..4ed5fdbec1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9410,12 +9410,6 @@ "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", "dev": true }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, "lodash.set": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", @@ -12667,9 +12661,9 @@ } }, "ts-jest": { - "version": "26.4.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.4.4.tgz", - "integrity": "sha512-3lFWKbLxJm34QxyVNNCgXX1u4o/RV0myvA2y2Bxm46iGIjKlaY0own9gIckbjZJPn+WaJEnfPPJ20HHGpoq4yg==", + "version": "26.5.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.0.tgz", + "integrity": "sha512-Ya4IQgvIFNa2Mgq52KaO8yBw2W8tWp61Ecl66VjF0f5JaV8u50nGoptHVILOPGoI7SDnShmEqnYQEmyHdQ+56g==", "dev": true, "requires": { "@types/jest": "26.x", @@ -12678,7 +12672,7 @@ "fast-json-stable-stringify": "2.x", "jest-util": "^26.1.0", "json5": "2.x", - "lodash.memoize": "4.x", + "lodash": "4.x", "make-error": "1.x", "mkdirp": "1.x", "semver": "7.x", diff --git a/package.json b/package.json index 6604e313a3..08e506d09e 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "nock": "13.0.4", "node-fetch": "2.6.1", "prettier": "2.1.1", - "ts-jest": "26.4.4", + "ts-jest": "26.5.0", "typescript": "4.1.3", "wasm-pack": "^0.9.1", "winston": "3.3.3", From 6304f18864329fa0a851f5c314b40aab32c04126 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Thu, 4 Feb 2021 12:06:05 +0100 Subject: [PATCH 13/46] Update `graphql-js` to v15 Our peer dependencies still support v14, but this ensures we test against the latest version and also avoid a typing error because `specifiedByUrl` was only added in v15. --- package-lock.json | 11 ++++------- package.json | 2 +- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4ed5fdbec1..0adcb561ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7570,13 +7570,10 @@ "dev": true }, "graphql": { - "version": "14.7.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.7.0.tgz", - "integrity": "sha512-l0xWZpoPKpppFzMfvVyFmp9vLN7w/ZZJPefUicMCepfJeQ8sMcztloGYY9DfjVPo6tIUDzU5Hw3MUbIjj9AVVA==", - "dev": true, - "requires": { - "iterall": "^1.2.2" - } + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.5.0.tgz", + "integrity": "sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA==", + "dev": true }, "graphql-extensions": { "version": "0.12.8", diff --git a/package.json b/package.json index 08e506d09e..a20088f6d1 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "bunyan": "1.8.14", "codecov": "3.7.2", "deep-freeze": "0.0.1", - "graphql": "14.7.0", + "graphql": "15.5.0", "graphql-tag": "2.11.0", "jest": "26.6.3", "jest-config": "26.6.3", From 8d663f157bce1ac507353e03090bc25cddadfaaa Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Thu, 4 Feb 2021 13:21:46 +0100 Subject: [PATCH 14/46] Fix references for per `__tests__` directory `tsconfig.json` Unfortunately, we need an additional `tsconfig.json` per `__tests__` directory to satisfy VS Code due to microsoft/vscode/#12463. I tried having these extend the `tsconfig.test.json` in their respective packages, but it turns out `references` are not inherited (see microsoft/TypeScript#27098). --- federation-js/src/__tests__/tsconfig.json | 5 +++-- federation-js/src/composition/__tests__/tsconfig.json | 5 +++-- .../src/composition/validate/__tests__/tsconfig.json | 7 +++++-- .../validate/postComposition/__tests__/tsconfig.json | 7 +++++-- .../validate/preComposition/__tests__/tsconfig.json | 7 +++++-- .../validate/preNormalization/__tests__/tsconfig.json | 9 +++++++++ gateway-js/src/__tests__/tsconfig.json | 3 ++- gateway-js/src/datasources/__tests__/tsconfig.json | 5 +++-- gateway-js/src/utilities/__tests__/tsconfig.json | 5 +++-- 9 files changed, 38 insertions(+), 15 deletions(-) create mode 100644 federation-js/src/composition/validate/preNormalization/__tests__/tsconfig.json diff --git a/federation-js/src/__tests__/tsconfig.json b/federation-js/src/__tests__/tsconfig.json index fcb8707ccc..1a421e3500 100644 --- a/federation-js/src/__tests__/tsconfig.json +++ b/federation-js/src/__tests__/tsconfig.json @@ -1,7 +1,8 @@ { - "extends": "../../../tsconfig.test.base", + "extends": "../../tsconfig.test", "include": ["**/*"], "references": [ - { "path": "../../" }, + { "path": "../.." }, + { "path": "../../../federation-integration-testsuite-js" }, ] } diff --git a/federation-js/src/composition/__tests__/tsconfig.json b/federation-js/src/composition/__tests__/tsconfig.json index c1d4d8d74b..091b9e3d54 100644 --- a/federation-js/src/composition/__tests__/tsconfig.json +++ b/federation-js/src/composition/__tests__/tsconfig.json @@ -1,7 +1,8 @@ { - "extends": "../../../../tsconfig.test.base", + "extends": "../../../tsconfig.test", "include": ["**/*"], "references": [ - { "path": "../../.." } + { "path": "../../.." }, + { "path": "../../../../federation-integration-testsuite-js" }, ] } diff --git a/federation-js/src/composition/validate/__tests__/tsconfig.json b/federation-js/src/composition/validate/__tests__/tsconfig.json index 7d619d5637..9faf9a71c6 100644 --- a/federation-js/src/composition/validate/__tests__/tsconfig.json +++ b/federation-js/src/composition/validate/__tests__/tsconfig.json @@ -1,5 +1,8 @@ { - "extends": "../../../../../tsconfig.test.base", + "extends": "../../../../tsconfig.test", "include": ["**/*"], - "references": [{ "path": "../../../../" }] + "references": [ + { "path": "../../../.." }, + { "path": "../../../../../federation-integration-testsuite-js" }, + ] } diff --git a/federation-js/src/composition/validate/postComposition/__tests__/tsconfig.json b/federation-js/src/composition/validate/postComposition/__tests__/tsconfig.json index 9bcedd51ae..3a6decb3d6 100644 --- a/federation-js/src/composition/validate/postComposition/__tests__/tsconfig.json +++ b/federation-js/src/composition/validate/postComposition/__tests__/tsconfig.json @@ -1,5 +1,8 @@ { - "extends": "../../../../../../tsconfig.test.base", + "extends": "../../../../../tsconfig.test", "include": ["**/*"], - "references": [{ "path": "../../../../../" }] + "references": [ + { "path": "../../../../.." }, + { "path": "../../../../../../federation-integration-testsuite-js" }, + ] } diff --git a/federation-js/src/composition/validate/preComposition/__tests__/tsconfig.json b/federation-js/src/composition/validate/preComposition/__tests__/tsconfig.json index 9bcedd51ae..3a6decb3d6 100644 --- a/federation-js/src/composition/validate/preComposition/__tests__/tsconfig.json +++ b/federation-js/src/composition/validate/preComposition/__tests__/tsconfig.json @@ -1,5 +1,8 @@ { - "extends": "../../../../../../tsconfig.test.base", + "extends": "../../../../../tsconfig.test", "include": ["**/*"], - "references": [{ "path": "../../../../../" }] + "references": [ + { "path": "../../../../.." }, + { "path": "../../../../../../federation-integration-testsuite-js" }, + ] } diff --git a/federation-js/src/composition/validate/preNormalization/__tests__/tsconfig.json b/federation-js/src/composition/validate/preNormalization/__tests__/tsconfig.json new file mode 100644 index 0000000000..caa1728b97 --- /dev/null +++ b/federation-js/src/composition/validate/preNormalization/__tests__/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../../../tsconfig.test", + "include": ["**/*"], + "references": [ + { "path": "../../../../.." }, + { "path": "../../../../../../federation-integration-testsuite-js" }, + ] + } + \ No newline at end of file diff --git a/gateway-js/src/__tests__/tsconfig.json b/gateway-js/src/__tests__/tsconfig.json index fcb8707ccc..5f062f92b8 100644 --- a/gateway-js/src/__tests__/tsconfig.json +++ b/gateway-js/src/__tests__/tsconfig.json @@ -1,7 +1,8 @@ { - "extends": "../../../tsconfig.test.base", + "extends": "../../tsconfig.test", "include": ["**/*"], "references": [ { "path": "../../" }, + { "path": "../../../federation-integration-testsuite-js" }, ] } diff --git a/gateway-js/src/datasources/__tests__/tsconfig.json b/gateway-js/src/datasources/__tests__/tsconfig.json index c1e0db227d..091b9e3d54 100644 --- a/gateway-js/src/datasources/__tests__/tsconfig.json +++ b/gateway-js/src/datasources/__tests__/tsconfig.json @@ -1,7 +1,8 @@ { - "extends": "../../../../tsconfig.test.base", + "extends": "../../../tsconfig.test", "include": ["**/*"], "references": [ - { "path": "../../../" }, + { "path": "../../.." }, + { "path": "../../../../federation-integration-testsuite-js" }, ] } diff --git a/gateway-js/src/utilities/__tests__/tsconfig.json b/gateway-js/src/utilities/__tests__/tsconfig.json index c1e0db227d..091b9e3d54 100644 --- a/gateway-js/src/utilities/__tests__/tsconfig.json +++ b/gateway-js/src/utilities/__tests__/tsconfig.json @@ -1,7 +1,8 @@ { - "extends": "../../../../tsconfig.test.base", + "extends": "../../../tsconfig.test", "include": ["**/*"], "references": [ - { "path": "../../../" }, + { "path": "../../.." }, + { "path": "../../../../federation-integration-testsuite-js" }, ] } From 894cfeded7b6121e6ad08ad42982b93f6c36b62d Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Thu, 4 Feb 2021 13:31:10 +0100 Subject: [PATCH 15/46] Remove unnecessary declaration of `addSnapshotSerializer` --- .../src/snapshotSerializers/index.ts | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/federation-integration-testsuite-js/src/snapshotSerializers/index.ts b/federation-integration-testsuite-js/src/snapshotSerializers/index.ts index bebfe285ba..30011929c3 100644 --- a/federation-integration-testsuite-js/src/snapshotSerializers/index.ts +++ b/federation-integration-testsuite-js/src/snapshotSerializers/index.ts @@ -3,14 +3,3 @@ export { default as selectionSetSerializer } from './selectionSetSerializer'; export { default as typeSerializer } from './typeSerializer'; export { default as graphqlErrorSerializer } from './graphqlErrorSerializer'; export { default as queryPlanSerializer } from './queryPlanSerializer'; - -declare global { - namespace jest { - interface Expect { - /** - * Adds a module to format application-specific data structures for serialization. - */ - addSnapshotSerializer(serializer: import('pretty-format').Plugin): void; - } - } -} From 12ad3bfc8bc187e689d8dfb305b4f0f3853d59a7 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Thu, 4 Feb 2021 13:32:52 +0100 Subject: [PATCH 16/46] Fix typings for `toHaveFetched` matchers --- .../src/matchers/toHaveFetched.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/federation-integration-testsuite-js/src/matchers/toHaveFetched.ts b/federation-integration-testsuite-js/src/matchers/toHaveFetched.ts index bb2fb269c7..bb08dc5d49 100644 --- a/federation-integration-testsuite-js/src/matchers/toHaveFetched.ts +++ b/federation-integration-testsuite-js/src/matchers/toHaveFetched.ts @@ -5,8 +5,9 @@ import { RequestInit, Headers } from 'apollo-server-env'; export {}; declare global { namespace jest { - interface Matchers { - toHaveFetched(spy: SpyInstance): R; + interface Matchers { + toHaveFetched(requestUrl: string, requestOpts?: RequestInit): R; + toHaveFetchedNth(nthCall: number, requestUrl: string, requestOpts?: RequestInit): R; } } } @@ -37,7 +38,7 @@ function toHaveFetched( this: jest.MatcherUtils, fetch: jest.SpyInstance, requestUrl: string, - requestOpts: RequestInit + requestOpts: RequestInit = {} ): { message(): string; pass: boolean } { const httpOptions = prepareHttpOptions(requestUrl, requestOpts); let pass = false; @@ -60,7 +61,7 @@ function toHaveFetchedNth( fetch: jest.SpyInstance, nthCall: number, requestUrl: string, - requestOpts: RequestInit + requestOpts: RequestInit = {} ): { message(): string; pass: boolean } { const httpOptions = prepareHttpOptions(requestUrl, requestOpts); let pass = false; From d5c4e714135c9461f5e05d5337baa64df59ddf6d Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Thu, 4 Feb 2021 13:34:59 +0100 Subject: [PATCH 17/46] Clean up `toMatchAST` and add `toMatchQueryPlan` --- .../src/matchers/toCallService.ts | 2 +- .../src/matchers/toHaveBeenCalledBefore.ts | 4 +- .../src/matchers/toMatchAST.ts | 83 +++++++------------ .../src/matchers/toMatchQueryPlan.ts | 43 ++++++++++ .../src/matchers/utils.ts | 53 ++++++++++++ 5 files changed, 130 insertions(+), 55 deletions(-) create mode 100644 federation-integration-testsuite-js/src/matchers/toMatchQueryPlan.ts create mode 100644 federation-integration-testsuite-js/src/matchers/utils.ts diff --git a/federation-integration-testsuite-js/src/matchers/toCallService.ts b/federation-integration-testsuite-js/src/matchers/toCallService.ts index aba0a3927c..6a39915682 100644 --- a/federation-integration-testsuite-js/src/matchers/toCallService.ts +++ b/federation-integration-testsuite-js/src/matchers/toCallService.ts @@ -5,7 +5,7 @@ const prettyFormat = require('pretty-format'); declare global { namespace jest { - interface Matchers { + interface Matchers { toCallService(service: string): R; } } diff --git a/federation-integration-testsuite-js/src/matchers/toHaveBeenCalledBefore.ts b/federation-integration-testsuite-js/src/matchers/toHaveBeenCalledBefore.ts index 1b5f86c64f..9144791724 100644 --- a/federation-integration-testsuite-js/src/matchers/toHaveBeenCalledBefore.ts +++ b/federation-integration-testsuite-js/src/matchers/toHaveBeenCalledBefore.ts @@ -3,8 +3,8 @@ export {}; declare global { namespace jest { - interface Matchers { - toHaveBeenCalledBefore(spy: SpyInstance): R; + interface Matchers { + toHaveBeenCalledBefore(secondSpy: jest.SpyInstance): R; } } } diff --git a/federation-integration-testsuite-js/src/matchers/toMatchAST.ts b/federation-integration-testsuite-js/src/matchers/toMatchAST.ts index 8df057e7c9..eae5d3fdf1 100644 --- a/federation-integration-testsuite-js/src/matchers/toMatchAST.ts +++ b/federation-integration-testsuite-js/src/matchers/toMatchAST.ts @@ -1,64 +1,43 @@ -import { print, ASTNode } from 'graphql'; -const diff = require('jest-diff'); +import { ASTNode } from 'graphql'; +import { MatcherHintOptions } from 'jest-matcher-utils'; +import { diffFormatted, indentLines, printExpectedFormatted } from './utils'; declare global { namespace jest { - interface Matchers { + interface Matchers { toMatchAST(expected: ASTNode): R; } } } -const lineEndRegex = /^/gm; -function indentString(string: string, count = 2) { - if (!string) return string; - return string.replace(lineEndRegex, ' '.repeat(count)); -} - -function toMatchAST( - this: jest.MatcherUtils, - received: ASTNode, - expected: ASTNode, -): { message(): string; pass: boolean } { - const receivedString = print(received); - const expectedString = print(expected); +expect.extend({ + toMatchAST(received: ASTNode, expected: ASTNode) { + const matcherName = 'toMatchAST'; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; - const printReceived = (string: string) => - this.utils.RECEIVED_COLOR(indentString(string)); - const printExpected = (string: string) => - this.utils.EXPECTED_COLOR(indentString(string)); + const pass = this.equals(received, expected); - const pass = this.equals(receivedString, expectedString); - const message = pass - ? () => - this.utils.matcherHint('.not.toMatchAST') + - '\n\n' + - `Expected AST to not equal:\n` + - printExpected(expectedString) + - '\n' + - `Received:\n` + - printReceived(receivedString) - : () => { - const diffString = diff(expectedString, receivedString, { - expand: this.expand, - }); - return ( - this.utils.matcherHint('.toMatchAST') + + const message = pass + ? () => + this.utils.matcherHint(matcherName, undefined, undefined, options) + '\n\n' + - `Expected AST to equal:\n` + - printExpected(expectedString) + - '\n' + - `Received:\n` + - printReceived(receivedString) + - (diffString ? `\n\nDifference:\n\n${diffString}` : '') - ); - }; - return { - message, - pass, - }; -} - -expect.extend({ - toMatchAST, + `Expected AST to not equal:\n` + + indentLines(printExpectedFormatted(expected)) + : () => + this.utils.matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + diffFormatted(expected, received, { + aAnnotation: 'Expected', + bAnnotation: 'Received', + expand: this.expand ?? true, + includeChangeCounts: true, + }); + return { + message, + pass, + }; + }, }); diff --git a/federation-integration-testsuite-js/src/matchers/toMatchQueryPlan.ts b/federation-integration-testsuite-js/src/matchers/toMatchQueryPlan.ts new file mode 100644 index 0000000000..b02f0789bd --- /dev/null +++ b/federation-integration-testsuite-js/src/matchers/toMatchQueryPlan.ts @@ -0,0 +1,43 @@ +import { QueryPlan } from '@apollo/gateway'; +import { MatcherHintOptions } from 'jest-matcher-utils'; +import { diffFormatted, indentLines, printExpectedFormatted } from './utils'; + +declare global { + namespace jest { + interface Matchers { + toMatchQueryPlan(expected: QueryPlan): R; + } + } +} + +expect.extend({ + toMatchQueryPlan(received: QueryPlan, expected: QueryPlan) { + const matcherName = 'toMatchQueryPlan'; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + + const pass = this.equals(received, expected); + + const message = pass + ? () => + this.utils.matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + `Expected query plan to not equal:\n` + + indentLines(printExpectedFormatted(expected)) + : () => + this.utils.matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + diffFormatted(expected, received, { + aAnnotation: 'Expected', + bAnnotation: 'Received', + expand: this.expand ?? true, + includeChangeCounts: true, + }); + return { + message, + pass, + }; + }, +}); diff --git a/federation-integration-testsuite-js/src/matchers/utils.ts b/federation-integration-testsuite-js/src/matchers/utils.ts new file mode 100644 index 0000000000..907b7cb1e5 --- /dev/null +++ b/federation-integration-testsuite-js/src/matchers/utils.ts @@ -0,0 +1,53 @@ +import diff, { DiffOptions } from 'jest-diff'; +import { EXPECTED_COLOR, RECEIVED_COLOR } from 'jest-matcher-utils'; +import prettyFormat from 'pretty-format'; +import { + queryPlanSerializer, + astSerializer, + typeSerializer, +} from '../snapshotSerializers'; + +const defaultFormatOptions: prettyFormat.OptionsReceived = { + plugins: [queryPlanSerializer, astSerializer, typeSerializer], +}; + +export function diffFormatted( + expected: unknown, + received: unknown, + diffOptions?: DiffOptions, + formatOptions: prettyFormat.OptionsReceived = defaultFormatOptions, +) { + const expectedString = prettyFormat(expected, formatOptions); + const receivedString = prettyFormat(received, formatOptions); + + return diff(expectedString, receivedString, diffOptions); +} + +export function indentLines( + text: string, + depth: number = 1, + indent: string = ' ', +) { + const indentation = indent.repeat(depth); + return text + .split('\n') + .map((line) => indentation + line) + .join('\n'); +} + +// The corresponding functions in `jest-matcher-utils` call their own `stringify` function, +// and that doesn't allow passing in custom pretty-format plugins. + +export function printReceivedFormatted( + value: unknown, + formatOptions: prettyFormat.OptionsReceived = defaultFormatOptions, +): string { + return RECEIVED_COLOR(prettyFormat(value, formatOptions)); +} + +export function printExpectedFormatted( + value: unknown, + formatOptions: prettyFormat.OptionsReceived = defaultFormatOptions, +): string { + return EXPECTED_COLOR(prettyFormat(value, formatOptions)); +} From 912716dd80b70ef6a2d4c848f19d224216b97b44 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Thu, 4 Feb 2021 13:54:00 +0100 Subject: [PATCH 18/46] Simplify Jest configs and ensure `testSetup.js` is included in every test `tsconfig.json` --- federation-js/jest.config.js | 11 +++++++---- federation-js/src/__tests__/testSetup.ts | 1 + federation-js/tsconfig.test.json | 3 +++ gateway-js/jest.config.js | 15 ++++++--------- gateway-js/tsconfig.test.json | 3 +++ jest.config.base.js | 2 ++ 6 files changed, 22 insertions(+), 13 deletions(-) create mode 100644 federation-js/src/__tests__/testSetup.ts diff --git a/federation-js/jest.config.js b/federation-js/jest.config.js index 8e7e4dc027..ef8f639b0b 100644 --- a/federation-js/jest.config.js +++ b/federation-js/jest.config.js @@ -1,5 +1,8 @@ -const config = require('../jest.config.base'); +const baseConfig = require('../jest.config.base'); -const additionalConfig = {}; - -module.exports = Object.assign(Object.create(null), config, additionalConfig); +/** @typedef {import('ts-jest/dist/types')} */ +/** @type {import('@jest/types').Config.InitialOptions} */ +module.exports = { + ...baseConfig, + setupFilesAfterEnv: ['./src/__tests__/testSetup.ts'], +}; diff --git a/federation-js/src/__tests__/testSetup.ts b/federation-js/src/__tests__/testSetup.ts new file mode 100644 index 0000000000..afb18fd762 --- /dev/null +++ b/federation-js/src/__tests__/testSetup.ts @@ -0,0 +1 @@ +import 'apollo-federation-integration-testsuite'; diff --git a/federation-js/tsconfig.test.json b/federation-js/tsconfig.test.json index 3c215436c9..282e72dc1f 100644 --- a/federation-js/tsconfig.test.json +++ b/federation-js/tsconfig.test.json @@ -1,5 +1,8 @@ { "extends": "../tsconfig.test.base", + "files": [ + "./src/__tests__/testSetup.ts" + ], "include": ["**/__tests__/**/*"], "references": [ { "path": "./" }, diff --git a/gateway-js/jest.config.js b/gateway-js/jest.config.js index 9d165203d4..ef8f639b0b 100644 --- a/gateway-js/jest.config.js +++ b/gateway-js/jest.config.js @@ -1,11 +1,8 @@ -const path = require('path'); -const config = require('../jest.config.base'); +const baseConfig = require('../jest.config.base'); -const additionalConfig = { - setupFilesAfterEnv: [path.resolve(__dirname, './src/__tests__/testSetup.ts')], - testPathIgnorePatterns: [ - ...config.testPathIgnorePatterns, - ] +/** @typedef {import('ts-jest/dist/types')} */ +/** @type {import('@jest/types').Config.InitialOptions} */ +module.exports = { + ...baseConfig, + setupFilesAfterEnv: ['./src/__tests__/testSetup.ts'], }; - -module.exports = Object.assign(Object.create(null), config, additionalConfig); diff --git a/gateway-js/tsconfig.test.json b/gateway-js/tsconfig.test.json index 0294d0cd8b..9f94469826 100644 --- a/gateway-js/tsconfig.test.json +++ b/gateway-js/tsconfig.test.json @@ -1,5 +1,8 @@ { "extends": "../tsconfig.test.base", + "files": [ + "./src/__tests__/testSetup.ts" + ], "include": ["**/__tests__/**/*"], "references": [ { "path": "./" }, diff --git a/jest.config.base.js b/jest.config.base.js index 8007aa3a2e..1d83aceb12 100644 --- a/jest.config.base.js +++ b/jest.config.base.js @@ -1,5 +1,7 @@ const { defaults } = require("jest-config"); +/** @typedef {import('ts-jest/dist/types')} */ +/** @type {import('@jest/types').Config.InitialOptions} */ module.exports = { testEnvironment: "node", preset: "ts-jest", From 5192e3f1e6bc644b0b6c2ca83ee63bcef77ff63f Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Thu, 4 Feb 2021 14:52:16 +0100 Subject: [PATCH 19/46] Use `tsconfig.test.json` from `ts-jest` instead of root `__tests__` one --- jest.config.base.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jest.config.base.js b/jest.config.base.js index 1d83aceb12..ff3e9a1944 100644 --- a/jest.config.base.js +++ b/jest.config.base.js @@ -18,7 +18,7 @@ module.exports = { clearMocks: true, globals: { "ts-jest": { - tsconfig: "/src/__tests__/tsconfig.json", + tsconfig: "/tsconfig.test.json", diagnostics: false } } From 9d75cb893ecb0f81126f303f5309f4e029b4fc2e Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Fri, 5 Feb 2021 15:08:30 +0100 Subject: [PATCH 20/46] Avoid path mapping for mocks and fix typing issues --- gateway-js/src/__mocks__/apollo-server-env.ts | 9 ++------- gateway-js/src/__mocks__/make-fetch-happen-fetcher.ts | 10 +++++++--- gateway-js/src/__mocks__/tsconfig.json | 7 +++++++ gateway-js/src/__tests__/gateway/buildService.test.ts | 2 +- gateway-js/src/__tests__/gateway/executor.test.ts | 2 +- .../__tests__/RemoteGraphQLDataSource.test.ts | 4 ++-- gateway-js/tsconfig.test.json | 2 +- jest.config.base.js | 3 --- tsconfig.test.base.json | 5 +---- 9 files changed, 22 insertions(+), 22 deletions(-) create mode 100644 gateway-js/src/__mocks__/tsconfig.json diff --git a/gateway-js/src/__mocks__/apollo-server-env.ts b/gateway-js/src/__mocks__/apollo-server-env.ts index 0de1e052b4..9376f23e2a 100644 --- a/gateway-js/src/__mocks__/apollo-server-env.ts +++ b/gateway-js/src/__mocks__/apollo-server-env.ts @@ -1,9 +1,6 @@ -/// - import { fetch, Request, - RequestInit, Response, Body, BodyInit, @@ -11,15 +8,13 @@ import { HeadersInit, URL, URLSearchParams, - URLSearchParamsInit, } from 'apollo-server-env'; - -interface FetchMock extends jest.Mock { +interface FetchMock extends jest.MockedFunction { mockResponseOnce(data?: any, headers?: HeadersInit, status?: number): this; mockJSONResponseOnce(data?: object, headers?: HeadersInit): this; } -const mockFetch = jest.fn(fetch) as FetchMock; +const mockFetch = jest.fn(fetch) as unknown as FetchMock; mockFetch.mockResponseOnce = ( data?: BodyInit, diff --git a/gateway-js/src/__mocks__/make-fetch-happen-fetcher.ts b/gateway-js/src/__mocks__/make-fetch-happen-fetcher.ts index 9288e2ecd9..d91018d28f 100644 --- a/gateway-js/src/__mocks__/make-fetch-happen-fetcher.ts +++ b/gateway-js/src/__mocks__/make-fetch-happen-fetcher.ts @@ -1,4 +1,8 @@ -/// +/// +// This explicit reference shouldn't be needed because the project references +// the main project, which includes these type declarations. For some reason, +// VS Code doesn't pick that up though. +// (This may be related to https://github.com/microsoft/TypeScript/issues/36708.) import { fetch, @@ -10,12 +14,12 @@ import { import fetcher from 'make-fetch-happen'; -interface MakeFetchHappenMock extends jest.Mock { +interface MakeFetchHappenMock extends jest.MockedFunction { mockResponseOnce(data?: any, headers?: HeadersInit, status?: number): this; mockJSONResponseOnce(data?: object, headers?: HeadersInit): this; } -const mockMakeFetchHappen = jest.fn(fetcher) as MakeFetchHappenMock; +const mockMakeFetchHappen = jest.fn(fetcher) as unknown as MakeFetchHappenMock; mockMakeFetchHappen.mockResponseOnce = ( data?: BodyInit, diff --git a/gateway-js/src/__mocks__/tsconfig.json b/gateway-js/src/__mocks__/tsconfig.json new file mode 100644 index 0000000000..0e080d1989 --- /dev/null +++ b/gateway-js/src/__mocks__/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.test", + "references": [ + { "path": "../../" }, + { "path": "../../../federation-integration-testsuite-js" }, + ] +} diff --git a/gateway-js/src/__tests__/gateway/buildService.test.ts b/gateway-js/src/__tests__/gateway/buildService.test.ts index d3f006a0d2..e48c4e4c43 100644 --- a/gateway-js/src/__tests__/gateway/buildService.test.ts +++ b/gateway-js/src/__tests__/gateway/buildService.test.ts @@ -1,5 +1,5 @@ import gql from 'graphql-tag'; -import { fetch } from '__mocks__/apollo-server-env'; +import { fetch } from '../../__mocks__/apollo-server-env'; import { createTestClient } from 'apollo-server-testing'; import { ApolloServerBase as ApolloServer } from 'apollo-server-core'; diff --git a/gateway-js/src/__tests__/gateway/executor.test.ts b/gateway-js/src/__tests__/gateway/executor.test.ts index a39b8a60ff..be9c5cabae 100644 --- a/gateway-js/src/__tests__/gateway/executor.test.ts +++ b/gateway-js/src/__tests__/gateway/executor.test.ts @@ -3,7 +3,7 @@ import { ApolloGateway } from '../../'; import { ApolloServer } from "apollo-server"; import { fixtures } from 'apollo-federation-integration-testsuite'; import { Logger } from 'apollo-server-types'; -import { fetch } from '__mocks__/apollo-server-env'; +import { fetch } from '../../__mocks__/apollo-server-env'; let logger: Logger; diff --git a/gateway-js/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts b/gateway-js/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts index 40f5894a53..6396707d62 100644 --- a/gateway-js/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts +++ b/gateway-js/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts @@ -1,5 +1,5 @@ -import { fetch } from '__mocks__/apollo-server-env'; -import { makeFetchHappenFetcher} from '__mocks__/make-fetch-happen-fetcher'; +import { fetch } from '../../__mocks__/apollo-server-env'; +import { makeFetchHappenFetcher} from '../../__mocks__/make-fetch-happen-fetcher'; import { ApolloError, diff --git a/gateway-js/tsconfig.test.json b/gateway-js/tsconfig.test.json index 9f94469826..117832cf86 100644 --- a/gateway-js/tsconfig.test.json +++ b/gateway-js/tsconfig.test.json @@ -3,7 +3,7 @@ "files": [ "./src/__tests__/testSetup.ts" ], - "include": ["**/__tests__/**/*"], + "include": ["**/__tests__/**/*", "**/__mocks__/**/*"], "references": [ { "path": "./" }, { "path": "../federation-integration-testsuite-js" } diff --git a/jest.config.base.js b/jest.config.base.js index ff3e9a1944..2aa6a0534d 100644 --- a/jest.config.base.js +++ b/jest.config.base.js @@ -12,9 +12,6 @@ module.exports = { "/dist/" ], moduleFileExtensions: [...defaults.moduleFileExtensions, "ts", "tsx"], - moduleNameMapper: { - '^__mocks__/(.*)$': '/src/__mocks__/$1', - }, clearMocks: true, globals: { "ts-jest": { diff --git a/tsconfig.test.base.json b/tsconfig.test.base.json index ccac1f928b..93b5dbe4ab 100644 --- a/tsconfig.test.base.json +++ b/tsconfig.test.base.json @@ -2,9 +2,6 @@ "extends": "./tsconfig.base", "compilerOptions": { "noEmit": true, - "types": ["node", "jest", "apollo-server-env/dist/global"], - "paths": { - "__mocks__/*" : ["__mocks__/*"], - } + "types": ["node", "jest", "apollo-server-env/dist/global"] } } From 2b3af8added4b55db1d1dd101fe963702b6262b8 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Fri, 26 Feb 2021 14:23:29 +0100 Subject: [PATCH 21/46] Add `@apollo/query-planner` package This adds `@apollo/query-planner` as a front to `@apollo/query-planner-wasm`, re-exporting the functions in there with proper typings to avoid packages unnecessarily relying on `@apollo/gateway` just to be able to import `QueryPlan` and related types. --- .../src/matchers/toCallService.ts | 2 +- .../src/matchers/toMatchQueryPlan.ts | 2 +- .../src/prettyFormatQueryPlan.ts | 2 +- .../src/snapshotSerializers/astSerializer.ts | 2 +- .../queryPlanSerializer.ts | 2 +- gateway-js/package.json | 2 +- .../src/__tests__/buildQueryPlan.test.ts | 4 +-- .../src/__tests__/executeQueryPlan.test.ts | 4 +-- gateway-js/src/__tests__/execution-utils.ts | 2 +- gateway-js/src/buildQueryPlan.ts | 10 ++---- gateway-js/src/config.ts | 3 +- gateway-js/src/executeQueryPlan.ts | 4 +-- gateway-js/src/index.ts | 18 +++++++--- gateway-js/tsconfig.json | 1 + package.json | 1 + query-planner-js/.gitignore | 2 ++ query-planner-js/.npmignore | 6 ++++ query-planner-js/.npmrc | 7 ++++ query-planner-js/jest.config.js | 8 +++++ query-planner-js/package.json | 34 +++++++++++++++++++ query-planner-js/src/__tests__/testSetup.ts | 1 + .../src/index.ts | 22 +++++------- query-planner-js/tsconfig.json | 10 ++++++ query-planner-js/tsconfig.test.json | 11 ++++++ 24 files changed, 122 insertions(+), 38 deletions(-) create mode 100644 query-planner-js/.gitignore create mode 100644 query-planner-js/.npmignore create mode 100644 query-planner-js/.npmrc create mode 100644 query-planner-js/jest.config.js create mode 100644 query-planner-js/package.json create mode 100644 query-planner-js/src/__tests__/testSetup.ts rename gateway-js/src/QueryPlan.ts => query-planner-js/src/index.ts (89%) create mode 100644 query-planner-js/tsconfig.json create mode 100644 query-planner-js/tsconfig.test.json diff --git a/federation-integration-testsuite-js/src/matchers/toCallService.ts b/federation-integration-testsuite-js/src/matchers/toCallService.ts index 6a39915682..a1675fbbe2 100644 --- a/federation-integration-testsuite-js/src/matchers/toCallService.ts +++ b/federation-integration-testsuite-js/src/matchers/toCallService.ts @@ -1,4 +1,4 @@ -import { QueryPlan, PlanNode } from '@apollo/gateway'; +import { QueryPlan, PlanNode } from '@apollo/query-planner'; import astSerializer from '../snapshotSerializers/astSerializer'; import queryPlanSerializer from '../snapshotSerializers/queryPlanSerializer'; const prettyFormat = require('pretty-format'); diff --git a/federation-integration-testsuite-js/src/matchers/toMatchQueryPlan.ts b/federation-integration-testsuite-js/src/matchers/toMatchQueryPlan.ts index b02f0789bd..9eda27a166 100644 --- a/federation-integration-testsuite-js/src/matchers/toMatchQueryPlan.ts +++ b/federation-integration-testsuite-js/src/matchers/toMatchQueryPlan.ts @@ -1,4 +1,4 @@ -import { QueryPlan } from '@apollo/gateway'; +import { QueryPlan } from '@apollo/query-planner'; import { MatcherHintOptions } from 'jest-matcher-utils'; import { diffFormatted, indentLines, printExpectedFormatted } from './utils'; diff --git a/federation-integration-testsuite-js/src/prettyFormatQueryPlan.ts b/federation-integration-testsuite-js/src/prettyFormatQueryPlan.ts index 22f3ebff92..57212dca56 100644 --- a/federation-integration-testsuite-js/src/prettyFormatQueryPlan.ts +++ b/federation-integration-testsuite-js/src/prettyFormatQueryPlan.ts @@ -1,4 +1,4 @@ -import { QueryPlan } from '@apollo/gateway'; +import { QueryPlan } from '@apollo/query-planner'; import prettyFormat from 'pretty-format'; import { astSerializer, queryPlanSerializer } from './snapshotSerializers'; diff --git a/federation-integration-testsuite-js/src/snapshotSerializers/astSerializer.ts b/federation-integration-testsuite-js/src/snapshotSerializers/astSerializer.ts index 0edd08082f..ab19150ca7 100644 --- a/federation-integration-testsuite-js/src/snapshotSerializers/astSerializer.ts +++ b/federation-integration-testsuite-js/src/snapshotSerializers/astSerializer.ts @@ -1,4 +1,4 @@ -import { QueryPlanInlineFragmentNode, QueryPlanSelectionNode } from '@apollo/gateway'; +import { QueryPlanInlineFragmentNode, QueryPlanSelectionNode } from '@apollo/query-planner'; import { ASTNode, Kind, print, SelectionNode as GraphQLJSSelectionNode, visit } from 'graphql'; import { Config, NewPlugin, Refs } from 'pretty-format'; diff --git a/federation-integration-testsuite-js/src/snapshotSerializers/queryPlanSerializer.ts b/federation-integration-testsuite-js/src/snapshotSerializers/queryPlanSerializer.ts index e37e344f3d..799ff1a223 100644 --- a/federation-integration-testsuite-js/src/snapshotSerializers/queryPlanSerializer.ts +++ b/federation-integration-testsuite-js/src/snapshotSerializers/queryPlanSerializer.ts @@ -1,5 +1,5 @@ import { Config, Plugin, Refs } from 'pretty-format'; -import { PlanNode, QueryPlan } from '@apollo/gateway'; +import { PlanNode, QueryPlan } from '@apollo/query-planner'; import { parse, Kind, visit, DocumentNode } from 'graphql'; export default { diff --git a/gateway-js/package.json b/gateway-js/package.json index 5b70514e23..97e6af6c17 100644 --- a/gateway-js/package.json +++ b/gateway-js/package.json @@ -26,7 +26,7 @@ }, "dependencies": { "@apollo/federation": "file:../federation-js", - "@apollo/query-planner-wasm": "file:../query-planner-wasm", + "@apollo/query-planner": "file:../query-planner-js", "@types/node-fetch": "2.5.4", "apollo-graphql": "^0.6.0", "apollo-reporting-protobuf": "^0.6.0", diff --git a/gateway-js/src/__tests__/buildQueryPlan.test.ts b/gateway-js/src/__tests__/buildQueryPlan.test.ts index a19e69f6f4..8c061bf3b8 100644 --- a/gateway-js/src/__tests__/buildQueryPlan.test.ts +++ b/gateway-js/src/__tests__/buildQueryPlan.test.ts @@ -3,14 +3,14 @@ import gql from 'graphql-tag'; import { buildQueryPlan, buildOperationContext } from '../buildQueryPlan'; import { astSerializer, queryPlanSerializer } from 'apollo-federation-integration-testsuite'; import { getFederatedTestingSchema } from './execution-utils'; -import { WasmPointer } from '../QueryPlan'; +import { QueryPlannerPointer } from '@apollo/query-planner'; expect.addSnapshotSerializer(astSerializer); expect.addSnapshotSerializer(queryPlanSerializer); describe('buildQueryPlan', () => { let schema: GraphQLSchema; - let queryPlannerPointer: WasmPointer; + let queryPlannerPointer: QueryPlannerPointer; beforeEach(() => { expect( diff --git a/gateway-js/src/__tests__/executeQueryPlan.test.ts b/gateway-js/src/__tests__/executeQueryPlan.test.ts index 8227d585f8..db5f408bf6 100644 --- a/gateway-js/src/__tests__/executeQueryPlan.test.ts +++ b/gateway-js/src/__tests__/executeQueryPlan.test.ts @@ -8,7 +8,7 @@ import { executeQueryPlan } from '../executeQueryPlan'; import { LocalGraphQLDataSource } from '../datasources/LocalGraphQLDataSource'; import { astSerializer, queryPlanSerializer } from 'apollo-federation-integration-testsuite'; import { getFederatedTestingSchema } from './execution-utils'; -import { WasmPointer } from '../QueryPlan'; +import { QueryPlannerPointer } from '@apollo/query-planner'; expect.addSnapshotSerializer(astSerializer); expect.addSnapshotSerializer(queryPlanSerializer); @@ -26,7 +26,7 @@ describe('executeQueryPlan', () => { } let schema: GraphQLSchema; - let queryPlannerPointer: WasmPointer; + let queryPlannerPointer: QueryPlannerPointer; beforeEach(() => { expect( diff --git a/gateway-js/src/__tests__/execution-utils.ts b/gateway-js/src/__tests__/execution-utils.ts index e387b07122..3aadb6aa8d 100644 --- a/gateway-js/src/__tests__/execution-utils.ts +++ b/gateway-js/src/__tests__/execution-utils.ts @@ -14,9 +14,9 @@ import { import { buildQueryPlan, executeQueryPlan, - QueryPlan, buildOperationContext, } from '@apollo/gateway'; +import { QueryPlan } from '@apollo/query-planner'; import { LocalGraphQLDataSource } from '../datasources/LocalGraphQLDataSource'; import { mergeDeep } from 'apollo-utilities'; diff --git a/gateway-js/src/buildQueryPlan.ts b/gateway-js/src/buildQueryPlan.ts index 5e23e14a87..a01a5a2bc9 100644 --- a/gateway-js/src/buildQueryPlan.ts +++ b/gateway-js/src/buildQueryPlan.ts @@ -7,12 +7,8 @@ import { OperationDefinitionNode, print, } from 'graphql'; -import { - QueryPlan, - OperationContext, - WasmPointer, -} from './QueryPlan'; -import { getQueryPlan } from '@apollo/query-planner-wasm'; +import { OperationContext } from './'; +import { getQueryPlan, QueryPlan, QueryPlannerPointer } from '@apollo/query-planner'; export interface BuildQueryPlanOptions { autoFragmentization: boolean; @@ -35,7 +31,7 @@ interface BuildOperationContextOptions { schema: GraphQLSchema; operationDocument: DocumentNode; operationString: string; - queryPlannerPointer: WasmPointer; + queryPlannerPointer: QueryPlannerPointer; operationName?: string; }; diff --git a/gateway-js/src/config.ts b/gateway-js/src/config.ts index 44fb9a49b0..e1cd357687 100644 --- a/gateway-js/src/config.ts +++ b/gateway-js/src/config.ts @@ -4,7 +4,8 @@ import { fetch } from 'apollo-server-env'; import { GraphQLRequestContextExecutionDidStart, Logger } from "apollo-server-types"; import { ServiceDefinition } from "@apollo/federation"; import { GraphQLDataSource } from './datasources/types'; -import { QueryPlan, OperationContext } from './QueryPlan'; +import { QueryPlan } from '@apollo/query-planner'; +import { OperationContext } from './'; import { ServiceMap } from './executeQueryPlan'; import { CompositionMetadata, diff --git a/gateway-js/src/executeQueryPlan.ts b/gateway-js/src/executeQueryPlan.ts index 7a24606a31..640c348abb 100644 --- a/gateway-js/src/executeQueryPlan.ts +++ b/gateway-js/src/executeQueryPlan.ts @@ -14,16 +14,16 @@ import { import { Trace, google } from 'apollo-reporting-protobuf'; import { defaultRootOperationNameLookup } from '@apollo/federation'; import { GraphQLDataSource } from './datasources/types'; +import { OperationContext } from './'; import { FetchNode, PlanNode, QueryPlan, ResponsePath, - OperationContext, QueryPlanSelectionNode, QueryPlanFieldNode, getResponseName -} from './QueryPlan'; +} from '@apollo/query-planner'; import { deepMerge } from './utilities/deepMerge'; export type ServiceMap = { diff --git a/gateway-js/src/index.ts b/gateway-js/src/index.ts index 3b9c5e5870..941a178c36 100644 --- a/gateway-js/src/index.ts +++ b/gateway-js/src/index.ts @@ -19,6 +19,8 @@ import { parse, visit, DocumentNode, + FragmentDefinitionNode, + OperationDefinitionNode, } from 'graphql'; import { composeAndValidate, @@ -41,14 +43,13 @@ import { getServiceDefinitionsFromStorage, CompositionMetadata, } from './loadServicesFromStorage'; -import { QueryPlan, OperationContext, WasmPointer } from './QueryPlan'; import { GraphQLDataSource } from './datasources/types'; import { RemoteGraphQLDataSource } from './datasources/RemoteGraphQLDataSource'; import { getVariableValues } from 'graphql/execution/values'; import fetcher from 'make-fetch-happen'; import { HttpRequestCache } from './cache'; import { fetch } from 'apollo-server-env'; -import { getQueryPlanner } from '@apollo/query-planner-wasm'; +import { getQueryPlanner, QueryPlannerPointer, QueryPlan } from '@apollo/query-planner'; import { csdlToSchema } from './csdlToSchema'; import { ServiceEndpointDefinition, @@ -69,6 +70,16 @@ import { isStaticConfig, } from './config'; +type FragmentMap = { [fragmentName: string]: FragmentDefinitionNode }; + +export type OperationContext = { + schema: GraphQLSchema; + operation: OperationDefinitionNode; + fragments: FragmentMap; + queryPlannerPointer: QueryPlannerPointer; + operationString: string; +}; + type DataSourceMap = { [serviceName: string]: { url?: string; dataSource: GraphQLDataSource }; }; @@ -124,7 +135,7 @@ export class ApolloGateway implements GraphQLService { private compositionMetadata?: CompositionMetadata; private serviceSdlCache = new Map(); private warnedStates: WarnedStates = Object.create(null); - private queryPlannerPointer?: WasmPointer; + private queryPlannerPointer?: QueryPlannerPointer; private parsedCsdl?: DocumentNode; private fetcher: typeof fetch; @@ -865,5 +876,4 @@ export { Experimental_CompositionInfo, }; -export * from './QueryPlan'; export * from './datasources'; diff --git a/gateway-js/tsconfig.json b/gateway-js/tsconfig.json index 304a6af6fb..8c2afb54d4 100644 --- a/gateway-js/tsconfig.json +++ b/gateway-js/tsconfig.json @@ -8,5 +8,6 @@ "exclude": ["**/__tests__", "**/__mocks__"], "references": [ { "path": "../federation-js" }, + { "path": "../query-planner-js" }, ] } diff --git a/package.json b/package.json index a20088f6d1..0580f8b558 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "dependencies": { "@apollo/federation": "file:federation-js", "@apollo/gateway": "file:gateway-js", + "@apollo/query-planner": "file:query-planner-js", "@apollo/query-planner-wasm": "file:query-planner-wasm", "@apollographql/apollo-tools": "0.4.8", "apollo-federation-integration-testsuite": "file:federation-integration-testsuite-js" diff --git a/query-planner-js/.gitignore b/query-planner-js/.gitignore new file mode 100644 index 0000000000..93d3f513b1 --- /dev/null +++ b/query-planner-js/.gitignore @@ -0,0 +1,2 @@ +# JS: Ignore the compiled output. +dist/ diff --git a/query-planner-js/.npmignore b/query-planner-js/.npmignore new file mode 100644 index 0000000000..a165046d35 --- /dev/null +++ b/query-planner-js/.npmignore @@ -0,0 +1,6 @@ +* +!src/**/* +!dist/**/* +dist/**/*.test.* +!package.json +!README.md diff --git a/query-planner-js/.npmrc b/query-planner-js/.npmrc new file mode 100644 index 0000000000..8de002d842 --- /dev/null +++ b/query-planner-js/.npmrc @@ -0,0 +1,7 @@ +# This Lerna-based monorepo is intended to be `npm install`'d from the root +# of the monorepo. The root `package-lock.json` is the source of truth for the +# entire monorepo. While running `npm install` in individual packages might +# work in some cases, it can produce a `package-lock.json` in those directories +# that would break the Lerna monorepo experience for Lerna, other developers, +# and the workflows that are built into this repository's CI workflows. +package-lock=false diff --git a/query-planner-js/jest.config.js b/query-planner-js/jest.config.js new file mode 100644 index 0000000000..ef8f639b0b --- /dev/null +++ b/query-planner-js/jest.config.js @@ -0,0 +1,8 @@ +const baseConfig = require('../jest.config.base'); + +/** @typedef {import('ts-jest/dist/types')} */ +/** @type {import('@jest/types').Config.InitialOptions} */ +module.exports = { + ...baseConfig, + setupFilesAfterEnv: ['./src/__tests__/testSetup.ts'], +}; diff --git a/query-planner-js/package.json b/query-planner-js/package.json new file mode 100644 index 0000000000..e26129db3e --- /dev/null +++ b/query-planner-js/package.json @@ -0,0 +1,34 @@ +{ + "name": "@apollo/query-planner", + "version": "0.0.10", + "description": "Apollo Query Planner", + "author": "Apollo ", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "repository": { + "type": "git", + "url": "git+https://github.com/apollographql/federation.git", + "directory": "query-planner-js/" + }, + "keywords": [ + "graphql", + "federation", + "gateway", + "server", + "apollo" + ], + "engines": { + "node": ">=12.13.0 <15.0" + }, + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@apollo/query-planner-wasm": "file:../query-planner-wasm", + "pretty-format": "^26.0.0" + }, + "peerDependencies": { + "graphql": "^14.5.0 || ^15.0.0" + } +} diff --git a/query-planner-js/src/__tests__/testSetup.ts b/query-planner-js/src/__tests__/testSetup.ts new file mode 100644 index 0000000000..afb18fd762 --- /dev/null +++ b/query-planner-js/src/__tests__/testSetup.ts @@ -0,0 +1 @@ +import 'apollo-federation-integration-testsuite'; diff --git a/gateway-js/src/QueryPlan.ts b/query-planner-js/src/index.ts similarity index 89% rename from gateway-js/src/QueryPlan.ts rename to query-planner-js/src/index.ts index 158591b880..1a194f9e1d 100644 --- a/gateway-js/src/QueryPlan.ts +++ b/query-planner-js/src/index.ts @@ -1,24 +1,20 @@ import { - FragmentDefinitionNode, - OperationDefinitionNode, Kind, SelectionNode as GraphQLJSSelectionNode, - GraphQLSchema, } from 'graphql'; +import * as wasm from '@apollo/query-planner-wasm'; -export type ResponsePath = (string | number)[]; +export type QueryPlannerPointer = number; -export type WasmPointer = number; +export function getQueryPlanner(schema: string): QueryPlannerPointer { + return wasm.getQueryPlanner(schema); +} -type FragmentMap = { [fragmentName: string]: FragmentDefinitionNode }; +export function getQueryPlan(planner_ptr: QueryPlannerPointer, query: string, options: any): QueryPlan { + return wasm.getQueryPlan(planner_ptr, query, options) +} -export type OperationContext = { - schema: GraphQLSchema; - operation: OperationDefinitionNode; - fragments: FragmentMap; - queryPlannerPointer: WasmPointer; - operationString: string; -}; +export type ResponsePath = (string | number)[]; export interface QueryPlan { kind: 'QueryPlan'; diff --git a/query-planner-js/tsconfig.json b/query-planner-js/tsconfig.json new file mode 100644 index 0000000000..515358f415 --- /dev/null +++ b/query-planner-js/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../tsconfig.base", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist" + }, + "include": ["src/**/*"], + "exclude": ["**/__tests__", "**/__mocks__"], + "references": [] +} diff --git a/query-planner-js/tsconfig.test.json b/query-planner-js/tsconfig.test.json new file mode 100644 index 0000000000..117832cf86 --- /dev/null +++ b/query-planner-js/tsconfig.test.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.test.base", + "files": [ + "./src/__tests__/testSetup.ts" + ], + "include": ["**/__tests__/**/*", "**/__mocks__/**/*"], + "references": [ + { "path": "./" }, + { "path": "../federation-integration-testsuite-js" } + ] +} From d9bdbc63df546088e53a37d7fedd2420e437dfd5 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Fri, 26 Feb 2021 15:25:33 +0100 Subject: [PATCH 22/46] Move `prettyFormatQueryPlan` and related serializers to `@apollo/query-planner` --- .../src/matchers/toCallService.ts | 3 +-- .../src/snapshotSerializers/index.ts | 5 +++-- gateway-js/src/index.ts | 4 ++-- query-planner-js/src/index.ts | 3 +++ .../src/prettyFormatQueryPlan.ts | 2 +- .../src/snapshotSerializers/astSerializer.ts | 2 +- query-planner-js/src/snapshotSerializers/index.ts | 2 ++ .../src/snapshotSerializers/queryPlanSerializer.ts | 2 +- 8 files changed, 14 insertions(+), 9 deletions(-) rename {federation-integration-testsuite-js => query-planner-js}/src/prettyFormatQueryPlan.ts (84%) rename {federation-integration-testsuite-js => query-planner-js}/src/snapshotSerializers/astSerializer.ts (99%) create mode 100644 query-planner-js/src/snapshotSerializers/index.ts rename {federation-integration-testsuite-js => query-planner-js}/src/snapshotSerializers/queryPlanSerializer.ts (98%) diff --git a/federation-integration-testsuite-js/src/matchers/toCallService.ts b/federation-integration-testsuite-js/src/matchers/toCallService.ts index a1675fbbe2..d65345c1e5 100644 --- a/federation-integration-testsuite-js/src/matchers/toCallService.ts +++ b/federation-integration-testsuite-js/src/matchers/toCallService.ts @@ -1,6 +1,5 @@ import { QueryPlan, PlanNode } from '@apollo/query-planner'; -import astSerializer from '../snapshotSerializers/astSerializer'; -import queryPlanSerializer from '../snapshotSerializers/queryPlanSerializer'; +import { astSerializer, queryPlanSerializer } from '../snapshotSerializers'; const prettyFormat = require('pretty-format'); declare global { diff --git a/federation-integration-testsuite-js/src/snapshotSerializers/index.ts b/federation-integration-testsuite-js/src/snapshotSerializers/index.ts index 30011929c3..770cb63e71 100644 --- a/federation-integration-testsuite-js/src/snapshotSerializers/index.ts +++ b/federation-integration-testsuite-js/src/snapshotSerializers/index.ts @@ -1,5 +1,6 @@ -export { default as astSerializer } from './astSerializer'; +export { astSerializer } from '@apollo/query-planner'; +export { queryPlanSerializer } from '@apollo/query-planner'; export { default as selectionSetSerializer } from './selectionSetSerializer'; export { default as typeSerializer } from './typeSerializer'; export { default as graphqlErrorSerializer } from './graphqlErrorSerializer'; -export { default as queryPlanSerializer } from './queryPlanSerializer'; + diff --git a/gateway-js/src/index.ts b/gateway-js/src/index.ts index 941a178c36..905633284a 100644 --- a/gateway-js/src/index.ts +++ b/gateway-js/src/index.ts @@ -49,7 +49,7 @@ import { getVariableValues } from 'graphql/execution/values'; import fetcher from 'make-fetch-happen'; import { HttpRequestCache } from './cache'; import { fetch } from 'apollo-server-env'; -import { getQueryPlanner, QueryPlannerPointer, QueryPlan } from '@apollo/query-planner'; +import { getQueryPlanner, QueryPlannerPointer, QueryPlan, prettyFormatQueryPlan } from '@apollo/query-planner'; import { csdlToSchema } from './csdlToSchema'; import { ServiceEndpointDefinition, @@ -787,7 +787,7 @@ export class ApolloGateway implements GraphQLService { // `apollo-federation-integration-testsuite` packages. // We should either solve that or switch Playground to // the JSON serialization format. - ? {} // prettyPrintQueryPlan(queryPlan) + ? prettyFormatQueryPlan(queryPlan) : null; if (this.config.debug && serializedQueryPlan) { diff --git a/query-planner-js/src/index.ts b/query-planner-js/src/index.ts index 1a194f9e1d..fd5efc3930 100644 --- a/query-planner-js/src/index.ts +++ b/query-planner-js/src/index.ts @@ -4,6 +4,9 @@ import { } from 'graphql'; import * as wasm from '@apollo/query-planner-wasm'; +export { queryPlanSerializer, astSerializer } from './snapshotSerializers'; +export { prettyFormatQueryPlan } from './prettyFormatQueryPlan'; + export type QueryPlannerPointer = number; export function getQueryPlanner(schema: string): QueryPlannerPointer { diff --git a/federation-integration-testsuite-js/src/prettyFormatQueryPlan.ts b/query-planner-js/src/prettyFormatQueryPlan.ts similarity index 84% rename from federation-integration-testsuite-js/src/prettyFormatQueryPlan.ts rename to query-planner-js/src/prettyFormatQueryPlan.ts index 57212dca56..955ea9782c 100644 --- a/federation-integration-testsuite-js/src/prettyFormatQueryPlan.ts +++ b/query-planner-js/src/prettyFormatQueryPlan.ts @@ -1,4 +1,4 @@ -import { QueryPlan } from '@apollo/query-planner'; +import { QueryPlan } from './'; import prettyFormat from 'pretty-format'; import { astSerializer, queryPlanSerializer } from './snapshotSerializers'; diff --git a/federation-integration-testsuite-js/src/snapshotSerializers/astSerializer.ts b/query-planner-js/src/snapshotSerializers/astSerializer.ts similarity index 99% rename from federation-integration-testsuite-js/src/snapshotSerializers/astSerializer.ts rename to query-planner-js/src/snapshotSerializers/astSerializer.ts index ab19150ca7..170cbc40d0 100644 --- a/federation-integration-testsuite-js/src/snapshotSerializers/astSerializer.ts +++ b/query-planner-js/src/snapshotSerializers/astSerializer.ts @@ -1,4 +1,4 @@ -import { QueryPlanInlineFragmentNode, QueryPlanSelectionNode } from '@apollo/query-planner'; +import { QueryPlanInlineFragmentNode, QueryPlanSelectionNode } from '../'; import { ASTNode, Kind, print, SelectionNode as GraphQLJSSelectionNode, visit } from 'graphql'; import { Config, NewPlugin, Refs } from 'pretty-format'; diff --git a/query-planner-js/src/snapshotSerializers/index.ts b/query-planner-js/src/snapshotSerializers/index.ts new file mode 100644 index 0000000000..4aa01cc3bf --- /dev/null +++ b/query-planner-js/src/snapshotSerializers/index.ts @@ -0,0 +1,2 @@ +export { default as queryPlanSerializer } from './queryPlanSerializer'; +export { default as astSerializer } from './astSerializer'; diff --git a/federation-integration-testsuite-js/src/snapshotSerializers/queryPlanSerializer.ts b/query-planner-js/src/snapshotSerializers/queryPlanSerializer.ts similarity index 98% rename from federation-integration-testsuite-js/src/snapshotSerializers/queryPlanSerializer.ts rename to query-planner-js/src/snapshotSerializers/queryPlanSerializer.ts index 799ff1a223..992fc05877 100644 --- a/federation-integration-testsuite-js/src/snapshotSerializers/queryPlanSerializer.ts +++ b/query-planner-js/src/snapshotSerializers/queryPlanSerializer.ts @@ -1,5 +1,5 @@ import { Config, Plugin, Refs } from 'pretty-format'; -import { PlanNode, QueryPlan } from '@apollo/query-planner'; +import { PlanNode, QueryPlan } from '../'; import { parse, Kind, visit, DocumentNode } from 'graphql'; export default { From 50a37ac16b37da9b99dc32c38713b0689851aa00 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 08:06:39 +0100 Subject: [PATCH 23/46] Update package-lock.json for @apollo/query-planner Also remove stray export of `prettyFormatQueryPlan()`. --- federation-integration-testsuite-js/src/index.ts | 2 -- package-lock.json | 9 ++++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/federation-integration-testsuite-js/src/index.ts b/federation-integration-testsuite-js/src/index.ts index 2521c24d30..bf079c6794 100644 --- a/federation-integration-testsuite-js/src/index.ts +++ b/federation-integration-testsuite-js/src/index.ts @@ -1,5 +1,3 @@ export * from './matchers'; export * from './snapshotSerializers'; export * from './fixtures'; - -export { prettyFormatQueryPlan } from './prettyFormatQueryPlan'; diff --git a/package-lock.json b/package-lock.json index 0adcb561ab..25ec627542 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "version": "file:gateway-js", "requires": { "@apollo/federation": "file:federation-js", - "@apollo/query-planner-wasm": "file:query-planner-wasm", + "@apollo/query-planner": "file:query-planner-js", "@types/node-fetch": "2.5.4", "apollo-graphql": "^0.6.0", "apollo-reporting-protobuf": "^0.6.0", @@ -78,6 +78,13 @@ } } }, + "@apollo/query-planner": { + "version": "file:query-planner-js", + "requires": { + "@apollo/query-planner-wasm": "file:query-planner-wasm", + "pretty-format": "^26.0.0" + } + }, "@apollo/query-planner-wasm": { "version": "file:query-planner-wasm" }, From 6ad7fe57ed95554960765d978c4747f5f15fd6a8 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 08:08:43 +0100 Subject: [PATCH 24/46] Import matchers from subdirectory instead of root I'd love to replace the import from `dist/matchers` with a plain `matchers` by using the `exports` field in `package.json`. Unfortunately, neither Jest nor TypeScript currently support this. --- federation-integration-testsuite-js/src/index.ts | 1 - federation-js/src/__tests__/testSetup.ts | 2 +- gateway-js/src/__tests__/testSetup.ts | 2 +- query-planner-js/src/__tests__/testSetup.ts | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/federation-integration-testsuite-js/src/index.ts b/federation-integration-testsuite-js/src/index.ts index bf079c6794..efcca38f17 100644 --- a/federation-integration-testsuite-js/src/index.ts +++ b/federation-integration-testsuite-js/src/index.ts @@ -1,3 +1,2 @@ -export * from './matchers'; export * from './snapshotSerializers'; export * from './fixtures'; diff --git a/federation-js/src/__tests__/testSetup.ts b/federation-js/src/__tests__/testSetup.ts index afb18fd762..e1cb4406bb 100644 --- a/federation-js/src/__tests__/testSetup.ts +++ b/federation-js/src/__tests__/testSetup.ts @@ -1 +1 @@ -import 'apollo-federation-integration-testsuite'; +import 'apollo-federation-integration-testsuite/dist/matchers'; diff --git a/gateway-js/src/__tests__/testSetup.ts b/gateway-js/src/__tests__/testSetup.ts index afb18fd762..e1cb4406bb 100644 --- a/gateway-js/src/__tests__/testSetup.ts +++ b/gateway-js/src/__tests__/testSetup.ts @@ -1 +1 @@ -import 'apollo-federation-integration-testsuite'; +import 'apollo-federation-integration-testsuite/dist/matchers'; diff --git a/query-planner-js/src/__tests__/testSetup.ts b/query-planner-js/src/__tests__/testSetup.ts index afb18fd762..e1cb4406bb 100644 --- a/query-planner-js/src/__tests__/testSetup.ts +++ b/query-planner-js/src/__tests__/testSetup.ts @@ -1 +1 @@ -import 'apollo-federation-integration-testsuite'; +import 'apollo-federation-integration-testsuite/dist/matchers'; From e007c3c30a6f6d7c8f693c94da7a4437d2e7e7f0 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 08:27:41 +0100 Subject: [PATCH 25/46] Add more test typing fixes using null coalescing --- .../__tests__/rootFieldUsed.test.ts | 2 +- .../__tests__/buildFederatedSchema.test.ts | 18 +++++++++--------- .../src/__tests__/gateway/composedSdl.test.ts | 2 +- .../__tests__/RemoteGraphQLDataSource.test.ts | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/federation-js/src/composition/validate/preNormalization/__tests__/rootFieldUsed.test.ts b/federation-js/src/composition/validate/preNormalization/__tests__/rootFieldUsed.test.ts index 33daea7390..4de0b86102 100644 --- a/federation-js/src/composition/validate/preNormalization/__tests__/rootFieldUsed.test.ts +++ b/federation-js/src/composition/validate/preNormalization/__tests__/rootFieldUsed.test.ts @@ -90,7 +90,7 @@ describe('rootFieldUsed', () => { const warnings = validateRootFieldUsed(serviceA); expect(warnings).toHaveLength(1); - expect(warnings[0].extensions.code).toEqual('ROOT_QUERY_USED'); + expect(warnings[0].extensions?.code).toEqual('ROOT_QUERY_USED'); expect(warnings).toMatchInlineSnapshot(` Array [ Object { diff --git a/federation-js/src/service/__tests__/buildFederatedSchema.test.ts b/federation-js/src/service/__tests__/buildFederatedSchema.test.ts index 32ab4208d6..2a63d79bbe 100644 --- a/federation-js/src/service/__tests__/buildFederatedSchema.test.ts +++ b/federation-js/src/service/__tests__/buildFederatedSchema.test.ts @@ -268,8 +268,8 @@ type Query { variables, ); expect(errors).toBeUndefined(); - expect(data._entities[0].name).toEqual('Apollo Gateway'); - expect(data._entities[1].firstName).toEqual('James'); + expect(data?._entities[0].name).toEqual('Apollo Gateway'); + expect(data?._entities[1].firstName).toEqual('James'); }); it('executes resolveReference with default representation values', async () => { const query = `query GetEntities($representations: [_Any!]!) { @@ -301,7 +301,7 @@ type Query { variables, ); expect(errors).toBeUndefined(); - expect(data._entities[0].name).toEqual('Apollo Gateway'); + expect(data?._entities[0].name).toEqual('Apollo Gateway'); }); }); describe('_service root field', () => { @@ -328,7 +328,7 @@ type Query { const { data, errors } = await graphql(schema, query); expect(errors).toBeUndefined(); - expect(data._service.sdl) + expect(data?._service.sdl) .toEqual(`extend type Product @key(fields: "upc") { upc: String @external reviews: [Review] @@ -367,7 +367,7 @@ type Review { const { data, errors } = await graphql(schema, query); expect(errors).toBeUndefined(); - expect(data._service.sdl).toEqual(`interface Node @key(fields: "id") { + expect(data?._service.sdl).toEqual(`interface Node @key(fields: "id") { id: ID! } @@ -398,7 +398,7 @@ type Review { const { data, errors } = await graphql(schema, query); expect(errors).toBeUndefined(); - expect(data._service.sdl).toEqual(`type Product @key(fields: "upc") { + expect(data?._service.sdl).toEqual(`type Product @key(fields: "upc") { upc: String! name: String price: Int @@ -421,7 +421,7 @@ type Review { const { data, errors } = await graphql(schema, query); expect(errors).toBeUndefined(); - expect(data._service.sdl) + expect(data?._service.sdl) .toEqual(`type Product @key(fields: "upc") @key(fields: "name") { upc: String! name: String @@ -457,7 +457,7 @@ type Review { const { data, errors } = await graphql(schema, query); expect(errors).toBeUndefined(); - expect(data._service.sdl) + expect(data?._service.sdl) .toEqual(`extend type Product @key(fields: "upc") { upc: String @external reviews: [Review] @@ -493,7 +493,7 @@ extend type User @key(fields: "email") { const { data, errors } = await graphql(schema, query); expect(errors).toBeUndefined(); - expect(data._service.sdl).toEqual(`directive @custom on FIELD + expect(data?._service.sdl).toEqual(`directive @custom on FIELD extend type User @key(fields: "email") { email: String @external diff --git a/gateway-js/src/__tests__/gateway/composedSdl.test.ts b/gateway-js/src/__tests__/gateway/composedSdl.test.ts index 334612a8ad..c60ba1cf0a 100644 --- a/gateway-js/src/__tests__/gateway/composedSdl.test.ts +++ b/gateway-js/src/__tests__/gateway/composedSdl.test.ts @@ -39,7 +39,7 @@ describe('Using csdl configuration', () => { const [url, request] = fetch.mock.calls[0]; expect(url).toEqual('https://accounts.api.com'); - expect(request.body).toEqual( + expect(request?.body).toEqual( JSON.stringify({ query: '{me{id username}}', variables: {} }), ); await server.stop(); diff --git a/gateway-js/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts b/gateway-js/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts index 6396707d62..2cf736e3c2 100644 --- a/gateway-js/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts +++ b/gateway-js/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts @@ -304,7 +304,7 @@ describe('willSendRequest', () => { const DataSource = new RemoteGraphQLDataSource({ url: 'https://api.example.com/foo', willSendRequest: ({ request, context }) => { - request.http.headers.set('x-user-id', context.userId); + request.http?.headers.set('x-user-id', context.userId); }, }); From b7ac4d281a986a0ae6ad8677bcbe44eef18a1d6d Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 08:29:11 +0100 Subject: [PATCH 26/46] Remove unnecessary header iteration from toHaveFetched --- .../src/matchers/toHaveFetched.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/federation-integration-testsuite-js/src/matchers/toHaveFetched.ts b/federation-integration-testsuite-js/src/matchers/toHaveFetched.ts index bb08dc5d49..5bd1035d87 100644 --- a/federation-integration-testsuite-js/src/matchers/toHaveFetched.ts +++ b/federation-integration-testsuite-js/src/matchers/toHaveFetched.ts @@ -13,13 +13,8 @@ declare global { } function prepareHttpOptions(requestUrl: string, requestOpts: RequestInit): RequestInit { - const headers = new Headers(); + const headers = new Headers(requestOpts.headers); headers.set('Content-Type', 'application/json'); - if (requestOpts.headers) { - for (const [name, value] of new Headers(requestOpts.headers)) { - headers.set(name, value); - } - } const requestHttp = { method: 'POST', From a359e2392f08eed3c5af59d13283a906a2d79e27 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 08:36:53 +0100 Subject: [PATCH 27/46] Fix `toHaveFetched` typing to support JSON body The `toHaveFetched` matcher supports passing in `body` as an object that will be serialized to JSON. This isn't standard behavior for `fetch`, and the `BodyInit` type doesn't support this. So this fix introduces a `RequestInitWithJSONBody` type that overrides the `body` property. --- .../src/matchers/toHaveFetched.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/federation-integration-testsuite-js/src/matchers/toHaveFetched.ts b/federation-integration-testsuite-js/src/matchers/toHaveFetched.ts index 5bd1035d87..f062879d57 100644 --- a/federation-integration-testsuite-js/src/matchers/toHaveFetched.ts +++ b/federation-integration-testsuite-js/src/matchers/toHaveFetched.ts @@ -1,4 +1,5 @@ import { RequestInit, Headers } from 'apollo-server-env'; +type RequestInitWithJSONBody = Omit & { body?: object } // Make this file a module // See: https://github.com/microsoft/TypeScript/issues/17736 @@ -6,13 +7,13 @@ export {}; declare global { namespace jest { interface Matchers { - toHaveFetched(requestUrl: string, requestOpts?: RequestInit): R; - toHaveFetchedNth(nthCall: number, requestUrl: string, requestOpts?: RequestInit): R; + toHaveFetched(requestUrl: string, requestOpts?: RequestInitWithJSONBody): R; + toHaveFetchedNth(nthCall: number, requestUrl: string, requestOpts?: RequestInitWithJSONBody): R; } } } -function prepareHttpOptions(requestUrl: string, requestOpts: RequestInit): RequestInit { +function prepareHttpOptions(requestUrl: string, requestOpts: RequestInitWithJSONBody): RequestInit { const headers = new Headers(requestOpts.headers); headers.set('Content-Type', 'application/json'); @@ -33,7 +34,7 @@ function toHaveFetched( this: jest.MatcherUtils, fetch: jest.SpyInstance, requestUrl: string, - requestOpts: RequestInit = {} + requestOpts: RequestInitWithJSONBody = {} ): { message(): string; pass: boolean } { const httpOptions = prepareHttpOptions(requestUrl, requestOpts); let pass = false; @@ -56,7 +57,7 @@ function toHaveFetchedNth( fetch: jest.SpyInstance, nthCall: number, requestUrl: string, - requestOpts: RequestInit = {} + requestOpts: RequestInitWithJSONBody = {} ): { message(): string; pass: boolean } { const httpOptions = prepareHttpOptions(requestUrl, requestOpts); let pass = false; From 78590381106dd6c9176d8e4d90702cfa95d9ed28 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 09:19:33 +0100 Subject: [PATCH 28/46] Update __tests__ tsconfig.json to include mocks This `__tests__` directory specific `tsconfig.json` is only used within VS Code, to work around due to microsoft/vscode/#12463. Unfortunately, that means we need to specify `__mocks__` as an explicit dependency because it now lives in a separate TypeScript project. (We use the package root `tsconfig.test.json` from Jest, and that includes all `__tests__` and `__mocks__` subdirectories in one project.) --- gateway-js/src/datasources/__tests__/tsconfig.json | 1 + 1 file changed, 1 insertion(+) diff --git a/gateway-js/src/datasources/__tests__/tsconfig.json b/gateway-js/src/datasources/__tests__/tsconfig.json index 091b9e3d54..2fa0fc1dd6 100644 --- a/gateway-js/src/datasources/__tests__/tsconfig.json +++ b/gateway-js/src/datasources/__tests__/tsconfig.json @@ -3,6 +3,7 @@ "include": ["**/*"], "references": [ { "path": "../../.." }, + { "path": "../../__mocks__" }, { "path": "../../../../federation-integration-testsuite-js" }, ] } From ff0bfa63202f2b905f61e6d639adf4da69b46576 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 09:20:56 +0100 Subject: [PATCH 29/46] Remove some unused imports from tests --- gateway-js/src/__tests__/executeQueryPlan.test.ts | 2 +- gateway-js/src/__tests__/queryPlanCucumber.test.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/gateway-js/src/__tests__/executeQueryPlan.test.ts b/gateway-js/src/__tests__/executeQueryPlan.test.ts index db5f408bf6..864921bbe5 100644 --- a/gateway-js/src/__tests__/executeQueryPlan.test.ts +++ b/gateway-js/src/__tests__/executeQueryPlan.test.ts @@ -1,4 +1,4 @@ -import { GraphQLError, getIntrospectionQuery, GraphQLSchema } from 'graphql'; +import { getIntrospectionQuery, GraphQLSchema } from 'graphql'; import { addResolversToSchema, GraphQLResolverMap } from 'apollo-graphql'; import gql from 'graphql-tag'; import { GraphQLRequestContext } from 'apollo-server-types'; diff --git a/gateway-js/src/__tests__/queryPlanCucumber.test.ts b/gateway-js/src/__tests__/queryPlanCucumber.test.ts index 4a53254067..617422ec72 100644 --- a/gateway-js/src/__tests__/queryPlanCucumber.test.ts +++ b/gateway-js/src/__tests__/queryPlanCucumber.test.ts @@ -1,5 +1,4 @@ import gql from 'graphql-tag'; -import { GraphQLSchemaValidationError } from 'apollo-graphql'; import { defineFeature, loadFeature } from 'jest-cucumber'; import { DocumentNode } from 'graphql'; From 2feb7a5e55d2153f67df427ad2141df1740316eb Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 09:21:16 +0100 Subject: [PATCH 30/46] Import `QueryPlan` from `@apollo/query-planner` in test --- gateway-js/src/__tests__/queryPlanCucumber.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gateway-js/src/__tests__/queryPlanCucumber.test.ts b/gateway-js/src/__tests__/queryPlanCucumber.test.ts index 617422ec72..b1cf1ce9b5 100644 --- a/gateway-js/src/__tests__/queryPlanCucumber.test.ts +++ b/gateway-js/src/__tests__/queryPlanCucumber.test.ts @@ -2,7 +2,7 @@ import gql from 'graphql-tag'; import { defineFeature, loadFeature } from 'jest-cucumber'; import { DocumentNode } from 'graphql'; -import { QueryPlan } from '../..'; +import { QueryPlan } from '@apollo/query-planner'; import { buildQueryPlan, buildOperationContext, BuildQueryPlanOptions } from '../buildQueryPlan'; import { getFederatedTestingSchema } from './execution-utils'; From 0cb2a3df310d204c4ce5c87335fc612ab151262b Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 09:23:46 +0100 Subject: [PATCH 31/46] Add `@types` packages for `deep-freeze` and `bunyan` --- package-lock.json | 15 +++++++++++++++ package.json | 2 ++ 2 files changed, 17 insertions(+) diff --git a/package-lock.json b/package-lock.json index 25ec627542..c9452e2c09 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3216,6 +3216,15 @@ "@types/node": "*" } }, + "@types/bunyan": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.6.tgz", + "integrity": "sha512-YiozPOOsS6bIuz31ilYqR5SlLif4TBWsousN2aCWLi5233nZSX19tFbcQUPdR7xJ8ypPyxkCGNxg0CIV5n9qxQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/connect": { "version": "3.4.34", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz", @@ -3249,6 +3258,12 @@ "@types/express": "*" } }, + "@types/deep-freeze": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/deep-freeze/-/deep-freeze-0.1.2.tgz", + "integrity": "sha512-M6x29Vk4681dght4IMnPIcF1SNmeEm0c4uatlTFhp+++H1oDK1THEIzuCC2WeCBVhX+gU0NndsseDS3zaCtlcQ==", + "dev": true + }, "@types/express": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.11.tgz", diff --git a/package.json b/package.json index 0580f8b558..c386b07b61 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,8 @@ "apollo-federation-integration-testsuite": "file:federation-integration-testsuite-js" }, "devDependencies": { + "@types/bunyan": "^1.8.6", + "@types/deep-freeze": "^0.1.2", "@types/jest": "26.0.20", "@types/lodash.xorby": "4.7.6", "@types/loglevel": "1.5.4", From 9ed379dbe452814ffff7e53ff4099cfee21a7d0c Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 09:25:32 +0100 Subject: [PATCH 32/46] Remove more unused imports from tests --- .../composition/validate/sdl/__tests__/matchingEnums.test.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/federation-js/src/composition/validate/sdl/__tests__/matchingEnums.test.ts b/federation-js/src/composition/validate/sdl/__tests__/matchingEnums.test.ts index 27366d4537..18b53803bf 100644 --- a/federation-js/src/composition/validate/sdl/__tests__/matchingEnums.test.ts +++ b/federation-js/src/composition/validate/sdl/__tests__/matchingEnums.test.ts @@ -1,20 +1,17 @@ import { - GraphQLEnumType, Kind, DocumentNode, - validate, GraphQLSchema, specifiedDirectives, } from 'graphql'; import { validateSDL } from 'graphql/validation/validate'; import gql from 'graphql-tag'; -import { composeServices, buildMapsFromServiceList } from '../../../compose'; +import { buildMapsFromServiceList } from '../../../compose'; import { astSerializer, typeSerializer, selectionSetSerializer, } from 'apollo-federation-integration-testsuite'; -import { normalizeTypeDefs } from '../../../normalize'; import federationDirectives from '../../../../directives'; import { ServiceDefinition } from '../../../types'; import { MatchingEnums } from '../matchingEnums'; From 05dda1a7cfb2183d18b5547937c9cd9f5b45ed97 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 10:05:57 +0100 Subject: [PATCH 33/46] Temporarily ignore typing errors in tests for incomplete request contexts We should make sure `executor` correctly specifies which `GraphQLRequestContext` properties it requires, but that should be a separate PR. --- gateway-js/src/__tests__/executeQueryPlan.test.ts | 3 ++- gateway-js/src/__tests__/execution-utils.ts | 1 + gateway-js/src/__tests__/gateway/executor.test.ts | 2 ++ gateway-js/src/__tests__/gateway/lifecycle-hooks.test.ts | 1 + 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/gateway-js/src/__tests__/executeQueryPlan.test.ts b/gateway-js/src/__tests__/executeQueryPlan.test.ts index 864921bbe5..3e724212e4 100644 --- a/gateway-js/src/__tests__/executeQueryPlan.test.ts +++ b/gateway-js/src/__tests__/executeQueryPlan.test.ts @@ -40,13 +40,14 @@ describe('executeQueryPlan', () => { }); function buildRequestContext(): GraphQLRequestContext { + // @ts-ignore return { cache: undefined as any, context: {}, request: { variables: {}, }, - } as GraphQLRequestContext; + }; } describe(`errors`, () => { diff --git a/gateway-js/src/__tests__/execution-utils.ts b/gateway-js/src/__tests__/execution-utils.ts index 3aadb6aa8d..a28c86936e 100644 --- a/gateway-js/src/__tests__/execution-utils.ts +++ b/gateway-js/src/__tests__/execution-utils.ts @@ -70,6 +70,7 @@ export async function execute( const result = await executeQueryPlan( queryPlan, serviceMap, + // @ts-ignore { cache: undefined as any, context: {}, diff --git a/gateway-js/src/__tests__/gateway/executor.test.ts b/gateway-js/src/__tests__/gateway/executor.test.ts index be9c5cabae..9c2615fab1 100644 --- a/gateway-js/src/__tests__/gateway/executor.test.ts +++ b/gateway-js/src/__tests__/gateway/executor.test.ts @@ -38,6 +38,7 @@ describe('ApolloGateway executor', () => { } `; + // @ts-ignore const { errors } = await executor({ source, document: gql(source), @@ -73,6 +74,7 @@ describe('ApolloGateway executor', () => { } `; + // @ts-ignore const { errors, data } = await executor({ source, document: gql(source), diff --git a/gateway-js/src/__tests__/gateway/lifecycle-hooks.test.ts b/gateway-js/src/__tests__/gateway/lifecycle-hooks.test.ts index 8819155252..565d3ec823 100644 --- a/gateway-js/src/__tests__/gateway/lifecycle-hooks.test.ts +++ b/gateway-js/src/__tests__/gateway/lifecycle-hooks.test.ts @@ -252,6 +252,7 @@ describe('lifecycle hooks', () => { { book(isbn: "0262510871") { year } } `; + // @ts-ignore await executor({ source, document: gql(source), From b8ba02eda6bed194c39b5f623b91598e89b848ea Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 10:17:36 +0100 Subject: [PATCH 34/46] Temporarily ignore typing errors in tests for buildService The `service` parameter to `buildService` is defined as containing `name` and `url`, not `typeDefs`. That means as specified it cannot be passed to `buildFederatedSchema`, which requires the `typeDefs`. We should fix this in a separate PR. --- gateway-js/src/__tests__/gateway/queryPlanCache.test.ts | 3 +++ gateway-js/src/__tests__/integration/aliases.test.ts | 1 + 2 files changed, 4 insertions(+) diff --git a/gateway-js/src/__tests__/gateway/queryPlanCache.test.ts b/gateway-js/src/__tests__/gateway/queryPlanCache.test.ts index f1deddf658..0f874559ad 100644 --- a/gateway-js/src/__tests__/gateway/queryPlanCache.test.ts +++ b/gateway-js/src/__tests__/gateway/queryPlanCache.test.ts @@ -16,6 +16,7 @@ it('caches the query plan for a request', async () => { const gateway = new ApolloGateway({ localServiceList: fixtures, buildService: service => { + // @ts-ignore return new LocalGraphQLDataSource(buildFederatedSchema([service])); }, }); @@ -72,6 +73,7 @@ it('supports multiple operations and operationName', async () => { const gateway = new ApolloGateway({ localServiceList: fixtures, buildService: service => { + // @ts-ignore return new LocalGraphQLDataSource(buildFederatedSchema([service])); }, }); @@ -176,6 +178,7 @@ it('does not corrupt cached queryplan data across requests', async () => { const gateway = new ApolloGateway({ localServiceList: [serviceA, serviceB], buildService: service => { + // @ts-ignore return new LocalGraphQLDataSource(buildFederatedSchema([service])); }, }); diff --git a/gateway-js/src/__tests__/integration/aliases.test.ts b/gateway-js/src/__tests__/integration/aliases.test.ts index e86d7d2ecc..b23d8d011a 100644 --- a/gateway-js/src/__tests__/integration/aliases.test.ts +++ b/gateway-js/src/__tests__/integration/aliases.test.ts @@ -146,6 +146,7 @@ it('supports aliases when using ApolloServer', async () => { const gateway = new ApolloGateway({ localServiceList: fixtures, buildService: service => { + // @ts-ignore return new LocalGraphQLDataSource(buildFederatedSchema([service])); }, }); From 07d848fdfc08c048c1a49447196b2bb82b27edee Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 10:26:30 +0100 Subject: [PATCH 35/46] Fix type of Promise in test --- .../__tests__/integration/networkRequests.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gateway-js/src/__tests__/integration/networkRequests.test.ts b/gateway-js/src/__tests__/integration/networkRequests.test.ts index a0b04500a0..2ef1c20e93 100644 --- a/gateway-js/src/__tests__/integration/networkRequests.test.ts +++ b/gateway-js/src/__tests__/integration/networkRequests.test.ts @@ -153,9 +153,9 @@ it.skip('Rollsback to a previous schema when triggered', async () => { let firstResolve: () => void; let secondResolve: () => void; let thirdResolve: () => void; - const firstSchemaChangeBlocker = new Promise((res) => (firstResolve = res)); - const secondSchemaChangeBlocker = new Promise((res) => (secondResolve = res)); - const thirdSchemaChangeBlocker = new Promise((res) => (thirdResolve = res)); + const firstSchemaChangeBlocker = new Promise((res) => (firstResolve = res)); + const secondSchemaChangeBlocker = new Promise((res) => (secondResolve = res)); + const thirdSchemaChangeBlocker = new Promise((res) => (thirdResolve = res)); const onChange = jest .fn() @@ -345,8 +345,8 @@ describe('Downstream service health checks', () => { let resolve1: () => void; let resolve2: () => void; - const schemaChangeBlocker1 = new Promise((res) => (resolve1 = res)); - const schemaChangeBlocker2 = new Promise((res) => (resolve2 = res)); + const schemaChangeBlocker1 = new Promise((res) => (resolve1 = res)); + const schemaChangeBlocker2 = new Promise((res) => (resolve2 = res)); const onChange = jest .fn() .mockImplementationOnce(() => resolve1()) @@ -394,7 +394,7 @@ describe('Downstream service health checks', () => { mockServiceHealthCheck(updatedService).reply(500); let resolve: () => void; - const schemaChangeBlocker = new Promise((res) => (resolve = res)); + const schemaChangeBlocker = new Promise((res) => (resolve = res)); const gateway = new ApolloGateway({ serviceHealthCheck: true, logger }); // @ts-ignore for testing purposes, a short pollInterval is ideal so we'll override here From 2b774f93add39dd523faa1090f4f9e63a7af484e Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 10:48:48 +0100 Subject: [PATCH 36/46] Avoid stringifying variables in test because that breaks typing Since `request.variables` has to be an object, this avoids stringifying in favor of setting an explicit different value. That seems to be in the spirit of this test. --- .../src/datasources/__tests__/RemoteGraphQLDataSource.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gateway-js/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts b/gateway-js/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts index 2cf736e3c2..97ac6cca40 100644 --- a/gateway-js/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts +++ b/gateway-js/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts @@ -277,7 +277,7 @@ describe('willSendRequest', () => { const DataSource = new RemoteGraphQLDataSource({ url: 'https://api.example.com/foo', willSendRequest: ({ request }) => { - request.variables = JSON.stringify(request.variables); + request.variables = { id: '2' }; }, }); @@ -295,7 +295,7 @@ describe('willSendRequest', () => { expect(fetch).toHaveFetched('https://api.example.com/foo', { body: { query: '{ me { name } }', - variables: JSON.stringify({ id: '1' }), + variables: { id: '2' }, }, }); }); From c0cb248c7b21b0ecf5213b54c6ef9e52a13a5d2d Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 10:58:17 +0100 Subject: [PATCH 37/46] Add resolver map type to test --- .../src/datasources/__tests__/LocalGraphQLDataSource.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gateway-js/src/datasources/__tests__/LocalGraphQLDataSource.test.ts b/gateway-js/src/datasources/__tests__/LocalGraphQLDataSource.test.ts index 9d710256fd..30904ede42 100644 --- a/gateway-js/src/datasources/__tests__/LocalGraphQLDataSource.test.ts +++ b/gateway-js/src/datasources/__tests__/LocalGraphQLDataSource.test.ts @@ -1,6 +1,7 @@ import { LocalGraphQLDataSource } from '../LocalGraphQLDataSource'; import { buildFederatedSchema } from '@apollo/federation'; import gql from 'graphql-tag'; +import { GraphQLResolverMap } from 'apollo-graphql'; describe('constructing requests', () => { it('accepts context', async () => { @@ -13,7 +14,7 @@ describe('constructing requests', () => { name: String! } `; - const resolvers = { + const resolvers: GraphQLResolverMap<{ userId: number }> = { Query: { me(_, __, { userId }) { const users = [ From b76f8c45b4f031000589b0ce19c1a4293ecaf2c7 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 11:01:45 +0100 Subject: [PATCH 38/46] Cast to any to allow arbitrary property mutation in test --- federation-js/src/composition/__tests__/utils.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/federation-js/src/composition/__tests__/utils.test.ts b/federation-js/src/composition/__tests__/utils.test.ts index 690dca767c..5301bef015 100644 --- a/federation-js/src/composition/__tests__/utils.test.ts +++ b/federation-js/src/composition/__tests__/utils.test.ts @@ -79,7 +79,7 @@ describe('Composition utility functions', () => { deepFreeze(typeDefs); // Assert that mutation does, in fact, throw - expect(() => (typeDefs.blah = [])).toThrow(); + expect(() => ((typeDefs as any).blah = [])).toThrow(); expect(() => stripExternalFieldsFromTypeDefs(typeDefs, 'serviceA'), ).not.toThrow(); From 0bd250fbac8482ce2a3b439640706995a68e47bf Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 11:07:00 +0100 Subject: [PATCH 39/46] Fix `make-fetch-happen` types to allow `defaults()` chaining --- gateway-js/src/make-fetch-happen.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gateway-js/src/make-fetch-happen.d.ts b/gateway-js/src/make-fetch-happen.d.ts index 6b7f1737a1..28d1008401 100644 --- a/gateway-js/src/make-fetch-happen.d.ts +++ b/gateway-js/src/make-fetch-happen.d.ts @@ -52,7 +52,7 @@ declare module 'make-fetch-happen' { } let fetch: Fetcher & { - defaults(opts?: RequestInit & FetcherOptions): Fetcher; + defaults(opts?: RequestInit & FetcherOptions): typeof fetch; }; export default fetch; From 646230de41103a54a8abf663db1a993d62b03e05 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 11:08:05 +0100 Subject: [PATCH 40/46] Change unused parameter to _ to avoid type error --- gateway-js/src/__tests__/integration/list-key.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gateway-js/src/__tests__/integration/list-key.test.ts b/gateway-js/src/__tests__/integration/list-key.test.ts index 1e759663bb..0da6ae7814 100644 --- a/gateway-js/src/__tests__/integration/list-key.test.ts +++ b/gateway-js/src/__tests__/integration/list-key.test.ts @@ -49,7 +49,7 @@ const reviewService: ServiceDefinitionModule = { }; const listsAreEqual = (as: T[], bs: T[]) => - as.length === bs.length && as.every((a, i) => bs[i] === as[i]); + as.length === bs.length && as.every((_, i) => bs[i] === as[i]); const userService: ServiceDefinitionModule = { name: 'user', From 21dc682d081614379ef04bec4cfdb0669c4a2654 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 11:09:48 +0100 Subject: [PATCH 41/46] Set `skipLibCheck` to true in `tsconfig` to avoid type errors from dependencies --- tsconfig.base.json | 1 + 1 file changed, 1 insertion(+) diff --git a/tsconfig.base.json b/tsconfig.base.json index 42a917c85a..e57c3bc0c0 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -17,6 +17,7 @@ "noUnusedLocals": true, "forceConsistentCasingInFileNames": true, "lib": ["es2019", "esnext.asynciterable"], + "skipLibCheck": true, "types": ["node"], "baseUrl": ".", "paths": { From 9d21dd52c25c93d5490cf6c681c772c119f5f7bb Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 11:24:58 +0100 Subject: [PATCH 42/46] Fix typing for Logger mock We may want to look into adapting the types in `ts-jest` for this: kulshekhar/ts-jest/blob/master/src/utils/testing.ts --- .../src/__tests__/gateway/executor.test.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/gateway-js/src/__tests__/gateway/executor.test.ts b/gateway-js/src/__tests__/gateway/executor.test.ts index 9c2615fab1..bf0e966163 100644 --- a/gateway-js/src/__tests__/gateway/executor.test.ts +++ b/gateway-js/src/__tests__/gateway/executor.test.ts @@ -5,20 +5,21 @@ import { fixtures } from 'apollo-federation-integration-testsuite'; import { Logger } from 'apollo-server-types'; import { fetch } from '../../__mocks__/apollo-server-env'; -let logger: Logger; +let logger: { + warn: jest.MockedFunction, + debug: jest.MockedFunction, + error: jest.MockedFunction, + info: jest.MockedFunction, +} beforeEach(() => { fetch.mockReset(); - const warn = jest.fn(); - const debug = jest.fn(); - const error = jest.fn(); - const info = jest.fn(); logger = { - warn, - debug, - error, - info, + warn: jest.fn(), + debug: jest.fn(), + error: jest.fn(), + info: jest.fn(), }; }); From 1b34ce50fdb18e9540773ba448eede9d41769a2e Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 11:28:05 +0100 Subject: [PATCH 43/46] Add non-null assertion for known schema types in test --- federation-js/src/composition/__tests__/compose.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/federation-js/src/composition/__tests__/compose.test.ts b/federation-js/src/composition/__tests__/compose.test.ts index 4ce7f95957..1c2ecf0a3c 100644 --- a/federation-js/src/composition/__tests__/compose.test.ts +++ b/federation-js/src/composition/__tests__/compose.test.ts @@ -649,7 +649,7 @@ describe('composeServices', () => { } `); - const query = schema.getQueryType(); + const query = schema.getQueryType()!; expect(getFederationMetadata(query)?.serviceName).toBeUndefined(); }); @@ -824,7 +824,7 @@ describe('composeServices', () => { assertCompositionSuccess(compositionResult); const { schema } = compositionResult; - const product = schema.getType('Product'); + const product = schema.getType('Product')!; expect(getFederationMetadata(product)?.externals).toMatchInlineSnapshot(` Object { From 042edda650daf95dcfe11800e33c6b5dd6b27093 Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 12:26:44 +0100 Subject: [PATCH 44/46] Add non-null assertion to fix assignment from closure --- .../src/composition/__tests__/composeAndValidate.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/federation-js/src/composition/__tests__/composeAndValidate.test.ts b/federation-js/src/composition/__tests__/composeAndValidate.test.ts index b39bdcb258..b4b2a68cde 100644 --- a/federation-js/src/composition/__tests__/composeAndValidate.test.ts +++ b/federation-js/src/composition/__tests__/composeAndValidate.test.ts @@ -180,7 +180,7 @@ it("doesn't throw errors when a type is unknown, but captures them instead", () () => (compositionResult = composeAndValidate([serviceA])), ).not.toThrow(); - assertCompositionFailure(compositionResult); + assertCompositionFailure(compositionResult!); const { errors } = compositionResult; expect(errors).toMatchInlineSnapshot(` Array [ From 729faadb6f0da119b8e64a9195aebfbd130f239d Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Tue, 2 Mar 2021 12:41:39 +0100 Subject: [PATCH 45/46] Update `apollo-server-core` dependency in `@apollo/gateway` Updating `apollo-server-testing` without updating the `apollo-server-core` dependency meant `apollo-server-testing` depended on a newer version of `apollo-server-core,` and this lead to typing conflicts. --- gateway-js/package.json | 2 +- package-lock.json | 128 +++++++++++----------------------------- 2 files changed, 34 insertions(+), 96 deletions(-) diff --git a/gateway-js/package.json b/gateway-js/package.json index 2d6a5f93be..a6b91f9aed 100644 --- a/gateway-js/package.json +++ b/gateway-js/package.json @@ -31,7 +31,7 @@ "apollo-graphql": "^0.6.0", "apollo-reporting-protobuf": "^0.6.0", "apollo-server-caching": "^0.5.3", - "apollo-server-core": "^2.19.2", + "apollo-server-core": "^2.21.0", "apollo-server-env": "^3.0.0", "apollo-server-errors": "^2.4.2", "apollo-server-types": "^0.6.3", diff --git a/package-lock.json b/package-lock.json index 04c16605ad..553764e812 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "apollo-graphql": "^0.6.0", "apollo-reporting-protobuf": "^0.6.0", "apollo-server-caching": "^0.5.3", - "apollo-server-core": "^2.19.2", + "apollo-server-core": "^2.21.0", "apollo-server-env": "^3.0.0", "apollo-server-errors": "^2.4.2", "apollo-server-types": "^0.6.3", @@ -36,6 +36,38 @@ "lru-cache": "^6.0.0" } }, + "apollo-server-core": { + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.21.0.tgz", + "integrity": "sha512-GtIiq2F0dVDLzzIuO5+dK/pGq/sGxYlKCqAuQQqzYg0fvZ7fukyluXtcTe0tMI+FJZjU0j0WnKgiLsboCoAlPQ==", + "requires": { + "@apollographql/apollo-tools": "^0.4.3", + "@apollographql/graphql-playground-html": "1.6.26", + "@apollographql/graphql-upload-8-fork": "^8.1.3", + "@types/ws": "^7.0.0", + "apollo-cache-control": "^0.11.6", + "apollo-datasource": "^0.7.3", + "apollo-graphql": "^0.6.0", + "apollo-reporting-protobuf": "^0.6.2", + "apollo-server-caching": "^0.5.3", + "apollo-server-env": "^3.0.0", + "apollo-server-errors": "^2.4.2", + "apollo-server-plugin-base": "^0.10.4", + "apollo-server-types": "^0.6.3", + "apollo-tracing": "^0.12.2", + "async-retry": "^1.2.1", + "fast-json-stable-stringify": "^2.0.0", + "graphql-extensions": "^0.12.8", + "graphql-tag": "^2.11.0", + "graphql-tools": "^4.0.8", + "loglevel": "^1.6.7", + "lru-cache": "^6.0.0", + "sha.js": "^2.4.11", + "subscriptions-transport-ws": "^0.9.11", + "uuid": "^8.0.0", + "ws": "^6.0.0" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -130,7 +162,6 @@ "version": "8.1.3", "resolved": "https://registry.npmjs.org/@apollographql/graphql-upload-8-fork/-/graphql-upload-8-fork-8.1.3.tgz", "integrity": "sha512-ssOPUT7euLqDXcdVv3Qs4LoL4BPtfermW1IOouaqEmj36TpHYDmYDIbKoSQxikd9vtMumFnP87OybH7sC9fJ6g==", - "dev": true, "requires": { "@types/express": "*", "@types/fs-capacitor": "*", @@ -3349,24 +3380,6 @@ "@types/node": "*" } }, - "@types/graphql-upload": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@types/graphql-upload/-/graphql-upload-8.0.4.tgz", - "integrity": "sha512-0TRyJD2o8vbkmJF8InppFcPVcXKk+Rvlg/xvpHBIndSJYpmDWfmtx/ZAtl4f3jR2vfarpTqYgj8MZuJssSoU7Q==", - "requires": { - "@types/express": "*", - "@types/fs-capacitor": "*", - "@types/koa": "*", - "graphql": "^15.3.0" - }, - "dependencies": { - "graphql": { - "version": "15.4.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.4.0.tgz", - "integrity": "sha512-EB3zgGchcabbsU9cFe1j+yxdzKQKAbGUWRb13DsrsMN1yyfmmIq+2+L5MqVWcDCE4V89R5AyUOi7sMOGxdsYtA==" - } - } - }, "@types/http-assert": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.1.tgz", @@ -3943,70 +3956,6 @@ } } }, - "apollo-server-core": { - "version": "2.19.2", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.19.2.tgz", - "integrity": "sha512-liLgLhTIGWZtdQbxuxo3/Yv8j+faKQcI60kOL+uwfByGhoKLZEQp5nqi2IdMK6JXt1VuyKwKu7lTzj02a9S3jA==", - "requires": { - "@apollographql/apollo-tools": "^0.4.3", - "@apollographql/graphql-playground-html": "1.6.26", - "@types/graphql-upload": "^8.0.0", - "@types/ws": "^7.0.0", - "apollo-cache-control": "^0.11.6", - "apollo-datasource": "^0.7.3", - "apollo-graphql": "^0.6.0", - "apollo-reporting-protobuf": "^0.6.2", - "apollo-server-caching": "^0.5.3", - "apollo-server-env": "^3.0.0", - "apollo-server-errors": "^2.4.2", - "apollo-server-plugin-base": "^0.10.4", - "apollo-server-types": "^0.6.3", - "apollo-tracing": "^0.12.2", - "async-retry": "^1.2.1", - "fast-json-stable-stringify": "^2.0.0", - "graphql-extensions": "^0.12.8", - "graphql-tag": "^2.11.0", - "graphql-tools": "^4.0.0", - "graphql-upload": "^8.0.2", - "loglevel": "^1.6.7", - "lru-cache": "^6.0.0", - "sha.js": "^2.4.11", - "subscriptions-transport-ws": "^0.9.11", - "uuid": "^8.0.0", - "ws": "^6.0.0" - }, - "dependencies": { - "apollo-reporting-protobuf": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-0.6.2.tgz", - "integrity": "sha512-WJTJxLM+MRHNUxt1RTl4zD0HrLdH44F2mDzMweBj1yHL0kSt8I1WwoiF/wiGVSpnG48LZrBegCaOJeuVbJTbtw==", - "requires": { - "@apollo/protobufjs": "^1.0.3" - } - }, - "apollo-server-caching": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.5.3.tgz", - "integrity": "sha512-iMi3087iphDAI0U2iSBE9qtx9kQoMMEWr6w+LwXruBD95ek9DWyj7OeC2U/ngLjRsXM43DoBDXlu7R+uMjahrQ==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, "apollo-server-env": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-3.0.0.tgz", @@ -7850,17 +7799,6 @@ } } }, - "graphql-upload": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/graphql-upload/-/graphql-upload-8.1.0.tgz", - "integrity": "sha512-U2OiDI5VxYmzRKw0Z2dmfk0zkqMRaecH9Smh1U277gVgVe9Qn+18xqf4skwr4YJszGIh7iQDZ57+5ygOK9sM/Q==", - "requires": { - "busboy": "^0.3.1", - "fs-capacitor": "^2.0.4", - "http-errors": "^1.7.3", - "object-path": "^0.11.4" - } - }, "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", From 58a88ef5e5c2d7707419f8fc19ba686cb1bc60da Mon Sep 17 00:00:00 2001 From: Martijn Walraven Date: Wed, 3 Mar 2021 12:03:42 +0100 Subject: [PATCH 46/46] Remove `skipLibCheck` and add workaround for typing issue in dependency Because `apollo-link-http-common` expects to run in a web environment, it imports the `fetch` type from `WindowOrWorkerGlobalScope`. We should probably either fix that in `apollo-link-http-common` itself, or add `WindowOrWorkerGlobalScope` to `apollo-server-env` like we've done here. --- gateway-js/src/__tests__/gateway/reporting.test.ts | 9 +++++++++ tsconfig.base.json | 1 - 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/gateway-js/src/__tests__/gateway/reporting.test.ts b/gateway-js/src/__tests__/gateway/reporting.test.ts index 795cad7296..44923fb936 100644 --- a/gateway-js/src/__tests__/gateway/reporting.test.ts +++ b/gateway-js/src/__tests__/gateway/reporting.test.ts @@ -13,6 +13,15 @@ import { Plugin, Config, Refs } from 'pretty-format'; import { Report } from 'apollo-reporting-protobuf'; import { fixtures } from 'apollo-federation-integration-testsuite'; +// TODO: We should fix this another way, but for now adding this +// type declaration here to avoid a typing error in `apollo-link-http-common` +// due to us not dependeing on `dom` (or `webworker`) types. +declare global { + interface WindowOrWorkerGlobalScope { + fetch: typeof import('apollo-server-env')['fetch'] + } +} + // Normalize specific fields that change often (eg timestamps) to static values, // to make snapshot testing viable. (If these helpers are more generally // useful, they could be moved to a different file.) diff --git a/tsconfig.base.json b/tsconfig.base.json index e57c3bc0c0..42a917c85a 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -17,7 +17,6 @@ "noUnusedLocals": true, "forceConsistentCasingInFileNames": true, "lib": ["es2019", "esnext.asynciterable"], - "skipLibCheck": true, "types": ["node"], "baseUrl": ".", "paths": {