diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..b6f27f13 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/custom-jest-env.js b/custom-jest-env.js new file mode 100644 index 00000000..f598184e --- /dev/null +++ b/custom-jest-env.js @@ -0,0 +1,16 @@ +const Environment = require('jest-environment-jsdom') + +module.exports = class CustomTestEnvironment extends Environment { + async setup () { + await super.setup() + if (typeof this.global.TextEncoder === 'undefined') { + /** + * Fix TextDecoder and TextEncoder not being defined in Jest + * @see https://github.com/jsdom/jsdom/issues/2524#issuecomment-736672511 + */ + const { TextEncoder, TextDecoder } = require('util') + this.global.TextEncoder = TextEncoder + this.global.TextDecoder = TextDecoder + } + } +} diff --git a/package-lock.json b/package-lock.json index caf5f2bb..d3be45e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,8 @@ "dependencies": { "@babel/cli": "^7.13.14", "@ipld/car": "^4.1.0", - "@ipld/dag-json": "^8.0.9", + "@ipld/dag-cbor": "^7.0.2", + "@ipld/dag-json": "^8.0.10", "@loadable/component": "^5.14.1", "@tableflip/react-inspector": "^2.3.0", "blockcodec-to-ipld-format": "^2.0.0", @@ -20,13 +21,12 @@ "filesize": "^6.1.0", "ipfs-unixfs": "^4.0.1", "ipld": "0.29.0", - "ipld-dag-cbor": "0.18.0", "ipld-ethereum": "6.0.0", "ipld-git": "0.6.4", "ipld-raw": "7.0.0", "milliseconds": "^1.0.3", "multibase": "4.0.2", - "multiformats": "^9.6.4", + "multiformats": "^9.7.0", "multihashes": "^4.0.3", "react-joyride": "^2.3.0", "stream-to-it": "^0.2.4" @@ -38,6 +38,7 @@ "@babel/preset-react": "^7.13.13", "@commitlint/cli": "^16.2.3", "@commitlint/config-conventional": "^16.2.1", + "@ipld/dag-pb": "^2.1.17", "@semantic-release/changelog": "^6.0.1", "@semantic-release/commit-analyzer": "^9.0.2", "@semantic-release/git": "^10.0.1", @@ -50,6 +51,7 @@ "@storybook/addon-links": "^5.3.21", "@storybook/addons": "^5.3.21", "@storybook/react": "^5.3.21", + "@types/jest": "^28.1.4", "babel-eslint": "10.0.3", "cross-env": "^6.0.0", "eslint": "^6.5.1", @@ -68,7 +70,6 @@ "i18next-localstorage-backend": "3.1.3", "intl-messageformat": "^9.12.0", "ipfs-css": "^1.3.0", - "ipld-dag-pb": "0.22.2", "react": "^16.14.0", "react-dom": "^16.14.0", "react-helmet": "^5.2.1", @@ -259,12 +260,14 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dependencies": { - "@babel/highlight": "^7.10.1" + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { @@ -301,14 +304,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, "node_modules/@babel/core/node_modules/@babel/generator": { "version": "7.13.9", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", @@ -382,21 +377,6 @@ "@babel/types": "^7.12.13" } }, - "node_modules/@babel/core/node_modules/@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==" - }, - "node_modules/@babel/core/node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "node_modules/@babel/core/node_modules/@babel/parser": { "version": "7.13.15", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", @@ -493,12 +473,6 @@ "@babel/types": "^7.12.13" } }, - "node_modules/@babel/helper-annotate-as-pure/node_modules/@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 - }, "node_modules/@babel/helper-annotate-as-pure/node_modules/@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -520,12 +494,6 @@ "@babel/types": "^7.12.13" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor/node_modules/@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 - }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor/node_modules/@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -577,15 +545,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-function-name": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", @@ -615,23 +574,6 @@ "@babel/types": "^7.12.13" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@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 - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/parser": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", @@ -698,15 +640,6 @@ "@babel/core": "^7.4.0-0" } }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, "node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/generator": { "version": "7.13.9", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", @@ -762,23 +695,6 @@ "@babel/types": "^7.12.13" } }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/@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 - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/parser": { "version": "7.13.15", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", @@ -870,12 +786,6 @@ "@babel/types": "^7.13.0" } }, - "node_modules/@babel/helper-explode-assignable-expression/node_modules/@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 - }, "node_modules/@babel/helper-explode-assignable-expression/node_modules/@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -917,15 +827,6 @@ "@babel/types": "^7.13.0" } }, - "node_modules/@babel/helper-hoist-variables/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, "node_modules/@babel/helper-hoist-variables/node_modules/@babel/generator": { "version": "7.13.9", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", @@ -966,23 +867,6 @@ "@babel/types": "^7.12.13" } }, - "node_modules/@babel/helper-hoist-variables/node_modules/@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 - }, - "node_modules/@babel/helper-hoist-variables/node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "node_modules/@babel/helper-hoist-variables/node_modules/@babel/parser": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", @@ -1065,11 +949,6 @@ "@babel/types": "^7.13.12" } }, - "node_modules/@babel/helper-member-expression-to-functions/node_modules/@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==" - }, "node_modules/@babel/helper-member-expression-to-functions/node_modules/@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -1105,15 +984,6 @@ "@babel/types": "^7.13.12" } }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, "node_modules/@babel/helper-module-transforms/node_modules/@babel/generator": { "version": "7.13.9", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", @@ -1163,23 +1033,6 @@ "@babel/types": "^7.12.13" } }, - "node_modules/@babel/helper-module-transforms/node_modules/@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 - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "node_modules/@babel/helper-module-transforms/node_modules/@babel/parser": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", @@ -1262,11 +1115,6 @@ "@babel/types": "^7.12.13" } }, - "node_modules/@babel/helper-optimise-call-expression/node_modules/@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==" - }, "node_modules/@babel/helper-optimise-call-expression/node_modules/@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -1294,12 +1142,6 @@ "@babel/types": "^7.13.0" } }, - "node_modules/@babel/helper-remap-async-to-generator/node_modules/@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 - }, "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -1322,14 +1164,6 @@ "@babel/types": "^7.13.12" } }, - "node_modules/@babel/helper-replace-supers/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, "node_modules/@babel/helper-replace-supers/node_modules/@babel/generator": { "version": "7.13.9", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", @@ -1366,21 +1200,6 @@ "@babel/types": "^7.12.13" } }, - "node_modules/@babel/helper-replace-supers/node_modules/@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==" - }, - "node_modules/@babel/helper-replace-supers/node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "node_modules/@babel/helper-replace-supers/node_modules/@babel/parser": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", @@ -1457,11 +1276,6 @@ "@babel/types": "^7.13.12" } }, - "node_modules/@babel/helper-simple-access/node_modules/@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==" - }, "node_modules/@babel/helper-simple-access/node_modules/@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -1481,12 +1295,6 @@ "@babel/types": "^7.12.1" } }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers/node_modules/@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 - }, "node_modules/@babel/helper-skip-transparent-expression-wrappers/node_modules/@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -1508,10 +1316,12 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-validator-option": { "version": "7.12.17", @@ -1530,15 +1340,6 @@ "@babel/types": "^7.13.0" } }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, "node_modules/@babel/helper-wrap-function/node_modules/@babel/generator": { "version": "7.13.9", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", @@ -1579,23 +1380,6 @@ "@babel/types": "^7.12.13" } }, - "node_modules/@babel/helper-wrap-function/node_modules/@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 - }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "node_modules/@babel/helper-wrap-function/node_modules/@babel/parser": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", @@ -1680,14 +1464,6 @@ "@babel/types": "^7.13.0" } }, - "node_modules/@babel/helpers/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, "node_modules/@babel/helpers/node_modules/@babel/generator": { "version": "7.13.9", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", @@ -1724,21 +1500,6 @@ "@babel/types": "^7.12.13" } }, - "node_modules/@babel/helpers/node_modules/@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==" - }, - "node_modules/@babel/helpers/node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "node_modules/@babel/helpers/node_modules/@babel/parser": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", @@ -1808,14 +1569,16 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dependencies": { - "@babel/helper-validator-identifier": "^7.10.1", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/parser": { @@ -2434,12 +2197,6 @@ "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, - "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@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 - }, "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -2505,15 +2262,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-function-name": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", @@ -2549,23 +2297,6 @@ "@babel/types": "^7.12.13" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/@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 - }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "node_modules/@babel/plugin-transform-classes/node_modules/@babel/parser": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", @@ -2742,15 +2473,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/helper-function-name": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", @@ -2777,23 +2499,6 @@ "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, - "node_modules/@babel/plugin-transform-function-name/node_modules/@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 - }, - "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "node_modules/@babel/plugin-transform-function-name/node_modules/@babel/parser": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", @@ -2927,12 +2632,6 @@ "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, - "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@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 - }, "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", @@ -3141,12 +2840,6 @@ "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@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 - }, "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -3237,12 +2930,6 @@ "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, - "node_modules/@babel/plugin-transform-runtime/node_modules/@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 - }, "node_modules/@babel/plugin-transform-runtime/node_modules/@babel/types": { "version": "7.13.14", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz", @@ -3509,12 +3196,6 @@ "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, - "node_modules/@babel/preset-env/node_modules/@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 - }, "node_modules/@babel/preset-env/node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.13.15", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz", @@ -5100,23 +4781,32 @@ } }, "node_modules/@ipld/dag-cbor": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.1.tgz", - "integrity": "sha512-XqG8VEzHjQDC/Qcy5Gyf1kvAav5VuAugc6c7VtdaRLI+3d8lJrUP3F76GYJNNXuEnRZ58cCBnNNglkIGTdg1+A==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.2.tgz", + "integrity": "sha512-V9EhJVWXqzjjRs0kiZfUXOaq8y6R2C4AAmfGoMeszqGOBgfACr5tFAgAwZY0e8z/OpmJWpCrZhzPRTZV0c/gjA==", "dependencies": { "cborg": "^1.6.0", "multiformats": "^9.5.4" } }, "node_modules/@ipld/dag-json": { - "version": "8.0.9", - "resolved": "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-8.0.9.tgz", - "integrity": "sha512-NNKHmgHxc2zOEaB8qOUpAb2UK1vcEE/rBeh018Da/RzXE7N8GwiTJLRZ3Fe/G4fsiis67G0sagRz/YNQcANRsQ==", + "version": "8.0.10", + "resolved": "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-8.0.10.tgz", + "integrity": "sha512-fny24vxVtgAv7aKmAikZq86kikp56knZL/77eyXUsrgGRGtkx9D1awemKbhIVw/7S5nBbP43m/AZwxNPVpP5eg==", "dependencies": { "cborg": "^1.5.4", "multiformats": "^9.5.4" } }, + "node_modules/@ipld/dag-pb": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-2.1.17.tgz", + "integrity": "sha512-AmzOdmdv5hT8iGsrbpzm5R0Fvk7DEbtwcglG2gJLvW9q3zwb+E681hY4EwEELypM1Rfnp/JDA9dGqYcpEi/iAg==", + "dev": true, + "dependencies": { + "multiformats": "^9.5.4" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -5687,6 +5377,27 @@ "node": ">= 10.14.2" } }, + "node_modules/@jest/expect-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", + "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "dev": true, + "dependencies": { + "jest-get-type": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect-utils/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@jest/fake-timers": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", @@ -6010,6 +5721,18 @@ "node": ">=8" } }, + "node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@jest/source-map": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", @@ -8262,6 +7985,12 @@ "node": ">=8" } }, + "node_modules/@sinclair/typebox": { + "version": "0.24.30", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.30.tgz", + "integrity": "sha512-YTlUf5iAfDZEVmI4SWOBGcxpufY2XQhWqSwyLeR2Qg1pkjlM6+Pvc+9MA/+zUaiEFuuX3F3KdhqS5bcasgLc5A==", + "dev": true + }, "node_modules/@sinonjs/commons": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz", @@ -9750,6 +9479,328 @@ "@types/istanbul-lib-report": "*" } }, + "node_modules/@types/jest": { + "version": "28.1.8", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz", + "integrity": "sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==", + "dev": true, + "dependencies": { + "expect": "^28.0.0", + "pretty-format": "^28.0.0" + } + }, + "node_modules/@types/jest/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@types/jest/node_modules/@types/yargs": { + "version": "17.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.12.tgz", + "integrity": "sha512-Nz4MPhecOFArtm81gFQvQqdV7XYCrWKx5uUt6GNHredFHn1i2mtWqXTON7EPXMtNi1qjtjEM/VCHDhcHsAMLXQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/jest/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@types/jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + }, + "node_modules/@types/jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@types/jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@types/jest/node_modules/diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@types/jest/node_modules/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@types/jest/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@types/jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@types/jest/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/@types/jest/node_modules/jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-matcher-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", + "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@types/jest/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@types/jest/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/@types/jest/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@types/jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@types/jest/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/@types/json-schema": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", @@ -12238,15 +12289,6 @@ "babel-plugin-transform-react-remove-prop-types": "0.4.24" } }, - "node_modules/babel-preset-react-app/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, "node_modules/babel-preset-react-app/node_modules/@babel/core": { "version": "7.12.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", @@ -12333,23 +12375,6 @@ "@babel/types": "^7.12.13" } }, - "node_modules/babel-preset-react-app/node_modules/@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 - }, - "node_modules/babel-preset-react-app/node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "node_modules/babel-preset-react-app/node_modules/@babel/parser": { "version": "7.13.13", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", @@ -19705,9 +19730,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "node_modules/graphlib": { @@ -27101,9 +27126,9 @@ "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" }, "node_modules/multiformats": { - "version": "9.6.4", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.4.tgz", - "integrity": "sha512-fCCB6XMrr6CqJiHNjfFNGT0v//dxOBMrOMqUIzpPc/mmITweLEyhvMpY9bF+jZ9z3vaMAau5E8B68DW77QMXkg==" + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.7.0.tgz", + "integrity": "sha512-uv/tcgwk0yN4DStopnBN4GTgvaAlYdy6KnZpuzEPFOYQd71DYFJjs0MN1ERElAflrZaYyGBWXyGxL5GgrxIx0Q==" }, "node_modules/multihashes": { "version": "4.0.3", @@ -30233,9 +30258,9 @@ } }, "node_modules/open": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/open/-/open-7.0.4.tgz", - "integrity": "sha512-brSA+/yq+b08Hsr4c8fsEW2CRzk1BmfN3SAK/5VCHQ9bdoZJ4qa/+AfR0xHjlbbZUyPkUHs1b8x1RqdyZdkVqQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, "dependencies": { "is-docker": "^2.0.0", @@ -33629,15 +33654,6 @@ } } }, - "node_modules/react-scripts/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, "node_modules/react-scripts/node_modules/@babel/core": { "version": "7.12.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", @@ -33724,23 +33740,6 @@ "@babel/types": "^7.12.13" } }, - "node_modules/react-scripts/node_modules/@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 - }, - "node_modules/react-scripts/node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "node_modules/react-scripts/node_modules/@babel/parser": { "version": "7.13.13", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", @@ -42923,12 +42922,11 @@ } }, "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "requires": { - "@babel/highlight": "^7.10.1" + "@babel/highlight": "^7.18.6" } }, "@babel/compat-data": { @@ -42958,14 +42956,6 @@ "source-map": "^0.5.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "requires": { - "@babel/highlight": "^7.12.13" - } - }, "@babel/generator": { "version": "7.13.9", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", @@ -43036,21 +43026,6 @@ "@babel/types": "^7.12.13" } }, - "@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==" - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "@babel/parser": { "version": "7.13.15", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", @@ -43132,12 +43107,6 @@ "@babel/types": "^7.12.13" }, "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 - }, "@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -43161,12 +43130,6 @@ "@babel/types": "^7.12.13" }, "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 - }, "@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -43213,15 +43176,6 @@ "@babel/helper-split-export-declaration": "^7.12.13" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, "@babel/helper-function-name": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", @@ -43251,23 +43205,6 @@ "@babel/types": "^7.12.13" } }, - "@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 - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "@babel/parser": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", @@ -43324,15 +43261,6 @@ "semver": "^6.1.2" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, "@babel/generator": { "version": "7.13.9", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", @@ -43388,23 +43316,6 @@ "@babel/types": "^7.12.13" } }, - "@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 - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "@babel/parser": { "version": "7.13.15", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", @@ -43481,12 +43392,6 @@ "@babel/types": "^7.13.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 - }, "@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -43530,15 +43435,6 @@ "@babel/types": "^7.13.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, "@babel/generator": { "version": "7.13.9", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", @@ -43579,23 +43475,6 @@ "@babel/types": "^7.12.13" } }, - "@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 - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "@babel/parser": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", @@ -43666,11 +43545,6 @@ "@babel/types": "^7.13.12" }, "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==" - }, "@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -43708,15 +43582,6 @@ "@babel/types": "^7.13.12" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, "@babel/generator": { "version": "7.13.9", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", @@ -43766,23 +43631,6 @@ "@babel/types": "^7.12.13" } }, - "@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 - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "@babel/parser": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", @@ -43853,11 +43701,6 @@ "@babel/types": "^7.12.13" }, "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==" - }, "@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -43887,12 +43730,6 @@ "@babel/types": "^7.13.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 - }, "@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -43917,14 +43754,6 @@ "@babel/types": "^7.13.12" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "requires": { - "@babel/highlight": "^7.12.13" - } - }, "@babel/generator": { "version": "7.13.9", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", @@ -43961,21 +43790,6 @@ "@babel/types": "^7.12.13" } }, - "@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==" - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "@babel/parser": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", @@ -44040,11 +43854,6 @@ "@babel/types": "^7.13.12" }, "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==" - }, "@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -44066,12 +43875,6 @@ "@babel/types": "^7.12.1" }, "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 - }, "@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -44095,10 +43898,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==" }, "@babel/helper-validator-option": { "version": "7.12.17", @@ -44117,15 +43919,6 @@ "@babel/types": "^7.13.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, "@babel/generator": { "version": "7.13.9", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", @@ -44166,23 +43959,6 @@ "@babel/types": "^7.12.13" } }, - "@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 - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "@babel/parser": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", @@ -44255,14 +44031,6 @@ "@babel/types": "^7.13.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "requires": { - "@babel/highlight": "^7.12.13" - } - }, "@babel/generator": { "version": "7.13.9", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", @@ -44299,21 +44067,6 @@ "@babel/types": "^7.12.13" } }, - "@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==" - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "@babel/parser": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", @@ -44371,12 +44124,11 @@ } }, "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "requires": { - "@babel/helper-validator-identifier": "^7.10.1", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } @@ -44931,12 +44683,6 @@ "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, - "@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 - }, "@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -44999,15 +44745,6 @@ "globals": "^11.1.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, "@babel/helper-function-name": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", @@ -45043,23 +44780,6 @@ "@babel/types": "^7.12.13" } }, - "@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 - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "@babel/parser": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", @@ -45222,15 +44942,6 @@ "@babel/helper-plugin-utils": "^7.12.13" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, "@babel/helper-function-name": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", @@ -45257,23 +44968,6 @@ "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, - "@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 - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "@babel/parser": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", @@ -45395,12 +45089,6 @@ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true - }, - "@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 } } }, @@ -45547,12 +45235,6 @@ "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, - "@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 - }, "@babel/types": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", @@ -45680,12 +45362,6 @@ "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, - "@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 - }, "@babel/types": { "version": "7.13.14", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz", @@ -45940,12 +45616,6 @@ "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, - "@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 - }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.13.15", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz", @@ -47229,23 +46899,32 @@ } }, "@ipld/dag-cbor": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.1.tgz", - "integrity": "sha512-XqG8VEzHjQDC/Qcy5Gyf1kvAav5VuAugc6c7VtdaRLI+3d8lJrUP3F76GYJNNXuEnRZ58cCBnNNglkIGTdg1+A==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.2.tgz", + "integrity": "sha512-V9EhJVWXqzjjRs0kiZfUXOaq8y6R2C4AAmfGoMeszqGOBgfACr5tFAgAwZY0e8z/OpmJWpCrZhzPRTZV0c/gjA==", "requires": { "cborg": "^1.6.0", "multiformats": "^9.5.4" } }, "@ipld/dag-json": { - "version": "8.0.9", - "resolved": "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-8.0.9.tgz", - "integrity": "sha512-NNKHmgHxc2zOEaB8qOUpAb2UK1vcEE/rBeh018Da/RzXE7N8GwiTJLRZ3Fe/G4fsiis67G0sagRz/YNQcANRsQ==", + "version": "8.0.10", + "resolved": "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-8.0.10.tgz", + "integrity": "sha512-fny24vxVtgAv7aKmAikZq86kikp56knZL/77eyXUsrgGRGtkx9D1awemKbhIVw/7S5nBbP43m/AZwxNPVpP5eg==", "requires": { "cborg": "^1.5.4", "multiformats": "^9.5.4" } }, + "@ipld/dag-pb": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-2.1.17.tgz", + "integrity": "sha512-AmzOdmdv5hT8iGsrbpzm5R0Fvk7DEbtwcglG2gJLvW9q3zwb+E681hY4EwEELypM1Rfnp/JDA9dGqYcpEi/iAg==", + "dev": true, + "requires": { + "multiformats": "^9.5.4" + } + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -47671,6 +47350,23 @@ "jest-mock": "^26.6.2" } }, + "@jest/expect-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", + "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "dev": true, + "requires": { + "jest-get-type": "^28.0.2" + }, + "dependencies": { + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + } + } + }, "@jest/fake-timers": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", @@ -47915,6 +47611,15 @@ } } }, + "@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.24.1" + } + }, "@jest/source-map": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", @@ -49574,6 +49279,12 @@ } } }, + "@sinclair/typebox": { + "version": "0.24.30", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.30.tgz", + "integrity": "sha512-YTlUf5iAfDZEVmI4SWOBGcxpufY2XQhWqSwyLeR2Qg1pkjlM6+Pvc+9MA/+zUaiEFuuX3F3KdhqS5bcasgLc5A==", + "dev": true + }, "@sinonjs/commons": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz", @@ -50811,6 +50522,257 @@ "@types/istanbul-lib-report": "*" } }, + "@types/jest": { + "version": "28.1.8", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz", + "integrity": "sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==", + "dev": true, + "requires": { + "expect": "^28.0.0", + "pretty-format": "^28.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.12.tgz", + "integrity": "sha512-Nz4MPhecOFArtm81gFQvQqdV7XYCrWKx5uUt6GNHredFHn1i2mtWqXTON7EPXMtNi1qjtjEM/VCHDhcHsAMLXQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true + }, + "expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "dev": true, + "requires": { + "@jest/expect-utils": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + } + }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "jest-matcher-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", + "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + } + }, + "jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, "@types/json-schema": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", @@ -52870,15 +52832,6 @@ "babel-plugin-transform-react-remove-prop-types": "0.4.24" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, "@babel/core": { "version": "7.12.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", @@ -52958,23 +52911,6 @@ "@babel/types": "^7.12.13" } }, - "@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 - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "@babel/parser": { "version": "7.13.13", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", @@ -58805,9 +58741,9 @@ } }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "graphlib": { @@ -64484,9 +64420,9 @@ } }, "multiformats": { - "version": "9.6.4", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.4.tgz", - "integrity": "sha512-fCCB6XMrr6CqJiHNjfFNGT0v//dxOBMrOMqUIzpPc/mmITweLEyhvMpY9bF+jZ9z3vaMAau5E8B68DW77QMXkg==" + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.7.0.tgz", + "integrity": "sha512-uv/tcgwk0yN4DStopnBN4GTgvaAlYdy6KnZpuzEPFOYQd71DYFJjs0MN1ERElAflrZaYyGBWXyGxL5GgrxIx0Q==" }, "multihashes": { "version": "4.0.3", @@ -66765,9 +66701,9 @@ } }, "open": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/open/-/open-7.0.4.tgz", - "integrity": "sha512-brSA+/yq+b08Hsr4c8fsEW2CRzk1BmfN3SAK/5VCHQ9bdoZJ4qa/+AfR0xHjlbbZUyPkUHs1b8x1RqdyZdkVqQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, "requires": { "is-docker": "^2.0.0", @@ -69504,15 +69440,6 @@ "workbox-webpack-plugin": "5.1.4" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, "@babel/core": { "version": "7.12.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", @@ -69591,23 +69518,6 @@ "@babel/types": "^7.12.13" } }, - "@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 - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, "@babel/parser": { "version": "7.13.13", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", diff --git a/package.json b/package.json index 0dfef30a..352770b4 100644 --- a/package.json +++ b/package.json @@ -111,12 +111,13 @@ "start": "cross-env NODE_ENV=production babel src -d dist --copy-files --ignore '**/*.test.js' --watch", "storybook": "start-storybook -p 9009 --static-dir public", "storybook:build": "build-storybook -c .storybook --static-dir public --output-dir build", - "test": "react-scripts test --env=jsdom" + "test": "react-scripts test --env=./custom-jest-env.js --transformIgnorePatterns '/node_modules/(?!(multiformats/cid)/)'" }, "dependencies": { "@babel/cli": "^7.13.14", "@ipld/car": "^4.1.0", - "@ipld/dag-json": "^8.0.9", + "@ipld/dag-cbor": "^7.0.2", + "@ipld/dag-json": "^8.0.10", "@loadable/component": "^5.14.1", "@tableflip/react-inspector": "^2.3.0", "blockcodec-to-ipld-format": "^2.0.0", @@ -125,13 +126,12 @@ "filesize": "^6.1.0", "ipfs-unixfs": "^4.0.1", "ipld": "0.29.0", - "ipld-dag-cbor": "0.18.0", "ipld-ethereum": "6.0.0", "ipld-git": "0.6.4", "ipld-raw": "7.0.0", "milliseconds": "^1.0.3", "multibase": "4.0.2", - "multiformats": "^9.6.4", + "multiformats": "^9.7.0", "multihashes": "^4.0.3", "react-joyride": "^2.3.0", "stream-to-it": "^0.2.4" @@ -143,6 +143,7 @@ "@babel/preset-react": "^7.13.13", "@commitlint/cli": "^16.2.3", "@commitlint/config-conventional": "^16.2.1", + "@ipld/dag-pb": "^2.1.17", "@semantic-release/changelog": "^6.0.1", "@semantic-release/commit-analyzer": "^9.0.2", "@semantic-release/git": "^10.0.1", @@ -155,6 +156,7 @@ "@storybook/addon-links": "^5.3.21", "@storybook/addons": "^5.3.21", "@storybook/react": "^5.3.21", + "@types/jest": "^28.1.4", "babel-eslint": "10.0.3", "cross-env": "^6.0.0", "eslint": "^6.5.1", @@ -173,7 +175,6 @@ "i18next-localstorage-backend": "3.1.3", "intl-messageformat": "^9.12.0", "ipfs-css": "^1.3.0", - "ipld-dag-pb": "0.22.2", "react": "^16.14.0", "react-dom": "^16.14.0", "react-helmet": "^5.2.1", diff --git a/src/bundles/explore.js b/src/bundles/explore.js index 83ca15e0..512577a1 100644 --- a/src/bundles/explore.js +++ b/src/bundles/explore.js @@ -182,8 +182,8 @@ function painfullyCompatibleBlockService (ipfs) { async function getIpld () { const ipldDeps = await Promise.all([ import(/* webpackChunkName: "ipld" */ 'ipld'), - import(/* webpackChunkName: "ipld" */ 'ipld-dag-cbor'), - import(/* webpackChunkName: "ipld" */ 'ipld-dag-pb'), + import(/* webpackChunkName: "ipld" */ '@ipld/dag-cbor'), + import(/* webpackChunkName: "ipld" */ '@ipld/dag-pb'), import(/* webpackChunkName: "ipld" */ 'ipld-git'), import(/* webpackChunkName: "ipld" */ 'ipld-raw'), import(/* webpackChunkName: "ipld" */ 'ipld-ethereum') diff --git a/src/lib/cid.js b/src/lib/cid.js index 8a36e3d1..f4768980 100644 --- a/src/lib/cid.js +++ b/src/lib/cid.js @@ -1,18 +1,51 @@ -import CID from 'cids' +import { CID } from 'multiformats' +import * as dagCbor from '@ipld/dag-cbor' +import * as dagPb from '@ipld/dag-pb' +import * as dagJson from '@ipld/dag-json' -export function toCidOrNull (value) { +/** + * @template {string} Prefix + * @param {any} value + * @param {import('multiformats/bases/interface').MultibaseDecoder} [base] + * @returns + */ +export function toCidOrNull (value, base) { if (!value) return null try { - return new CID(value) + return CID.asCID(value) || CID.parse(value, base) } catch (err) { - console.log('Failed to parse CID', value, err) return null } } +/** + * This function is deprecated, use `getCodeOrNull` instead. + * + * `cid.codec` is deprecated, use integer "code" property instead + * + * @param {any} value + * @returns {string} + * @deprecated + */ export function getCodecOrNull (value) { const cid = toCidOrNull(value) - return cid ? cid.codec : null + + if (cid == null) return null + switch (cid.code) { + case dagCbor.code: + return dagCbor.name + case dagJson.code: + return dagJson.name + case dagPb.code: + return dagPb.name + default: + return null + } +} + +export function getCodeOrNull (value) { + const cid = toCidOrNull(value) + return cid ? cid.code : null } export function toCidStrOrNull (value) { diff --git a/src/lib/cid.test.js b/src/lib/cid.test.js new file mode 100644 index 00000000..75ca7d78 --- /dev/null +++ b/src/lib/cid.test.js @@ -0,0 +1,163 @@ +/* global describe it expect */ +// @ts-check +import { toCidOrNull, getCodecOrNull, getCodeOrNull, toCidStrOrNull } from './cid' +import * as multiformats from 'multiformats' +import * as dagCbor from '@ipld/dag-cbor' +import * as dagPb from '@ipld/dag-pb' +import crypto from 'crypto' + +const { CID, hasher, bytes } = multiformats + +export const sha256 = hasher.from({ + name: 'sha2-256', + code: 0x12, + encode: (input) => bytes.coerce(crypto.createHash('sha256').update(input).digest()) +}) +/** + * + * @template {number} Code + * @param {any} value + * @param {import('multiformats/block').BlockEncoder} codec + * @param {import('multiformats/hashes/interface').MultihashHasher} hasher + * @returns + */ +const createCID = async (value, codec, hasher) => { + try { + const digest = await hasher.digest(codec.encode(value)) + return CID.create(1, codec.code, digest) + } catch (err) { + console.log('Failed to create CID', value, err) + return null + } +} + +const cidStr = 'bafyreiddymapg5zcpma3iu4wingqvois6jirucn5776wdsyg5f3f65v75a' + +describe('cid.js', () => { + describe('toCidOrNull', () => { + it('Returns CID instance for valid CID string', () => { + // arrange + // act + const cid = toCidOrNull(cidStr) + // assert + expect(cid).toBeInstanceOf(CID) + expect(cid?.code).toBe(dagCbor.code) + }) + + it('Returns null for invalid CID string', () => { + // arrange + const cidStr = 'abc123' + // act + const cid = toCidOrNull(cidStr) + // assert + expect(cid).not.toBeInstanceOf(CID) + expect(cid).toBe(null) + }) + }) + + describe('getCodecOrNull', () => { + it('CID with `dag-cbor` codec returns `dag-cbor`', async () => { + // arrange + const cid = await createCID({ foo: 'abc' }, dagCbor, sha256) + expect(cid).toBeInstanceOf(CID) + // act + const codec = getCodecOrNull(cid) + // assert + expect(codec).toBe('dag-cbor') + }) + + it('CID with `dag-pb` codec returns `dag-pb`', async () => { + // arrange + const cid = await createCID({ + Data: new Uint8Array(Buffer.from('hello world')), + Links: [] + }, dagPb, sha256) + expect(cid).toBeInstanceOf(CID) + // act + const codec = getCodecOrNull(cid) + // assert + expect(codec).toBe('dag-pb') + }) + + it('CID with any other codec returns null', async () => { + // arrange + /** + * @type {import('multiformats/block').BlockEncoder<99999, any>} + */ + const fakeCodec = { + name: 'fake', + code: 99999, + encode: () => new Uint8Array(Buffer.from('NOTHING')) + } + + const cid = await createCID({ foo: 'abc' }, fakeCodec, sha256) + expect(cid).toBeInstanceOf(CID) + // act + const codec = getCodecOrNull(cid) + // assert + expect(codec).toBe(null) + }) + }) + + describe('getCodeOrNull', () => { + it(`CID with 'dag-cbor' codec returns '${dagCbor.code}'`, async () => { + // arrange + const cid = await createCID({ foo: 'abc' }, dagCbor, sha256) + expect(cid).toBeInstanceOf(CID) + // act + const codec = getCodeOrNull(cid) + // assert + expect(codec).toBe(dagCbor.code) + }) + + it(`CID with 'dag-pb' codec returns '${dagPb.code}'`, async () => { + // arrange + const cid = await createCID({ + Data: new Uint8Array(Buffer.from('hello world')), + Links: [] + }, dagPb, sha256) + expect(cid).toBeInstanceOf(CID) + // act + const codec = getCodeOrNull(cid) + // assert + expect(codec).toBe(dagPb.code) + }) + + it('CID with any other codec returns the correct code', async () => { + // arrange + /** + * @type {import('multiformats/block').BlockEncoder<99999, any>} + */ + const fakeCodec = { + name: 'fake', + code: 99999, + encode: () => new Uint8Array(Buffer.from('NOTHING')) + } + + const cid = await createCID({ foo: 'abc' }, fakeCodec, sha256) + expect(cid).toBeInstanceOf(CID) + // act + const codec = getCodeOrNull(cid) + // assert + expect(codec).toBe(fakeCodec.code) + }) + }) + + describe('toCidStrOrNull', () => { + it('Returns correct string for valid CID', () => { + // arrange + // act + const tempCidStr = toCidStrOrNull(toCidOrNull(cidStr)) + // assert + expect(tempCidStr).toBe(cidStr) + }) + + it('Returns null for invalid CID string', () => { + // arrange + // act + const tempCidStr = toCidStrOrNull('abc123') + // assert + expect(tempCidStr).toBe(null) + }) + }) +}) diff --git a/src/lib/normalise-dag-node.js b/src/lib/normalise-dag-node.js index 86024026..36dd7f98 100644 --- a/src/lib/normalise-dag-node.js +++ b/src/lib/normalise-dag-node.js @@ -1,6 +1,9 @@ +// @ts-check import { UnixFS } from 'ipfs-unixfs' -import CID from 'cids' -import { toCidOrNull, getCodecOrNull } from './cid' +import * as dagPb from '@ipld/dag-pb' +import * as dagCbor from '@ipld/dag-cbor' + +import { toCidOrNull, getCodeOrNull, toCidStrOrNull } from './cid' /** * Provide a uniform shape for all^ node types. @@ -10,20 +13,26 @@ import { toCidOrNull, getCodecOrNull } from './cid' * * ^: currently dag-cbor and dag-pb are supported. * + * @function normaliseDagNode * @param {Object} node the `value` prop from `ipfs.dag.get` response. - * @param {String} cid the cid string passed to `ipfs.dag.get` + * @param {string} cidStr the cid string passed to `ipfs.dag.get` */ export default function normaliseDagNode (node, cidStr) { - const type = getCodecOrNull(cidStr) - if (type === 'dag-pb') { - return normaliseDagPb(node, cidStr, type) + const code = getCodeOrNull(cidStr) + if (code === dagPb.code) { + return normaliseDagPb(node, cidStr, code) } // try cbor style if we don't know any better - return normaliseDagCbor(node, cidStr, type) + return normaliseDagCbor(node, cidStr, code ?? dagCbor.code) } -/* +/** * Normalize links and add type info. Add unixfs info where available + * + * @param {import('@ipld/dag-pb').PBNode} node + * @param {string} cid + * @param {import('../types').CodecType} type + * @returns {import('../types').NormalizedDagNode} */ export function normaliseDagPb (node, cid, type) { // NOTE: Use the requested cid rather than the internal one. @@ -33,65 +42,103 @@ export function normaliseDagPb (node, cid, type) { // if (toCidStrOrNull(node.multihash) !== cid) { // throw new Error('dag-pb multihash should match provided cid') // } - node = node.toJSON() - let format - try { + + const cidStr = toCidStrOrNull(cid) + if (cidStr == null) { + throw new Error(`cidStr is null for cid: ${cid}`) + } + /** + * @type {import('../types').NormalizedDagPbNodeFormat} + */ + let format = 'non-unixfs' + const data = node.Data + + if (data != null) { + try { // it's a unix system? - const { type, data, blockSizes } = UnixFS.unmarshal(node.data) - node.data = { type, data, blockSizes } - format = 'unixfs' - } catch (err) { + const unixFsObj = UnixFS.unmarshal(data) + const { type, data: unixFsData, blockSizes } = unixFsObj + format = 'unixfs' + + return { + cid: cidStr, + type, + data: { type: /** @type {import('../types').UnixFsNodeTypes} */(type), data: unixFsData, blockSizes }, + links: normaliseDagPbLinks(node.Links, cid), + size: unixFsObj.fileSize(), + format + } + } catch (err) { // dag-pb but not a unixfs. - // console.log(err) + // console.error(err) + } } + // const cidStr = toCidStrOrNull(cid) return { - cid, + cid: cidStr, type, - data: node.data, - links: normaliseDagPbLinks(node, cid), - size: node.size, + data, + links: normaliseDagPbLinks(node.Links, cid), format } } -/* +/** * Convert DagLink shape into normalized form that can be used interchangeably * with links found in dag-cbor + * + * @param {import('@ipld/dag-pb').PBLink[]} links + * @param {string} sourceCid + * @returns {import('../types').NormalizedDagLink[]} */ -export function normaliseDagPbLinks (node, sourceCid) { - return node.links.map(({ name, size, cid }, index) => ({ - path: name || `Links/${index}`, +export function normaliseDagPbLinks (links, sourceCid) { + return links.map((link, index) => ({ + path: link.Name || `Links/${index}`, source: sourceCid, - target: cid, - size, + target: toCidStrOrNull(link.Hash) ?? '', + size: link.Tsize ?? 0, index })) } -/* +/** * Find links and add type and cid info + * + * @function normaliseDagCbor + * @param {import('../types').NormalizedDagNode['data']} data - The data object + * @param {string} cid - The string representation of the CID + * @param {number} code - multicodec code, see https://github.com/multiformats/multicodec/blob/master/table.csv + * @returns {import('../types').NormalizedDagNode} */ -export function normaliseDagCbor (obj, cid, type) { - const links = findAndReplaceDagCborLinks(obj, cid) +export function normaliseDagCbor (data, cid, code) { + const links = findAndReplaceDagCborLinks(data, cid) return { cid, - type, - data: obj, - links: links + type: code, + data, + links, + size: links.reduce((acc, { size }) => acc + size, 0), + format: 'unknown' } } /** * A valid IPLD link in a dag-cbor node is an object with single "/" property. + * + * @param {unknown} obj + * @param {string} sourceCid + * @param {string} path + * @returns {import('../types').NormalizedDagLink[]} */ export function findAndReplaceDagCborLinks (obj, sourceCid, path = '') { - if (!obj || !typeof obj === 'object' || Buffer.isBuffer(obj) || typeof obj === 'string') { + if (!obj || typeof obj !== 'object' || Buffer.isBuffer(obj) || typeof obj === 'string') { return [] } - if (CID.isCID(obj)) { - return [{ path, source: sourceCid, target: obj.toString() }] + const cid = toCidOrNull(obj) + if (cid) { + return [{ path, source: sourceCid, target: cid.toString(), size: 0, index: 0 }] } if (Array.isArray(obj)) { @@ -114,7 +161,7 @@ export function findAndReplaceDagCborLinks (obj, sourceCid, path = '') { const target = targetCid.toString() obj['/'] = target - return [{ path, source: sourceCid, target }] + return [{ path, source: sourceCid, target, size: 0, index: 0 }] } if (keys.length > 0) { diff --git a/src/lib/normalize-dag-node.test.js b/src/lib/normalize-dag-node.test.js index 0070636d..609a1cbf 100644 --- a/src/lib/normalize-dag-node.test.js +++ b/src/lib/normalize-dag-node.test.js @@ -1,62 +1,71 @@ /* global it expect */ -import CID from 'cids' -import normaliseDagCbor from './normalise-dag-node' +import { CID } from 'multiformats' +import * as dagCbor from '@ipld/dag-cbor' +import normaliseDagNode from './normalise-dag-node' -const cid1 = 'zdpuAwkGh9cLskW5z7pH8V2uC5nwtSXd76L7ZTEXs5f8V89db' -const cid2 = 'zdpuAydka8ZEXd9UgWF1s4pVFcF4U1GEgtdNQFxKNt9tyKQxR' -const cid3 = 'zdpuAtYsbfdkVazNyWcS97cWKVzR99huDzNxMmoRb349jyUTD' +const cid1 = 'bafyreifiioc5v7xh3xbqjkdvgcz5ywo2vnhzd2gdnybfogxajjnchzzhei' +const cid2 = 'bafyreigej5njyhiye4rlhntifea6uwzkuwhkxvm2nxyyufnedzqqhhokpi' +const cid3 = 'bafyreidyyt24wtr7q5plglwroysqzn3ph42nvna4iswllnha7xrwogme3q' it('normalizes a simple cbor node', () => { const obj = { foo: 'bar' } - const res = normaliseDagCbor(obj, cid1, 'dag-cbor') + const res = normaliseDagNode(obj, cid1, dagCbor.code) - expect(res).toEqual({ + expect(res).toEqual(expect.objectContaining({ cid: cid1, data: obj, - type: 'dag-cbor', + type: dagCbor.code, links: [] - }) + })) }) it('normalizes a cbor node with an empty array', () => { const obj = { foo: [] } - const res = normaliseDagCbor(obj, cid1, 'dag-cbor') + const res = normaliseDagNode(obj, cid1, dagCbor.code) - expect(res).toEqual({ + expect(res).toEqual(expect.objectContaining({ cid: cid1, data: obj, - type: 'dag-cbor', + type: dagCbor.code, links: [] - }) + })) }) it('normalizes a cbor node with links', () => { const obj = { - foo: new CID(cid2), - bar: [new CID(cid2), new CID(cid3)] + foo: CID.parse(cid2), + bar: [CID.parse(cid2), CID.parse(cid3)] } - const res = normaliseDagCbor(obj, cid1, 'dag-cbor') + const res = normaliseDagNode(obj, cid1, dagCbor.code) expect(res).toEqual({ cid: cid1, data: obj, - type: 'dag-cbor', + type: dagCbor.code, + format: 'unknown', + size: 0, links: [ { path: 'foo', source: cid1, - target: cid2 + target: cid2, + index: 0, + size: 0 }, { path: 'bar/0', source: cid1, - target: cid2 + target: cid2, + index: 0, + size: 0 }, { path: 'bar/1', source: cid1, - target: cid3 + target: cid3, + index: 0, + size: 0 } ] }) diff --git a/src/lib/resolve-ipld-path.js b/src/lib/resolve-ipld-path.js index 03e638d4..a6922492 100644 --- a/src/lib/resolve-ipld-path.js +++ b/src/lib/resolve-ipld-path.js @@ -1,5 +1,18 @@ import normaliseDagNode from './normalise-dag-node' -import Cid from 'cids' + +/** + * @typedef {object} ResolvedIpldPathInfo + * @property {object} targetNode + * @property {string} canonicalPath + * @property {string} localPath + * @property {object[]} nodes + * @property {object[]} pathBoundaries + */ +/** + * @typedef {object} IpldInterface + * @property {() => Promise} get + * @property {() => Promise} resolve + */ /** * Walk an IPLD path to find all the nodes and path boundaries it traverses. @@ -28,15 +41,18 @@ import Cid from 'cids' * - `nodes` is the array of nodes that the path traverses. * - `pathBoundaries` is the array of links that the path traverses. * - * @param {function()} ipldGet fn that returns a promise of the ipld data for a (cid, path, options) + * @param {IpldInterface} ipldGet fn that returns a promise of the ipld data for a (cid, path, options) * @param {string} sourceCid the root hash * @param {string} path everything after the hash - * @param {Object[]} nodes accumulated node info - * @param {Object[]} pathBoundaries accumulated path boundary info - * @returns {{targetNode: Object, canonicalPath: String, localPath: String, nodes: Object[], pathBoundaries: Object[]}} resolved path info + * @param {object[]} nodes accumulated node info + * @param {object[]} pathBoundaries accumulated path boundary info + * @returns {ResolvedIpldPathInfo} resolved path info */ export default async function resolveIpldPath (ipld, sourceCid, path, nodes = [], pathBoundaries = []) { const { value, remainderPath } = await ipldGetNodeAndRemainder(ipld, sourceCid, path) + if (sourceCid == null) { + throw new Error('sourceCid is null') + } const sourceCidStr = sourceCid.toString() const node = normaliseDagNode(value, sourceCidStr) @@ -44,10 +60,11 @@ export default async function resolveIpldPath (ipld, sourceCid, path, nodes = [] const linkPath = findLinkPath(path, remainderPath) const link = findLink(node, linkPath) + if (link) { pathBoundaries.push(link) // Go again, using the link.target as the sourceCid, and the remainderPath as the path. - return resolveIpldPath(ipld, new Cid(link.target), remainderPath, nodes, pathBoundaries) + return resolveIpldPath(ipld, link.target, remainderPath, nodes, pathBoundaries) } // we made it to the containing node. Hand back the info const canonicalPath = path ? `${sourceCidStr}${path}` : sourceCidStr @@ -55,7 +72,17 @@ export default async function resolveIpldPath (ipld, sourceCid, path, nodes = [] return { targetNode, canonicalPath, localPath: path, nodes, pathBoundaries } } +/** + * @function ipldGetNodeAndRemainder + * @param {IpldInterface} ipld + * @param {string} sourceCid + * @param {string} path + * @returns + */ export async function ipldGetNodeAndRemainder (ipld, sourceCid, path) { + if (sourceCid == null) { + throw new Error('sourceCid is null') + } // TODO: find out why ipfs.dag.get with localResolve never resolves. // const {value, remainderPath} = await getIpfs().dag.get(sourceCid, path, {localResolve: true}) @@ -74,9 +101,9 @@ export async function ipldGetNodeAndRemainder (ipld, sourceCid, path) { /** * Find the link object that matches linkPath * - * @param {Object} node a `normalisedDagNode` - * @param {Object} linkPath an IPLD path string - * @returns {Object} the link object for `linkPath` + * @param {import('./normalise-dag-node').NormalizedDagNode} node a `normalisedDagNode` + * @param {string} linkPath an IPLD path string + * @returns {import('./normalise-dag-node').NormalizedDagLink} the link object for `linkPath` */ export function findLink (node, linkPath) { if (!linkPath) return null diff --git a/src/lib/resolve-ipld-path.test.js b/src/lib/resolve-ipld-path.test.js index 0cfb1a05..d614eb00 100644 --- a/src/lib/resolve-ipld-path.test.js +++ b/src/lib/resolve-ipld-path.test.js @@ -1,148 +1,178 @@ -/* global it expect jest */ -import CID from 'cids' -import { DAGNode } from 'ipld-dag-pb' + +/* global describe it expect jest */ +// @ts-check +import * as dagPb from '@ipld/dag-pb' +import * as dagCbor from '@ipld/dag-cbor' + import resolveIpldPath, { findLinkPath } from './resolve-ipld-path' +import { toCidOrNull } from './cid' + +const testCidString = 'bafyreiddymapg5zcpma3iu4wingqvois6jirucn5776wdsyg5f3f65v75a' + +describe('resolveIpldPath', () => { + it('resolves all nodes traversed along a path', async () => { + const testCidString = 'bafyreiddymapg5zcpma3iu4wingqvois6jirucn5776wdsyg5f3f65v75a' -it('resolves all nodes traversed along a path', async () => { - const ipldMock = { - get: jest.fn(), - resolve: jest.fn() - } - const cid = 'zdpuAs8sJjcmsPUfB1bUViftCZ8usnvs2cXrPH6MDyT4zrvSs' - const path = '/a/b/a' - const linkCid = 'zdpuAyzU5ahAKr5YV24J5TqrDX8PhzHLMkxx69oVzkBDWHnjq' - const dagGetRes1 = { - a: { - b: new CID(linkCid) + const testCID = /** @type {import('multiformats').CID} */(toCidOrNull(testCidString)) + const ipldMock = { + get: jest.fn(), + resolve: jest.fn() + } + const path = '/a/b/a' + const linkCid = 'bafyreigjtxtteq6vj3gtb7gzhwkmnprd2al5mjyttptcmu5cp3gvzmau3a' + + const dagGetRes1 = { + a: { + b: toCidOrNull(linkCid) + } + } + const dagGetRes2 = { + first: () => Promise.resolve({ remainderPath: '/a' }) } - } - const dagGetRes2 = { - first: () => Promise.resolve({ remainderPath: '/a' }) - } - const dagGetRes3 = { - a: 'hello world' - } - const dagGetRes4 = { - first: () => Promise.resolve({ remainderPath: '/a' }) - } - - ipldMock.get.mockReturnValueOnce(Promise.resolve(dagGetRes1)) - ipldMock.resolve.mockReturnValueOnce(dagGetRes2) - ipldMock.get.mockReturnValueOnce(Promise.resolve(dagGetRes3)) - ipldMock.resolve.mockReturnValueOnce(dagGetRes4) - - const res = await resolveIpldPath(ipldMock, new CID(cid), path) - - expect(ipldMock.get.mock.calls.length).toBe(2) - expect(ipldMock.resolve.mock.calls.length).toBe(2) - expect(res.canonicalPath).toBe(`${linkCid}/a`) - expect(res.nodes.length).toBe(2) - expect(res.nodes[0].type).toBe('dag-cbor') - expect(res.nodes[0].cid).toBe(cid) - expect(res.nodes[1].type).toBe('dag-cbor') - expect(res.nodes[1].cid).toBe(linkCid) - expect(res.pathBoundaries.length).toBe(1) - expect(res.pathBoundaries[0]).toEqual({ - path: 'a/b', - source: cid, - target: linkCid + const dagGetRes3 = { + a: 'hello world' + } + const dagGetRes4 = { + first: () => Promise.resolve({ remainderPath: '/a' }) + } + + ipldMock.get.mockReturnValueOnce(Promise.resolve(dagGetRes1)) + ipldMock.resolve.mockReturnValueOnce(dagGetRes2) + ipldMock.get.mockReturnValueOnce(Promise.resolve(dagGetRes3)) + ipldMock.resolve.mockReturnValueOnce(dagGetRes4) + + const res = await resolveIpldPath(ipldMock, testCID.toString(), path) + + expect(ipldMock.get.mock.calls.length).toBe(2) + expect(ipldMock.resolve.mock.calls.length).toBe(2) + expect(res.canonicalPath).toBe(`${linkCid}/a`) + expect(res.nodes.length).toBe(2) + expect(res.nodes[0].type).toBe(dagCbor.code) + expect(res.nodes[0].cid).toBe(testCidString) + expect(res.nodes[1].type).toBe(dagCbor.code) + expect(res.nodes[1].cid).toBe(linkCid) + expect(res.pathBoundaries.length).toBe(1) + expect(res.pathBoundaries[0]).toEqual(expect.objectContaining({ + path: 'a/b', + source: testCidString, + target: linkCid + })) }) -}) -it('resolves thru dag-cbor to dag-pb to dag-pb', async () => { - const ipldMock = { - get: jest.fn(), - resolve: jest.fn() - } + it('resolves thru dag-cbor to dag-pb to dag-pb', async () => { + const ipldMock = { + get: jest.fn(), + resolve: jest.fn() + } - const cid = 'zdpuAs8sJjcmsPUfB1bUViftCZ8usnvs2cXrPH6MDyT4zrvSs' - const path = '/a/b/pb1' + const path = '/a/b/pb1' - const dagNode3 = await createDagPbNode('the second pb node', []) - const dagNode3CID = 'QmRLacjo71FTzKFELa7Yf5YqMwdftKNDNFq7EiE13uohar' + const dagNode3 = await createDagPbNode('the second pb node', []) + const dagNode3CID = 'bafybeibmrzxo3u4epqek6xkk2vkjzn4ika5rp4445hdkgi2h3ovsk6iwpm' - const dagNode2 = await createDagPbNode('the first pb node', [{ - name: 'pb1', - cid: dagNode3CID, - size: 101 - }]) - const dagNode2CID = 'QmW4sMkvHnTnVPkBJYToRW4burdMk9DHP5qGE4CYGUtHiQ' + const dagNode2 = await createDagPbNode('the first pb node', [{ + name: 'pb1', + cid: dagNode3CID, + size: 101 + }]) + const dagNode2CID = 'bafybeids2kauewqpsenxbaet4ar5sbsaddd24p2yk7a4b2vdwyrnsej45e' - const dagNode1 = { - a: { - b: new CID(dagNode2CID) + const dagNode1 = { + a: { + b: toCidOrNull(dagNode2CID) + } } - } - - const dagGetRes1 = dagNode1 - - const dagGetRes2 = { - first: () => Promise.resolve({ remainderPath: 'pb1' }) - } - - const dagGetRes3 = dagNode2 - - const dagGetRes4 = { - first: () => Promise.resolve({ remainderPath: '' }) - } - - const dagGetRes5 = dagNode3 - - const dagGetRes6 = { - first: () => Promise.resolve({ remainderPath: '' }) - } - - ipldMock.get.mockReturnValueOnce(Promise.resolve(dagGetRes1)) - ipldMock.resolve.mockReturnValueOnce(dagGetRes2) - ipldMock.get.mockReturnValueOnce(Promise.resolve(dagGetRes3)) - ipldMock.resolve.mockReturnValueOnce(dagGetRes4) - ipldMock.get.mockReturnValueOnce(Promise.resolve(dagGetRes5)) - ipldMock.resolve.mockReturnValueOnce(dagGetRes6) - - const res = await resolveIpldPath(ipldMock, new CID(cid), path) - - expect(ipldMock.get.mock.calls.length).toBe(3) - expect(ipldMock.resolve.mock.calls.length).toBe(3) - expect(res.targetNode.cid).toEqual(dagNode3CID) - expect(res.canonicalPath).toBe(dagNode3CID) - expect(res.nodes.length).toBe(3) - expect(res.nodes[0].type).toBe('dag-cbor') - expect(res.nodes[0].cid).toBe(cid) - expect(res.nodes[0].links.length).toBe(1) - expect(res.nodes[1].type).toBe('dag-pb') - expect(res.nodes[1].cid).toBe(dagNode2CID) - expect(res.nodes[1].links.length).toBe(1) - expect(res.nodes[2].type).toBe('dag-pb') - expect(res.nodes[2].cid).toBe(dagNode3CID) - expect(res.nodes[2].links.length).toBe(0) - expect(res.pathBoundaries.length).toBe(2) - expect(res.pathBoundaries[0]).toEqual({ - path: 'a/b', - source: cid, - target: dagNode2CID - }) - expect(res.pathBoundaries[1]).toEqual({ - index: 0, - path: 'pb1', - size: dagNode2.toJSON().links[0].size, - source: dagNode2CID, - target: dagNode3CID + + const dagGetRes1 = dagNode1 + + const dagGetRes2 = { + first: () => Promise.resolve({ remainderPath: 'pb1' }) + } + + const dagGetRes3 = dagNode2 + + const dagGetRes4 = { + first: () => Promise.resolve({ remainderPath: '' }) + } + + const dagGetRes5 = dagNode3 + + const dagGetRes6 = { + first: () => Promise.resolve({ remainderPath: '' }) + } + + ipldMock.get.mockReturnValueOnce(Promise.resolve(dagGetRes1)) + ipldMock.resolve.mockReturnValueOnce(dagGetRes2) + ipldMock.get.mockReturnValueOnce(Promise.resolve(dagGetRes3)) + ipldMock.resolve.mockReturnValueOnce(dagGetRes4) + ipldMock.get.mockReturnValueOnce(Promise.resolve(dagGetRes5)) + ipldMock.resolve.mockReturnValueOnce(dagGetRes6) + + const res = await resolveIpldPath(ipldMock, testCidString, path) + + expect(ipldMock.get.mock.calls.length).toBe(3) + expect(ipldMock.resolve.mock.calls.length).toBe(3) + expect(res.targetNode.cid).toEqual(dagNode3CID) + expect(res.canonicalPath).toBe(dagNode3CID) + expect(res.nodes.length).toBe(3) + expect(res.nodes[0].type).toBe(dagCbor.code) + expect(res.nodes[0].cid).toBe(testCidString) + expect(res.nodes[0].links.length).toBe(1) + expect(res.nodes[1].type).toBe(dagPb.code) + expect(res.nodes[1].cid).toBe(dagNode2CID) + expect(res.nodes[1].links.length).toBe(1) + expect(res.nodes[2].type).toBe(dagPb.code) + expect(res.nodes[2].cid).toBe(dagNode3CID) + expect(res.nodes[2].links.length).toBe(0) + expect(res.pathBoundaries.length).toBe(2) + expect(res.pathBoundaries[0]).toEqual(expect.objectContaining({ + path: 'a/b', + source: testCidString, + target: dagNode2CID + })) + expect(res.pathBoundaries[1]).toEqual(expect.objectContaining({ + index: 0, + path: 'pb1', + source: dagNode2CID, + target: dagNode3CID + })) }) }) +/** + * + * @typedef {object} OldDagPbLinkLiteral + * @property {string} name + * @property {string} cid + * @property {number} size + */ +/** + * + * @param {string|Uint8Array} data + * @param {OldDagPbLinkLiteral[]} links + * @returns {import('@ipld/dag-pb').PBNode} + */ function createDagPbNode (data, links) { - if (typeof data === 'string') { - data = new Uint8Array(Buffer.from(data)) - } - return new DAGNode(data, links) + return dagPb.prepare({ + Data: data, + Links: links.map(({ cid, name, size }) => { + return { + Hash: cid, + Name: name, + Tsize: size + } + }) + }) } -it('finds the linkPath from a fullPath and a remainderPath', () => { - expect(findLinkPath('', '')).toBe(null) - expect(findLinkPath('/', '')).toBe(null) - expect(findLinkPath('/foo/bar', 'bar')).toBe('foo') - expect(findLinkPath('/a/b/c/a', 'b/c/a')).toBe('a') - expect(findLinkPath('/a/b/c/a', '/b/c/a')).toBe('a') - expect(findLinkPath('a/b/c/a', '/b/c/a')).toBe('a') - expect(() => findLinkPath('/foo', 'wat')).toThrow() +describe('findLinkPath', () => { + it('finds the linkPath from a fullPath and a remainderPath', () => { + expect(findLinkPath('', '')).toBe(null) + expect(findLinkPath('/', '')).toBe(null) + expect(findLinkPath('/foo/bar', 'bar')).toBe('foo') + expect(findLinkPath('/a/b/c/a', 'b/c/a')).toBe('a') + expect(findLinkPath('/a/b/c/a', '/b/c/a')).toBe('a') + expect(findLinkPath('a/b/c/a', '/b/c/a')).toBe('a') + expect(() => findLinkPath('/foo', 'wat')).toThrow() + }) }) diff --git a/src/types.d.ts b/src/types.d.ts new file mode 100644 index 00000000..445199c7 --- /dev/null +++ b/src/types.d.ts @@ -0,0 +1,30 @@ +export type { CID } from 'multiformats/cid' + +export type CodecType = number; +export type NodeData = Uint8Array; +export type UnixFsNodeTypes = 'raw' | 'directory' | 'file' | 'metadata' | 'symlink' | 'hamt-sharded-directory' +export type UnixFsNodeDirTypes = 'directory' | 'hamt-sharded-directory' +export type NormalizedDagPbNodeFormat = 'unixfs' | 'non-unixfs' +export type NormalizedDagNodeFormat = NormalizedDagPbNodeFormat | 'unknown' +export interface UnixFsNodeData { + type: UnixFsNodeTypes; + data: NodeData | undefined; + blockSizes: number[]; +} + +export interface NormalizedDagLink { + path: string; + source: string; + target: string; + size: number; + index: number; +} + +export interface NormalizedDagNode { + cid: string; + type: CodecType | string; + data: UnixFsNodeData | NodeData | undefined; + links: NormalizedDagLink[]; + size?: number; + format: NormalizedDagNodeFormat; +}