diff --git a/jest.config.js b/jest.config.js index 81e15b9a..edb95986 100644 --- a/jest.config.js +++ b/jest.config.js @@ -64,11 +64,12 @@ module.exports = { // globalTeardown: null, // A set of global variables that need to be available in all test environments - globals: { - 'ts-jest': { - tsconfig: 'tsconfig.test.json' - } - }, + // DEPRECATED + // globals: { + // 'ts-jest': { + // tsconfig: 'tsconfig.test.json' + // } + // }, // An array of directory names to be searched recursively up from the requiring module's location // moduleDirectories: [ @@ -159,7 +160,7 @@ module.exports = { // ], // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped - testPathIgnorePatterns: ['/node_modules/', '/submodules/'] + testPathIgnorePatterns: ['/node_modules/', '/submodules/'], // The regexp pattern or array of patterns that Jest uses to detect test files // testRegex: [], @@ -177,7 +178,14 @@ module.exports = { // timers: "real", // A map from regular expressions to paths to transformers - // transform: null, + transform: { + '^.+\\.tsx?$': [ + 'ts-jest', + { + tsconfig: 'tsconfig.test.json' + } + ] + } // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation // transformIgnorePatterns: [ diff --git a/package-lock.json b/package-lock.json index 3394f4b6..c7fefd6c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,42 +1,42 @@ { "name": "node-seal", - "version": "5.0.0", + "version": "5.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "node-seal", - "version": "5.0.0", + "version": "5.0.1", "license": "MIT", "devDependencies": { - "@babel/core": "^7.17.5", - "@babel/preset-env": "^7.16.11", + "@babel/core": "^7.19.3", + "@babel/preset-env": "^7.19.3", "@rollup/plugin-alias": "^3.1.9", "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-typescript": "^8.3.1", - "@types/jest": "^27.4.1", - "@typescript-eslint/eslint-plugin": "^5.13.0", - "@typescript-eslint/parser": "^5.13.0", + "@rollup/plugin-typescript": "^8.5.0", + "@types/jest": "^29.1.2", + "@typescript-eslint/eslint-plugin": "^5.39.0", + "@typescript-eslint/parser": "^5.39.0", "better-docs": "^2.7.2", "codecov": "^3.8.3", "env-cmd": "^10.1.0", - "eslint": "^8.10.0", - "eslint-config-prettier": "^8.4.0", - "eslint-plugin-jest": "^26.1.1", - "eslint-plugin-jsdoc": "^37.9.6", - "eslint-plugin-prettier": "^4.0.0", + "eslint": "^8.24.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-jest": "^27.1.1", + "eslint-plugin-jsdoc": "^39.3.6", + "eslint-plugin-prettier": "^4.2.1", "esm": "^3.2.25", - "jest": "^27.5.1", - "jsdoc": "^3.6.10", + "jest": "^29.1.2", + "jsdoc": "^3.6.11", "path": "^0.12.7", - "prettier": "^2.5.1", - "rollup": "^2.69.0", + "prettier": "^2.7.1", + "rollup": "^2.79.1", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.31.2", - "ts-jest": "^27.1.3", - "typescript": "^4.6.2" + "rollup-plugin-typescript2": "^0.34.1", + "ts-jest": "^29.0.3", + "typescript": "^4.8.4" } }, "node_modules/@ampproject/remapping": { @@ -52,46 +52,46 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", - "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz", + "integrity": "sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.17.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", - "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", + "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.17.2", - "@babel/parser": "^7.17.3", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.3", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.3", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.3", + "@babel/types": "^7.19.3", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", + "json5": "^2.2.1", "semver": "^6.3.0" }, "engines": { @@ -103,53 +103,53 @@ } }, "node_modules/@babel/generator": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", - "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz", + "integrity": "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==", "dev": true, "dependencies": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.19.3", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "dev": true, "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", + "@babel/compat-data": "^7.19.3", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", "semver": "^6.3.0" }, "engines": { @@ -160,18 +160,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", - "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", + "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -181,13 +181,13 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", - "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^5.0.1" + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" }, "engines": { "node": ">=6.9.0" @@ -197,15 +197,13 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", @@ -216,251 +214,248 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", - "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz", - "integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", + "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", + "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", "dev": true, "dependencies": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.18.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", - "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", + "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", "dev": true, "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -469,9 +464,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", - "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz", + "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -481,12 +476,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", - "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -496,14 +491,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", - "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -513,13 +508,14 @@ } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", - "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", + "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-remap-async-to-generator": "^7.18.9", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -530,13 +526,13 @@ } }, "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -546,13 +542,13 @@ } }, "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz", - "integrity": "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.6", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -563,12 +559,12 @@ } }, "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -579,12 +575,12 @@ } }, "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", - "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -595,12 +591,12 @@ } }, "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", - "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -611,12 +607,12 @@ } }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", - "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -627,12 +623,12 @@ } }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", - "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -643,12 +639,12 @@ } }, "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -659,16 +655,16 @@ } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", - "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", + "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.17.0", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.7" + "@babel/plugin-transform-parameters": "^7.18.8" }, "engines": { "node": ">=6.9.0" @@ -678,12 +674,12 @@ } }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -694,13 +690,13 @@ } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", - "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -711,13 +707,13 @@ } }, "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.16.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", - "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.10", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -727,14 +723,14 @@ } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", - "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -745,13 +741,13 @@ } }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", - "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=4" @@ -835,6 +831,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", + "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", @@ -859,6 +870,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", @@ -962,12 +988,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -977,12 +1003,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", - "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -992,14 +1018,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", - "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8" + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1009,12 +1035,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1024,12 +1050,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", - "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", + "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -1039,18 +1065,19 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", - "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", + "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" }, "engines": { @@ -1061,12 +1088,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", - "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -1076,12 +1103,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz", - "integrity": "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==", + "version": "7.18.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz", + "integrity": "sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -1091,13 +1118,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", - "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1107,12 +1134,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", - "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -1122,13 +1149,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1138,12 +1165,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", - "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1153,14 +1180,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", - "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -1170,12 +1197,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", - "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -1185,12 +1212,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", - "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1200,13 +1227,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", - "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", + "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { @@ -1217,14 +1244,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", - "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", + "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { @@ -1235,15 +1262,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", - "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz", + "integrity": "sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.18.6", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { @@ -1254,13 +1281,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", - "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1270,12 +1297,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", - "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -1285,12 +1313,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", - "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1300,13 +1328,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1316,12 +1344,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", - "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", + "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1331,12 +1359,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1346,12 +1374,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", - "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", "dev": true, "dependencies": { - "regenerator-transform": "^0.14.2" + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" }, "engines": { "node": ">=6.9.0" @@ -1361,12 +1390,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", - "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1376,12 +1405,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1391,13 +1420,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", - "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -1407,12 +1436,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1422,12 +1451,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", - "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -1437,12 +1466,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", - "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -1452,12 +1481,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", - "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -1467,13 +1496,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1483,37 +1512,38 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.16.11", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", - "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.16.8", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-async-generator-functions": "^7.16.8", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-proposal-class-static-block": "^7.16.7", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.16.7", - "@babel/plugin-proposal-json-strings": "^7.16.7", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.16.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-private-methods": "^7.16.11", - "@babel/plugin-proposal-private-property-in-object": "^7.16.7", - "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.3.tgz", + "integrity": "sha512-ziye1OTc9dGFOAXSWKUqQblYHNlBOaDl8wzqf2iKXJAltYiR3hKHUKmkt+S9PppW7RQpq4fFCrwwpIDj/f5P4w==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.19.3", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.19.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -1523,44 +1553,44 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.16.7", - "@babel/plugin-transform-async-to-generator": "^7.16.8", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.16.7", - "@babel/plugin-transform-classes": "^7.16.7", - "@babel/plugin-transform-computed-properties": "^7.16.7", - "@babel/plugin-transform-destructuring": "^7.16.7", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.16.7", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.16.7", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.16.7", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.16.7", - "@babel/plugin-transform-modules-commonjs": "^7.16.8", - "@babel/plugin-transform-modules-systemjs": "^7.16.7", - "@babel/plugin-transform-modules-umd": "^7.16.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", - "@babel/plugin-transform-new-target": "^7.16.7", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.16.7", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.16.7", - "@babel/plugin-transform-reserved-words": "^7.16.7", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.16.7", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.16.7", - "@babel/plugin-transform-typeof-symbol": "^7.16.7", - "@babel/plugin-transform-unicode-escapes": "^7.16.7", - "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-classes": "^7.19.0", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.18.13", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.0", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.16.8", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.20.2", + "@babel/types": "^7.19.3", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", "semver": "^6.3.0" }, "engines": { @@ -1599,33 +1629,33 @@ } }, "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.3", - "@babel/types": "^7.17.0", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz", + "integrity": "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.3", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.3", + "@babel/types": "^7.19.3", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1634,12 +1664,13 @@ } }, "node_modules/@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz", + "integrity": "sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1653,37 +1684,40 @@ "dev": true }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz", - "integrity": "sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ==", + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.31.0.tgz", + "integrity": "sha512-tc1/iuQcnaiSIUVad72PBierDFpsxdUHtEF/OrfqvM1CBAsIoMP51j52jTMb3dXriwhieTo289InzZj72jL3EQ==", "dev": true, "dependencies": { - "comment-parser": "1.3.0", + "comment-parser": "1.3.1", "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~2.2.3" + "jsdoc-type-pratt-parser": "~3.1.0" }, "engines": { - "node": "^12 || ^14 || ^16 || ^17" + "node": "^14 || ^16 || ^17 || ^18" } }, "node_modules/@eslint/eslintrc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", - "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", + "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/argparse": { @@ -1693,9 +1727,9 @@ "dev": true }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -1707,15 +1741,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -1741,9 +1766,9 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", + "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -1754,6 +1779,29 @@ "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -1795,20 +1843,20 @@ } }, "node_modules/@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.1.2.tgz", + "integrity": "sha512-ujEBCcYs82BTmRxqfHMQggSlkUZP63AE5YEaTPj7eFyJOzukkTorstOUC7L6nE3w5SYadGVAnTsQ/ZjTGL0qYQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.1.2", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-message-util": "^29.1.2", + "jest-util": "^29.1.2", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/console/node_modules/ansi-styles": { @@ -1882,42 +1930,42 @@ } }, "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.1.2.tgz", + "integrity": "sha512-sCO2Va1gikvQU2ynDN8V4+6wB7iVrD2CvT0zaRst4rglf56yLly0NQ9nuRRAWFeimRf+tCdFsb1Vk1N9LrrMPA==", "dev": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.1.2", + "@jest/reporters": "^29.1.2", + "@jest/test-result": "^29.1.2", + "@jest/transform": "^29.1.2", + "@jest/types": "^29.1.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", + "jest-changed-files": "^29.0.0", + "jest-config": "^29.1.2", + "jest-haste-map": "^29.1.2", + "jest-message-util": "^29.1.2", + "jest-regex-util": "^29.0.0", + "jest-resolve": "^29.1.2", + "jest-resolve-dependencies": "^29.1.2", + "jest-runner": "^29.1.2", + "jest-runtime": "^29.1.2", + "jest-snapshot": "^29.1.2", + "jest-util": "^29.1.2", + "jest-validate": "^29.1.2", + "jest-watcher": "^29.1.2", "micromatch": "^4.0.4", - "rimraf": "^3.0.0", + "pretty-format": "^29.1.2", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -1999,85 +2047,111 @@ } }, "node_modules/@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.1.2.tgz", + "integrity": "sha512-rG7xZ2UeOfvOVzoLIJ0ZmvPl4tBEQ2n73CZJSlzUjPw4or1oSWC0s0Rk0ZX+pIBJ04aVr6hLWFn1DFtrnf8MhQ==", "dev": true, "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/fake-timers": "^29.1.2", + "@jest/types": "^29.1.2", "@types/node": "*", - "jest-mock": "^27.5.1" + "jest-mock": "^29.1.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.1.2.tgz", + "integrity": "sha512-FXw/UmaZsyfRyvZw3M6POgSNqwmuOXJuzdNiMWW9LCYo0GRoRDhg+R5iq5higmRTHQY7hx32+j7WHwinRmoILQ==", + "dev": true, + "dependencies": { + "expect": "^29.1.2", + "jest-snapshot": "^29.1.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.1.2.tgz", + "integrity": "sha512-4a48bhKfGj/KAH39u0ppzNTABXQ8QPccWAFUFobWBaEMSMp+sB31Z2fK/l47c4a/Mu1po2ffmfAIPxXbVTXdtg==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.1.2.tgz", + "integrity": "sha512-GppaEqS+QQYegedxVMpCe2xCXxxeYwQ7RsNx55zc8f+1q1qevkZGKequfTASI7ejmg9WwI+SJCrHe9X11bLL9Q==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", + "@jest/types": "^29.1.2", + "@sinonjs/fake-timers": "^9.1.2", "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-message-util": "^29.1.2", + "jest-mock": "^29.1.2", + "jest-util": "^29.1.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.1.2.tgz", + "integrity": "sha512-uMgfERpJYoQmykAd0ffyMq8wignN4SvLUG6orJQRe9WAlTRc9cdpCaE/29qurXixYJVZWUqIBXhSk8v5xN1V9g==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" + "@jest/environment": "^29.1.2", + "@jest/expect": "^29.1.2", + "@jest/types": "^29.1.2", + "jest-mock": "^29.1.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.1.2.tgz", + "integrity": "sha512-X4fiwwyxy9mnfpxL0g9DD0KcTmEIqP0jUdnc2cfa9riHy+I6Gwwp5vOZiwyg0vZxfSDxrOlK9S4+340W4d+DAA==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.1.2", + "@jest/test-result": "^29.1.2", + "@jest/transform": "^29.1.2", + "@jest/types": "^29.1.2", + "@jridgewell/trace-mapping": "^0.3.15", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", - "glob": "^7.1.2", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-message-util": "^29.1.2", + "jest-util": "^29.1.2", + "jest-worker": "^29.1.2", "slash": "^3.0.0", - "source-map": "^0.6.0", "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" + "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -2146,15 +2220,6 @@ "node": ">=8" } }, - "node_modules/@jest/reporters/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@jest/reporters/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -2167,83 +2232,100 @@ "node": ">=8" } }, - "node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "node_modules/@jest/reporters/node_modules/v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", "dev": true, "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10.12.0" } }, - "node_modules/@jest/source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/@jest/schemas": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", + "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.0.0.tgz", + "integrity": "sha512-nOr+0EM8GiHf34mq2GcJyz/gYFyLQ2INDhAylrZJ9mMWoW21mLBfZa0BUVPPMxVYrLjeiRe2Z7kWXOGnS0TFhQ==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.15", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.1.2.tgz", + "integrity": "sha512-jjYYjjumCJjH9hHCoMhA8PCl1OxNeGgAoZ7yuGYILRJX9NjgzTN0pCT5qAoYR4jfOP8htIByvAlz9vfNSSBoVg==", "dev": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.1.2", + "@jest/types": "^29.1.2", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.1.2.tgz", + "integrity": "sha512-fU6dsUqqm8sA+cd85BmeF7Gu9DsXVWFdGn9taxM6xN1cKdcP/ivSgXh5QucFRFz1oZxKv3/9DYYbq0ULly3P/Q==", "dev": true, "dependencies": { - "@jest/test-result": "^27.5.1", + "@jest/test-result": "^29.1.2", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" + "jest-haste-map": "^29.1.2", + "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.1.2.tgz", + "integrity": "sha512-2uaUuVHTitmkx1tHF+eBjb4p7UuzBG7SXIaA/hNIkaMP6K+gXYGxP38ZcrofzqN0HeZ7A90oqsOa97WU7WZkSw==", "dev": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^29.1.2", + "@jridgewell/trace-mapping": "^0.3.15", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.1.2", + "jest-regex-util": "^29.0.0", + "jest-util": "^29.1.2", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/transform/node_modules/ansi-styles": { @@ -2304,15 +2386,6 @@ "node": ">=8" } }, - "node_modules/@jest/transform/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@jest/transform/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -2326,19 +2399,20 @@ } }, "node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.1.2.tgz", + "integrity": "sha512-DcXGtoTykQB5jiwCmVr8H4vdg2OJhQex3qPkG+ISyDO7xQXbt/4R6dowcRyPemRnkH7JoHvZuxPBdlq+9JxFCg==", "dev": true, "dependencies": { + "@jest/schemas": "^29.0.0", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/types/node_modules/ansi-styles": { @@ -2460,9 +2534,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -2532,9 +2606,9 @@ } }, "node_modules/@rollup/plugin-typescript": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.3.1.tgz", - "integrity": "sha512-84rExe3ICUBXzqNX48WZV2Jp3OddjTMX97O2Py6D1KJaGSwWp0mDHXj+bCGNJqWHIEKDIT2U0sDjhP4czKi6cA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.5.0.tgz", + "integrity": "sha512-wMv1/scv0m/rXx21wD2IsBbJFba8wGF3ErJIr6IKRfRj49S85Lszbxb4DCo8iILpluTjk2GAAu9CoZt4G3ppgQ==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", @@ -2547,6 +2621,11 @@ "rollup": "^2.14.0", "tslib": "*", "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "tslib": { + "optional": true + } } }, "node_modules/@rollup/pluginutils": { @@ -2566,6 +2645,12 @@ "rollup": "^1.20.0||^2.0.0" } }, + "node_modules/@sinclair/typebox": { + "version": "0.24.44", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.44.tgz", + "integrity": "sha512-ka0W0KN5i6LfrSocduwliMMpqVgohtPFidKdMEOUjoOFCHcOOYkKsPRxfs5f15oPNHTm6ERAm0GV/+/LTKeiWg==", + "dev": true + }, "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -2576,9 +2661,9 @@ } }, "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.7.0" @@ -2594,9 +2679,9 @@ } }, "node_modules/@types/babel__core": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", - "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -2626,9 +2711,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz", + "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" @@ -2689,13 +2774,13 @@ } }, "node_modules/@types/jest": { - "version": "27.4.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.1.tgz", - "integrity": "sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.1.2.tgz", + "integrity": "sha512-y+nlX0h87U0R+wsGn6EBuoRWYyv3KFtwRNP3QWp9+k2tJ2/bqcGS3UxD7jgT+tiwJWWq3UsyV4Y+T6rsMT4XMg==", "dev": true, "dependencies": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, "node_modules/@types/json-schema": { @@ -2733,9 +2818,9 @@ "dev": true }, "node_modules/@types/prettier": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.4.tgz", - "integrity": "sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", "dev": true }, "node_modules/@types/stack-utils": { @@ -2745,9 +2830,9 @@ "dev": true }, "node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -2760,19 +2845,18 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.13.0.tgz", - "integrity": "sha512-vLktb2Uec81fxm/cfz2Hd6QaWOs8qdmVAZXLdOBX6JFJDhf6oDZpMzZ4/LZ6SFM/5DgDcxIMIvy3F+O9yZBuiQ==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.39.0.tgz", + "integrity": "sha512-xVfKOkBm5iWMNGKQ2fwX5GVgBuHmZBO1tCRwXmY5oAIsPscfwm2UADDuNB8ZVYCtpQvJK4xpjrK7jEhcJ0zY9A==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.13.0", - "@typescript-eslint/type-utils": "5.13.0", - "@typescript-eslint/utils": "5.13.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", + "@typescript-eslint/scope-manager": "5.39.0", + "@typescript-eslint/type-utils": "5.39.0", + "@typescript-eslint/utils": "5.39.0", + "debug": "^4.3.4", + "ignore": "^5.2.0", "regexpp": "^3.2.0", - "semver": "^7.3.5", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { @@ -2805,9 +2889,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -2826,15 +2910,15 @@ "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.13.0.tgz", - "integrity": "sha512-GdrU4GvBE29tm2RqWOM0P5QfCtgCyN4hXICj/X9ibKED16136l9ZpoJvCL5pSKtmJzA+NRDzQ312wWMejCVVfg==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.39.0.tgz", + "integrity": "sha512-PhxLjrZnHShe431sBAGHaNe6BDdxAASDySgsBCGxcBecVCi8NQWxQZMcizNA4g0pN51bBAn/FUfkWG3SDVcGlA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.13.0", - "@typescript-eslint/types": "5.13.0", - "@typescript-eslint/typescript-estree": "5.13.0", - "debug": "^4.3.2" + "@typescript-eslint/scope-manager": "5.39.0", + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/typescript-estree": "5.39.0", + "debug": "^4.3.4" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2853,13 +2937,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.13.0.tgz", - "integrity": "sha512-T4N8UvKYDSfVYdmJq7g2IPJYCRzwtp74KyDZytkR4OL3NRupvswvmJQJ4CX5tDSurW2cvCc1Ia1qM7d0jpa7IA==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.39.0.tgz", + "integrity": "sha512-/I13vAqmG3dyqMVSZPjsbuNQlYS082Y7OMkwhCfLXYsmlI0ca4nkL7wJ/4gjX70LD4P8Hnw1JywUVVAwepURBw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.13.0", - "@typescript-eslint/visitor-keys": "5.13.0" + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/visitor-keys": "5.39.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2870,13 +2954,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.13.0.tgz", - "integrity": "sha512-/nz7qFizaBM1SuqAKb7GLkcNn2buRdDgZraXlkhz+vUGiN1NZ9LzkA595tHHeduAiS2MsHqMNhE2zNzGdw43Yg==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.39.0.tgz", + "integrity": "sha512-KJHJkOothljQWzR3t/GunL0TPKY+fGJtnpl+pX+sJ0YiKTz3q2Zr87SGTmFqsCMFrLt5E0+o+S6eQY0FAXj9uA==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.13.0", - "debug": "^4.3.2", + "@typescript-eslint/typescript-estree": "5.39.0", + "@typescript-eslint/utils": "5.39.0", + "debug": "^4.3.4", "tsutils": "^3.21.0" }, "engines": { @@ -2896,9 +2981,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.13.0.tgz", - "integrity": "sha512-LmE/KO6DUy0nFY/OoQU0XelnmDt+V8lPQhh8MOVa7Y5k2gGRd6U9Kp3wAjhB4OHg57tUO0nOnwYQhRRyEAyOyg==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.39.0.tgz", + "integrity": "sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2909,17 +2994,17 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.13.0.tgz", - "integrity": "sha512-Q9cQow0DeLjnp5DuEDjLZ6JIkwGx3oYZe+BfcNuw/POhtpcxMTy18Icl6BJqTSd+3ftsrfuVb7mNHRZf7xiaNA==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.39.0.tgz", + "integrity": "sha512-qLFQP0f398sdnogJoLtd43pUgB18Q50QSA+BTE5h3sUxySzbWDpTSdgt4UyxNSozY/oDK2ta6HVAzvGgq8JYnA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.13.0", - "@typescript-eslint/visitor-keys": "5.13.0", - "debug": "^4.3.2", - "globby": "^11.0.4", + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/visitor-keys": "5.39.0", + "debug": "^4.3.4", + "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.5", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { @@ -2948,9 +3033,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -2969,15 +3054,15 @@ "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.13.0.tgz", - "integrity": "sha512-+9oHlPWYNl6AwwoEt5TQryEHwiKRVjz7Vk6kaBeD3/kwHE5YqTGHtm/JZY8Bo9ITOeKutFaXnBlMgSATMJALUQ==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.39.0.tgz", + "integrity": "sha512-+DnY5jkpOpgj+EBtYPyHRjXampJfC0yUZZzfzLuUWVZvCuKqSdJVC8UhdWipIw7VKNTfwfAPiOWzYkAwuIhiAg==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.13.0", - "@typescript-eslint/types": "5.13.0", - "@typescript-eslint/typescript-estree": "5.13.0", + "@typescript-eslint/scope-manager": "5.39.0", + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/typescript-estree": "5.39.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -2993,13 +3078,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.13.0.tgz", - "integrity": "sha512-HLKEAS/qA1V7d9EzcpLFykTePmOQqOFim8oCvhY3pZgQ8Hi38hYpHd9e5GN6nQBFQNecNhws5wkS9Y5XIO0s/g==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.39.0.tgz", + "integrity": "sha512-yyE3RPwOG+XJBLrhvsxAidUgybJVQ/hG8BhiJo0k8JSAYfk/CshVcxf0HwP4Jt7WZZ6vLmxdo1p6EyN3tzFTkg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.13.0", - "eslint-visitor-keys": "^3.0.0" + "@typescript-eslint/types": "5.39.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3009,96 +3094,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@yarn-tool/resolve-package": { - "version": "1.0.45", - "resolved": "https://registry.npmjs.org/@yarn-tool/resolve-package/-/resolve-package-1.0.45.tgz", - "integrity": "sha512-xnfY8JceApkSTliZtr7X6yl1wZYhGbRp0beBMi1OtmvTVTm/ZSt3881Fw1M3ZwhHqr7OEfl8828LJK2q62BvoQ==", - "dev": true, - "dependencies": { - "pkg-dir": "< 6 >= 5", - "tslib": "^2.3.1", - "upath2": "^3.1.12" - } - }, - "node_modules/@yarn-tool/resolve-package/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@yarn-tool/resolve-package/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@yarn-tool/resolve-package/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@yarn-tool/resolve-package/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@yarn-tool/resolve-package/node_modules/pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", - "dev": true, - "dependencies": { - "find-up": "^5.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, "node_modules/abstract-leveldown": { "version": "0.12.4", "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", @@ -3124,31 +3119,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -3166,15 +3139,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -3329,29 +3293,22 @@ "node": ">=4" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, "node_modules/babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.1.2.tgz", + "integrity": "sha512-IuG+F3HTHryJb7gacC7SQ59A9kO56BctUsT67uJHp1mMCHUOMXpDwOHWGifWqdWVknN2WNkCVQELPjXx0aLJ9Q==", "dev": true, "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/transform": "^29.1.2", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", + "babel-preset-jest": "^29.0.2", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.8.0" @@ -3453,28 +3410,28 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "version": "29.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.0.2.tgz", + "integrity": "sha512-eBr2ynAEFjcebVvu8Ktx580BD1QKCrBG1XwEUTXJe285p9HA/4hOhfWCFRQhTKSyBV0VzjhG7H91Eifz9s29hg==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", + "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", "semver": "^6.1.1" }, "peerDependencies": { @@ -3482,25 +3439,25 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1" + "@babel/helper-define-polyfill-provider": "^0.3.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -3530,16 +3487,16 @@ } }, "node_modules/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "version": "29.0.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.0.2.tgz", + "integrity": "sha512-BeVXp7rH5TK96ofyEnHjznjLMQ2nAeDJ+QzxKnHAAMs0RgrQsCywjAN8m4mOm5Di0pxU//3AoEeJJrerMH5UeA==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", + "babel-plugin-jest-hoist": "^29.0.2", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" @@ -3693,12 +3650,6 @@ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -3795,26 +3746,31 @@ ] }, "node_modules/browserslist": { - "version": "4.19.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.3.tgz", - "integrity": "sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], "dependencies": { - "caniuse-lite": "^1.0.30001312", - "electron-to-chromium": "^1.4.71", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" }, "bin": { "browserslist": "cli.js" }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" } }, "node_modules/bs-logger": { @@ -3975,14 +3931,20 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001312", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", - "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "version": "1.0.30001418", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz", + "integrity": "sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==", "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] }, "node_modules/catharsis": { "version": "0.9.0", @@ -4042,9 +4004,9 @@ } }, "node_modules/ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz", + "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==", "dev": true }, "node_modules/cipher-base": { @@ -4107,7 +4069,7 @@ "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, "engines": { "iojs": ">= 1.0.0", @@ -4152,21 +4114,9 @@ "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -4177,9 +4127,9 @@ } }, "node_modules/comment-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz", - "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", + "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", "dev": true, "engines": { "node": ">= 12.0.0" @@ -4272,28 +4222,18 @@ "hasInstallScript": true }, "node_modules/core-js-compat": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", - "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", + "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", "dev": true, "dependencies": { - "browserslist": "^4.19.1", - "semver": "7.0.0" + "browserslist": "^4.21.4" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -4379,44 +4319,6 @@ "node": "*" } }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/de-indent": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", @@ -4424,9 +4326,9 @@ "dev": true }, "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -4449,16 +4351,10 @@ "node": ">=0.10.0" } }, - "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, "node_modules/deep-is": { @@ -4486,24 +4382,19 @@ } }, "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dev": true, "dependencies": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/des.js": { @@ -4532,12 +4423,12 @@ "dev": true }, "node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.0.0.tgz", + "integrity": "sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/diffie-hellman": { @@ -4587,31 +4478,10 @@ "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=", "dev": true }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/electron-to-chromium": { - "version": "1.4.75", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.75.tgz", - "integrity": "sha512-LxgUNeu3BVU7sXaKjUDD9xivocQLxFtq6wgERrutdY/yIOps3ODOZExK1jg8DTEg4U8TUCb5MLGeWFOYuxjF3Q==", + "version": "1.4.275", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.275.tgz", + "integrity": "sha512-aJeQQ+Hl9Jyyzv4chBqYJwmVRY46N5i2BEX5Cuyk/5gFCUZ5F3i7Hnba6snZftWla7Gglwc5pIgcd+E7cW+rPg==", "dev": true }, "node_modules/elliptic": { @@ -4636,12 +4506,12 @@ "dev": true }, "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", "dev": true, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sindresorhus/emittery?sponsor=1" @@ -4711,112 +4581,22 @@ "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" } }, - "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/eslint": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", - "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz", + "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.2.0", - "@humanwhocodes/config-array": "^0.9.2", + "@eslint/eslintrc": "^1.3.2", + "@humanwhocodes/config-array": "^0.10.5", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@humanwhocodes/module-importer": "^1.0.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -4826,30 +4606,32 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", + "find-up": "^5.0.0", "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -4874,19 +4656,19 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "26.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.1.1.tgz", - "integrity": "sha512-HRKOuPi5ADhza4ZBK5ufyNXy28bXXkib87w+pQqdvBhSTsamndh6sIAKPAUl8y0/n9jSWBdTPslrwtKWqkp8dA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.1.1.tgz", + "integrity": "sha512-vuSuXGKHHi/UAffIM46QKm4g0tQP+6n52nRxUpMq6x6x9rhnv5WM7ktSu3h9cTnXE4b0Y0ODQTgRlCm9rdRLvg==", "dev": true, "dependencies": { "@typescript-eslint/utils": "^5.10.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@typescript-eslint/eslint-plugin": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "@typescript-eslint/eslint-plugin": { @@ -4898,22 +4680,21 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "37.9.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.6.tgz", - "integrity": "sha512-GDCB0nEwKVaeIzam+t/yB8XG/6tgvc9XgrSwuxqCXVlKRWUqTuTqntZoqAKZAIbWIgYsrnrvrWAyIX/QvhwBcw==", + "version": "39.3.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.3.6.tgz", + "integrity": "sha512-R6dZ4t83qPdMhIOGr7g2QII2pwCjYyKP+z0tPOfO1bbAbQyKC20Y2Rd6z1te86Lq3T7uM8bNo+VD9YFpE8HU/g==", "dev": true, "dependencies": { - "@es-joy/jsdoccomment": "~0.20.1", - "comment-parser": "1.3.0", - "debug": "^4.3.3", + "@es-joy/jsdoccomment": "~0.31.0", + "comment-parser": "1.3.1", + "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.4.0", - "regextras": "^0.8.0", - "semver": "^7.3.5", + "semver": "^7.3.7", "spdx-expression-parse": "^3.0.1" }, "engines": { - "node": "^12 || ^14 || ^16 || ^17" + "node": "^14 || ^16 || ^17 || ^18" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" @@ -4944,9 +4725,9 @@ } }, "node_modules/eslint-plugin-jsdoc/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -4965,15 +4746,15 @@ "dev": true }, "node_modules/eslint-plugin-prettier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", - "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=12.0.0" }, "peerDependencies": { "eslint": ">=7.28.0", @@ -5123,10 +4904,26 @@ "node": ">=4.0" } }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint/node_modules/globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -5159,6 +4956,51 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -5193,17 +5035,20 @@ } }, "node_modules/espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", "dev": true, "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -5335,25 +5180,26 @@ "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.1.2.tgz", + "integrity": "sha512-AuAGn1uxva5YBbBlXb+2JPxJRuemZsmlGcapPXWNSBNsQtAULfjioREGBWuI0EOvYUKjDnrCy8PW5Zlr1md5mw==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" + "@jest/expect-utils": "^29.1.2", + "jest-get-type": "^29.0.0", + "jest-matcher-utils": "^29.1.2", + "jest-message-util": "^29.1.2", + "jest-util": "^29.1.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/fast-deep-equal": { @@ -5433,9 +5279,9 @@ } }, "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "dependencies": { "bser": "2.1.1" @@ -5533,20 +5379,6 @@ "node": ">=8.0.0" } }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fs-extra": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", @@ -5587,12 +5419,6 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, "node_modules/fwd-stream": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", @@ -5740,6 +5566,12 @@ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -5755,12 +5587,24 @@ "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { "node": ">=4" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -5858,18 +5702,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -5912,18 +5744,6 @@ "node": ">=10.17.0" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/idb-wrapper": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", @@ -6026,7 +5846,7 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, "node_modules/is-buffer": { @@ -6123,12 +5943,6 @@ "integrity": "sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc=", "dev": true }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, "node_modules/is-promise": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", @@ -6163,12 +5977,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -6197,9 +6005,9 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "dependencies": { "@babel/core": "^7.12.3", @@ -6284,20 +6092,21 @@ } }, "node_modules/jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.1.2.tgz", + "integrity": "sha512-5wEIPpCezgORnqf+rCaYD1SK+mNN7NsstWzIsuvsnrhR/hSxXWd82oI7DkrbJ+XTD28/eG8SmxdGvukrGGK6Tw==", "dev": true, "dependencies": { - "@jest/core": "^27.5.1", + "@jest/core": "^29.1.2", + "@jest/types": "^29.1.2", "import-local": "^3.0.2", - "jest-cli": "^27.5.1" + "jest-cli": "^29.1.2" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -6309,47 +6118,61 @@ } }, "node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.0.0.tgz", + "integrity": "sha512-28/iDMDrUpGoCitTURuDqUzWQoWmOmOKOFST1mi2lwh62X4BFf6khgH3uSuo1e49X/UDjuApAj3w0wLOex4VPQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", "execa": "^5.0.0", - "throat": "^6.0.1" + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.1.2.tgz", + "integrity": "sha512-ajQOdxY6mT9GtnfJRZBRYS7toNIJayiiyjDyoZcnvPRUPwJ58JX0ci0PKAKUo2C1RyzlHw0jabjLGKksO42JGA==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^29.1.2", + "@jest/expect": "^29.1.2", + "@jest/test-result": "^29.1.2", + "@jest/types": "^29.1.2", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", + "jest-each": "^29.1.2", + "jest-matcher-utils": "^29.1.2", + "jest-message-util": "^29.1.2", + "jest-runtime": "^29.1.2", + "jest-snapshot": "^29.1.2", + "jest-util": "^29.1.2", + "p-limit": "^3.1.0", + "pretty-format": "^29.1.2", "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" + "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-circus/node_modules/ansi-styles": { @@ -6410,6 +6233,21 @@ "node": ">=8" } }, + "node_modules/jest-circus/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/jest-circus/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -6423,29 +6261,29 @@ } }, "node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.1.2.tgz", + "integrity": "sha512-vsvBfQ7oS2o4MJdAH+4u9z76Vw5Q8WBQF5MchDbkylNknZdrPTX1Ix7YRJyTlOWqRaS7ue/cEAn+E4V1MWyMzw==", "dev": true, "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/core": "^29.1.2", + "@jest/test-result": "^29.1.2", + "@jest/types": "^29.1.2", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-config": "^29.1.2", + "jest-util": "^29.1.2", + "jest-validate": "^29.1.2", "prompts": "^2.0.1", - "yargs": "^16.2.0" + "yargs": "^17.3.1" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -6487,6 +6325,20 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/jest-cli/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/jest-cli/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -6526,44 +6378,73 @@ "node": ">=8" } }, + "node_modules/jest-cli/node_modules/yargs": { + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz", + "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-cli/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.1.2.tgz", + "integrity": "sha512-EC3Zi86HJUOz+2YWQcJYQXlf0zuBhJoeyxLM6vb6qJsVmpP7KcCP1JnyF0iaqTaXdBP8Rlwsvs7hnKWQWWLwwA==", "dev": true, "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.1.2", + "@jest/types": "^29.1.2", + "babel-jest": "^29.1.2", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", - "glob": "^7.1.1", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-circus": "^29.1.2", + "jest-environment-node": "^29.1.2", + "jest-get-type": "^29.0.0", + "jest-regex-util": "^29.0.0", + "jest-resolve": "^29.1.2", + "jest-runner": "^29.1.2", + "jest-util": "^29.1.2", + "jest-validate": "^29.1.2", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", + "pretty-format": "^29.1.2", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { + "@types/node": "*", "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, "ts-node": { "optional": true } @@ -6640,18 +6521,18 @@ } }, "node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.1.2.tgz", + "integrity": "sha512-4GQts0aUopVvecIT4IwD/7xsBaMhKTYoM4/njE/aVw9wpw+pIUVp8Vab/KnSzSilr84GnLBkaP3JLDnQYCKqVQ==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "diff-sequences": "^29.0.0", + "jest-get-type": "^29.0.0", + "pretty-format": "^29.1.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-diff/node_modules/ansi-styles": { @@ -6725,31 +6606,31 @@ } }, "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.0.0.tgz", + "integrity": "sha512-s5Kpra/kLzbqu9dEjov30kj1n4tfu3e7Pl8v+f8jOkeWNqM6Ds8jRaJfZow3ducoQUrf2Z4rs2N5S3zXnb83gw==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.1.2.tgz", + "integrity": "sha512-AmTQp9b2etNeEwMyr4jc0Ql/LIX/dhbgP21gHAizya2X6rUspHn2gysMXaj6iwWuOJ2sYRgP8c1P4cXswgvS1A==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.1.2", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^29.0.0", + "jest-util": "^29.1.2", + "pretty-format": "^29.1.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-each/node_modules/ansi-styles": { @@ -6822,200 +6703,83 @@ "node": ">=8" } }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.1.2.tgz", + "integrity": "sha512-C59yVbdpY8682u6k/lh8SUMDJPbOyCHOTgLVVi1USWFxtNV+J8fyIwzkg+RJIVI30EKhKiAGNxYaFr3z6eyNhQ==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^29.1.2", + "@jest/fake-timers": "^29.1.2", + "@jest/types": "^29.1.2", "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-mock": "^29.1.2", + "jest-util": "^29.1.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.0.0.tgz", + "integrity": "sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.1.2.tgz", + "integrity": "sha512-xSjbY8/BF11Jh3hGSPfYTa/qBFrm3TPM7WU8pU93m2gqzORVLkHFWvuZmFsTEBPRKndfewXhMOuzJNHyJIZGsw==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^29.1.2", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^29.0.0", + "jest-util": "^29.1.2", + "jest-worker": "^29.1.2", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/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/jest-jasmine2/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/jest-jasmine2/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/jest-jasmine2/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/jest-jasmine2/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/jest-jasmine2/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/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.1.2.tgz", + "integrity": "sha512-TG5gAZJpgmZtjb6oWxBLf2N6CfQ73iwCe6cofu/Uqv9iiAm6g502CAnGtxQaTfpHECBdVEMRBhomSXeLnoKjiQ==", "dev": true, "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^29.0.0", + "pretty-format": "^29.1.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.1.2.tgz", + "integrity": "sha512-MV5XrD3qYSW2zZSHRRceFzqJ39B2z11Qv0KPyZYxnzDHFeYZGJlgGi0SW+IXSJfOewgJp/Km/7lpcFT+cgZypw==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-diff": "^29.1.2", + "jest-get-type": "^29.0.0", + "pretty-format": "^29.1.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils/node_modules/ansi-styles": { @@ -7089,23 +6853,23 @@ } }, "node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.1.2.tgz", + "integrity": "sha512-9oJ2Os+Qh6IlxLpmvshVbGUiSkZVc2FK+uGOm6tghafnB2RyjKAxMZhtxThRMxfX1J1SOMhTn9oK3/MutRWQJQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", + "@jest/types": "^29.1.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", + "pretty-format": "^29.1.2", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util/node_modules/ansi-styles": { @@ -7179,16 +6943,17 @@ } }, "node_modules/jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.1.2.tgz", + "integrity": "sha512-PFDAdjjWbjPUtQPkQufvniXIS3N9Tv7tbibePEjIIprzjgo0qQlyUiVMrT4vL8FaSJo1QXifQUOuPH3HQC/aMA==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*" + "@jest/types": "^29.1.2", + "@types/node": "*", + "jest-util": "^29.1.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-pnp-resolver": { @@ -7209,47 +6974,45 @@ } }, "node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.0.0.tgz", + "integrity": "sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.1.2.tgz", + "integrity": "sha512-7fcOr+k7UYSVRJYhSmJHIid3AnDBcLQX3VmT9OSbPWsWz1MfT7bcoerMhADKGvKCoMpOHUQaDHtQoNp/P9JMGg==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", + "jest-haste-map": "^29.1.2", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-util": "^29.1.2", + "jest-validate": "^29.1.2", "resolve": "^1.20.0", "resolve.exports": "^1.1.0", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.1.2.tgz", + "integrity": "sha512-44yYi+yHqNmH3OoWZvPgmeeiwKxhKV/0CfrzaKLSkZG9gT973PX8i+m8j6pDrTYhhHoiKfF3YUFg/6AeuHw4HQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" + "jest-regex-util": "^29.0.0", + "jest-snapshot": "^29.1.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve/node_modules/ansi-styles": { @@ -7323,35 +7086,35 @@ } }, "node_modules/jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.1.2.tgz", + "integrity": "sha512-yy3LEWw8KuBCmg7sCGDIqKwJlULBuNIQa2eFSVgVASWdXbMYZ9H/X0tnXt70XFoGf92W2sOQDOIFAA6f2BG04Q==", "dev": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.1.2", + "@jest/environment": "^29.1.2", + "@jest/test-result": "^29.1.2", + "@jest/transform": "^29.1.2", + "@jest/types": "^29.1.2", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "emittery": "^0.10.2", "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" + "jest-docblock": "^29.0.0", + "jest-environment-node": "^29.1.2", + "jest-haste-map": "^29.1.2", + "jest-leak-detector": "^29.1.2", + "jest-message-util": "^29.1.2", + "jest-resolve": "^29.1.2", + "jest-runtime": "^29.1.2", + "jest-util": "^29.1.2", + "jest-watcher": "^29.1.2", + "jest-worker": "^29.1.2", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runner/node_modules/ansi-styles": { @@ -7412,6 +7175,40 @@ "node": ">=8" } }, + "node_modules/jest-runner/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-runner/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/jest-runner/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7425,36 +7222,36 @@ } }, "node_modules/jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.1.2.tgz", + "integrity": "sha512-jr8VJLIf+cYc+8hbrpt412n5jX3tiXmpPSYTGnwcvNemY+EOuLNiYnHJ3Kp25rkaAcTWOEI4ZdOIQcwYcXIAZw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.1.2", + "@jest/fake-timers": "^29.1.2", + "@jest/globals": "^29.1.2", + "@jest/source-map": "^29.0.0", + "@jest/test-result": "^29.1.2", + "@jest/transform": "^29.1.2", + "@jest/types": "^29.1.2", + "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.1.2", + "jest-message-util": "^29.1.2", + "jest-mock": "^29.1.2", + "jest-regex-util": "^29.0.0", + "jest-resolve": "^29.1.2", + "jest-snapshot": "^29.1.2", + "jest-util": "^29.1.2", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runtime/node_modules/ansi-styles": { @@ -7527,50 +7324,39 @@ "node": ">=8" } }, - "node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.1.2.tgz", + "integrity": "sha512-rYFomGpVMdBlfwTYxkUp3sjD6usptvZcONFYNqVlaz4EpHPnDvlWjvmOQ9OCSNKqYZqLM2aS3wq01tWujLg7gg==", "dev": true, "dependencies": { - "@babel/core": "^7.7.2", + "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.1.2", + "@jest/transform": "^29.1.2", + "@jest/types": "^29.1.2", + "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.5.1", + "expect": "^29.1.2", "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-diff": "^29.1.2", + "jest-get-type": "^29.0.0", + "jest-haste-map": "^29.1.2", + "jest-matcher-utils": "^29.1.2", + "jest-message-util": "^29.1.2", + "jest-util": "^29.1.2", "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" + "pretty-format": "^29.1.2", + "semver": "^7.3.5" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-snapshot/node_modules/ansi-styles": { @@ -7644,9 +7430,9 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -7677,12 +7463,12 @@ "dev": true }, "node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.1.2.tgz", + "integrity": "sha512-vPCk9F353i0Ymx3WQq3+a4lZ07NXu9Ca8wya6o4Fe4/aO1e1awMMprZ3woPFpKwghEOW+UXgd15vVotuNN9ONQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.1.2", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -7690,7 +7476,7 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-util/node_modules/ansi-styles": { @@ -7764,20 +7550,20 @@ } }, "node_modules/jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.1.2.tgz", + "integrity": "sha512-k71pOslNlV8fVyI+mEySy2pq9KdXdgZtm7NHrBX8LghJayc3wWZH0Yr0mtYNGaCU4F1OLPXRkwZR0dBm/ClshA==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.1.2", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", + "jest-get-type": "^29.0.0", "leven": "^3.1.0", - "pretty-format": "^27.5.1" + "pretty-format": "^29.1.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-validate/node_modules/ansi-styles": { @@ -7863,21 +7649,22 @@ } }, "node_modules/jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.1.2.tgz", + "integrity": "sha512-6JUIUKVdAvcxC6bM8/dMgqY2N4lbT+jZVsxh0hCJRbwkIEnbr/aPjMQ28fNDI5lB51Klh00MWZZeVf27KBUj5w==", "dev": true, "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/test-result": "^29.1.2", + "@jest/types": "^29.1.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.5.1", + "emittery": "^0.10.2", + "jest-util": "^29.1.2", "string-length": "^4.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-watcher/node_modules/ansi-styles": { @@ -7951,17 +7738,18 @@ } }, "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.1.2.tgz", + "integrity": "sha512-AdTZJxKjTSPHbXT/AIOjQVmoFx0LHFcVabWu0sxI7PAy7rFf8c0upyvgBKgguVXdM4vY74JdwkyD4hSmpTW8jA==", "dev": true, "dependencies": { "@types/node": "*", + "jest-util": "^29.1.2", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-worker/node_modules/has-flag": { @@ -7988,6 +7776,12 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "dev": true + }, "node_modules/js-stringify": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", @@ -8023,9 +7817,9 @@ } }, "node_modules/jsdoc": { - "version": "3.6.10", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.10.tgz", - "integrity": "sha512-IdQ8ppSo5LKZ9o3M+LKIIK8i00DIe5msDvG3G81Km+1dhy0XrOWD0Ji8H61ElgyEj/O9KRLokgKbAM9XX9CJAg==", + "version": "3.6.11", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz", + "integrity": "sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==", "dev": true, "dependencies": { "@babel/parser": "^7.9.4", @@ -8034,7 +7828,7 @@ "catharsis": "^0.9.0", "escape-string-regexp": "^2.0.0", "js2xmlparser": "^4.0.2", - "klaw": "^4.0.1", + "klaw": "^3.0.0", "markdown-it": "^12.3.2", "markdown-it-anchor": "^8.4.1", "marked": "^4.0.10", @@ -8048,13 +7842,13 @@ "jsdoc": "jsdoc.js" }, "engines": { - "node": ">=8.15.0" + "node": ">=12.0.0" } }, "node_modules/jsdoc-type-pratt-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.3.tgz", - "integrity": "sha512-QPyxq62Q8veBSDtDrWmqaEPjSCeknUV9dH/OAGt3q9an8qC8UQDqitQiw1NvoMskIESpoRZ6qzt4H3rlK0xo8A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz", + "integrity": "sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw==", "dev": true, "engines": { "node": ">=12.0.0" @@ -8069,52 +7863,6 @@ "node": ">=8" } }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -8146,13 +7894,10 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, "bin": { "json5": "lib/cli.js" }, @@ -8195,12 +7940,12 @@ } }, "node_modules/klaw": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.0.1.tgz", - "integrity": "sha512-pgsE40/SvC7st04AHiISNewaIMUbY5V/K8b21ekiPiFoYs/EYSdsGa+FJArB1d441uq4Q8zZyIxvAzkGNlBdRw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", "dev": true, - "engines": { - "node": ">=14.14.0" + "dependencies": { + "graceful-fs": "^4.1.9" } }, "node_modules/kleur": { @@ -8484,7 +8229,7 @@ "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, "node_modules/lodash.get": { @@ -8695,27 +8440,6 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -8758,12 +8482,6 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -8851,13 +8569,13 @@ "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, "node_modules/node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", "dev": true }, "node_modules/normalize-path": { @@ -8881,12 +8599,6 @@ "node": ">=8" } }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -8906,14 +8618,14 @@ } }, "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, "engines": { @@ -9049,12 +8761,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, "node_modules/path": { "version": "0.12.7", "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", @@ -9083,15 +8789,6 @@ "node": ">=0.10.0" } }, - "node_modules/path-is-network-drive": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/path-is-network-drive/-/path-is-network-drive-1.0.13.tgz", - "integrity": "sha512-Hg74mRN6mmXV+gTm3INjFK40ncAmC/Lo4qoQaSZ+GT3hZzlKdWQSqAjqyPeW0SvObP2W073WyYEBWY9d3wOm3A==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -9107,15 +8804,6 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "node_modules/path-strip-sep": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/path-strip-sep/-/path-strip-sep-1.0.10.tgz", - "integrity": "sha512-JpCy+8LAJQQTO1bQsb/84s1g+/Stm3h39aOpPRBQ/paMUGVPPZChLTOTKHoaCkc/6sKuF7yVsnq5Pe1S6xQGcA==", - "dev": true, - "dependencies": { - "tslib": "^2.3.1" - } - }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -9190,15 +8878,18 @@ } }, "node_modules/prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/prettier-linter-helpers": { @@ -9214,17 +8905,17 @@ } }, "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.1.2.tgz", + "integrity": "sha512-CGJ6VVGXVRP2o2Dorl4mAwwvDWT25luIsYhkyVQW32E4nL+TgW939J7LlKT/npq5Cpq6j3s+sy+13yk7xYpBmg==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { @@ -9320,12 +9011,6 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, "node_modules/public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -9608,9 +9293,9 @@ } }, "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "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/readable-stream": { @@ -9667,9 +9352,9 @@ "dev": true }, "node_modules/regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, "dependencies": { "regenerate": "^1.4.2" @@ -9685,9 +9370,9 @@ "dev": true }, "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "dev": true, "dependencies": { "@babel/runtime": "^7.8.4" @@ -9706,15 +9391,15 @@ } }, "node_modules/regexpu-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", - "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", + "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", "dev": true, "dependencies": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.0.0" }, @@ -9722,25 +9407,16 @@ "node": ">=4" } }, - "node_modules/regextras": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", - "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", - "dev": true, - "engines": { - "node": ">=0.1.14" - } - }, "node_modules/regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", "dev": true }, "node_modules/regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, "dependencies": { "jsesc": "~0.5.0" @@ -9752,7 +9428,7 @@ "node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true, "bin": { "jsesc": "bin/jsesc" @@ -9889,9 +9565,9 @@ } }, "node_modules/rollup": { - "version": "2.69.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.69.0.tgz", - "integrity": "sha512-kjER91tHyek8gAkuz7+558vSnTQ+pITEok1P0aNOS45ZXyngaqPsXJmSel4QPQnJo7EJMjXUU1/GErWkWiKORg==", + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -9998,17 +9674,16 @@ } }, "node_modules/rollup-plugin-typescript2": { - "version": "0.31.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.31.2.tgz", - "integrity": "sha512-hRwEYR1C8xDGVVMFJQdEVnNAeWRvpaY97g5mp3IeLnzhNXzSVq78Ye/BJ9PAaUfN4DXa/uDnqerifMOaMFY54Q==", + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.34.1.tgz", + "integrity": "sha512-P4cHLtGikESmqi1CA+tdMDUv8WbQV48mzPYt77TSTOPJpERyZ9TXdDgjSDix8Fkqce6soYz3+fa4lrC93IEkcw==", "dev": true, "dependencies": { "@rollup/pluginutils": "^4.1.2", - "@yarn-tool/resolve-package": "^1.0.40", "find-cache-dir": "^3.3.2", "fs-extra": "^10.0.0", - "resolve": "^1.20.0", - "tslib": "^2.3.1" + "semver": "^7.3.7", + "tslib": "^2.4.0" }, "peerDependencies": { "rollup": ">=1.26.3", @@ -10034,6 +9709,39 @@ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, + "node_modules/rollup-plugin-typescript2/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/rollup-pluginutils": { "version": "2.8.2", "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", @@ -10084,18 +9792,6 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/scheduler": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", @@ -10401,9 +10097,9 @@ } }, "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dev": true, "dependencies": { "has-flag": "^4.0.0", @@ -10446,12 +10142,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, "node_modules/taffydb": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", @@ -10534,12 +10224,6 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "node_modules/throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -10573,75 +10257,39 @@ "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=", "dev": true }, - "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ts-jest": { - "version": "27.1.3", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.3.tgz", - "integrity": "sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==", + "version": "29.0.3", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.0.3.tgz", + "integrity": "sha512-Ibygvmuyq1qp/z3yTh9QTwVVAbFdDy/+4BtIQR2sp6baF2SJU/8CKK/hhnGIDY2L90Az2jIqTwZPnN2p+BweiQ==", "dev": true, "dependencies": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.1", "lodash.memoize": "4.x", "make-error": "1.x", "semver": "7.x", - "yargs-parser": "20.x" + "yargs-parser": "^21.0.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@types/jest": "^27.0.0", - "babel-jest": ">=27.0.0 <28", - "esbuild": "~0.14.0", - "jest": "^27.0.0", - "typescript": ">=3.8 <5.0" + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3" }, "peerDependenciesMeta": { "@babel/core": { "optional": true }, - "@types/jest": { + "@jest/types": { "optional": true }, "babel-jest": { @@ -10685,6 +10333,15 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/ts-jest/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/ts-map": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/ts-map/-/ts-map-1.0.3.tgz", @@ -10692,9 +10349,9 @@ "dev": true }, "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", "dev": true }, "node_modules/tsutils": { @@ -10764,9 +10421,9 @@ "dev": true }, "node_modules/typescript": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", - "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -10878,9 +10535,9 @@ } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, "engines": { "node": ">=4" @@ -10895,18 +10552,30 @@ "node": ">= 10.0.0" } }, - "node_modules/upath2": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/upath2/-/upath2-3.1.12.tgz", - "integrity": "sha512-yC3eZeCyCXFWjy7Nu4pgjLhXNYjuzuUmJiRgSSw6TJp8Emc+E4951HGPJf+bldFC5SL7oBLeNbtm1fGzXn2gxw==", + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], "dependencies": { - "path-is-network-drive": "^1.0.13", - "path-strip-sep": "^1.0.10", - "tslib": "^2.3.1" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" }, "peerDependencies": { - "@types/node": "*" + "browserslist": ">= 4.21.0" } }, "node_modules/uri-js": { @@ -10957,12 +10626,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "node_modules/v8-to-istanbul": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", @@ -11060,27 +10723,6 @@ "brace": "^0.11.0" } }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -11090,44 +10732,6 @@ "makeerror": "1.0.12" } }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -11270,59 +10874,18 @@ "dev": true }, "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/write-file-atomic/node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "signal-exit": "^3.0.7" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, "node_modules/xmlcreate": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", @@ -11404,120 +10967,118 @@ } }, "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, "requires": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.18.6" } }, "@babel/compat-data": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", - "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz", + "integrity": "sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==", "dev": true }, "@babel/core": { - "version": "7.17.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", - "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", + "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.17.2", - "@babel/parser": "^7.17.3", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.3", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.3", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.3", + "@babel/types": "^7.19.3", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", + "json5": "^2.2.1", "semver": "^6.3.0" } }, "@babel/generator": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", - "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz", + "integrity": "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==", "dev": true, "requires": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.19.3", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" } }, "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" } }, "@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", "dev": true, "requires": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", + "@babel/compat-data": "^7.19.3", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", "semver": "^6.3.0" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", - "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", + "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", - "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^5.0.1" + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" } }, "@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "dev": true, "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", @@ -11525,380 +11086,375 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true }, "@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" } }, "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", - "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.9" } }, "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-module-transforms": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz", - "integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", + "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" } }, "@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" } }, "@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" } }, "@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", + "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.18.9" } }, "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, + "@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true + }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", "dev": true }, "@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" } }, "@babel/helpers": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", - "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", + "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", "dev": true, "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" } }, "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", - "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz", + "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", - "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", - "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", - "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", + "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-remap-async-to-generator": "^7.18.9", "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-proposal-class-static-block": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz", - "integrity": "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.6", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", - "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", - "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", - "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", - "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", - "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", + "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", "dev": true, "requires": { - "@babel/compat-data": "^7.17.0", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.7" + "@babel/plugin-transform-parameters": "^7.18.8" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", - "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-proposal-private-methods": { - "version": "7.16.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", - "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.10", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", - "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", - "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-syntax-async-generators": { @@ -11955,6 +11511,15 @@ "@babel/helper-plugin-utils": "^7.8.3" } }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", + "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, "@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", @@ -11973,6 +11538,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", @@ -12046,360 +11620,364 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", - "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", - "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8" + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", - "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", + "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-classes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", - "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", + "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", - "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-destructuring": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz", - "integrity": "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==", + "version": "7.18.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz", + "integrity": "sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", - "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", - "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-for-of": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", - "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", - "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", "dev": true, "requires": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", - "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", - "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", - "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", + "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", - "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", + "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", - "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz", + "integrity": "sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.18.6", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", - "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", - "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-transform-new-target": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", - "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" } }, "@babel/plugin-transform-parameters": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", - "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", + "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", - "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", "dev": true, "requires": { - "regenerator-transform": "^0.14.2" + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", - "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", - "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", - "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", - "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", - "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/preset-env": { - "version": "7.16.11", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", - "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.8", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-async-generator-functions": "^7.16.8", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-proposal-class-static-block": "^7.16.7", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.16.7", - "@babel/plugin-proposal-json-strings": "^7.16.7", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.16.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-private-methods": "^7.16.11", - "@babel/plugin-proposal-private-property-in-object": "^7.16.7", - "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.3.tgz", + "integrity": "sha512-ziye1OTc9dGFOAXSWKUqQblYHNlBOaDl8wzqf2iKXJAltYiR3hKHUKmkt+S9PppW7RQpq4fFCrwwpIDj/f5P4w==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.19.3", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.19.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -12409,44 +11987,44 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.16.7", - "@babel/plugin-transform-async-to-generator": "^7.16.8", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.16.7", - "@babel/plugin-transform-classes": "^7.16.7", - "@babel/plugin-transform-computed-properties": "^7.16.7", - "@babel/plugin-transform-destructuring": "^7.16.7", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.16.7", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.16.7", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.16.7", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.16.7", - "@babel/plugin-transform-modules-commonjs": "^7.16.8", - "@babel/plugin-transform-modules-systemjs": "^7.16.7", - "@babel/plugin-transform-modules-umd": "^7.16.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", - "@babel/plugin-transform-new-target": "^7.16.7", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.16.7", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.16.7", - "@babel/plugin-transform-reserved-words": "^7.16.7", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.16.7", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.16.7", - "@babel/plugin-transform-typeof-symbol": "^7.16.7", - "@babel/plugin-transform-unicode-escapes": "^7.16.7", - "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-classes": "^7.19.0", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.18.13", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.0", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.16.8", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.20.2", + "@babel/types": "^7.19.3", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", "semver": "^6.3.0" } }, @@ -12473,41 +12051,42 @@ } }, "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "dev": true, "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" } }, "@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.3", - "@babel/types": "^7.17.0", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz", + "integrity": "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.3", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.3", + "@babel/types": "^7.19.3", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz", + "integrity": "sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } }, @@ -12518,30 +12097,30 @@ "dev": true }, "@es-joy/jsdoccomment": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz", - "integrity": "sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ==", + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.31.0.tgz", + "integrity": "sha512-tc1/iuQcnaiSIUVad72PBierDFpsxdUHtEF/OrfqvM1CBAsIoMP51j52jTMb3dXriwhieTo289InzZj72jL3EQ==", "dev": true, "requires": { - "comment-parser": "1.3.0", + "comment-parser": "1.3.1", "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~2.2.3" + "jsdoc-type-pratt-parser": "~3.1.0" } }, "@eslint/eslintrc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.0.tgz", - "integrity": "sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", + "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "dependencies": { @@ -12552,20 +12131,14 @@ "dev": true }, "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -12584,9 +12157,9 @@ } }, "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", + "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -12594,6 +12167,18 @@ "minimatch": "^3.0.4" } }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -12628,16 +12213,16 @@ "dev": true }, "@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.1.2.tgz", + "integrity": "sha512-ujEBCcYs82BTmRxqfHMQggSlkUZP63AE5YEaTPj7eFyJOzukkTorstOUC7L6nE3w5SYadGVAnTsQ/ZjTGL0qYQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.1.2", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-message-util": "^29.1.2", + "jest-util": "^29.1.2", "slash": "^3.0.0" }, "dependencies": { @@ -12693,37 +12278,37 @@ } }, "@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.1.2.tgz", + "integrity": "sha512-sCO2Va1gikvQU2ynDN8V4+6wB7iVrD2CvT0zaRst4rglf56yLly0NQ9nuRRAWFeimRf+tCdFsb1Vk1N9LrrMPA==", "dev": true, "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.1.2", + "@jest/reporters": "^29.1.2", + "@jest/test-result": "^29.1.2", + "@jest/transform": "^29.1.2", + "@jest/types": "^29.1.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", + "jest-changed-files": "^29.0.0", + "jest-config": "^29.1.2", + "jest-haste-map": "^29.1.2", + "jest-message-util": "^29.1.2", + "jest-regex-util": "^29.0.0", + "jest-resolve": "^29.1.2", + "jest-resolve-dependencies": "^29.1.2", + "jest-runner": "^29.1.2", + "jest-runtime": "^29.1.2", + "jest-snapshot": "^29.1.2", + "jest-util": "^29.1.2", + "jest-validate": "^29.1.2", + "jest-watcher": "^29.1.2", "micromatch": "^4.0.4", - "rimraf": "^3.0.0", + "pretty-format": "^29.1.2", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, @@ -12780,73 +12365,93 @@ } }, "@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.1.2.tgz", + "integrity": "sha512-rG7xZ2UeOfvOVzoLIJ0ZmvPl4tBEQ2n73CZJSlzUjPw4or1oSWC0s0Rk0ZX+pIBJ04aVr6hLWFn1DFtrnf8MhQ==", "dev": true, "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/fake-timers": "^29.1.2", + "@jest/types": "^29.1.2", "@types/node": "*", - "jest-mock": "^27.5.1" + "jest-mock": "^29.1.2" + } + }, + "@jest/expect": { + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.1.2.tgz", + "integrity": "sha512-FXw/UmaZsyfRyvZw3M6POgSNqwmuOXJuzdNiMWW9LCYo0GRoRDhg+R5iq5higmRTHQY7hx32+j7WHwinRmoILQ==", + "dev": true, + "requires": { + "expect": "^29.1.2", + "jest-snapshot": "^29.1.2" + } + }, + "@jest/expect-utils": { + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.1.2.tgz", + "integrity": "sha512-4a48bhKfGj/KAH39u0ppzNTABXQ8QPccWAFUFobWBaEMSMp+sB31Z2fK/l47c4a/Mu1po2ffmfAIPxXbVTXdtg==", + "dev": true, + "requires": { + "jest-get-type": "^29.0.0" } }, "@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.1.2.tgz", + "integrity": "sha512-GppaEqS+QQYegedxVMpCe2xCXxxeYwQ7RsNx55zc8f+1q1qevkZGKequfTASI7ejmg9WwI+SJCrHe9X11bLL9Q==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", + "@jest/types": "^29.1.2", + "@sinonjs/fake-timers": "^9.1.2", "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-message-util": "^29.1.2", + "jest-mock": "^29.1.2", + "jest-util": "^29.1.2" } }, "@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.1.2.tgz", + "integrity": "sha512-uMgfERpJYoQmykAd0ffyMq8wignN4SvLUG6orJQRe9WAlTRc9cdpCaE/29qurXixYJVZWUqIBXhSk8v5xN1V9g==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" + "@jest/environment": "^29.1.2", + "@jest/expect": "^29.1.2", + "@jest/types": "^29.1.2", + "jest-mock": "^29.1.2" } }, "@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.1.2.tgz", + "integrity": "sha512-X4fiwwyxy9mnfpxL0g9DD0KcTmEIqP0jUdnc2cfa9riHy+I6Gwwp5vOZiwyg0vZxfSDxrOlK9S4+340W4d+DAA==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.1.2", + "@jest/test-result": "^29.1.2", + "@jest/transform": "^29.1.2", + "@jest/types": "^29.1.2", + "@jridgewell/trace-mapping": "^0.3.15", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", - "glob": "^7.1.2", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-message-util": "^29.1.2", + "jest-util": "^29.1.2", + "jest-worker": "^29.1.2", "slash": "^3.0.0", - "source-map": "^0.6.0", "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" + "v8-to-istanbul": "^9.0.1" }, "dependencies": { "ansi-styles": { @@ -12889,12 +12494,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -12903,73 +12502,85 @@ "requires": { "has-flag": "^4.0.0" } + }, + "v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + } } } }, + "@jest/schemas": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", + "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.24.1" + } + }, "@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.0.0.tgz", + "integrity": "sha512-nOr+0EM8GiHf34mq2GcJyz/gYFyLQ2INDhAylrZJ9mMWoW21mLBfZa0BUVPPMxVYrLjeiRe2Z7kWXOGnS0TFhQ==", "dev": true, "requires": { + "@jridgewell/trace-mapping": "^0.3.15", "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "graceful-fs": "^4.2.9" } }, "@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.1.2.tgz", + "integrity": "sha512-jjYYjjumCJjH9hHCoMhA8PCl1OxNeGgAoZ7yuGYILRJX9NjgzTN0pCT5qAoYR4jfOP8htIByvAlz9vfNSSBoVg==", "dev": true, "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.1.2", + "@jest/types": "^29.1.2", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.1.2.tgz", + "integrity": "sha512-fU6dsUqqm8sA+cd85BmeF7Gu9DsXVWFdGn9taxM6xN1cKdcP/ivSgXh5QucFRFz1oZxKv3/9DYYbq0ULly3P/Q==", "dev": true, "requires": { - "@jest/test-result": "^27.5.1", + "@jest/test-result": "^29.1.2", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" + "jest-haste-map": "^29.1.2", + "slash": "^3.0.0" } }, "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.1.2.tgz", + "integrity": "sha512-2uaUuVHTitmkx1tHF+eBjb4p7UuzBG7SXIaA/hNIkaMP6K+gXYGxP38ZcrofzqN0HeZ7A90oqsOa97WU7WZkSw==", "dev": true, "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^29.1.2", + "@jridgewell/trace-mapping": "^0.3.15", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.1.2", + "jest-regex-util": "^29.0.0", + "jest-util": "^29.1.2", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.1" }, "dependencies": { "ansi-styles": { @@ -13012,12 +12623,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -13030,15 +12635,16 @@ } }, "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.1.2.tgz", + "integrity": "sha512-DcXGtoTykQB5jiwCmVr8H4vdg2OJhQex3qPkG+ISyDO7xQXbt/4R6dowcRyPemRnkH7JoHvZuxPBdlq+9JxFCg==", "dev": true, "requires": { + "@jest/schemas": "^29.0.0", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "dependencies": { @@ -13133,9 +12739,9 @@ "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", @@ -13187,9 +12793,9 @@ } }, "@rollup/plugin-typescript": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.3.1.tgz", - "integrity": "sha512-84rExe3ICUBXzqNX48WZV2Jp3OddjTMX97O2Py6D1KJaGSwWp0mDHXj+bCGNJqWHIEKDIT2U0sDjhP4czKi6cA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.5.0.tgz", + "integrity": "sha512-wMv1/scv0m/rXx21wD2IsBbJFba8wGF3ErJIr6IKRfRj49S85Lszbxb4DCo8iILpluTjk2GAAu9CoZt4G3ppgQ==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -13207,6 +12813,12 @@ "picomatch": "^2.2.2" } }, + "@sinclair/typebox": { + "version": "0.24.44", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.44.tgz", + "integrity": "sha512-ka0W0KN5i6LfrSocduwliMMpqVgohtPFidKdMEOUjoOFCHcOOYkKsPRxfs5f15oPNHTm6ERAm0GV/+/LTKeiWg==", + "dev": true + }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -13217,9 +12829,9 @@ } }, "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" @@ -13232,9 +12844,9 @@ "dev": true }, "@types/babel__core": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", - "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -13264,9 +12876,9 @@ } }, "@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz", + "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==", "dev": true, "requires": { "@babel/types": "^7.3.0" @@ -13327,13 +12939,13 @@ } }, "@types/jest": { - "version": "27.4.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.1.tgz", - "integrity": "sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.1.2.tgz", + "integrity": "sha512-y+nlX0h87U0R+wsGn6EBuoRWYyv3KFtwRNP3QWp9+k2tJ2/bqcGS3UxD7jgT+tiwJWWq3UsyV4Y+T6rsMT4XMg==", "dev": true, "requires": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, "@types/json-schema": { @@ -13371,9 +12983,9 @@ "dev": true }, "@types/prettier": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.4.tgz", - "integrity": "sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", "dev": true }, "@types/stack-utils": { @@ -13383,9 +12995,9 @@ "dev": true }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -13398,19 +13010,18 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.13.0.tgz", - "integrity": "sha512-vLktb2Uec81fxm/cfz2Hd6QaWOs8qdmVAZXLdOBX6JFJDhf6oDZpMzZ4/LZ6SFM/5DgDcxIMIvy3F+O9yZBuiQ==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.39.0.tgz", + "integrity": "sha512-xVfKOkBm5iWMNGKQ2fwX5GVgBuHmZBO1tCRwXmY5oAIsPscfwm2UADDuNB8ZVYCtpQvJK4xpjrK7jEhcJ0zY9A==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.13.0", - "@typescript-eslint/type-utils": "5.13.0", - "@typescript-eslint/utils": "5.13.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", + "@typescript-eslint/scope-manager": "5.39.0", + "@typescript-eslint/type-utils": "5.39.0", + "@typescript-eslint/utils": "5.39.0", + "debug": "^4.3.4", + "ignore": "^5.2.0", "regexpp": "^3.2.0", - "semver": "^7.3.5", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "dependencies": { @@ -13424,9 +13035,9 @@ } }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -13441,56 +13052,57 @@ } }, "@typescript-eslint/parser": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.13.0.tgz", - "integrity": "sha512-GdrU4GvBE29tm2RqWOM0P5QfCtgCyN4hXICj/X9ibKED16136l9ZpoJvCL5pSKtmJzA+NRDzQ312wWMejCVVfg==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.39.0.tgz", + "integrity": "sha512-PhxLjrZnHShe431sBAGHaNe6BDdxAASDySgsBCGxcBecVCi8NQWxQZMcizNA4g0pN51bBAn/FUfkWG3SDVcGlA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.13.0", - "@typescript-eslint/types": "5.13.0", - "@typescript-eslint/typescript-estree": "5.13.0", - "debug": "^4.3.2" + "@typescript-eslint/scope-manager": "5.39.0", + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/typescript-estree": "5.39.0", + "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.13.0.tgz", - "integrity": "sha512-T4N8UvKYDSfVYdmJq7g2IPJYCRzwtp74KyDZytkR4OL3NRupvswvmJQJ4CX5tDSurW2cvCc1Ia1qM7d0jpa7IA==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.39.0.tgz", + "integrity": "sha512-/I13vAqmG3dyqMVSZPjsbuNQlYS082Y7OMkwhCfLXYsmlI0ca4nkL7wJ/4gjX70LD4P8Hnw1JywUVVAwepURBw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.13.0", - "@typescript-eslint/visitor-keys": "5.13.0" + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/visitor-keys": "5.39.0" } }, "@typescript-eslint/type-utils": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.13.0.tgz", - "integrity": "sha512-/nz7qFizaBM1SuqAKb7GLkcNn2buRdDgZraXlkhz+vUGiN1NZ9LzkA595tHHeduAiS2MsHqMNhE2zNzGdw43Yg==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.39.0.tgz", + "integrity": "sha512-KJHJkOothljQWzR3t/GunL0TPKY+fGJtnpl+pX+sJ0YiKTz3q2Zr87SGTmFqsCMFrLt5E0+o+S6eQY0FAXj9uA==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.13.0", - "debug": "^4.3.2", + "@typescript-eslint/typescript-estree": "5.39.0", + "@typescript-eslint/utils": "5.39.0", + "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.13.0.tgz", - "integrity": "sha512-LmE/KO6DUy0nFY/OoQU0XelnmDt+V8lPQhh8MOVa7Y5k2gGRd6U9Kp3wAjhB4OHg57tUO0nOnwYQhRRyEAyOyg==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.39.0.tgz", + "integrity": "sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.13.0.tgz", - "integrity": "sha512-Q9cQow0DeLjnp5DuEDjLZ6JIkwGx3oYZe+BfcNuw/POhtpcxMTy18Icl6BJqTSd+3ftsrfuVb7mNHRZf7xiaNA==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.39.0.tgz", + "integrity": "sha512-qLFQP0f398sdnogJoLtd43pUgB18Q50QSA+BTE5h3sUxySzbWDpTSdgt4UyxNSozY/oDK2ta6HVAzvGgq8JYnA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.13.0", - "@typescript-eslint/visitor-keys": "5.13.0", - "debug": "^4.3.2", - "globby": "^11.0.4", + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/visitor-keys": "5.39.0", + "debug": "^4.3.4", + "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.5", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "dependencies": { @@ -13504,9 +13116,9 @@ } }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -13521,94 +13133,29 @@ } }, "@typescript-eslint/utils": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.13.0.tgz", - "integrity": "sha512-+9oHlPWYNl6AwwoEt5TQryEHwiKRVjz7Vk6kaBeD3/kwHE5YqTGHtm/JZY8Bo9ITOeKutFaXnBlMgSATMJALUQ==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.39.0.tgz", + "integrity": "sha512-+DnY5jkpOpgj+EBtYPyHRjXampJfC0yUZZzfzLuUWVZvCuKqSdJVC8UhdWipIw7VKNTfwfAPiOWzYkAwuIhiAg==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.13.0", - "@typescript-eslint/types": "5.13.0", - "@typescript-eslint/typescript-estree": "5.13.0", + "@typescript-eslint/scope-manager": "5.39.0", + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/typescript-estree": "5.39.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.13.0.tgz", - "integrity": "sha512-HLKEAS/qA1V7d9EzcpLFykTePmOQqOFim8oCvhY3pZgQ8Hi38hYpHd9e5GN6nQBFQNecNhws5wkS9Y5XIO0s/g==", + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.39.0.tgz", + "integrity": "sha512-yyE3RPwOG+XJBLrhvsxAidUgybJVQ/hG8BhiJo0k8JSAYfk/CshVcxf0HwP4Jt7WZZ6vLmxdo1p6EyN3tzFTkg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.13.0", - "eslint-visitor-keys": "^3.0.0" - } - }, - "@yarn-tool/resolve-package": { - "version": "1.0.45", - "resolved": "https://registry.npmjs.org/@yarn-tool/resolve-package/-/resolve-package-1.0.45.tgz", - "integrity": "sha512-xnfY8JceApkSTliZtr7X6yl1wZYhGbRp0beBMi1OtmvTVTm/ZSt3881Fw1M3ZwhHqr7OEfl8828LJK2q62BvoQ==", - "dev": true, - "requires": { - "pkg-dir": "< 6 >= 5", - "tslib": "^2.3.1", - "upath2": "^3.1.12" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", - "dev": true, - "requires": { - "find-up": "^5.0.0" - } - } + "@typescript-eslint/types": "5.39.0", + "eslint-visitor-keys": "^3.3.0" } }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, "abstract-leveldown": { "version": "0.12.4", "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", @@ -13633,29 +13180,11 @@ "dev": true }, "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -13663,12 +13192,6 @@ "dev": true, "requires": {} }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -13791,23 +13314,16 @@ "tslib": "^2.0.1" } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, "babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.1.2.tgz", + "integrity": "sha512-IuG+F3HTHryJb7gacC7SQ59A9kO56BctUsT67uJHp1mMCHUOMXpDwOHWGifWqdWVknN2WNkCVQELPjXx0aLJ9Q==", "dev": true, "requires": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/transform": "^29.1.2", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", + "babel-preset-jest": "^29.0.2", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -13887,45 +13403,45 @@ } }, "babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "version": "29.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.0.2.tgz", + "integrity": "sha512-eBr2ynAEFjcebVvu8Ktx580BD1QKCrBG1XwEUTXJe285p9HA/4hOhfWCFRQhTKSyBV0VzjhG7H91Eifz9s29hg==", "dev": true, "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", + "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" } }, "babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", "semver": "^6.1.1" } }, "babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1" + "@babel/helper-define-polyfill-provider": "^0.3.3" } }, "babel-preset-current-node-syntax": { @@ -13949,12 +13465,12 @@ } }, "babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "version": "29.0.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.0.2.tgz", + "integrity": "sha512-BeVXp7rH5TK96ofyEnHjznjLMQ2nAeDJ+QzxKnHAAMs0RgrQsCywjAN8m4mOm5Di0pxU//3AoEeJJrerMH5UeA==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^27.5.1", + "babel-plugin-jest-hoist": "^29.0.2", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -14096,12 +13612,6 @@ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -14186,16 +13696,15 @@ } }, "browserslist": { - "version": "4.19.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.3.tgz", - "integrity": "sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001312", - "electron-to-chromium": "^1.4.71", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" } }, "bs-logger": { @@ -14316,9 +13825,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001312", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", - "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "version": "1.0.30001418", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz", + "integrity": "sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==", "dev": true }, "catharsis": { @@ -14367,9 +13876,9 @@ } }, "ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz", + "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==", "dev": true }, "cipher-base": { @@ -14425,7 +13934,7 @@ "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true }, "codecov": { @@ -14459,18 +13968,9 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, "commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -14478,9 +13978,9 @@ "dev": true }, "comment-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz", - "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", + "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", "dev": true }, "commondir": { @@ -14567,21 +14067,12 @@ "dev": true }, "core-js-compat": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz", - "integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==", + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", + "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", "dev": true, "requires": { - "browserslist": "^4.19.1", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } + "browserslist": "^4.21.4" } }, "core-util-is": { @@ -14665,40 +14156,6 @@ "randomfill": "^1.0.3" } }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, "de-indent": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", @@ -14706,9 +14163,9 @@ "dev": true }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -14720,16 +14177,10 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, - "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, "deep-is": { @@ -14754,20 +14205,15 @@ } }, "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, "des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", @@ -14791,9 +14237,9 @@ "dev": true }, "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.0.0.tgz", + "integrity": "sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA==", "dev": true }, "diffie-hellman": { @@ -14839,27 +14285,10 @@ "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=", "dev": true }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, "electron-to-chromium": { - "version": "1.4.75", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.75.tgz", - "integrity": "sha512-LxgUNeu3BVU7sXaKjUDD9xivocQLxFtq6wgERrutdY/yIOps3ODOZExK1jg8DTEg4U8TUCb5MLGeWFOYuxjF3Q==", + "version": "1.4.275", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.275.tgz", + "integrity": "sha512-aJeQQ+Hl9Jyyzv4chBqYJwmVRY46N5i2BEX5Cuyk/5gFCUZ5F3i7Hnba6snZftWla7Gglwc5pIgcd+E7cW+rPg==", "dev": true }, "elliptic": { @@ -14886,9 +14315,9 @@ } }, "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", "dev": true }, "emoji-regex": { @@ -14940,84 +14369,19 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } - } - }, "eslint": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.10.0.tgz", - "integrity": "sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz", + "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.2.0", - "@humanwhocodes/config-array": "^0.9.2", + "@eslint/eslintrc": "^1.3.2", + "@humanwhocodes/config-array": "^0.10.5", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@humanwhocodes/module-importer": "^1.0.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -15027,30 +14391,32 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", + "find-up": "^5.0.0", "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "dependencies": { "ansi-styles": { @@ -15115,10 +14481,20 @@ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -15139,6 +14515,33 @@ "argparse": "^2.0.1" } }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -15164,27 +14567,26 @@ "requires": {} }, "eslint-plugin-jest": { - "version": "26.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.1.1.tgz", - "integrity": "sha512-HRKOuPi5ADhza4ZBK5ufyNXy28bXXkib87w+pQqdvBhSTsamndh6sIAKPAUl8y0/n9jSWBdTPslrwtKWqkp8dA==", + "version": "27.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.1.1.tgz", + "integrity": "sha512-vuSuXGKHHi/UAffIM46QKm4g0tQP+6n52nRxUpMq6x6x9rhnv5WM7ktSu3h9cTnXE4b0Y0ODQTgRlCm9rdRLvg==", "dev": true, "requires": { "@typescript-eslint/utils": "^5.10.0" } }, "eslint-plugin-jsdoc": { - "version": "37.9.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.6.tgz", - "integrity": "sha512-GDCB0nEwKVaeIzam+t/yB8XG/6tgvc9XgrSwuxqCXVlKRWUqTuTqntZoqAKZAIbWIgYsrnrvrWAyIX/QvhwBcw==", + "version": "39.3.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.3.6.tgz", + "integrity": "sha512-R6dZ4t83qPdMhIOGr7g2QII2pwCjYyKP+z0tPOfO1bbAbQyKC20Y2Rd6z1te86Lq3T7uM8bNo+VD9YFpE8HU/g==", "dev": true, "requires": { - "@es-joy/jsdoccomment": "~0.20.1", - "comment-parser": "1.3.0", - "debug": "^4.3.3", + "@es-joy/jsdoccomment": "~0.31.0", + "comment-parser": "1.3.1", + "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.4.0", - "regextras": "^0.8.0", - "semver": "^7.3.5", + "semver": "^7.3.7", "spdx-expression-parse": "^3.0.1" }, "dependencies": { @@ -15204,9 +14606,9 @@ } }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -15221,9 +14623,9 @@ } }, "eslint-plugin-prettier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", - "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -15269,13 +14671,13 @@ "dev": true }, "espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", "dev": true, "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" } }, @@ -15378,19 +14780,20 @@ "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true }, "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.1.2.tgz", + "integrity": "sha512-AuAGn1uxva5YBbBlXb+2JPxJRuemZsmlGcapPXWNSBNsQtAULfjioREGBWuI0EOvYUKjDnrCy8PW5Zlr1md5mw==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" + "@jest/expect-utils": "^29.1.2", + "jest-get-type": "^29.0.0", + "jest-matcher-utils": "^29.1.2", + "jest-message-util": "^29.1.2", + "jest-util": "^29.1.2" } }, "fast-deep-equal": { @@ -15468,9 +14871,9 @@ } }, "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "requires": { "bser": "2.1.1" @@ -15547,17 +14950,6 @@ "signal-exit": "^3.0.2" } }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, "fs-extra": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", @@ -15588,12 +14980,6 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, "fwd-stream": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", @@ -15707,6 +15093,12 @@ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -15719,9 +15111,18 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -15789,15 +15190,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -15831,15 +15223,6 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, "idb-wrapper": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", @@ -15918,7 +15301,7 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, "is-buffer": { @@ -15993,12 +15376,6 @@ "integrity": "sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc=", "dev": true }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, "is-promise": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", @@ -16021,12 +15398,6 @@ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -16052,9 +15423,9 @@ "dev": true }, "istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "requires": { "@babel/core": "^7.12.3", @@ -16122,52 +15493,63 @@ } }, "jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.1.2.tgz", + "integrity": "sha512-5wEIPpCezgORnqf+rCaYD1SK+mNN7NsstWzIsuvsnrhR/hSxXWd82oI7DkrbJ+XTD28/eG8SmxdGvukrGGK6Tw==", "dev": true, "requires": { - "@jest/core": "^27.5.1", + "@jest/core": "^29.1.2", + "@jest/types": "^29.1.2", "import-local": "^3.0.2", - "jest-cli": "^27.5.1" + "jest-cli": "^29.1.2" } }, "jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.0.0.tgz", + "integrity": "sha512-28/iDMDrUpGoCitTURuDqUzWQoWmOmOKOFST1mi2lwh62X4BFf6khgH3uSuo1e49X/UDjuApAj3w0wLOex4VPQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", "execa": "^5.0.0", - "throat": "^6.0.1" + "p-limit": "^3.1.0" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + } } }, "jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.1.2.tgz", + "integrity": "sha512-ajQOdxY6mT9GtnfJRZBRYS7toNIJayiiyjDyoZcnvPRUPwJ58JX0ci0PKAKUo2C1RyzlHw0jabjLGKksO42JGA==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^29.1.2", + "@jest/expect": "^29.1.2", + "@jest/test-result": "^29.1.2", + "@jest/types": "^29.1.2", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", + "jest-each": "^29.1.2", + "jest-matcher-utils": "^29.1.2", + "jest-message-util": "^29.1.2", + "jest-runtime": "^29.1.2", + "jest-snapshot": "^29.1.2", + "jest-util": "^29.1.2", + "p-limit": "^3.1.0", + "pretty-format": "^29.1.2", "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" + "stack-utils": "^2.0.3" }, "dependencies": { "ansi-styles": { @@ -16210,6 +15592,15 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -16222,23 +15613,23 @@ } }, "jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.1.2.tgz", + "integrity": "sha512-vsvBfQ7oS2o4MJdAH+4u9z76Vw5Q8WBQF5MchDbkylNknZdrPTX1Ix7YRJyTlOWqRaS7ue/cEAn+E4V1MWyMzw==", "dev": true, "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/core": "^29.1.2", + "@jest/test-result": "^29.1.2", + "@jest/types": "^29.1.2", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-config": "^29.1.2", + "jest-util": "^29.1.2", + "jest-validate": "^29.1.2", "prompts": "^2.0.1", - "yargs": "^16.2.0" + "yargs": "^17.3.1" }, "dependencies": { "ansi-styles": { @@ -16260,6 +15651,17 @@ "supports-color": "^7.1.0" } }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -16289,102 +15691,58 @@ "requires": { "has-flag": "^4.0.0" } - } - } - }, - "jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "dev": true, - "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "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" - } - }, - "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" - } }, - "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==", + "yargs": { + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz", + "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==", "dev": true, "requires": { - "color-name": "~1.1.4" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" } }, - "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==", + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true - }, - "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 - }, - "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" - } } } }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "jest-config": { + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.1.2.tgz", + "integrity": "sha512-EC3Zi86HJUOz+2YWQcJYQXlf0zuBhJoeyxLM6vb6qJsVmpP7KcCP1JnyF0iaqTaXdBP8Rlwsvs7hnKWQWWLwwA==", "dev": true, "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.1.2", + "@jest/types": "^29.1.2", + "babel-jest": "^29.1.2", "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.1.2", + "jest-environment-node": "^29.1.2", + "jest-get-type": "^29.0.0", + "jest-regex-util": "^29.0.0", + "jest-resolve": "^29.1.2", + "jest-runner": "^29.1.2", + "jest-util": "^29.1.2", + "jest-validate": "^29.1.2", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.1.2", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "dependencies": { "ansi-styles": { @@ -16438,26 +15796,16 @@ } } }, - "jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "jest-diff": { + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.1.2.tgz", + "integrity": "sha512-4GQts0aUopVvecIT4IwD/7xsBaMhKTYoM4/njE/aVw9wpw+pIUVp8Vab/KnSzSilr84GnLBkaP3JLDnQYCKqVQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" + "diff-sequences": "^29.0.0", + "jest-get-type": "^29.0.0", + "pretty-format": "^29.1.2" }, "dependencies": { "ansi-styles": { @@ -16511,85 +15859,26 @@ } } }, - "jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - } - }, - "jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "jest-docblock": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.0.0.tgz", + "integrity": "sha512-s5Kpra/kLzbqu9dEjov30kj1n4tfu3e7Pl8v+f8jOkeWNqM6Ds8jRaJfZow3ducoQUrf2Z4rs2N5S3zXnb83gw==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" + "detect-newline": "^3.0.0" } }, - "jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "jest-each": { + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.1.2.tgz", + "integrity": "sha512-AmTQp9b2etNeEwMyr4jc0Ql/LIX/dhbgP21gHAizya2X6rUspHn2gysMXaj6iwWuOJ2sYRgP8c1P4cXswgvS1A==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", + "@jest/types": "^29.1.2", "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" + "jest-get-type": "^29.0.0", + "jest-util": "^29.1.2", + "pretty-format": "^29.1.2" }, "dependencies": { "ansi-styles": { @@ -16643,26 +15932,66 @@ } } }, + "jest-environment-node": { + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.1.2.tgz", + "integrity": "sha512-C59yVbdpY8682u6k/lh8SUMDJPbOyCHOTgLVVi1USWFxtNV+J8fyIwzkg+RJIVI30EKhKiAGNxYaFr3z6eyNhQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.1.2", + "@jest/fake-timers": "^29.1.2", + "@jest/types": "^29.1.2", + "@types/node": "*", + "jest-mock": "^29.1.2", + "jest-util": "^29.1.2" + } + }, + "jest-get-type": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.0.0.tgz", + "integrity": "sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw==", + "dev": true + }, + "jest-haste-map": { + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.1.2.tgz", + "integrity": "sha512-xSjbY8/BF11Jh3hGSPfYTa/qBFrm3TPM7WU8pU93m2gqzORVLkHFWvuZmFsTEBPRKndfewXhMOuzJNHyJIZGsw==", + "dev": true, + "requires": { + "@jest/types": "^29.1.2", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.0.0", + "jest-util": "^29.1.2", + "jest-worker": "^29.1.2", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, "jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.1.2.tgz", + "integrity": "sha512-TG5gAZJpgmZtjb6oWxBLf2N6CfQ73iwCe6cofu/Uqv9iiAm6g502CAnGtxQaTfpHECBdVEMRBhomSXeLnoKjiQ==", "dev": true, "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^29.0.0", + "pretty-format": "^29.1.2" } }, "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.1.2.tgz", + "integrity": "sha512-MV5XrD3qYSW2zZSHRRceFzqJ39B2z11Qv0KPyZYxnzDHFeYZGJlgGi0SW+IXSJfOewgJp/Km/7lpcFT+cgZypw==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-diff": "^29.1.2", + "jest-get-type": "^29.0.0", + "pretty-format": "^29.1.2" }, "dependencies": { "ansi-styles": { @@ -16717,18 +16046,18 @@ } }, "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.1.2.tgz", + "integrity": "sha512-9oJ2Os+Qh6IlxLpmvshVbGUiSkZVc2FK+uGOm6tghafnB2RyjKAxMZhtxThRMxfX1J1SOMhTn9oK3/MutRWQJQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", + "@jest/types": "^29.1.2", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", + "pretty-format": "^29.1.2", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -16785,13 +16114,14 @@ } }, "jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.1.2.tgz", + "integrity": "sha512-PFDAdjjWbjPUtQPkQufvniXIS3N9Tv7tbibePEjIIprzjgo0qQlyUiVMrT4vL8FaSJo1QXifQUOuPH3HQC/aMA==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*" + "@jest/types": "^29.1.2", + "@types/node": "*", + "jest-util": "^29.1.2" } }, "jest-pnp-resolver": { @@ -16802,24 +16132,23 @@ "requires": {} }, "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.0.0.tgz", + "integrity": "sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug==", "dev": true }, "jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.1.2.tgz", + "integrity": "sha512-7fcOr+k7UYSVRJYhSmJHIid3AnDBcLQX3VmT9OSbPWsWz1MfT7bcoerMhADKGvKCoMpOHUQaDHtQoNp/P9JMGg==", "dev": true, "requires": { - "@jest/types": "^27.5.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", + "jest-haste-map": "^29.1.2", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-util": "^29.1.2", + "jest-validate": "^29.1.2", "resolve": "^1.20.0", "resolve.exports": "^1.1.0", "slash": "^3.0.0" @@ -16877,43 +16206,42 @@ } }, "jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.1.2.tgz", + "integrity": "sha512-44yYi+yHqNmH3OoWZvPgmeeiwKxhKV/0CfrzaKLSkZG9gT973PX8i+m8j6pDrTYhhHoiKfF3YUFg/6AeuHw4HQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" + "jest-regex-util": "^29.0.0", + "jest-snapshot": "^29.1.2" } }, "jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.1.2.tgz", + "integrity": "sha512-yy3LEWw8KuBCmg7sCGDIqKwJlULBuNIQa2eFSVgVASWdXbMYZ9H/X0tnXt70XFoGf92W2sOQDOIFAA6f2BG04Q==", "dev": true, "requires": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.1.2", + "@jest/environment": "^29.1.2", + "@jest/test-result": "^29.1.2", + "@jest/transform": "^29.1.2", + "@jest/types": "^29.1.2", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "emittery": "^0.10.2", "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" + "jest-docblock": "^29.0.0", + "jest-environment-node": "^29.1.2", + "jest-haste-map": "^29.1.2", + "jest-leak-detector": "^29.1.2", + "jest-message-util": "^29.1.2", + "jest-resolve": "^29.1.2", + "jest-runtime": "^29.1.2", + "jest-util": "^29.1.2", + "jest-watcher": "^29.1.2", + "jest-worker": "^29.1.2", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "dependencies": { "ansi-styles": { @@ -16956,6 +16284,31 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -16968,31 +16321,31 @@ } }, "jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.1.2.tgz", + "integrity": "sha512-jr8VJLIf+cYc+8hbrpt412n5jX3tiXmpPSYTGnwcvNemY+EOuLNiYnHJ3Kp25rkaAcTWOEI4ZdOIQcwYcXIAZw==", + "dev": true, + "requires": { + "@jest/environment": "^29.1.2", + "@jest/fake-timers": "^29.1.2", + "@jest/globals": "^29.1.2", + "@jest/source-map": "^29.0.0", + "@jest/test-result": "^29.1.2", + "@jest/transform": "^29.1.2", + "@jest/types": "^29.1.2", + "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^29.1.2", + "jest-message-util": "^29.1.2", + "jest-mock": "^29.1.2", + "jest-regex-util": "^29.0.0", + "jest-resolve": "^29.1.2", + "jest-snapshot": "^29.1.2", + "jest-util": "^29.1.2", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -17048,44 +16401,36 @@ } } }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, "jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.1.2.tgz", + "integrity": "sha512-rYFomGpVMdBlfwTYxkUp3sjD6usptvZcONFYNqVlaz4EpHPnDvlWjvmOQ9OCSNKqYZqLM2aS3wq01tWujLg7gg==", "dev": true, "requires": { - "@babel/core": "^7.7.2", + "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.1.2", + "@jest/transform": "^29.1.2", + "@jest/types": "^29.1.2", + "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.5.1", + "expect": "^29.1.2", "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-diff": "^29.1.2", + "jest-get-type": "^29.0.0", + "jest-haste-map": "^29.1.2", + "jest-matcher-utils": "^29.1.2", + "jest-message-util": "^29.1.2", + "jest-util": "^29.1.2", "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" + "pretty-format": "^29.1.2", + "semver": "^7.3.5" }, "dependencies": { "ansi-styles": { @@ -17138,9 +16483,9 @@ } }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -17164,12 +16509,12 @@ } }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.1.2.tgz", + "integrity": "sha512-vPCk9F353i0Ymx3WQq3+a4lZ07NXu9Ca8wya6o4Fe4/aO1e1awMMprZ3woPFpKwghEOW+UXgd15vVotuNN9ONQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.1.2", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -17229,17 +16574,17 @@ } }, "jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.1.2.tgz", + "integrity": "sha512-k71pOslNlV8fVyI+mEySy2pq9KdXdgZtm7NHrBX8LghJayc3wWZH0Yr0mtYNGaCU4F1OLPXRkwZR0dBm/ClshA==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.1.2", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", + "jest-get-type": "^29.0.0", "leven": "^3.1.0", - "pretty-format": "^27.5.1" + "pretty-format": "^29.1.2" }, "dependencies": { "ansi-styles": { @@ -17300,17 +16645,18 @@ } }, "jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.1.2.tgz", + "integrity": "sha512-6JUIUKVdAvcxC6bM8/dMgqY2N4lbT+jZVsxh0hCJRbwkIEnbr/aPjMQ28fNDI5lB51Klh00MWZZeVf27KBUj5w==", "dev": true, "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/test-result": "^29.1.2", + "@jest/types": "^29.1.2", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.5.1", + "emittery": "^0.10.2", + "jest-util": "^29.1.2", "string-length": "^4.0.1" }, "dependencies": { @@ -17366,12 +16712,13 @@ } }, "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.1.2.tgz", + "integrity": "sha512-AdTZJxKjTSPHbXT/AIOjQVmoFx0LHFcVabWu0sxI7PAy7rFf8c0upyvgBKgguVXdM4vY74JdwkyD4hSmpTW8jA==", "dev": true, "requires": { "@types/node": "*", + "jest-util": "^29.1.2", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -17393,6 +16740,12 @@ } } }, + "js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "dev": true + }, "js-stringify": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", @@ -17425,9 +16778,9 @@ } }, "jsdoc": { - "version": "3.6.10", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.10.tgz", - "integrity": "sha512-IdQ8ppSo5LKZ9o3M+LKIIK8i00DIe5msDvG3G81Km+1dhy0XrOWD0Ji8H61ElgyEj/O9KRLokgKbAM9XX9CJAg==", + "version": "3.6.11", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz", + "integrity": "sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==", "dev": true, "requires": { "@babel/parser": "^7.9.4", @@ -17436,7 +16789,7 @@ "catharsis": "^0.9.0", "escape-string-regexp": "^2.0.0", "js2xmlparser": "^4.0.2", - "klaw": "^4.0.1", + "klaw": "^3.0.0", "markdown-it": "^12.3.2", "markdown-it-anchor": "^8.4.1", "marked": "^4.0.10", @@ -17456,45 +16809,10 @@ } }, "jsdoc-type-pratt-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.3.tgz", - "integrity": "sha512-QPyxq62Q8veBSDtDrWmqaEPjSCeknUV9dH/OAGt3q9an8qC8UQDqitQiw1NvoMskIESpoRZ6qzt4H3rlK0xo8A==", - "dev": true - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - } + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz", + "integrity": "sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw==", + "dev": true }, "jsesc": { "version": "2.5.2", @@ -17521,13 +16839,10 @@ "dev": true }, "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true }, "jsonfile": { "version": "6.1.0", @@ -17559,10 +16874,13 @@ } }, "klaw": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.0.1.tgz", - "integrity": "sha512-pgsE40/SvC7st04AHiISNewaIMUbY5V/K8b21ekiPiFoYs/EYSdsGa+FJArB1d441uq4Q8zZyIxvAzkGNlBdRw==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } }, "kleur": { "version": "3.0.3", @@ -17825,7 +17143,7 @@ "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, "lodash.get": { @@ -18007,21 +17325,6 @@ } } }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "requires": { - "mime-db": "1.51.0" - } - }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -18055,12 +17358,6 @@ "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -18130,13 +17427,13 @@ "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, "node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", "dev": true }, "normalize-path": { @@ -18154,12 +17451,6 @@ "path-key": "^3.0.0" } }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -18173,14 +17464,14 @@ "dev": true }, "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" } }, @@ -18280,12 +17571,6 @@ "lines-and-columns": "^1.1.6" } }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, "path": { "version": "0.12.7", "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", @@ -18308,15 +17593,6 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "path-is-network-drive": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/path-is-network-drive/-/path-is-network-drive-1.0.13.tgz", - "integrity": "sha512-Hg74mRN6mmXV+gTm3INjFK40ncAmC/Lo4qoQaSZ+GT3hZzlKdWQSqAjqyPeW0SvObP2W073WyYEBWY9d3wOm3A==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -18329,15 +17605,6 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-strip-sep": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/path-strip-sep/-/path-strip-sep-1.0.10.tgz", - "integrity": "sha512-JpCy+8LAJQQTO1bQsb/84s1g+/Stm3h39aOpPRBQ/paMUGVPPZChLTOTKHoaCkc/6sKuF7yVsnq5Pe1S6xQGcA==", - "dev": true, - "requires": { - "tslib": "^2.3.1" - } - }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -18391,9 +17658,9 @@ "dev": true }, "prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, "prettier-linter-helpers": { @@ -18406,14 +17673,14 @@ } }, "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.1.2.tgz", + "integrity": "sha512-CGJ6VVGXVRP2o2Dorl4mAwwvDWT25luIsYhkyVQW32E4nL+TgW939J7LlKT/npq5Cpq6j3s+sy+13yk7xYpBmg==", "dev": true, "requires": { - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" }, "dependencies": { "ansi-styles": { @@ -18498,12 +17765,6 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -18753,9 +18014,9 @@ "requires": {} }, "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, "readable-stream": { @@ -18802,9 +18063,9 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, "requires": { "regenerate": "^1.4.2" @@ -18817,9 +18078,9 @@ "dev": true }, "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "dev": true, "requires": { "@babel/runtime": "^7.8.4" @@ -18832,35 +18093,29 @@ "dev": true }, "regexpu-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", - "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", + "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", "dev": true, "requires": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.0.0" } }, - "regextras": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", - "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", - "dev": true - }, "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", "dev": true }, "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -18869,7 +18124,7 @@ "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true } } @@ -18970,9 +18225,9 @@ } }, "rollup": { - "version": "2.69.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.69.0.tgz", - "integrity": "sha512-kjER91tHyek8gAkuz7+558vSnTQ+pITEok1P0aNOS45ZXyngaqPsXJmSel4QPQnJo7EJMjXUU1/GErWkWiKORg==", + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "dev": true, "requires": { "fsevents": "~2.3.2" @@ -19059,17 +18314,16 @@ } }, "rollup-plugin-typescript2": { - "version": "0.31.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.31.2.tgz", - "integrity": "sha512-hRwEYR1C8xDGVVMFJQdEVnNAeWRvpaY97g5mp3IeLnzhNXzSVq78Ye/BJ9PAaUfN4DXa/uDnqerifMOaMFY54Q==", + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.34.1.tgz", + "integrity": "sha512-P4cHLtGikESmqi1CA+tdMDUv8WbQV48mzPYt77TSTOPJpERyZ9TXdDgjSDix8Fkqce6soYz3+fa4lrC93IEkcw==", "dev": true, "requires": { "@rollup/pluginutils": "^4.1.2", - "@yarn-tool/resolve-package": "^1.0.40", "find-cache-dir": "^3.3.2", "fs-extra": "^10.0.0", - "resolve": "^1.20.0", - "tslib": "^2.3.1" + "semver": "^7.3.7", + "tslib": "^2.4.0" }, "dependencies": { "@rollup/pluginutils": { @@ -19087,6 +18341,30 @@ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, @@ -19128,15 +18406,6 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, "scheduler": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", @@ -19380,9 +18649,9 @@ } }, "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dev": true, "requires": { "has-flag": "^4.0.0", @@ -19412,12 +18681,6 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, "taffydb": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", @@ -19484,12 +18747,6 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -19517,48 +18774,20 @@ "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=", "dev": true }, - "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "dependencies": { - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - } - } - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, "ts-jest": { - "version": "27.1.3", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.3.tgz", - "integrity": "sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==", + "version": "29.0.3", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.0.3.tgz", + "integrity": "sha512-Ibygvmuyq1qp/z3yTh9QTwVVAbFdDy/+4BtIQR2sp6baF2SJU/8CKK/hhnGIDY2L90Az2jIqTwZPnN2p+BweiQ==", "dev": true, "requires": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.1", "lodash.memoize": "4.x", "make-error": "1.x", "semver": "7.x", - "yargs-parser": "20.x" + "yargs-parser": "^21.0.1" }, "dependencies": { "lru-cache": { @@ -19584,6 +18813,12 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true } } }, @@ -19594,9 +18829,9 @@ "dev": true }, "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", "dev": true }, "tsutils": { @@ -19650,9 +18885,9 @@ "dev": true }, "typescript": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", - "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", "dev": true }, "uc.micro": { @@ -19739,9 +18974,9 @@ "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true }, "universalify": { @@ -19750,15 +18985,14 @@ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, - "upath2": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/upath2/-/upath2-3.1.12.tgz", - "integrity": "sha512-yC3eZeCyCXFWjy7Nu4pgjLhXNYjuzuUmJiRgSSw6TJp8Emc+E4951HGPJf+bldFC5SL7oBLeNbtm1fGzXn2gxw==", + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", "dev": true, "requires": { - "path-is-network-drive": "^1.0.13", - "path-strip-sep": "^1.0.10", - "tslib": "^2.3.1" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" } }, "uri-js": { @@ -19808,12 +19042,6 @@ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "v8-to-istanbul": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", @@ -19896,24 +19124,6 @@ "brace": "^0.11.0" } }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, "walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -19923,38 +19133,6 @@ "makeerror": "1.0.12" } }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -20061,47 +19239,15 @@ "dev": true }, "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "requires": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - }, - "dependencies": { - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - } + "signal-exit": "^3.0.7" } }, - "ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", - "dev": true, - "requires": {} - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, "xmlcreate": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", diff --git a/package.json b/package.json index 23f2fbdf..e5cabaf0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-seal", - "version": "5.0.0", + "version": "5.0.1", "description": "Homomorphic Encryption for TypeScript or JavaScript using Microsoft SEAL", "repository": { "type": "git", @@ -67,33 +67,33 @@ "publish": "npm publish --access=public ./dist/node-seal-*.tgz" }, "devDependencies": { - "@babel/core": "^7.17.5", - "@babel/preset-env": "^7.16.11", + "@babel/core": "^7.19.3", + "@babel/preset-env": "^7.19.3", "@rollup/plugin-alias": "^3.1.9", "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-typescript": "^8.3.1", - "@types/jest": "^27.4.1", - "@typescript-eslint/eslint-plugin": "^5.13.0", - "@typescript-eslint/parser": "^5.13.0", + "@rollup/plugin-typescript": "^8.5.0", + "@types/jest": "^29.1.2", + "@typescript-eslint/eslint-plugin": "^5.39.0", + "@typescript-eslint/parser": "^5.39.0", "better-docs": "^2.7.2", "codecov": "^3.8.3", "env-cmd": "^10.1.0", - "eslint": "^8.10.0", - "eslint-config-prettier": "^8.4.0", - "eslint-plugin-jest": "^26.1.1", - "eslint-plugin-jsdoc": "^37.9.6", - "eslint-plugin-prettier": "^4.0.0", + "eslint": "^8.24.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-jest": "^27.1.1", + "eslint-plugin-jsdoc": "^39.3.6", + "eslint-plugin-prettier": "^4.2.1", "esm": "^3.2.25", - "jest": "^27.5.1", - "jsdoc": "^3.6.10", + "jest": "^29.1.2", + "jsdoc": "^3.6.11", "path": "^0.12.7", - "prettier": "^2.5.1", - "rollup": "^2.69.0", + "prettier": "^2.7.1", + "rollup": "^2.79.1", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-node-globals": "^1.4.0", "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.31.2", - "ts-jest": "^27.1.3", - "typescript": "^4.6.2" + "rollup-plugin-typescript2": "^0.34.1", + "ts-jest": "^29.0.3", + "typescript": "^4.8.4" } } \ No newline at end of file diff --git a/src/__tests__/batch-encoder.test.ts b/src/__tests__/batch-encoder.test.ts index 45fa21f0..9ad3fae0 100644 --- a/src/__tests__/batch-encoder.test.ts +++ b/src/__tests__/batch-encoder.test.ts @@ -38,12 +38,12 @@ describe('BatchEncoder', () => { test('It should construct an instance', () => { const Constructor = jest.fn(seal.BatchEncoder) Constructor(context) - expect(Constructor).toBeCalledWith(context) + expect(Constructor).toHaveBeenCalledWith(context) }) test('It should fail to construct an instance', () => { const Constructor = jest.fn(seal.BatchEncoder) expect(() => Constructor(null as unknown as Context)).toThrow() - expect(Constructor).toBeCalledWith(null) + expect(Constructor).toHaveBeenCalledWith(null) }) test('It should have properties', () => { const item = seal.BatchEncoder(context) diff --git a/src/__tests__/cipher-text.test.ts b/src/__tests__/cipher-text.test.ts index 8255f515..140106e9 100644 --- a/src/__tests__/cipher-text.test.ts +++ b/src/__tests__/cipher-text.test.ts @@ -66,18 +66,18 @@ describe('CipherText', () => { test('It should construct an instance', () => { const Constructor = jest.fn(seal.CipherText) Constructor() - expect(Constructor).toBeCalledWith() + expect(Constructor).toHaveBeenCalledWith() }) test('It should construct an instance with a bfvContext', () => { const Constructor = jest.fn(seal.CipherText) Constructor({ context: bfvContext }) - expect(Constructor).toBeCalledWith({ context: bfvContext }) + expect(Constructor).toHaveBeenCalledWith({ context: bfvContext }) }) test('It should construct an instance with a bfvContext, parmsId', () => { const Constructor = jest.fn(seal.CipherText) const parmsId = bfvContext.firstParmsId Constructor({ context: bfvContext, parmsId }) - expect(Constructor).toBeCalledWith({ + expect(Constructor).toHaveBeenCalledWith({ context: bfvContext, parmsId }) @@ -86,7 +86,7 @@ describe('CipherText', () => { const Constructor = jest.fn(seal.CipherText) const parmsId = bfvContext.firstParmsId Constructor({ context: bfvContext, parmsId, sizeCapacity: 2 }) - expect(Constructor).toBeCalledWith({ + expect(Constructor).toHaveBeenCalledWith({ context: bfvContext, parmsId, sizeCapacity: 2 @@ -97,7 +97,7 @@ describe('CipherText', () => { expect(() => Constructor({ context: bfvContext, sizeCapacity: 2 }) ).toThrow() - expect(Constructor).toBeCalledWith({ + expect(Constructor).toHaveBeenCalledWith({ context: bfvContext, sizeCapacity: 2 }) @@ -108,7 +108,7 @@ describe('CipherText', () => { expect(() => Constructor({ context: bfvContext, parmsId, sizeCapacity: -2 }) ).toThrow() - expect(Constructor).toBeCalledWith({ + expect(Constructor).toHaveBeenCalledWith({ context: bfvContext, parmsId, sizeCapacity: -2 diff --git a/src/__tests__/ckks-encoder.test.ts b/src/__tests__/ckks-encoder.test.ts index 208cca2d..48fc0b60 100644 --- a/src/__tests__/ckks-encoder.test.ts +++ b/src/__tests__/ckks-encoder.test.ts @@ -51,7 +51,7 @@ describe('CKKSEncoder', () => { test('It should construct an instance', () => { const Constructor = jest.fn(seal.CKKSEncoder) Constructor(ckksContext) - expect(Constructor).toBeCalledWith(ckksContext) + expect(Constructor).toHaveBeenCalledWith(ckksContext) }) test('It should have properties', () => { const item = seal.CKKSEncoder(ckksContext) diff --git a/src/__tests__/context.test.ts b/src/__tests__/context.test.ts index c619d5b5..375e642d 100644 --- a/src/__tests__/context.test.ts +++ b/src/__tests__/context.test.ts @@ -30,7 +30,7 @@ describe('Context', () => { test('It should construct an instance', () => { const Constructor = jest.fn(seal.Context) Constructor(bfvEncParms) - expect(Constructor).toBeCalledWith(bfvEncParms) + expect(Constructor).toHaveBeenCalledWith(bfvEncParms) }) test('It should have properties', () => { const item = seal.Context(bfvEncParms) diff --git a/src/__tests__/decryptor.test.ts b/src/__tests__/decryptor.test.ts index 38465244..9b73a694 100644 --- a/src/__tests__/decryptor.test.ts +++ b/src/__tests__/decryptor.test.ts @@ -61,7 +61,7 @@ describe('Decryptor', () => { test('It should construct an instance', () => { const Constructor = jest.fn(seal.Decryptor) Constructor(bfvContext, bfvSecretKey) - expect(Constructor).toBeCalledWith(bfvContext, bfvSecretKey) + expect(Constructor).toHaveBeenCalledWith(bfvContext, bfvSecretKey) }) test('It should fail to construct an instance', () => { const newParms = seal.EncryptionParameters(seal.SchemeType.bfv) @@ -76,7 +76,7 @@ describe('Decryptor', () => { const Constructor = jest.fn(seal.Decryptor) expect(() => Constructor(bfvContext, newSecretKey)).toThrow() - expect(Constructor).toBeCalledWith(bfvContext, newSecretKey) + expect(Constructor).toHaveBeenCalledWith(bfvContext, newSecretKey) }) test('It should have properties', () => { const item = seal.Decryptor(bfvContext, bfvSecretKey) diff --git a/src/__tests__/encryption-parameters.test.ts b/src/__tests__/encryption-parameters.test.ts index aa0a12ae..df677464 100644 --- a/src/__tests__/encryption-parameters.test.ts +++ b/src/__tests__/encryption-parameters.test.ts @@ -16,7 +16,7 @@ describe('EncryptionParameters', () => { test('It should construct an instance', () => { const Constructor = jest.fn(seal.EncryptionParameters) Constructor() - expect(Constructor).toBeCalledWith() + expect(Constructor).toHaveBeenCalledWith() }) test('It should have properties', () => { const encParms = seal.EncryptionParameters() diff --git a/src/__tests__/encryptor.test.ts b/src/__tests__/encryptor.test.ts index 8147532e..b95664f8 100644 --- a/src/__tests__/encryptor.test.ts +++ b/src/__tests__/encryptor.test.ts @@ -62,12 +62,16 @@ describe('Encryptor', () => { test('It should construct an instance', () => { const Constructor = jest.fn(seal.Encryptor) Constructor(bfvContext, bfvPublicKey) - expect(Constructor).toBeCalledWith(bfvContext, bfvPublicKey) + expect(Constructor).toHaveBeenCalledWith(bfvContext, bfvPublicKey) }) test('It should construct an instance with a bfvSecretKey', () => { const Constructor = jest.fn(seal.Encryptor) Constructor(bfvContext, bfvPublicKey, bfvSecretKey) - expect(Constructor).toBeCalledWith(bfvContext, bfvPublicKey, bfvSecretKey) + expect(Constructor).toHaveBeenCalledWith( + bfvContext, + bfvPublicKey, + bfvSecretKey + ) }) test('It should fail to construct an instance', () => { const newParms = seal.EncryptionParameters(seal.SchemeType.bfv) @@ -82,7 +86,7 @@ describe('Encryptor', () => { const Constructor = jest.fn(seal.Encryptor) expect(() => Constructor(bfvContext, newPublicKey)).toThrow() - expect(Constructor).toBeCalledWith(bfvContext, newPublicKey) + expect(Constructor).toHaveBeenCalledWith(bfvContext, newPublicKey) }) test('It should have properties', () => { const item = seal.Encryptor(bfvContext, bfvPublicKey) diff --git a/src/__tests__/evaluator.test.ts b/src/__tests__/evaluator.test.ts index 5ef2363f..b2d56df7 100644 --- a/src/__tests__/evaluator.test.ts +++ b/src/__tests__/evaluator.test.ts @@ -133,7 +133,7 @@ describe('Evaluator', () => { test('It should construct an instance', () => { const Constructor = jest.fn(seal.Evaluator) Constructor(bfvContext) - expect(Constructor).toBeCalledWith(bfvContext) + expect(Constructor).toHaveBeenCalledWith(bfvContext) }) test('It should fail to construct an instance', () => { const newParms = seal.EncryptionParameters(seal.SchemeType.bfv) @@ -144,7 +144,7 @@ describe('Evaluator', () => { const newContext = seal.Context(newParms, true, seal.SecurityLevel.tc128) const Constructor = jest.fn(seal.Evaluator) expect(() => Constructor(newContext)).toThrow() - expect(Constructor).toBeCalledWith(newContext) + expect(Constructor).toHaveBeenCalledWith(newContext) }) test('It should have properties', () => { const item = seal.Evaluator(bfvContext) @@ -290,8 +290,9 @@ describe('Evaluator', () => { }) test('It should negate a cipher to a destination cipher (bfv) (int64)', () => { const item = seal.Evaluator(bfvContext) - const arr = BigInt64Array.from({ length: bfvBatchEncoder.slotCount }, (_, i) => - BigInt(-i) + const arr = BigInt64Array.from( + { length: bfvBatchEncoder.slotCount }, + (_, i) => BigInt(-i) ) const plain = bfvBatchEncoder.encode(arr) as PlainText const cipher = bfvEncryptor.encrypt(plain) as CipherText @@ -305,8 +306,9 @@ describe('Evaluator', () => { }) test('It should negate a cipher to a destination cipher (bgv) (int64)', () => { const item = seal.Evaluator(bgvContext) - const arr = BigInt64Array.from({ length: bgvBatchEncoder.slotCount }, (_, i) => - BigInt(-i) + const arr = BigInt64Array.from( + { length: bgvBatchEncoder.slotCount }, + (_, i) => BigInt(-i) ) const plain = bgvBatchEncoder.encode(arr) as PlainText const cipher = bgvEncryptor.encrypt(plain) as CipherText @@ -320,8 +322,9 @@ describe('Evaluator', () => { }) test('It should negate a cipher and return a cipher result (bfv) (int64)', () => { const item = seal.Evaluator(bfvContext) - const arr = BigInt64Array.from({ length: bfvBatchEncoder.slotCount }, (_, i) => - BigInt(-i) + const arr = BigInt64Array.from( + { length: bfvBatchEncoder.slotCount }, + (_, i) => BigInt(-i) ) const plain = bfvBatchEncoder.encode(arr) as PlainText const cipher = bfvEncryptor.encrypt(plain) as CipherText @@ -335,8 +338,9 @@ describe('Evaluator', () => { }) test('It should negate a cipher and return a cipher result (bgv) (int64)', () => { const item = seal.Evaluator(bgvContext) - const arr = BigInt64Array.from({ length: bgvBatchEncoder.slotCount }, (_, i) => - BigInt(-i) + const arr = BigInt64Array.from( + { length: bgvBatchEncoder.slotCount }, + (_, i) => BigInt(-i) ) const plain = bgvBatchEncoder.encode(arr) as PlainText const cipher = bgvEncryptor.encrypt(plain) as CipherText @@ -3057,7 +3061,10 @@ describe('Evaluator', () => { }) test('It should applyGalois on a cipher to a destination cipher (bfv) (int32)', () => { const item = seal.Evaluator(bfvContext) - const arr = Int32Array.from({ length: bfvBatchEncoder.slotCount }, (_, i) => i) + const arr = Int32Array.from( + { length: bfvBatchEncoder.slotCount }, + (_, i) => i + ) const plain = bfvBatchEncoder.encode(arr) as PlainText const cipher = bfvEncryptor.encrypt(plain) as CipherText const cipherDest = seal.CipherText() @@ -3073,7 +3080,10 @@ describe('Evaluator', () => { }) test('It should applyGalois on a cipher to a destination cipher (bgv) (int32)', () => { const item = seal.Evaluator(bgvContext) - const arr = Int32Array.from({ length: bgvBatchEncoder.slotCount }, (_, i) => i) + const arr = Int32Array.from( + { length: bgvBatchEncoder.slotCount }, + (_, i) => i + ) const plain = bgvBatchEncoder.encode(arr) as PlainText const cipher = bgvEncryptor.encrypt(plain) as CipherText const cipherDest = seal.CipherText() @@ -3089,7 +3099,10 @@ describe('Evaluator', () => { }) test('It should applyGalois on a cipher and return a cipher result (bfv) (int32)', () => { const item = seal.Evaluator(bfvContext) - const arr = Int32Array.from({ length: bfvBatchEncoder.slotCount }, (_, i) => i) + const arr = Int32Array.from( + { length: bfvBatchEncoder.slotCount }, + (_, i) => i + ) const plain = bfvBatchEncoder.encode(arr) as PlainText const cipher = bfvEncryptor.encrypt(plain) as CipherText const galElt = 2 * bfvEncParms.polyModulusDegree - 1 @@ -3104,7 +3117,10 @@ describe('Evaluator', () => { }) test('It should applyGalois on a cipher and return a cipher result (bgv) (int32)', () => { const item = seal.Evaluator(bgvContext) - const arr = Int32Array.from({ length: bgvBatchEncoder.slotCount }, (_, i) => i) + const arr = Int32Array.from( + { length: bgvBatchEncoder.slotCount }, + (_, i) => i + ) const plain = bgvBatchEncoder.encode(arr) as PlainText const cipher = bgvEncryptor.encrypt(plain) as CipherText const galElt = 2 * bgvEncParms.polyModulusDegree - 1 @@ -3231,7 +3247,10 @@ describe('Evaluator', () => { // rotateRows test('It should rotateRows on a cipher to a destination cipher (bfv) (int32)', () => { const item = seal.Evaluator(bfvContext) - const arr = Int32Array.from({ length: bfvBatchEncoder.slotCount }, (_, i) => i) + const arr = Int32Array.from( + { length: bfvBatchEncoder.slotCount }, + (_, i) => i + ) const plain = bfvBatchEncoder.encode(arr) as PlainText const cipher = bfvEncryptor.encrypt(plain) as CipherText const cipherDest = seal.CipherText() @@ -3241,7 +3260,10 @@ describe('Evaluator', () => { }) test('It should rotateRows on a cipher to a destination cipher (bgv) (int32)', () => { const item = seal.Evaluator(bgvContext) - const arr = Int32Array.from({ length: bgvBatchEncoder.slotCount }, (_, i) => i) + const arr = Int32Array.from( + { length: bgvBatchEncoder.slotCount }, + (_, i) => i + ) const plain = bgvBatchEncoder.encode(arr) as PlainText const cipher = bgvEncryptor.encrypt(plain) as CipherText const cipherDest = seal.CipherText() @@ -3251,7 +3273,10 @@ describe('Evaluator', () => { }) test('It should rotateRows on a cipher and return a cipher result (bfv) (int32)', () => { const item = seal.Evaluator(bfvContext) - const arr = Int32Array.from({ length: bfvBatchEncoder.slotCount }, (_, i) => i) + const arr = Int32Array.from( + { length: bfvBatchEncoder.slotCount }, + (_, i) => i + ) const plain = bfvBatchEncoder.encode(arr) as PlainText const cipher = bfvEncryptor.encrypt(plain) as CipherText const spyOn = jest.spyOn(item, 'rotateRows') @@ -3261,7 +3286,10 @@ describe('Evaluator', () => { }) test('It should rotateRows on a cipher and return a cipher result (bgv) (int32)', () => { const item = seal.Evaluator(bgvContext) - const arr = Int32Array.from({ length: bgvBatchEncoder.slotCount }, (_, i) => i) + const arr = Int32Array.from( + { length: bgvBatchEncoder.slotCount }, + (_, i) => i + ) const plain = bgvBatchEncoder.encode(arr) as PlainText const cipher = bgvEncryptor.encrypt(plain) as CipherText const spyOn = jest.spyOn(item, 'rotateRows') @@ -3339,7 +3367,10 @@ describe('Evaluator', () => { // rotateColumns test('It should rotateColumns on a cipher to a destination cipher (bfv) (int32)', () => { const item = seal.Evaluator(bfvContext) - const arr = Int32Array.from({ length: bfvBatchEncoder.slotCount }, (_, i) => i) + const arr = Int32Array.from( + { length: bfvBatchEncoder.slotCount }, + (_, i) => i + ) const plain = bfvBatchEncoder.encode(arr) as PlainText const cipher = bfvEncryptor.encrypt(plain) as CipherText const cipherDest = seal.CipherText() @@ -3349,7 +3380,10 @@ describe('Evaluator', () => { }) test('It should rotateColumns on a cipher to a destination cipher (bgv) (int32)', () => { const item = seal.Evaluator(bgvContext) - const arr = Int32Array.from({ length: bgvBatchEncoder.slotCount }, (_, i) => i) + const arr = Int32Array.from( + { length: bgvBatchEncoder.slotCount }, + (_, i) => i + ) const plain = bgvBatchEncoder.encode(arr) as PlainText const cipher = bgvEncryptor.encrypt(plain) as CipherText const cipherDest = seal.CipherText() @@ -3359,7 +3393,10 @@ describe('Evaluator', () => { }) test('It should rotateColumns on a cipher and return a cipher result (bfv) (int32)', () => { const item = seal.Evaluator(bfvContext) - const arr = Int32Array.from({ length: bfvBatchEncoder.slotCount }, (_, i) => i) + const arr = Int32Array.from( + { length: bfvBatchEncoder.slotCount }, + (_, i) => i + ) const plain = bfvBatchEncoder.encode(arr) as PlainText const cipher = bfvEncryptor.encrypt(plain) as CipherText const spyOn = jest.spyOn(item, 'rotateColumns') @@ -3369,7 +3406,10 @@ describe('Evaluator', () => { }) test('It should rotateColumns on a cipher and return a cipher result (bgv) (int32)', () => { const item = seal.Evaluator(bgvContext) - const arr = Int32Array.from({ length: bgvBatchEncoder.slotCount }, (_, i) => i) + const arr = Int32Array.from( + { length: bgvBatchEncoder.slotCount }, + (_, i) => i + ) const plain = bgvBatchEncoder.encode(arr) as PlainText const cipher = bgvEncryptor.encrypt(plain) as CipherText const spyOn = jest.spyOn(item, 'rotateColumns') @@ -3447,7 +3487,10 @@ describe('Evaluator', () => { // rotateVector test('It should fail to rotateVector when using bfv', () => { const item = seal.Evaluator(bfvContext) - const arr = Int32Array.from({ length: bfvBatchEncoder.slotCount }, (_, i) => i) + const arr = Int32Array.from( + { length: bfvBatchEncoder.slotCount }, + (_, i) => i + ) const plain = bfvBatchEncoder.encode(arr) as PlainText const cipher = bfvEncryptor.encrypt(plain) as CipherText const cipherDest = seal.CipherText() @@ -3459,7 +3502,10 @@ describe('Evaluator', () => { }) test('It should fail to rotateVector when using bgv', () => { const item = seal.Evaluator(bgvContext) - const arr = Int32Array.from({ length: bgvBatchEncoder.slotCount }, (_, i) => i) + const arr = Int32Array.from( + { length: bgvBatchEncoder.slotCount }, + (_, i) => i + ) const plain = bgvBatchEncoder.encode(arr) as PlainText const cipher = bgvEncryptor.encrypt(plain) as CipherText const cipherDest = seal.CipherText() @@ -3502,7 +3548,10 @@ describe('Evaluator', () => { // complexConjugate test('It should fail to complexConjugate when using bfv', () => { const item = seal.Evaluator(bfvContext) - const arr = Int32Array.from({ length: bfvBatchEncoder.slotCount }, (_, i) => i) + const arr = Int32Array.from( + { length: bfvBatchEncoder.slotCount }, + (_, i) => i + ) const plain = bfvBatchEncoder.encode(arr) as PlainText const cipher = bfvEncryptor.encrypt(plain) as CipherText const cipherDest = seal.CipherText() @@ -3514,7 +3563,10 @@ describe('Evaluator', () => { }) test('It should fail to complexConjugate when using bgv', () => { const item = seal.Evaluator(bgvContext) - const arr = Int32Array.from({ length: bgvBatchEncoder.slotCount }, (_, i) => i) + const arr = Int32Array.from( + { length: bgvBatchEncoder.slotCount }, + (_, i) => i + ) const plain = bgvBatchEncoder.encode(arr) as PlainText const cipher = bgvEncryptor.encrypt(plain) as CipherText const cipherDest = seal.CipherText() diff --git a/src/__tests__/key-generator.test.ts b/src/__tests__/key-generator.test.ts index e9eebe6b..9b8da9d5 100644 --- a/src/__tests__/key-generator.test.ts +++ b/src/__tests__/key-generator.test.ts @@ -52,17 +52,17 @@ describe('KeyGenerator', () => { test('It should construct an instance', () => { const Constructor = jest.fn(seal.KeyGenerator) Constructor(context) - expect(Constructor).toBeCalledWith(context) + expect(Constructor).toHaveBeenCalledWith(context) }) test('It should construct an instance with a secretkey', () => { const Constructor = jest.fn(seal.KeyGenerator) Constructor(context, secretKey) - expect(Constructor).toBeCalledWith(context, secretKey) + expect(Constructor).toHaveBeenCalledWith(context, secretKey) }) test('It should fail to construct an instance', () => { const Constructor = jest.fn(seal.KeyGenerator) expect(() => Constructor(null as unknown as Context)).toThrow() - expect(Constructor).toBeCalledWith(null) + expect(Constructor).toHaveBeenCalledWith(null) }) test('It should have properties', () => { const item = seal.KeyGenerator(context) diff --git a/src/__tests__/modulus.test.ts b/src/__tests__/modulus.test.ts index 15ee475f..86263448 100644 --- a/src/__tests__/modulus.test.ts +++ b/src/__tests__/modulus.test.ts @@ -16,17 +16,17 @@ describe('Modulus', () => { test('It should construct an instance', () => { const Constructor = jest.fn(seal.Modulus) Constructor(BigInt('0')) - expect(Constructor).toBeCalledWith(BigInt('0')) + expect(Constructor).toHaveBeenCalledWith(BigInt('0')) }) test('It should construct an instance from a string', () => { const Constructor = jest.fn(seal.Modulus) Constructor(BigInt('2')) - expect(Constructor).toBeCalledWith(BigInt('2')) + expect(Constructor).toHaveBeenCalledWith(BigInt('2')) }) test('It should fail to construct an instance', () => { const Constructor = jest.fn(seal.Modulus) expect(() => Constructor(BigInt('1'))).toThrow() - expect(Constructor).toBeCalledWith(BigInt('1')) + expect(Constructor).toHaveBeenCalledWith(BigInt('1')) }) test('It should have properties', () => { const modulus = seal.Modulus(BigInt('5')) diff --git a/src/__tests__/parms-id-type.test.ts b/src/__tests__/parms-id-type.test.ts index e4b27944..7781de67 100644 --- a/src/__tests__/parms-id-type.test.ts +++ b/src/__tests__/parms-id-type.test.ts @@ -27,12 +27,12 @@ describe('ParmsIdType', () => { test('It should construct an instance', () => { const Constructor = jest.fn(seal.ParmsIdType) Constructor() - expect(Constructor).toBeCalledWith() + expect(Constructor).toHaveBeenCalledWith() }) test('It should construct from an existing an instance', () => { const Constructor = jest.fn(seal.ParmsIdType) Constructor() - expect(Constructor).toBeCalledWith() + expect(Constructor).toHaveBeenCalledWith() }) test('It should have properties', () => { const parmsId = context.firstParmsId diff --git a/src/__tests__/plain-text.test.ts b/src/__tests__/plain-text.test.ts index 06531349..8e34292c 100644 --- a/src/__tests__/plain-text.test.ts +++ b/src/__tests__/plain-text.test.ts @@ -54,22 +54,22 @@ describe('PlainText', () => { test('It should construct an instance', () => { const Constructor = jest.fn(seal.PlainText) Constructor() - expect(Constructor).toBeCalledWith() + expect(Constructor).toHaveBeenCalledWith() }) test('It should construct an instance with a coeffCount', () => { const Constructor = jest.fn(seal.PlainText) Constructor({ coeffCount: 2 }) - expect(Constructor).toBeCalledWith({ coeffCount: 2 }) + expect(Constructor).toHaveBeenCalledWith({ coeffCount: 2 }) }) test('It should construct an instance with a coeffCount, capacity', () => { const Constructor = jest.fn(seal.PlainText) Constructor({ capacity: 2, coeffCount: 2 }) - expect(Constructor).toBeCalledWith({ capacity: 2, coeffCount: 2 }) + expect(Constructor).toHaveBeenCalledWith({ capacity: 2, coeffCount: 2 }) }) test('It should fail to construct an instance from invalid parameters', () => { const Constructor = jest.fn(seal.PlainText) expect(() => Constructor({ coeffCount: -1, capacity: 2 })).toThrow() - expect(Constructor).toBeCalledWith({ + expect(Constructor).toHaveBeenCalledWith({ coeffCount: -1, capacity: 2 }) @@ -77,7 +77,7 @@ describe('PlainText', () => { test('It should fail to construct an instance from bad parameters', () => { const Constructor = jest.fn(seal.PlainText) expect(() => Constructor({ capacity: 2 })).toThrow() - expect(Constructor).toBeCalledWith({ capacity: 2 }) + expect(Constructor).toHaveBeenCalledWith({ capacity: 2 }) }) test('It should have properties', () => { const plainText = seal.PlainText() diff --git a/src/__tests__/vector.test.ts b/src/__tests__/vector.test.ts index 2f4268cd..63b85e76 100644 --- a/src/__tests__/vector.test.ts +++ b/src/__tests__/vector.test.ts @@ -16,7 +16,7 @@ describe('Vector', () => { test('It should construct an instance', () => { const Constructor = jest.fn(seal.Vector) Constructor() - expect(Constructor).toBeCalledWith() + expect(Constructor).toHaveBeenCalledWith() }) test('It should construct an instance with of uint8', () => { const vector = seal.Vector() diff --git a/src/implementation/batch-encoder.ts b/src/implementation/batch-encoder.ts index 43f5bfcc..8f1c61fd 100644 --- a/src/implementation/batch-encoder.ts +++ b/src/implementation/batch-encoder.ts @@ -55,269 +55,269 @@ export type BatchEncoder = { const BatchEncoderConstructor = (library: Library): BatchEncoderDependencies => - ({ - Exception, - MemoryPoolHandle, - PlainText, - Vector - }: BatchEncoderDependencyOptions): BatchEncoderConstructorOptions => - (context): BatchEncoder => { - const Constructor = library.BatchEncoder - let _instance: Instance - try { - _instance = new Constructor(context.instance) - } catch (e) { - throw Exception.safe(e as SealError) + ({ + Exception, + MemoryPoolHandle, + PlainText, + Vector + }: BatchEncoderDependencyOptions): BatchEncoderConstructorOptions => + (context): BatchEncoder => { + const Constructor = library.BatchEncoder + let _instance: Instance + try { + _instance = new Constructor(context.instance) + } catch (e) { + throw Exception.safe(e as SealError) + } + /** + * @implements BatchEncoder + */ + + /** + * @interface BatchEncoder + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name BatchEncoder#instance + * @type {Instance} + */ + get instance() { + return _instance + }, + + /** + * Inject this object with a raw WASM instance. No type checking is performed. + * + * @private + * @function + * @name BatchEncoder#unsafeInject + * @param {Instance} instance WASM instance + */ + unsafeInject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined } - /** - * @implements BatchEncoder - */ + _instance = instance + }, - /** - * @interface BatchEncoder - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name BatchEncoder#instance - * @type {Instance} - */ - get instance() { - return _instance - }, + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name BatchEncoder#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined + } + }, - /** - * Inject this object with a raw WASM instance. No type checking is performed. - * - * @private - * @function - * @name BatchEncoder#unsafeInject - * @param {Instance} instance WASM instance - */ - unsafeInject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined + /** + * Creates a PlainText from a given matrix. This function "batches" a given matrix + * of either signed or unsigned integers modulo the PlainText modulus into a PlainText element, and stores + * the result in the destination parameter. The input array must have size at most equal + * to the degree of the polynomial modulus. The first half of the elements represent the + * first row of the matrix, and the second half represent the second row. The numbers + * in the matrix can be at most equal to the PlainText modulus for it to represent + * a valid PlainText. + * + * If the destination PlainText overlaps the input values in memory, the behavior of + * this function is undefined. + * + * @function + * @name BatchEncoder#encode + * @param {Int32Array|Uint32Array|BigInt64Array|BigUint64Array} array Data to encode + * @param {PlainText} [plainText=null] Destination to store the encoded result + * @returns {PlainText|void} A new PlainText holding the encoded data or void if one was provided + * @example + * import SEAL from 'node-seal' + * const seal = await SEAL() + * ... + * const batchEncoder = seal.BatchEncoder(context) + * + * const plainText = batchEncoder.encode(Int32Array.from([1, -2, 3])) + */ + encode( + array: Int32Array | Uint32Array | BigInt64Array | BigUint64Array, + plainText?: PlainText + ): PlainText | void { + try { + if (array.constructor === Int32Array) { + if (plainText) { + _instance.encode(array, plainText.instance, 'INT32') + return } - _instance = instance - }, + const plain = PlainText() + _instance.encode(array, plain.instance, 'INT32') + return plain + } - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name BatchEncoder#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined + if (array.constructor === Uint32Array) { + if (plainText) { + _instance.encode(array, plainText.instance, 'UINT32') + return } - }, - - /** - * Creates a PlainText from a given matrix. This function "batches" a given matrix - * of either signed or unsigned integers modulo the PlainText modulus into a PlainText element, and stores - * the result in the destination parameter. The input array must have size at most equal - * to the degree of the polynomial modulus. The first half of the elements represent the - * first row of the matrix, and the second half represent the second row. The numbers - * in the matrix can be at most equal to the PlainText modulus for it to represent - * a valid PlainText. - * - * If the destination PlainText overlaps the input values in memory, the behavior of - * this function is undefined. - * - * @function - * @name BatchEncoder#encode - * @param {Int32Array|Uint32Array|BigInt64Array|BigUint64Array} array Data to encode - * @param {PlainText} [plainText=null] Destination to store the encoded result - * @returns {PlainText|void} A new PlainText holding the encoded data or void if one was provided - * @example - * import SEAL from 'node-seal' - * const seal = await SEAL() - * ... - * const batchEncoder = seal.BatchEncoder(context) - * - * const plainText = batchEncoder.encode(Int32Array.from([1, -2, 3])) - */ - encode( - array: Int32Array | Uint32Array | BigInt64Array | BigUint64Array, - plainText?: PlainText - ): PlainText | void { - try { - if (array.constructor === Int32Array) { - if (plainText) { - _instance.encode(array, plainText.instance, 'INT32') - return - } - const plain = PlainText() - _instance.encode(array, plain.instance, 'INT32') - return plain - } - - if (array.constructor === Uint32Array) { - if (plainText) { - _instance.encode(array, plainText.instance, 'UINT32') - return - } - const plain = PlainText() - _instance.encode(array, plain.instance, 'UINT32') - return plain - } - - if (array.constructor === BigInt64Array) { - // When embind supports BigInt64Arrays we can remove this hack - const stringArray = array.toString().split(',') - if (plainText) { - _instance.encode(stringArray, plainText.instance, 'INT64') - return - } - const plain = PlainText() - _instance.encode(stringArray, plain.instance, 'INT64') - return plain - } - - if (array.constructor === BigUint64Array) { - // When embind supports BigInt64Arrays we can remove this hack - const stringArray = array.toString().split(',') - if (plainText) { - _instance.encode(stringArray, plainText.instance, 'UINT64') - return - } - const plain = PlainText() - _instance.encode(stringArray, plain.instance, 'UINT64') - return plain - } + const plain = PlainText() + _instance.encode(array, plain.instance, 'UINT32') + return plain + } - throw new Error(UNSUPPORTED_BATCH_ENCODE_ARRAY_TYPE) - } catch (e) { - throw Exception.safe(e as SealError) + if (array.constructor === BigInt64Array) { + // When embind supports BigInt64Arrays we can remove this hack + const stringArray = array.toString().split(',') + if (plainText) { + _instance.encode(stringArray, plainText.instance, 'INT64') + return } - }, + const plain = PlainText() + _instance.encode(stringArray, plain.instance, 'INT64') + return plain + } - /** - * Inverse of encode. This function "unbatches" a given PlainText into a matrix - * of signed or unsigned integers modulo the PlainText modulus, and stores the result in the destination - * parameter. The input PlainText must have degrees less than the polynomial modulus, - * and coefficients less than the PlainText modulus, i.e. it must be a valid PlainText - * for the encryption parameters. Dynamic memory allocations in the process are - * allocated from the memory pool pointed to by the given MemoryPoolHandle. - * - * @function - * @name BatchEncoder#decode - * @param {PlainText} plainText Data to decode - * @param {boolean} [signed=true] By default, decode as an Int32Array. If false, decode as an Uint32Array - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] - * @returns {Int32Array|Uint32Array} TypedArray containing the decoded data - * @example - * import SEAL from 'node-seal' - * const seal = await SEAL() - * ... - * const batchEncoder = seal.BatchEncoder(context) - * - * const plainText = batchEncoder.encode(Int32Array.from([1, -2, 3])) - * const plainTextU = batchEncoder.encode(Uint32Array.from([1, 2, 3])) - * - * const result = batchEncoder.decode(plainText) - * const resultU = batchEncoder.decode(plainTextU, false) // To decode as an Uint32Array - */ - decode( - plainText: PlainText, - signed: boolean = true, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): Int32Array | Uint32Array { - try { - if (signed) { - const tempVect = Vector() - const instance = _instance.decodeInt32(plainText.instance, pool) - tempVect.unsafeInject(instance) - tempVect.setType('Int32Array') - const tempArr = tempVect.toArray() as Int32Array - tempVect.delete() - return tempArr - } - const tempVect = Vector() - const instance = _instance.decodeUint32(plainText.instance, pool) - tempVect.unsafeInject(instance) - tempVect.setType('Uint32Array') - const tempArr = tempVect.toArray() as Uint32Array - tempVect.delete() - return tempArr - } catch (e) { - throw Exception.safe(e as SealError) + if (array.constructor === BigUint64Array) { + // When embind supports BigInt64Arrays we can remove this hack + const stringArray = array.toString().split(',') + if (plainText) { + _instance.encode(stringArray, plainText.instance, 'UINT64') + return } - }, + const plain = PlainText() + _instance.encode(stringArray, plain.instance, 'UINT64') + return plain + } - /** - * Performs the same function as the 32-bit decode, but supports true - * 64-bit values encapsulated by a BigInt. - * - * There's no official support for sending a BigInt64Array/BigUint64Array - * from C++ to JS, therefore this function uses string conversion to - * marshal data which is noticably slower. Use this function if you - * absolutely need to marshal values larger than 32 bits. - * - * @see {@link BatchEncoder#decode} for more information about decode. - * @function - * @name BatchEncoder#decodeBigInt - * @param {PlainText} plainText Data to decode - * @param {boolean} [signed=true] By default, decode as an BigInt64Array. If false, decode as an BigUint64Array - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] - * @returns {BigInt64Array|BigUint64Array} TypedArray containing the decoded data - * @example - * import SEAL from 'node-seal' - * const seal = await SEAL() - * ... - * const batchEncoder = seal.BatchEncoder(context) - * - * const plainText = batchEncoder.encode(BigInt64Array.from([1n, -2n, 3n])) - * const plainTextU = batchEncoder.encode(BigUint64Array.from([1n, 2n, 3n])) - * - * const result = batchEncoder.decodeBigInt(plainText) - * const resultU = batchEncoder.decodeBigInt(plainTextU, false) // To decode as an BigUint64Array - */ - decodeBigInt( - plainText: PlainText, - signed: boolean = true, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): BigInt64Array | BigUint64Array { - try { - if (signed) { - const instance = _instance.decodeBigInt( - plainText.instance, - true, - pool - ) - return BigInt64Array.from(instance) - } - const instance = _instance.decodeBigInt( - plainText.instance, - false, - pool - ) - return BigUint64Array.from(instance) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + throw new Error(UNSUPPORTED_BATCH_ENCODE_ARRAY_TYPE) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * The total number of batching slots available to hold data - * - * @readonly - * @name BatchEncoder#slotCount - * @type {number} - */ - get slotCount() { - return _instance.slotCount() + /** + * Inverse of encode. This function "unbatches" a given PlainText into a matrix + * of signed or unsigned integers modulo the PlainText modulus, and stores the result in the destination + * parameter. The input PlainText must have degrees less than the polynomial modulus, + * and coefficients less than the PlainText modulus, i.e. it must be a valid PlainText + * for the encryption parameters. Dynamic memory allocations in the process are + * allocated from the memory pool pointed to by the given MemoryPoolHandle. + * + * @function + * @name BatchEncoder#decode + * @param {PlainText} plainText Data to decode + * @param {boolean} [signed=true] By default, decode as an Int32Array. If false, decode as an Uint32Array + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] + * @returns {Int32Array|Uint32Array} TypedArray containing the decoded data + * @example + * import SEAL from 'node-seal' + * const seal = await SEAL() + * ... + * const batchEncoder = seal.BatchEncoder(context) + * + * const plainText = batchEncoder.encode(Int32Array.from([1, -2, 3])) + * const plainTextU = batchEncoder.encode(Uint32Array.from([1, 2, 3])) + * + * const result = batchEncoder.decode(plainText) + * const resultU = batchEncoder.decode(plainTextU, false) // To decode as an Uint32Array + */ + decode( + plainText: PlainText, + signed = true, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): Int32Array | Uint32Array { + try { + if (signed) { + const tempVect = Vector() + const instance = _instance.decodeInt32(plainText.instance, pool) + tempVect.unsafeInject(instance) + tempVect.setType('Int32Array') + const tempArr = tempVect.toArray() as Int32Array + tempVect.delete() + return tempArr } + const tempVect = Vector() + const instance = _instance.decodeUint32(plainText.instance, pool) + tempVect.unsafeInject(instance) + tempVect.setType('Uint32Array') + const tempArr = tempVect.toArray() as Uint32Array + tempVect.delete() + return tempArr + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Performs the same function as the 32-bit decode, but supports true + * 64-bit values encapsulated by a BigInt. + * + * There's no official support for sending a BigInt64Array/BigUint64Array + * from C++ to JS, therefore this function uses string conversion to + * marshal data which is noticably slower. Use this function if you + * absolutely need to marshal values larger than 32 bits. + * + * @see {@link BatchEncoder#decode} for more information about decode. + * @function + * @name BatchEncoder#decodeBigInt + * @param {PlainText} plainText Data to decode + * @param {boolean} [signed=true] By default, decode as an BigInt64Array. If false, decode as an BigUint64Array + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] + * @returns {BigInt64Array|BigUint64Array} TypedArray containing the decoded data + * @example + * import SEAL from 'node-seal' + * const seal = await SEAL() + * ... + * const batchEncoder = seal.BatchEncoder(context) + * + * const plainText = batchEncoder.encode(BigInt64Array.from([1n, -2n, 3n])) + * const plainTextU = batchEncoder.encode(BigUint64Array.from([1n, 2n, 3n])) + * + * const result = batchEncoder.decodeBigInt(plainText) + * const resultU = batchEncoder.decodeBigInt(plainTextU, false) // To decode as an BigUint64Array + */ + decodeBigInt( + plainText: PlainText, + signed = true, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): BigInt64Array | BigUint64Array { + try { + if (signed) { + const instance = _instance.decodeBigInt( + plainText.instance, + true, + pool + ) + return BigInt64Array.from(instance) + } + const instance = _instance.decodeBigInt( + plainText.instance, + false, + pool + ) + return BigUint64Array.from(instance) + } catch (e) { + throw Exception.safe(e as SealError) } + }, + + /** + * The total number of batching slots available to hold data + * + * @readonly + * @name BatchEncoder#slotCount + * @type {number} + */ + get slotCount() { + return _instance.slotCount() } + } + } export const BatchEncoderInit = ({ loader diff --git a/src/implementation/cipher-text.ts b/src/implementation/cipher-text.ts index 72429bc2..0428b974 100644 --- a/src/implementation/cipher-text.ts +++ b/src/implementation/cipher-text.ts @@ -66,429 +66,429 @@ export type CipherText = { const CipherTextConstructor = (library: Library): CipherTextDependencies => - ({ - Exception, - ComprModeType, - ParmsIdType, - MemoryPoolHandle, - Vector - }: CipherTextDependencyOptions): CipherTextConstructorOptions => - ({ - context, - parmsId, - sizeCapacity, - pool = MemoryPoolHandle.global - } = {}): CipherText => { - // Static methods - const Constructor = library.Ciphertext + ({ + Exception, + ComprModeType, + ParmsIdType, + MemoryPoolHandle, + Vector + }: CipherTextDependencyOptions): CipherTextConstructorOptions => + ({ + context, + parmsId, + sizeCapacity, + pool = MemoryPoolHandle.global + } = {}): CipherText => { + // Static methods + const Constructor = library.Ciphertext - let _instance = construct({ - context, - parmsId, - sizeCapacity, - pool - }) + let _instance = construct({ + context, + parmsId, + sizeCapacity, + pool + }) - function construct({ - context, - parmsId, - sizeCapacity, - pool = MemoryPoolHandle.global - }: { - context?: Context - parmsId?: ParmsIdType - sizeCapacity?: number - pool?: MemoryPoolHandle - }) { - try { - if (!context && !parmsId && sizeCapacity === undefined) { - return new Constructor(pool) - } else if (context && !parmsId && sizeCapacity === undefined) { - return new Constructor(context.instance, pool) - } else if (context && parmsId && sizeCapacity === undefined) { - return new Constructor(context.instance, parmsId.instance, pool) - } else if (context && parmsId && sizeCapacity !== undefined) { - return new Constructor( - context.instance, - parmsId.instance, - sizeCapacity, - pool - ) - } else { - throw new Error(INVALID_CIPHER_CONSTRUCTOR_OPTIONS) - } - } catch (e) { - throw Exception.safe(e as SealError) - } + function construct({ + context, + parmsId, + sizeCapacity, + pool = MemoryPoolHandle.global + }: { + context?: Context + parmsId?: ParmsIdType + sizeCapacity?: number + pool?: MemoryPoolHandle + }) { + try { + if (!context && !parmsId && sizeCapacity === undefined) { + return new Constructor(pool) + } else if (context && !parmsId && sizeCapacity === undefined) { + return new Constructor(context.instance, pool) + } else if (context && parmsId && sizeCapacity === undefined) { + return new Constructor(context.instance, parmsId.instance, pool) + } else if (context && parmsId && sizeCapacity !== undefined) { + return new Constructor( + context.instance, + parmsId.instance, + sizeCapacity, + pool + ) + } else { + throw new Error(INVALID_CIPHER_CONSTRUCTOR_OPTIONS) } - /** - * @implements CipherText - */ + } catch (e) { + throw Exception.safe(e as SealError) + } + } + /** + * @implements CipherText + */ - /** - * @interface CipherText - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name CipherText#instance - * @type {Instance} - */ - get instance() { - return _instance - }, + /** + * @interface CipherText + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name CipherText#instance + * @type {Instance} + */ + get instance() { + return _instance + }, - /** - * Inject this object with a raw WASM instance. No type checking is performed. - * - * @private - * @function - * @name CipherText#unsafeInject - * @param {Instance} instance WASM instance - */ - unsafeInject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined - } - _instance = instance - }, + /** + * Inject this object with a raw WASM instance. No type checking is performed. + * + * @private + * @function + * @name CipherText#unsafeInject + * @param {Instance} instance WASM instance + */ + unsafeInject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined + } + _instance = instance + }, - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name CipherText#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined - } - }, + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name CipherText#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined + } + }, - /** - * Allocates enough memory to accommodate the backing array of a ciphertext - * with given capacity. In addition to the capacity, the allocation size is - * determined by the current encryption parameters. - * - * @function - * @name CipherText#reserve - * @param {Context} context The SEAL Context - * @param {number} capacity The capacity to reserve - */ - reserve(context: Context, capacity: number) { - try { - return _instance.reserve(context.instance, capacity) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Allocates enough memory to accommodate the backing array of a ciphertext + * with given capacity. In addition to the capacity, the allocation size is + * determined by the current encryption parameters. + * + * @function + * @name CipherText#reserve + * @param {Context} context The SEAL Context + * @param {number} capacity The capacity to reserve + */ + reserve(context: Context, capacity: number) { + try { + return _instance.reserve(context.instance, capacity) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Resizes the CipherText to given size, reallocating if the capacity - * of the CipherText is too small. - * - * This function is mainly intended for internal use and is called - * automatically by functions such as Evaluator.multiply and - * Evaluator.relinearize. A normal user should never have a reason - * to manually resize a CipherText. - * - * @function - * @name CipherText#resize - * @param {number} size The new size - */ - resize(size: number) { - try { - return _instance.resize(size) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Resizes the CipherText to given size, reallocating if the capacity + * of the CipherText is too small. + * + * This function is mainly intended for internal use and is called + * automatically by functions such as Evaluator.multiply and + * Evaluator.relinearize. A normal user should never have a reason + * to manually resize a CipherText. + * + * @function + * @name CipherText#resize + * @param {number} size The new size + */ + resize(size: number) { + try { + return _instance.resize(size) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Resets the CipherText. This function releases any memory allocated - * by the CipherText, returning it to the memory pool. It also sets all - * encryption parameter specific size information to zero. - * - * @function - * @name CipherText#release - */ - release() { - _instance.release() - }, + /** + * Resets the CipherText. This function releases any memory allocated + * by the CipherText, returning it to the memory pool. It also sets all + * encryption parameter specific size information to zero. + * + * @function + * @name CipherText#release + */ + release() { + _instance.release() + }, - /** - * The number of primes in the coefficient modulus of the - * associated encryption parameters. This directly affects the - * allocation size of the CipherText. - * - * @readonly - * @name CipherText#coeffModulusSize - * @type {number} - */ - get coeffModulusSize() { - return _instance.coeffModulusSize() - }, + /** + * The number of primes in the coefficient modulus of the + * associated encryption parameters. This directly affects the + * allocation size of the CipherText. + * + * @readonly + * @name CipherText#coeffModulusSize + * @type {number} + */ + get coeffModulusSize() { + return _instance.coeffModulusSize() + }, - /** - * The degree of the polynomial modulus of the associated - * encryption parameters. This directly affects the allocation size - * of the CipherText. - * - * @readonly - * @name CipherText#polyModulusDegree - * @type {number} - */ - get polyModulusDegree() { - return _instance.polyModulusDegree() - }, + /** + * The degree of the polynomial modulus of the associated + * encryption parameters. This directly affects the allocation size + * of the CipherText. + * + * @readonly + * @name CipherText#polyModulusDegree + * @type {number} + */ + get polyModulusDegree() { + return _instance.polyModulusDegree() + }, - /** - * The size of the CipherText. - * - * @readonly - * @name CipherText#size - * @type {number} - */ - get size() { - return _instance.size() - }, + /** + * The size of the CipherText. + * + * @readonly + * @name CipherText#size + * @type {number} + */ + get size() { + return _instance.size() + }, - /** - * The capacity of the allocation. This means the largest size - * of the CipherText that can be stored in the current allocation with - * the current encryption parameters. - * - * @readonly - * @name CipherText#sizeCapacity - * @type {number} - */ - get sizeCapacity() { - return _instance.sizeCapacity() - }, + /** + * The capacity of the allocation. This means the largest size + * of the CipherText that can be stored in the current allocation with + * the current encryption parameters. + * + * @readonly + * @name CipherText#sizeCapacity + * @type {number} + */ + get sizeCapacity() { + return _instance.sizeCapacity() + }, - /** - * Whether the current CipherText is transparent, i.e. does not require - * a secret key to decrypt. In typical security models such transparent - * CipherTexts would not be considered to be valid. Starting from the second - * polynomial in the current CipherText, this function returns true if all - * following coefficients are identically zero. Otherwise, returns false. - * - * @readonly - * @name CipherText#isTransparent - * @type {boolean} - */ - get isTransparent() { - return _instance.isTransparent() - }, + /** + * Whether the current CipherText is transparent, i.e. does not require + * a secret key to decrypt. In typical security models such transparent + * CipherTexts would not be considered to be valid. Starting from the second + * polynomial in the current CipherText, this function returns true if all + * following coefficients are identically zero. Otherwise, returns false. + * + * @readonly + * @name CipherText#isTransparent + * @type {boolean} + */ + get isTransparent() { + return _instance.isTransparent() + }, - /** - * Whether the CipherText is in NTT form. - * - * @readonly - * @name CipherText#isNttForm - * @type {boolean} - */ - get isNttForm() { - return _instance.isNttForm() - }, + /** + * Whether the CipherText is in NTT form. + * + * @readonly + * @name CipherText#isNttForm + * @type {boolean} + */ + get isNttForm() { + return _instance.isNttForm() + }, - /** - * The reference to parmsId. - * @see {@link EncryptionParameters} for more information about parmsId. - * - * @readonly - * @name CipherText#parmsId - * @type {ParmsIdType} - */ - get parmsId() { - const parms = ParmsIdType() - parms.inject(_instance.parmsId()) - return parms - }, + /** + * The reference to parmsId. + * @see {@link EncryptionParameters} for more information about parmsId. + * + * @readonly + * @name CipherText#parmsId + * @type {ParmsIdType} + */ + get parmsId() { + const parms = ParmsIdType() + parms.inject(_instance.parmsId()) + return parms + }, - /** - * The reference to the scale. This is only needed when using the - * CKKS encryption scheme. The user should have little or no reason to ever - * change the scale by hand. - * - * @readonly - * @name CipherText#scale - * @type {number} - */ - get scale() { - return _instance.scale() - }, + /** + * The reference to the scale. This is only needed when using the + * CKKS encryption scheme. The user should have little or no reason to ever + * change the scale by hand. + * + * @readonly + * @name CipherText#scale + * @type {number} + */ + get scale() { + return _instance.scale() + }, - /** - * Sets the CipherText scale. This is only needed when using the - * CKKS encryption scheme. The user should have little or no reason to ever - * change the scale by hand. - * - * @function - * @name CipherText#setScale - * @param {number} scale The scale to set - */ - setScale(scale: number) { - _instance.setScale(scale) - }, + /** + * Sets the CipherText scale. This is only needed when using the + * CKKS encryption scheme. The user should have little or no reason to ever + * change the scale by hand. + * + * @function + * @name CipherText#setScale + * @param {number} scale The scale to set + */ + setScale(scale: number) { + _instance.setScale(scale) + }, - /** - * The currently used MemoryPoolHandle. - * - * @readonly - * @name CipherText#pool - * @type {MemoryPoolHandle} - */ - get pool() { - return _instance.pool() - }, + /** + * The currently used MemoryPoolHandle. + * + * @readonly + * @name CipherText#pool + * @type {MemoryPoolHandle} + */ + get pool() { + return _instance.pool() + }, - /** - * Save the CipherText to a base64 string - * - * @function - * @name CipherText#save - * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use - * @returns {string} Base64 encoded string - */ - save(compression: ComprModeType = ComprModeType.zstd): string { - return _instance.saveToString(compression) - }, + /** + * Save the CipherText to a base64 string + * + * @function + * @name CipherText#save + * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use + * @returns {string} Base64 encoded string + */ + save(compression: ComprModeType = ComprModeType.zstd): string { + return _instance.saveToString(compression) + }, - /** - * Save the CipherText as a binary Uint8Array - * - * @function - * @name CipherText#saveArray - * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use - * @returns {Uint8Array} A byte array containing the CipherText in binary form - */ - saveArray(compression: ComprModeType = ComprModeType.zstd): Uint8Array { - const tempVect = Vector() - const instance = _instance.saveToArray(compression) - tempVect.unsafeInject(instance) - tempVect.setType('Uint8Array') - const tempArr = tempVect.toArray() as Uint8Array - tempVect.delete() - return tempArr - }, + /** + * Save the CipherText as a binary Uint8Array + * + * @function + * @name CipherText#saveArray + * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use + * @returns {Uint8Array} A byte array containing the CipherText in binary form + */ + saveArray(compression: ComprModeType = ComprModeType.zstd): Uint8Array { + const tempVect = Vector() + const instance = _instance.saveToArray(compression) + tempVect.unsafeInject(instance) + tempVect.setType('Uint8Array') + const tempArr = tempVect.toArray() as Uint8Array + tempVect.delete() + return tempArr + }, - /** - * Load a CipherText from a base64 string - * - * @function - * @name CipherText#load - * @param {Context} context Encryption context to enforce - * @param {string} encoded Base64 encoded string - */ - load(context: Context, encoded: string) { - try { - _instance.loadFromString(context.instance, encoded) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Load a CipherText from a base64 string + * + * @function + * @name CipherText#load + * @param {Context} context Encryption context to enforce + * @param {string} encoded Base64 encoded string + */ + load(context: Context, encoded: string) { + try { + _instance.loadFromString(context.instance, encoded) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Load a CipherText from an Uint8Array holding binary data - * - * @function - * @name CipherText#loadArray - * @param {Context} context Encryption context to enforce - * @param {Uint8Array} array TypedArray containing binary data - */ - loadArray(context: Context, array: Uint8Array) { - try { - _instance.loadFromArray(context.instance, array) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Load a CipherText from an Uint8Array holding binary data + * + * @function + * @name CipherText#loadArray + * @param {Context} context Encryption context to enforce + * @param {Uint8Array} array TypedArray containing binary data + */ + loadArray(context: Context, array: Uint8Array) { + try { + _instance.loadFromArray(context.instance, array) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Copy an existing CipherText and overwrite this instance - * - * @function - * @name CipherText#copy - * @param {CipherText} cipher CipherText to copy - * @example - * const cipherTextA = seal.CipherText() - * // ... after encoding some data ... - * const cipherTextB = seal.CipherText() - * cipherTextB.copy(cipherTextA) - * // cipherTextB holds a copy of cipherTextA - */ - copy(cipher: CipherText) { - try { - _instance.copy(cipher.instance) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Copy an existing CipherText and overwrite this instance + * + * @function + * @name CipherText#copy + * @param {CipherText} cipher CipherText to copy + * @example + * const cipherTextA = seal.CipherText() + * // ... after encoding some data ... + * const cipherTextB = seal.CipherText() + * cipherTextB.copy(cipherTextA) + * // cipherTextB holds a copy of cipherTextA + */ + copy(cipher: CipherText) { + try { + _instance.copy(cipher.instance) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Clone and return a new instance of this CipherText - * - * @function - * @name CipherText#clone - * @returns {CipherText} - * @example - * const cipherTextA = seal.CipherText() - * // ... after encoding some data ... - * const cipherTextB = cipherTextA.clone() - * // cipherTextB holds a copy of cipherTextA - */ - clone(): CipherText { - try { - const clonedInstance = _instance.clone() - const cipher = CipherTextConstructor(library)({ - Exception, - ComprModeType, - ParmsIdType, - MemoryPoolHandle, - Vector - })() - cipher.unsafeInject(clonedInstance) - return cipher - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Clone and return a new instance of this CipherText + * + * @function + * @name CipherText#clone + * @returns {CipherText} + * @example + * const cipherTextA = seal.CipherText() + * // ... after encoding some data ... + * const cipherTextB = cipherTextA.clone() + * // cipherTextB holds a copy of cipherTextA + */ + clone(): CipherText { + try { + const clonedInstance = _instance.clone() + const cipher = CipherTextConstructor(library)({ + Exception, + ComprModeType, + ParmsIdType, + MemoryPoolHandle, + Vector + })() + cipher.unsafeInject(clonedInstance) + return cipher + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Move a CipherText into this one and delete the old reference - * - * @function - * @name CipherText#move - * @param {CipherText} cipher CipherText to move - * @example - * const cipherTextA = seal.CipherText() - * // ... after encoding some data ... - * const cipherTextB = seal.CipherText() - * cipherTextB.move(cipherTextA) - * // cipherTextB holds a the instance of cipherTextA. - * // cipherTextA no longer holds an instance - */ - move(cipher: CipherText) { - try { - _instance.move(cipher.instance) - // TODO: find optimization - // This method results in a copy instead of a real move. - // Therefore, we need to delete the old instance. - cipher.delete() - } catch (e) { - throw Exception.safe(e as SealError) - } - } + /** + * Move a CipherText into this one and delete the old reference + * + * @function + * @name CipherText#move + * @param {CipherText} cipher CipherText to move + * @example + * const cipherTextA = seal.CipherText() + * // ... after encoding some data ... + * const cipherTextB = seal.CipherText() + * cipherTextB.move(cipherTextA) + * // cipherTextB holds a the instance of cipherTextA. + * // cipherTextA no longer holds an instance + */ + move(cipher: CipherText) { + try { + _instance.move(cipher.instance) + // TODO: find optimization + // This method results in a copy instead of a real move. + // Therefore, we need to delete the old instance. + cipher.delete() + } catch (e) { + throw Exception.safe(e as SealError) } } + } + } export const CipherTextInit = ({ loader diff --git a/src/implementation/ckks-encoder.ts b/src/implementation/ckks-encoder.ts index 1e631683..999f4407 100644 --- a/src/implementation/ckks-encoder.ts +++ b/src/implementation/ckks-encoder.ts @@ -47,164 +47,164 @@ export type CKKSEncoder = { const CKKSEncoderConstructor = (library: Library): CKKSEncoderDependencies => - ({ - Exception, - MemoryPoolHandle, - PlainText, - Vector - }: CKKSEncoderDependencyOptions): CKKSEncoderConstructorOptions => - (context): CKKSEncoder => { - const Constructor = library.CKKSEncoder - let _instance: Instance - try { - _instance = new Constructor(context.instance) - } catch (e) { - throw Exception.safe(e as SealError) - } - /** - * @implements CKKSEncoder - */ - - /** - * @interface CKKSEncoder - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name CKKSEncoder#instance - * @type {Instance} - */ - get instance() { - return _instance - }, + ({ + Exception, + MemoryPoolHandle, + PlainText, + Vector + }: CKKSEncoderDependencyOptions): CKKSEncoderConstructorOptions => + (context): CKKSEncoder => { + const Constructor = library.CKKSEncoder + let _instance: Instance + try { + _instance = new Constructor(context.instance) + } catch (e) { + throw Exception.safe(e as SealError) + } + /** + * @implements CKKSEncoder + */ - /** - * Inject this object with a raw WASM instance. No type checking is performed. - * - * @private - * @function - * @name CKKSEncoder#unsafeInject - * @param {Instance} instance WASM instance - */ - unsafeInject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined - } - _instance = instance - }, + /** + * @interface CKKSEncoder + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name CKKSEncoder#instance + * @type {Instance} + */ + get instance() { + return _instance + }, - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name CKKSEncoder#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined - } - }, + /** + * Inject this object with a raw WASM instance. No type checking is performed. + * + * @private + * @function + * @name CKKSEncoder#unsafeInject + * @param {Instance} instance WASM instance + */ + unsafeInject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined + } + _instance = instance + }, - /** - * Encodes a vector of double-precision floating-point real numbers - * into a plaintext polynomial. Append zeros if vector size is less than N/2. - * Dynamic memory allocations in the process are allocated from the memory - * pool pointed to by the given MemoryPoolHandle. - * - * @function - * @name CKKSEncoder#encode - * @param {Float64Array} array Data to encode - * @param {number} scale Scaling parameter defining encoding precision - * @param {PlainText} [plainText] Destination to store the encoded result - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {PlainText|void} A new PlainText holding the encoded data or void if one was provided - * @example - * import SEAL from 'node-seal' - * const seal = await SEAL() - * ... - * const ckksEncoder = seal.CKKSEncoder(context) - * - * const plainText = ckksEncoder.encode(Float64Array.from([1.11, -2.222, 3.333]), Math.pow(2, 20)) - */ - encode( - array: Float64Array, - scale: number, - plainText?: PlainText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): PlainText | void { - try { - if (array.constructor === Float64Array) { - if (plainText) { - _instance.encode(array, scale, plainText.instance, pool) - return - } - const plain = PlainText() - _instance.encode(array, scale, plain.instance, pool) - return plain - } else { - throw new Error(UNSUPPORTED_CKKS_ENCODE_ARRAY_TYPE) - } - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name CKKSEncoder#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined + } + }, - /** - * Decodes a plaintext polynomial into double-precision floating-point - * real numbers. Dynamic memory allocations in the process are - * allocated from the memory pool pointed to by the given MemoryPoolHandle. - * - * @function - * @name CKKSEncoder#decode - * @param {PlainText} plainText Data to decode - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {Float64Array} TypedArray containing the decoded data - * @example - * import SEAL from 'node-seal' - * const seal = await SEAL() - * ... - * const ckksEncoder = seal.CKKSEncoder(context) - * - * const plainText = ckksEncoder.encode(Float64Array.from([1, 2, 3])) - * - * const result = ckksEncoder.decode(plainText) - */ - decode( - plainText: PlainText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): Float64Array { - try { - const tempVect = Vector() - const instance = _instance.decodeDouble(plainText.instance, pool) - tempVect.unsafeInject(instance) - tempVect.setType('Float64Array') - const tempArr = tempVect.toArray() as Float64Array - tempVect.delete() - return tempArr - } catch (e) { - throw Exception.safe(e as SealError) + /** + * Encodes a vector of double-precision floating-point real numbers + * into a plaintext polynomial. Append zeros if vector size is less than N/2. + * Dynamic memory allocations in the process are allocated from the memory + * pool pointed to by the given MemoryPoolHandle. + * + * @function + * @name CKKSEncoder#encode + * @param {Float64Array} array Data to encode + * @param {number} scale Scaling parameter defining encoding precision + * @param {PlainText} [plainText] Destination to store the encoded result + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {PlainText|void} A new PlainText holding the encoded data or void if one was provided + * @example + * import SEAL from 'node-seal' + * const seal = await SEAL() + * ... + * const ckksEncoder = seal.CKKSEncoder(context) + * + * const plainText = ckksEncoder.encode(Float64Array.from([1.11, -2.222, 3.333]), Math.pow(2, 20)) + */ + encode( + array: Float64Array, + scale: number, + plainText?: PlainText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): PlainText | void { + try { + if (array.constructor === Float64Array) { + if (plainText) { + _instance.encode(array, scale, plainText.instance, pool) + return } - }, - - /** - * The total number of CKKS slots available to hold data - * - * @readonly - * @name CKKSEncoder#slotCount - * @type {number} - */ - get slotCount() { - return _instance.slotCount() + const plain = PlainText() + _instance.encode(array, scale, plain.instance, pool) + return plain + } else { + throw new Error(UNSUPPORTED_CKKS_ENCODE_ARRAY_TYPE) } + } catch (e) { + throw Exception.safe(e as SealError) } + }, + + /** + * Decodes a plaintext polynomial into double-precision floating-point + * real numbers. Dynamic memory allocations in the process are + * allocated from the memory pool pointed to by the given MemoryPoolHandle. + * + * @function + * @name CKKSEncoder#decode + * @param {PlainText} plainText Data to decode + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {Float64Array} TypedArray containing the decoded data + * @example + * import SEAL from 'node-seal' + * const seal = await SEAL() + * ... + * const ckksEncoder = seal.CKKSEncoder(context) + * + * const plainText = ckksEncoder.encode(Float64Array.from([1, 2, 3])) + * + * const result = ckksEncoder.decode(plainText) + */ + decode( + plainText: PlainText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): Float64Array { + try { + const tempVect = Vector() + const instance = _instance.decodeDouble(plainText.instance, pool) + tempVect.unsafeInject(instance) + tempVect.setType('Float64Array') + const tempArr = tempVect.toArray() as Float64Array + tempVect.delete() + return tempArr + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * The total number of CKKS slots available to hold data + * + * @readonly + * @name CKKSEncoder#slotCount + * @type {number} + */ + get slotCount() { + return _instance.slotCount() } + } + } export const CKKSEncoderInit = ({ loader diff --git a/src/implementation/coeff-modulus.ts b/src/implementation/coeff-modulus.ts index 4880aeb4..fa540fa0 100644 --- a/src/implementation/coeff-modulus.ts +++ b/src/implementation/coeff-modulus.ts @@ -36,91 +36,91 @@ export type CoeffModulus = { const CoeffModulusConstructor = (library: Library): CoeffModulusDependencies => - ({ - Exception, - SecurityLevel, - Vector - }: CoeffModulusDependencyOptions): CoeffModulusConstructorOptions => - (): CoeffModulus => { - // Static methods - const _MaxBitCount = library.CoeffModulus.MaxBitCount - const _BFVDefault = library.CoeffModulus.BFVDefault - const _CreateFromArray = library.CoeffModulus.CreateFromArray + ({ + Exception, + SecurityLevel, + Vector + }: CoeffModulusDependencyOptions): CoeffModulusConstructorOptions => + (): CoeffModulus => { + // Static methods + const _MaxBitCount = library.CoeffModulus.MaxBitCount + const _BFVDefault = library.CoeffModulus.BFVDefault + const _CreateFromArray = library.CoeffModulus.CreateFromArray - /** - * @implements CoeffModulus - */ + /** + * @implements CoeffModulus + */ - /** - * @interface CoeffModulus - */ - return { - /** - * Returns the Maximum Bit Count for the specified polyModulusDegree and securityLevel - * - * @function - * @name CoeffModulus.MaxBitCount - * @param {number} polyModulusDegree Degree of the polynomial modulus - * @param {SecurityLevel} [securityLevel={@link SecurityLevel.tc128}] Security Level - * @returns {number} Maximum bit count - */ - MaxBitCount( - polyModulusDegree: number, - securityLevel: SecurityLevel = SecurityLevel.tc128 - ): number { - return _MaxBitCount(polyModulusDegree, securityLevel) - }, + /** + * @interface CoeffModulus + */ + return { + /** + * Returns the Maximum Bit Count for the specified polyModulusDegree and securityLevel + * + * @function + * @name CoeffModulus.MaxBitCount + * @param {number} polyModulusDegree Degree of the polynomial modulus + * @param {SecurityLevel} [securityLevel={@link SecurityLevel.tc128}] Security Level + * @returns {number} Maximum bit count + */ + MaxBitCount( + polyModulusDegree: number, + securityLevel: SecurityLevel = SecurityLevel.tc128 + ): number { + return _MaxBitCount(polyModulusDegree, securityLevel) + }, - /** - * Returns a default vector of primes for the BFV CoeffModulus parameter - * - * @function - * @name CoeffModulus.BFVDefault - * @param {number} polyModulusDegree Degree of the polynomial modulus - * @param {SecurityLevel} [securityLevel={@link SecurityLevel.tc128}] Security Level - * @returns {Vector} Vector containing Modulus primes - */ - BFVDefault( - polyModulusDegree: number, - securityLevel: SecurityLevel = SecurityLevel.tc128 - ): Vector { - try { - const vectorModulus = Vector() - const instance = _BFVDefault(polyModulusDegree, securityLevel) - vectorModulus.unsafeInject(instance) - vectorModulus.setType('Modulus') - return vectorModulus - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Returns a default vector of primes for the BFV CoeffModulus parameter + * + * @function + * @name CoeffModulus.BFVDefault + * @param {number} polyModulusDegree Degree of the polynomial modulus + * @param {SecurityLevel} [securityLevel={@link SecurityLevel.tc128}] Security Level + * @returns {Vector} Vector containing Modulus primes + */ + BFVDefault( + polyModulusDegree: number, + securityLevel: SecurityLevel = SecurityLevel.tc128 + ): Vector { + try { + const vectorModulus = Vector() + const instance = _BFVDefault(polyModulusDegree, securityLevel) + vectorModulus.unsafeInject(instance) + vectorModulus.setType('Modulus') + return vectorModulus + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Creates a vector of primes for a given polyModulusDegree and bitSizes - * - * @function - * @name CoeffModulus.Create - * @param {number} polyModulusDegree Degree of the polynomial modulus - * @param {Int32Array} bitSizes Int32Array containing values representing - * bit-sizes of primes - * @returns {Vector} Vector containing Modulus primes - */ - Create(polyModulusDegree: number, bitSizes: Int32Array): Vector { - try { - if (bitSizes.constructor !== Int32Array) { - throw new Error(UNSUPPORTED_BITSIZES_TYPE) - } - const vectorModulus = Vector() - const instance = _CreateFromArray(polyModulusDegree, bitSizes) - vectorModulus.unsafeInject(instance) - vectorModulus.setType('Modulus') - return vectorModulus - } catch (e) { - throw Exception.safe(e as SealError) - } + /** + * Creates a vector of primes for a given polyModulusDegree and bitSizes + * + * @function + * @name CoeffModulus.Create + * @param {number} polyModulusDegree Degree of the polynomial modulus + * @param {Int32Array} bitSizes Int32Array containing values representing + * bit-sizes of primes + * @returns {Vector} Vector containing Modulus primes + */ + Create(polyModulusDegree: number, bitSizes: Int32Array): Vector { + try { + if (bitSizes.constructor !== Int32Array) { + throw new Error(UNSUPPORTED_BITSIZES_TYPE) } + const vectorModulus = Vector() + const instance = _CreateFromArray(polyModulusDegree, bitSizes) + vectorModulus.unsafeInject(instance) + vectorModulus.setType('Modulus') + return vectorModulus + } catch (e) { + throw Exception.safe(e as SealError) } } + } + } export const CoeffModulusInit = ({ loader diff --git a/src/implementation/compr-mode-type.ts b/src/implementation/compr-mode-type.ts index 4a7fe5c5..6fb1a946 100644 --- a/src/implementation/compr-mode-type.ts +++ b/src/implementation/compr-mode-type.ts @@ -16,64 +16,64 @@ export type ComprModeType = { const ComprModeTypeConstructor = (library: Library): ComprModeTypeDependencies => - (): ComprModeTypeConstructorOptions => - (): ComprModeType => { - // Static methods - const _none = library.ComprModeType.none - const _zlib = library.ComprModeType.zlib - const _zstd = library.ComprModeType.zstd + (): ComprModeTypeConstructorOptions => + (): ComprModeType => { + // Static methods + const _none = library.ComprModeType.none + const _zlib = library.ComprModeType.zlib + const _zstd = library.ComprModeType.zstd + /** + * @implements ComprModeType + */ + + /** + * @interface ComprModeType + */ + return { + /** + * The `none` Compression Mode Type + * + * @readonly + * @name ComprModeType.none + * @type {ComprModeType.none} + */ + get none() { /** - * @implements ComprModeType + * @typedef {ComprModeType.none} ComprModeType.none */ + return _none + }, + /** + * The `zlib` Compression Mode Type + * + * @readonly + * @name ComprModeType.zlib + * @type {ComprModeType.zlib} + */ + get zlib() { /** - * @interface ComprModeType + * @typedef {ComprModeType.zlib} ComprModeType.zlib */ - return { - /** - * The `none` Compression Mode Type - * - * @readonly - * @name ComprModeType.none - * @type {ComprModeType.none} - */ - get none() { - /** - * @typedef {ComprModeType.none} ComprModeType.none - */ - return _none - }, - - /** - * The `zlib` Compression Mode Type - * - * @readonly - * @name ComprModeType.zlib - * @type {ComprModeType.zlib} - */ - get zlib() { - /** - * @typedef {ComprModeType.zlib} ComprModeType.zlib - */ - return _zlib - }, + return _zlib + }, - /** - * The `zstd` Compression Mode Type - * - * @readonly - * @name ComprModeType.zstd - * @type {ComprModeType.zstd} - */ - get zstd() { - /** - * @typedef {ComprModeType.zstd} ComprModeType.zstd - */ - return _zstd - } - } + /** + * The `zstd` Compression Mode Type + * + * @readonly + * @name ComprModeType.zstd + * @type {ComprModeType.zstd} + */ + get zstd() { + /** + * @typedef {ComprModeType.zstd} ComprModeType.zstd + */ + return _zstd } + } + } export const ComprModeTypeInit = ({ loader diff --git a/src/implementation/context-data.ts b/src/implementation/context-data.ts index e9d2cf41..a21b6bcb 100644 --- a/src/implementation/context-data.ts +++ b/src/implementation/context-data.ts @@ -45,172 +45,172 @@ export type ContextData = { const ContextDataConstructor = (library: Library): ContextDataDependencies => - ({ - Exception, - EncryptionParameters, - ParmsIdType, - EncryptionParameterQualifiers - }: ContextDataDependencyOptions): ContextDataConstructorOptions => - (): ContextData => { - let _instance: Instance - /** - * @implements ContextData - */ - - /** - * @interface ContextData - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name ContextData#instance - * @type {Instance} - */ - get instance() { - return _instance - }, - - /** - * Inject this object with a raw WASM instance. No type checking is performed. - * - * @private - * @function - * @name ContextData#unsafeInject - * @param {Instance} instance WASM instance - */ - unsafeInject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined - } - _instance = instance - }, - - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name ContextData#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined - } - }, - - /** - * Returns a const reference to the underlying encryption parameters. - * - * @readonly - * @name ContextData#parms - * @type {EncryptionParameters} - */ - get parms() { - const instance = _instance.parms() - const encryptionParameters = EncryptionParameters() - encryptionParameters.unsafeInject(instance) - return encryptionParameters - }, - - /** - * Returns the parmsId of the current parameters. - * - * @readonly - * @name ContextData#parmsId - * @type {ParmsIdType} - */ - get parmsId() { - const parms = ParmsIdType() - parms.inject(_instance.parmsId()) - return parms - }, - - /** - * Returns a copy of EncryptionParameterQualifiers corresponding to the - * current encryption parameters. Note that to change the qualifiers it is - * necessary to create a new instance of SEALContext once appropriate changes - * to the encryption parameters have been made. - * - * @readonly - * @name ContextData#qualifiers - * @type {EncryptionParameterQualifiers} - */ - get qualifiers() { - const encParmQualifiers = EncryptionParameterQualifiers() - encParmQualifiers.unsafeInject(_instance.qualifiers()) - return encParmQualifiers - }, - - /** - * Returns the significant bit count of the total coefficient modulus. - * - * @readonly - * @name ContextData#totalCoeffModulusBitCount - * @type {number} - */ - get totalCoeffModulusBitCount() { - return _instance.totalCoeffModulusBitCount() - }, - - /** - * Returns a shared_ptr to the context data corresponding to the previous parameters - * in the modulus switching chain. If the current data is the first one in the - * chain, then the result is nullptr. - * - * @readonly - * @name ContextData#prevContextData - * @type {ContextData} - */ - get prevContextData() { - const cxtData = ContextDataConstructor(library)({ - Exception, - EncryptionParameters, - ParmsIdType, - EncryptionParameterQualifiers - })() - cxtData.unsafeInject(_instance.prevContextData()) - return cxtData - }, - - /** - * Returns a shared_ptr to the context data corresponding to the next parameters - * in the modulus switching chain. If the current data is the last one in the - * chain, then the result is nullptr. - * - * @readonly - * @name ContextData#nextContextData - * @type {ContextData} - */ - get nextContextData() { - const cxtData = ContextDataConstructor(library)({ - Exception, - EncryptionParameters, - ParmsIdType, - EncryptionParameterQualifiers - })() - cxtData.unsafeInject(_instance.nextContextData()) - return cxtData - }, - - /** - * Returns the index of the parameter set in a chain. The initial parameters - * have index 0 and the index increases sequentially in the parameter chain. - * - * @readonly - * @name EncryptionParameterQualifiers#chainIndex - * @type {number} - */ - get chainIndex() { - return _instance.chainIndex() - } + ({ + Exception, + EncryptionParameters, + ParmsIdType, + EncryptionParameterQualifiers + }: ContextDataDependencyOptions): ContextDataConstructorOptions => + (): ContextData => { + let _instance: Instance + /** + * @implements ContextData + */ + + /** + * @interface ContextData + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name ContextData#instance + * @type {Instance} + */ + get instance() { + return _instance + }, + + /** + * Inject this object with a raw WASM instance. No type checking is performed. + * + * @private + * @function + * @name ContextData#unsafeInject + * @param {Instance} instance WASM instance + */ + unsafeInject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined + } + _instance = instance + }, + + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name ContextData#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined } + }, + + /** + * Returns a const reference to the underlying encryption parameters. + * + * @readonly + * @name ContextData#parms + * @type {EncryptionParameters} + */ + get parms() { + const instance = _instance.parms() + const encryptionParameters = EncryptionParameters() + encryptionParameters.unsafeInject(instance) + return encryptionParameters + }, + + /** + * Returns the parmsId of the current parameters. + * + * @readonly + * @name ContextData#parmsId + * @type {ParmsIdType} + */ + get parmsId() { + const parms = ParmsIdType() + parms.inject(_instance.parmsId()) + return parms + }, + + /** + * Returns a copy of EncryptionParameterQualifiers corresponding to the + * current encryption parameters. Note that to change the qualifiers it is + * necessary to create a new instance of SEALContext once appropriate changes + * to the encryption parameters have been made. + * + * @readonly + * @name ContextData#qualifiers + * @type {EncryptionParameterQualifiers} + */ + get qualifiers() { + const encParmQualifiers = EncryptionParameterQualifiers() + encParmQualifiers.unsafeInject(_instance.qualifiers()) + return encParmQualifiers + }, + + /** + * Returns the significant bit count of the total coefficient modulus. + * + * @readonly + * @name ContextData#totalCoeffModulusBitCount + * @type {number} + */ + get totalCoeffModulusBitCount() { + return _instance.totalCoeffModulusBitCount() + }, + + /** + * Returns a shared_ptr to the context data corresponding to the previous parameters + * in the modulus switching chain. If the current data is the first one in the + * chain, then the result is nullptr. + * + * @readonly + * @name ContextData#prevContextData + * @type {ContextData} + */ + get prevContextData() { + const cxtData = ContextDataConstructor(library)({ + Exception, + EncryptionParameters, + ParmsIdType, + EncryptionParameterQualifiers + })() + cxtData.unsafeInject(_instance.prevContextData()) + return cxtData + }, + + /** + * Returns a shared_ptr to the context data corresponding to the next parameters + * in the modulus switching chain. If the current data is the last one in the + * chain, then the result is nullptr. + * + * @readonly + * @name ContextData#nextContextData + * @type {ContextData} + */ + get nextContextData() { + const cxtData = ContextDataConstructor(library)({ + Exception, + EncryptionParameters, + ParmsIdType, + EncryptionParameterQualifiers + })() + cxtData.unsafeInject(_instance.nextContextData()) + return cxtData + }, + + /** + * Returns the index of the parameter set in a chain. The initial parameters + * have index 0 and the index increases sequentially in the parameter chain. + * + * @readonly + * @name EncryptionParameterQualifiers#chainIndex + * @type {number} + */ + get chainIndex() { + return _instance.chainIndex() } + } + } export const ContextDataInit = ({ loader diff --git a/src/implementation/context.ts b/src/implementation/context.ts index 965b2e32..988e78df 100644 --- a/src/implementation/context.ts +++ b/src/implementation/context.ts @@ -44,217 +44,217 @@ export type Context = { const ContextConstructor = (library: Library): ContextDependencies => - ({ - ParmsIdType, - ContextData, - SecurityLevel - }: ContextDependencyOptions): ContextConstructorOptions => - ( - encryptionParams, - expandModChain = true, - securityLevel = SecurityLevel.tc128 - ): Context => { - // Static methods - const Constructor = library.SEALContext + ({ + ParmsIdType, + ContextData, + SecurityLevel + }: ContextDependencyOptions): ContextConstructorOptions => + ( + encryptionParams, + expandModChain = true, + securityLevel = SecurityLevel.tc128 + ): Context => { + // Static methods + const Constructor = library.SEALContext - let _instance = new Constructor( - encryptionParams.instance, - expandModChain, - securityLevel - ) as Instance + let _instance = new Constructor( + encryptionParams.instance, + expandModChain, + securityLevel + ) as Instance - /** - * @implements Context - */ + /** + * @implements Context + */ - /** - * @interface Context - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name Context#instance - * @type {Instance} - */ - get instance() { - return _instance - }, + /** + * @interface Context + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name Context#instance + * @type {Instance} + */ + get instance() { + return _instance + }, - /** - * Inject this object with a raw WASM instance. No type checking is performed. - * - * @private - * @function - * @name Context#unsafeInject - * @param {Instance} instance WASM instance - */ - unsafeInject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined - } - _instance = instance - }, + /** + * Inject this object with a raw WASM instance. No type checking is performed. + * + * @private + * @function + * @name Context#unsafeInject + * @param {Instance} instance WASM instance + */ + unsafeInject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined + } + _instance = instance + }, - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name Context#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined - } - }, + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name Context#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined + } + }, - /** - * Returns the context parameters in a human readable string format. - * - * @private - * @function - * @name Context#toString - * @returns {string} Context details as a string - */ - toHuman(): string { - return _instance.toHuman() - }, + /** + * Returns the context parameters in a human readable string format. + * + * @private + * @function + * @name Context#toString + * @returns {string} Context details as a string + */ + toHuman(): string { + return _instance.toHuman() + }, - /** - * Returns the ContextData corresponding to encryption parameters with a given - * parmsId. If parameters with the given parmsId are not found then the - * function returns nullptr. - * - * @function - * @name Context#getContextData - * @param {ParmsIdType} parmsId Specific id to return ContextData for - * @returns {ContextData} ContextData corresponding to encryption parameters - */ - getContextData(parmsId: ParmsIdType): ContextData { - const instance = _instance.getContextData(parmsId.instance) - const contextData = ContextData() - contextData.unsafeInject(instance) - return contextData - }, + /** + * Returns the ContextData corresponding to encryption parameters with a given + * parmsId. If parameters with the given parmsId are not found then the + * function returns nullptr. + * + * @function + * @name Context#getContextData + * @param {ParmsIdType} parmsId Specific id to return ContextData for + * @returns {ContextData} ContextData corresponding to encryption parameters + */ + getContextData(parmsId: ParmsIdType): ContextData { + const instance = _instance.getContextData(parmsId.instance) + const contextData = ContextData() + contextData.unsafeInject(instance) + return contextData + }, - /** - * The ContextData corresponding to encryption parameters that are used for keys. - * - * @readonly - * @name Context#keyContextData - * @type {ContextData} - */ - get keyContextData() { - const instance = _instance.keyContextData() - const contextData = ContextData() - contextData.unsafeInject(instance) - return contextData - }, + /** + * The ContextData corresponding to encryption parameters that are used for keys. + * + * @readonly + * @name Context#keyContextData + * @type {ContextData} + */ + get keyContextData() { + const instance = _instance.keyContextData() + const contextData = ContextData() + contextData.unsafeInject(instance) + return contextData + }, - /** - * The ContextData corresponding to the first encryption parameters that are used for data. - * - * @readonly - * @name Context#firstContextData - * @type {ContextData} - */ - get firstContextData() { - const instance = _instance.firstContextData() - const contextData = ContextData() - contextData.unsafeInject(instance) - return contextData - }, + /** + * The ContextData corresponding to the first encryption parameters that are used for data. + * + * @readonly + * @name Context#firstContextData + * @type {ContextData} + */ + get firstContextData() { + const instance = _instance.firstContextData() + const contextData = ContextData() + contextData.unsafeInject(instance) + return contextData + }, - /** - * Returns the ContextData corresponding to the last encryption parameters that are used for data. - * - * @readonly - * @name Context#lastContextData - * @type {ContextData} - */ - get lastContextData() { - const instance = _instance.lastContextData() - const contextData = ContextData() - contextData.unsafeInject(instance) - return contextData - }, + /** + * Returns the ContextData corresponding to the last encryption parameters that are used for data. + * + * @readonly + * @name Context#lastContextData + * @type {ContextData} + */ + get lastContextData() { + const instance = _instance.lastContextData() + const contextData = ContextData() + contextData.unsafeInject(instance) + return contextData + }, - /** - * Whether the encryption parameters are set in a way that is considered valid by - * Microsoft SEAL, the variable parameters_set is set to true. - * - * @function - * @name Context#parametersSet - * @type {boolean} - */ - parametersSet() { - return _instance.parametersSet() - }, + /** + * Whether the encryption parameters are set in a way that is considered valid by + * Microsoft SEAL, the variable parameters_set is set to true. + * + * @function + * @name Context#parametersSet + * @type {boolean} + */ + parametersSet() { + return _instance.parametersSet() + }, - /** - * Returns a ParmsIdType corresponding to the set of encryption parameters that are used for keys. - * - * @readonly - * @name Context#keyParmsId - * @type {ParmsIdType} - */ - get keyParmsId() { - const instance = _instance.keyParmsId() - const parmsId = ParmsIdType() - parmsId.inject(instance) - return parmsId - }, + /** + * Returns a ParmsIdType corresponding to the set of encryption parameters that are used for keys. + * + * @readonly + * @name Context#keyParmsId + * @type {ParmsIdType} + */ + get keyParmsId() { + const instance = _instance.keyParmsId() + const parmsId = ParmsIdType() + parmsId.inject(instance) + return parmsId + }, - /** - * Returns a ParmsIdType corresponding to the first encryption parameters that are used for data. - * - * @readonly - * @name Context#firstParmsId - * @type {ParmsIdType} - */ - get firstParmsId() { - const instance = _instance.firstParmsId() - const parmsId = ParmsIdType() - parmsId.inject(instance) - return parmsId - }, + /** + * Returns a ParmsIdType corresponding to the first encryption parameters that are used for data. + * + * @readonly + * @name Context#firstParmsId + * @type {ParmsIdType} + */ + get firstParmsId() { + const instance = _instance.firstParmsId() + const parmsId = ParmsIdType() + parmsId.inject(instance) + return parmsId + }, - /** - * The ParmsIdType corresponding to the last encryption parameters that are used for data. - * - * @readonly - * @name Context#lastParmsId - * @type {ParmsIdType} - */ - get lastParmsId() { - const instance = _instance.lastParmsId() - const parmsId = ParmsIdType() - parmsId.inject(instance) - return parmsId - }, + /** + * The ParmsIdType corresponding to the last encryption parameters that are used for data. + * + * @readonly + * @name Context#lastParmsId + * @type {ParmsIdType} + */ + get lastParmsId() { + const instance = _instance.lastParmsId() + const parmsId = ParmsIdType() + parmsId.inject(instance) + return parmsId + }, - /** - * Whether the coefficient modulus supports keyswitching. In practice, - * support for keyswitching is required by Evaluator.relinearize, - * Evaluator.applyGalois, and all rotation and conjugation operations. For - * keyswitching to be available, the coefficient modulus parameter must consist - * of at least two prime number factors. - * - * @readonly - * @name Context#usingKeyswitching - * @type {boolean} - */ - get usingKeyswitching() { - return _instance.usingKeyswitching() - } - } + /** + * Whether the coefficient modulus supports keyswitching. In practice, + * support for keyswitching is required by Evaluator.relinearize, + * Evaluator.applyGalois, and all rotation and conjugation operations. For + * keyswitching to be available, the coefficient modulus parameter must consist + * of at least two prime number factors. + * + * @readonly + * @name Context#usingKeyswitching + * @type {boolean} + */ + get usingKeyswitching() { + return _instance.usingKeyswitching() } + } + } export const ContextInit = ({ loader }: LoaderOptions): ContextDependencies => { const library: Library = loader.library diff --git a/src/implementation/decryptor.ts b/src/implementation/decryptor.ts index a639b60e..2b004a05 100644 --- a/src/implementation/decryptor.ts +++ b/src/implementation/decryptor.ts @@ -34,124 +34,124 @@ export type Decryptor = { const DecryptorConstructor = (library: Library): DecryptorDependencies => - ({ - Exception, - PlainText - }: DecryptorDependencyOptions): DecryptorConstructorOptions => - (context, secretKey): Decryptor => { - const Constructor = library.Decryptor - let _instance: Instance - try { - _instance = new Constructor(context.instance, secretKey.instance) - } catch (e) { - throw Exception.safe(e as SealError) - } - /** - * @implements Decryptor - */ - - /** - * @interface Decryptor - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name Decryptor#instance - * @type {Instance} - */ - get instance() { - return _instance - }, + ({ + Exception, + PlainText + }: DecryptorDependencyOptions): DecryptorConstructorOptions => + (context, secretKey): Decryptor => { + const Constructor = library.Decryptor + let _instance: Instance + try { + _instance = new Constructor(context.instance, secretKey.instance) + } catch (e) { + throw Exception.safe(e as SealError) + } + /** + * @implements Decryptor + */ - /** - * Inject this object with a raw WASM instance. No type checking is performed. - * - * @private - * @function - * @name Decryptor#unsafeInject - * @param {Instance} instance WASM instance - */ - unsafeInject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined - } - _instance = instance - }, + /** + * @interface Decryptor + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name Decryptor#instance + * @type {Instance} + */ + get instance() { + return _instance + }, - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name Decryptor#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined - } - }, + /** + * Inject this object with a raw WASM instance. No type checking is performed. + * + * @private + * @function + * @name Decryptor#unsafeInject + * @param {Instance} instance WASM instance + */ + unsafeInject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined + } + _instance = instance + }, - /** - * Decrypts a CipherText and stores the result in the destination parameter. - * - * @function - * @name Decryptor#decrypt - * @param {CipherText} cipherText CipherText to decrypt - * @param {PlainText} [plainText] PlainText destination to store the decrypted result - * @returns {PlainText|void} Returns undefined if a PlainText was specified. Otherwise returns a - * PlainText containng the decrypted result - */ - decrypt(cipherText: CipherText, plainText?: PlainText): PlainText | void { - try { - if (plainText) { - _instance.decrypt(cipherText.instance, plainText.instance) - return - } - const plain = PlainText() - _instance.decrypt(cipherText.instance, plain.instance) - return plain - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name Decryptor#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined + } + }, - /** - * Computes the invariant noise budget (in bits) of a CipherText. The invariant - * noise budget measures the amount of room there is for the noise to grow while - * ensuring correct decryptions. This function works only with the BFV scheme. - * - * @par Invariant Noise Budget - * The invariant noise polynomial of a CipherText is a rational coefficient - * polynomial, such that a CipherText decrypts correctly as long as the - * coefficients of the invariantnoise polynomial are of absolute value less - * than 1/2. Thus, we call the infinity-norm of the invariant noise polynomial - * the invariant noise, and for correct decryption requireit to be less than - * 1/2. If v denotes the invariant noise, we define the invariant noise budget - * as -log2(2v). Thus, the invariant noise budget starts from some initial - * value, which depends on the encryption parameters, and decreases when - * computations are performed. When the budget reaches zero, the CipherText - * becomes too noisy to decrypt correctly. - * - * @function - * @name Decryptor#invariantNoiseBudget - * @param {CipherText} cipherText CipherText to measure - * @returns {number} Invariant noise budget (in bits) - */ - invariantNoiseBudget(cipherText: CipherText): number { - try { - return _instance.invariantNoiseBudget(cipherText.instance) - } catch (e) { - throw Exception.safe(e as SealError) - } + /** + * Decrypts a CipherText and stores the result in the destination parameter. + * + * @function + * @name Decryptor#decrypt + * @param {CipherText} cipherText CipherText to decrypt + * @param {PlainText} [plainText] PlainText destination to store the decrypted result + * @returns {PlainText|void} Returns undefined if a PlainText was specified. Otherwise returns a + * PlainText containng the decrypted result + */ + decrypt(cipherText: CipherText, plainText?: PlainText): PlainText | void { + try { + if (plainText) { + _instance.decrypt(cipherText.instance, plainText.instance) + return } + const plain = PlainText() + _instance.decrypt(cipherText.instance, plain.instance) + return plain + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Computes the invariant noise budget (in bits) of a CipherText. The invariant + * noise budget measures the amount of room there is for the noise to grow while + * ensuring correct decryptions. This function works only with the BFV scheme. + * + * @par Invariant Noise Budget + * The invariant noise polynomial of a CipherText is a rational coefficient + * polynomial, such that a CipherText decrypts correctly as long as the + * coefficients of the invariantnoise polynomial are of absolute value less + * than 1/2. Thus, we call the infinity-norm of the invariant noise polynomial + * the invariant noise, and for correct decryption requireit to be less than + * 1/2. If v denotes the invariant noise, we define the invariant noise budget + * as -log2(2v). Thus, the invariant noise budget starts from some initial + * value, which depends on the encryption parameters, and decreases when + * computations are performed. When the budget reaches zero, the CipherText + * becomes too noisy to decrypt correctly. + * + * @function + * @name Decryptor#invariantNoiseBudget + * @param {CipherText} cipherText CipherText to measure + * @returns {number} Invariant noise budget (in bits) + */ + invariantNoiseBudget(cipherText: CipherText): number { + try { + return _instance.invariantNoiseBudget(cipherText.instance) + } catch (e) { + throw Exception.safe(e as SealError) } } + } + } export const DecryptorInit = ({ loader diff --git a/src/implementation/encryption-parameter-qualifiers.ts b/src/implementation/encryption-parameter-qualifiers.ts index c46d2507..e6f3247f 100644 --- a/src/implementation/encryption-parameter-qualifiers.ts +++ b/src/implementation/encryption-parameter-qualifiers.ts @@ -24,168 +24,168 @@ export type EncryptionParameterQualifiers = { const EncryptionParameterQualifiersConstructor = (): EncryptionParameterQualifiersDependencies => - (): EncryptionParameterQualifiersConstructorOptions => - (): EncryptionParameterQualifiers => { - let _instance: Instance - /** - * @implements EncryptionParameterQualifiers - */ + (): EncryptionParameterQualifiersConstructorOptions => + (): EncryptionParameterQualifiers => { + let _instance: Instance + /** + * @implements EncryptionParameterQualifiers + */ - /** - * @interface EncryptionParameterQualifiers - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name EncryptionParameterQualifiers#instance - * @type {Instance} - */ - get instance() { - return _instance - }, + /** + * @interface EncryptionParameterQualifiers + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name EncryptionParameterQualifiers#instance + * @type {Instance} + */ + get instance() { + return _instance + }, - /** - * Inject this object with a raw WASM instance. No type checking is performed. - * - * @private - * @function - * @name EncryptionParameterQualifiers#unsafeInject - * @param {Instance} instance WASM instance - */ - unsafeInject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined - } - _instance = instance - }, + /** + * Inject this object with a raw WASM instance. No type checking is performed. + * + * @private + * @function + * @name EncryptionParameterQualifiers#unsafeInject + * @param {Instance} instance WASM instance + */ + unsafeInject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined + } + _instance = instance + }, - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name EncryptionParameterQualifiers#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined - } - }, + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name EncryptionParameterQualifiers#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined + } + }, - /** - * If the encryption parameters are set in a way that is considered valid by - * Microsoft SEAL, the variable parameters_set is set to true. - * - * @function - * @name EncryptionParameterQualifiers#parametersSet - * @type {boolean} - */ - parametersSet() { - return _instance.parametersSet() - }, + /** + * If the encryption parameters are set in a way that is considered valid by + * Microsoft SEAL, the variable parameters_set is set to true. + * + * @function + * @name EncryptionParameterQualifiers#parametersSet + * @type {boolean} + */ + parametersSet() { + return _instance.parametersSet() + }, - /** - * Tells whether FFT can be used for polynomial multiplication. If the - * polynomial modulus is of the form X^N+1, where N is a power of two, then - * FFT can be used for fast multiplication of polynomials modulo the polynomial - * modulus. In this case the variable using_fft will be set to true. However, - * currently Microsoft SEAL requires this to be the case for the parameters - * to be valid. Therefore, parameters_set can only be true if using_fft is - * true. - * - * @readonly - * @name EncryptionParameterQualifiers#usingFFT - * @type {boolean} - */ - get usingFFT() { - return _instance.usingFFT - }, + /** + * Tells whether FFT can be used for polynomial multiplication. If the + * polynomial modulus is of the form X^N+1, where N is a power of two, then + * FFT can be used for fast multiplication of polynomials modulo the polynomial + * modulus. In this case the variable using_fft will be set to true. However, + * currently Microsoft SEAL requires this to be the case for the parameters + * to be valid. Therefore, parameters_set can only be true if using_fft is + * true. + * + * @readonly + * @name EncryptionParameterQualifiers#usingFFT + * @type {boolean} + */ + get usingFFT() { + return _instance.usingFFT + }, - /** - * Tells whether NTT can be used for polynomial multiplication. If the primes - * in the coefficient modulus are congruent to 1 modulo 2N, where X^N+1 is the - * polynomial modulus and N is a power of two, then the number-theoretic - * transform (NTT) can be used for fast multiplications of polynomials modulo - * the polynomial modulus and coefficient modulus. In this case the variable - * using_ntt will be set to true. However, currently Microsoft SEAL requires - * this to be the case for the parameters to be valid. Therefore, parameters_set - * can only be true if using_ntt is true. - * - * @readonly - * @name EncryptionParameterQualifiers#usingNTT - * @type {boolean} - */ - get usingNTT() { - return _instance.usingNTT - }, + /** + * Tells whether NTT can be used for polynomial multiplication. If the primes + * in the coefficient modulus are congruent to 1 modulo 2N, where X^N+1 is the + * polynomial modulus and N is a power of two, then the number-theoretic + * transform (NTT) can be used for fast multiplications of polynomials modulo + * the polynomial modulus and coefficient modulus. In this case the variable + * using_ntt will be set to true. However, currently Microsoft SEAL requires + * this to be the case for the parameters to be valid. Therefore, parameters_set + * can only be true if using_ntt is true. + * + * @readonly + * @name EncryptionParameterQualifiers#usingNTT + * @type {boolean} + */ + get usingNTT() { + return _instance.usingNTT + }, - /** - * Tells whether batching is supported by the encryption parameters. If the - * plaintext modulus is congruent to 1 modulo 2N, where X^N+1 is the polynomial - * modulus and N is a power of two, then it is possible to use the BatchEncoder - * class to view plaintext elements as 2-by-(N/2) matrices of integers modulo - * the plaintext modulus. This is called batching, and allows the user to - * operate on the matrix elements (slots) in a SIMD fashion, and rotate the - * matrix rows and columns. When the computation is easily vectorizable, using - * batching can yield a huge performance boost. If the encryption parameters - * support batching, the variable using_batching is set to true. - * - * @readonly - * @name EncryptionParameterQualifiers#usingBatching - * @type {boolean} - */ - get usingBatching() { - return _instance.usingBatching - }, + /** + * Tells whether batching is supported by the encryption parameters. If the + * plaintext modulus is congruent to 1 modulo 2N, where X^N+1 is the polynomial + * modulus and N is a power of two, then it is possible to use the BatchEncoder + * class to view plaintext elements as 2-by-(N/2) matrices of integers modulo + * the plaintext modulus. This is called batching, and allows the user to + * operate on the matrix elements (slots) in a SIMD fashion, and rotate the + * matrix rows and columns. When the computation is easily vectorizable, using + * batching can yield a huge performance boost. If the encryption parameters + * support batching, the variable using_batching is set to true. + * + * @readonly + * @name EncryptionParameterQualifiers#usingBatching + * @type {boolean} + */ + get usingBatching() { + return _instance.usingBatching + }, - /** - * Tells whether fast plain lift is supported by the encryption parameters. - * A certain performance optimization in multiplication of a ciphertext by - * a plaintext (Evaluator::multiply_plain) and in transforming a plaintext - * element to NTT domain (Evaluator::transform_to_ntt) can be used when the - * plaintext modulus is smaller than each prime in the coefficient modulus. - * In this case the variable using_fast_plain_lift is set to true. - * - * @readonly - * @name EncryptionParameterQualifiers#usingFastPlainLift - * @type {boolean} - */ - get usingFastPlainLift() { - return _instance.usingFastPlainLift - }, + /** + * Tells whether fast plain lift is supported by the encryption parameters. + * A certain performance optimization in multiplication of a ciphertext by + * a plaintext (Evaluator::multiply_plain) and in transforming a plaintext + * element to NTT domain (Evaluator::transform_to_ntt) can be used when the + * plaintext modulus is smaller than each prime in the coefficient modulus. + * In this case the variable using_fast_plain_lift is set to true. + * + * @readonly + * @name EncryptionParameterQualifiers#usingFastPlainLift + * @type {boolean} + */ + get usingFastPlainLift() { + return _instance.usingFastPlainLift + }, - /** - * Tells whether the coefficient modulus consists of a set of primes that - * are in decreasing order. If this is true, certain modular reductions in - * base conversion can be omitted, improving performance. - * - * @readonly - * @name EncryptionParameterQualifiers#usingDescendingModulusChain - * @type {boolean} - */ - get usingDescendingModulusChain() { - return _instance.usingDescendingModulusChain - }, + /** + * Tells whether the coefficient modulus consists of a set of primes that + * are in decreasing order. If this is true, certain modular reductions in + * base conversion can be omitted, improving performance. + * + * @readonly + * @name EncryptionParameterQualifiers#usingDescendingModulusChain + * @type {boolean} + */ + get usingDescendingModulusChain() { + return _instance.usingDescendingModulusChain + }, - /** - * Tells whether the encryption parameters are secure based on the standard - * parameters from HomomorphicEncryption.org security standard. - * - * @readonly - * @name EncryptionParameterQualifiers#securityLevel - * @type {(SecurityLevel.none|SecurityLevel.tc128|SecurityLevel.tc192|SecurityLevel.tc256)} - */ - get securityLevel() { - return _instance.securityLevel - } - } + /** + * Tells whether the encryption parameters are secure based on the standard + * parameters from HomomorphicEncryption.org security standard. + * + * @readonly + * @name EncryptionParameterQualifiers#securityLevel + * @type {(SecurityLevel.none|SecurityLevel.tc128|SecurityLevel.tc192|SecurityLevel.tc256)} + */ + get securityLevel() { + return _instance.securityLevel } + } + } export const EncryptionParameterQualifiersInit = (): EncryptionParameterQualifiersDependencies => { diff --git a/src/implementation/encryption-parameters.ts b/src/implementation/encryption-parameters.ts index a14b6623..5a0fdf84 100644 --- a/src/implementation/encryption-parameters.ts +++ b/src/implementation/encryption-parameters.ts @@ -49,258 +49,258 @@ export type EncryptionParameters = { const EncryptionParametersConstructor = (library: Library): EncryptionParametersDependencies => - ({ - Exception, - ComprModeType, - Modulus, - SchemeType, - ParmsIdType, - Vector - }: EncryptionParametersDependencyOptions): EncryptionParametersConstructorOptions => - (schemeType: SchemeType = SchemeType.none): EncryptionParameters => { - const Constructor = library.EncryptionParameters - let _instance = new Constructor(schemeType) + ({ + Exception, + ComprModeType, + Modulus, + SchemeType, + ParmsIdType, + Vector + }: EncryptionParametersDependencyOptions): EncryptionParametersConstructorOptions => + (schemeType: SchemeType = SchemeType.none): EncryptionParameters => { + const Constructor = library.EncryptionParameters + let _instance = new Constructor(schemeType) - /** - * @implements EncryptionParameters - */ + /** + * @implements EncryptionParameters + */ - /** - * @interface EncryptionParameters - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name EncryptionParameters#instance - * @type {Instance} - */ - get instance() { - return _instance - }, + /** + * @interface EncryptionParameters + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name EncryptionParameters#instance + * @type {Instance} + */ + get instance() { + return _instance + }, - /** - * Inject this object with a raw WASM instance. No type checking is performed. - * - * @private - * @function - * @name EncryptionParameters#unsafeInject - * @param {Instance} instance WASM instance - */ - unsafeInject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined - } - _instance = instance - }, + /** + * Inject this object with a raw WASM instance. No type checking is performed. + * + * @private + * @function + * @name EncryptionParameters#unsafeInject + * @param {Instance} instance WASM instance + */ + unsafeInject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined + } + _instance = instance + }, - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name EncryptionParameters#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined - } - }, + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name EncryptionParameters#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined + } + }, - /** - * Sets the degree of the polynomial modulus parameter to the specified value. - * The polynomial modulus directly affects the number of coefficients in - * PlainText polynomials, the size of CipherText elements, the computational - * performance of the scheme (bigger is worse), and the security level (bigger - * is better). In Microsoft SEAL the degree of the polynomial modulus must be a power - * of 2 (e.g. 1024, 2048, 4096, 8192, 16384, or 32768). - * - * @function - * @name EncryptionParameters#setPolyModulusDegree - * @param {number} polyModulusDegree The degree of the polynomial modulus - */ - setPolyModulusDegree(polyModulusDegree: number) { - try { - _instance.setPolyModulusDegree(polyModulusDegree) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Sets the degree of the polynomial modulus parameter to the specified value. + * The polynomial modulus directly affects the number of coefficients in + * PlainText polynomials, the size of CipherText elements, the computational + * performance of the scheme (bigger is worse), and the security level (bigger + * is better). In Microsoft SEAL the degree of the polynomial modulus must be a power + * of 2 (e.g. 1024, 2048, 4096, 8192, 16384, or 32768). + * + * @function + * @name EncryptionParameters#setPolyModulusDegree + * @param {number} polyModulusDegree The degree of the polynomial modulus + */ + setPolyModulusDegree(polyModulusDegree: number) { + try { + _instance.setPolyModulusDegree(polyModulusDegree) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Sets the coefficient modulus parameter. The coefficient modulus consists - * of a list of distinct prime numbers, and is represented by a vector of - * Modulus objects. The coefficient modulus directly affects the size - * of CipherText elements, the amount of computation that the scheme can perform - * (bigger is better), and the security level (bigger is worse). In Microsoft SEAL each - * of the prime numbers in the coefficient modulus must be at most 60 bits, - * and must be congruent to 1 modulo 2*degree(poly_modulus). - * - * @function - * @name EncryptionParameters#setCoeffModulus - * @param {Vector} coeffModulus Vector of Modulus primes - */ - setCoeffModulus(coeffModulus: Vector) { - try { - _instance.setCoeffModulus(coeffModulus.instance) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Sets the coefficient modulus parameter. The coefficient modulus consists + * of a list of distinct prime numbers, and is represented by a vector of + * Modulus objects. The coefficient modulus directly affects the size + * of CipherText elements, the amount of computation that the scheme can perform + * (bigger is better), and the security level (bigger is worse). In Microsoft SEAL each + * of the prime numbers in the coefficient modulus must be at most 60 bits, + * and must be congruent to 1 modulo 2*degree(poly_modulus). + * + * @function + * @name EncryptionParameters#setCoeffModulus + * @param {Vector} coeffModulus Vector of Modulus primes + */ + setCoeffModulus(coeffModulus: Vector) { + try { + _instance.setCoeffModulus(coeffModulus.instance) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Sets the PlainText modulus parameter. The PlainText modulus is an integer - * modulus represented by the Modulus class. The PlainText modulus - * determines the largest coefficient that PlainText polynomials can represent. - * It also affects the amount of computation that the scheme can perform - * (bigger is worse). In Microsoft SEAL the PlainText modulus can be at most 60 bits - * long, but can otherwise be any integer. Note, however, that some features - * (e.g. batching) require the PlainText modulus to be of a particular form. - * - * @function - * @name EncryptionParameters#setPlainModulus - * @param {Modulus} plainModulus PlainText modulus parameter - */ - setPlainModulus(plainModulus: Modulus) { - try { - _instance.setPlainModulus(plainModulus.instance) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Sets the PlainText modulus parameter. The PlainText modulus is an integer + * modulus represented by the Modulus class. The PlainText modulus + * determines the largest coefficient that PlainText polynomials can represent. + * It also affects the amount of computation that the scheme can perform + * (bigger is worse). In Microsoft SEAL the PlainText modulus can be at most 60 bits + * long, but can otherwise be any integer. Note, however, that some features + * (e.g. batching) require the PlainText modulus to be of a particular form. + * + * @function + * @name EncryptionParameters#setPlainModulus + * @param {Modulus} plainModulus PlainText modulus parameter + */ + setPlainModulus(plainModulus: Modulus) { + try { + _instance.setPlainModulus(plainModulus.instance) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * The encryption scheme type. - * - * @readonly - * @name EncryptionParameters#scheme - * @type {SchemeType.none|SchemeType.bfv|SchemeType.ckks} - */ - get scheme() { - return _instance.scheme() - }, + /** + * The encryption scheme type. + * + * @readonly + * @name EncryptionParameters#scheme + * @type {SchemeType.none|SchemeType.bfv|SchemeType.ckks} + */ + get scheme() { + return _instance.scheme() + }, - /** - * The degree of the polynomial modulus parameter. - * - * @readonly - * @name EncryptionParameters#polyModulusDegree - * @type {number} - */ - get polyModulusDegree() { - return _instance.polyModulusDegree() - }, + /** + * The degree of the polynomial modulus parameter. + * + * @readonly + * @name EncryptionParameters#polyModulusDegree + * @type {number} + */ + get polyModulusDegree() { + return _instance.polyModulusDegree() + }, - /** - * Returns the currently set coefficient modulus parameter. - * - * @readonly - * @name EncryptionParameters#coeffModulus - * @type {BigUint64Array} - */ - get coeffModulus() { - const tempVect = Vector() - const instance = _instance.coeffModulus() - tempVect.unsafeInject(instance) - tempVect.setType('Modulus') - const tempArr = tempVect.toArray() as BigUint64Array - tempVect.delete() - return tempArr - }, + /** + * Returns the currently set coefficient modulus parameter. + * + * @readonly + * @name EncryptionParameters#coeffModulus + * @type {BigUint64Array} + */ + get coeffModulus() { + const tempVect = Vector() + const instance = _instance.coeffModulus() + tempVect.unsafeInject(instance) + tempVect.setType('Modulus') + const tempArr = tempVect.toArray() as BigUint64Array + tempVect.delete() + return tempArr + }, - /** - * Returns the currently set PlainText modulus parameter. - * - * @readonly - * @name EncryptionParameters#plainModulus - * @type {Modulus} - */ - get plainModulus() { - const instance = _instance.plainModulus() - const smallModulus = Modulus(BigInt(0)) - smallModulus.inject(instance) - return smallModulus - }, + /** + * Returns the currently set PlainText modulus parameter. + * + * @readonly + * @name EncryptionParameters#plainModulus + * @type {Modulus} + */ + get plainModulus() { + const instance = _instance.plainModulus() + const smallModulus = Modulus(BigInt(0)) + smallModulus.inject(instance) + return smallModulus + }, - /** - * Returns the ParmsId of the current parameters. - * - * @readonly - * @name EncryptionParameters#parmsId - * @type {ParmsIdType} - */ - get parmsId() { - const parms = ParmsIdType() - parms.inject(_instance.parmsId()) - return parms - }, + /** + * Returns the ParmsId of the current parameters. + * + * @readonly + * @name EncryptionParameters#parmsId + * @type {ParmsIdType} + */ + get parmsId() { + const parms = ParmsIdType() + parms.inject(_instance.parmsId()) + return parms + }, - /** - * Save the Encryption Parameters to a base64 string - * - * @function - * @name EncryptionParameters#save - * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use - * @returns {string} base64 encoded string - */ - save(compression: ComprModeType = ComprModeType.zstd): string { - return _instance.saveToString(compression) - }, + /** + * Save the Encryption Parameters to a base64 string + * + * @function + * @name EncryptionParameters#save + * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use + * @returns {string} base64 encoded string + */ + save(compression: ComprModeType = ComprModeType.zstd): string { + return _instance.saveToString(compression) + }, - /** - * Save the Encryption Parameters as a binary Uint8Array - * - * @function - * @name EncryptionParameters#saveArray - * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use - * @returns {Uint8Array} A byte array containing the CipherText in binary form - */ - saveArray(compression: ComprModeType = ComprModeType.zstd): Uint8Array { - const tempVect = Vector() - const instance = _instance.saveToArray(compression) - tempVect.unsafeInject(instance) - tempVect.setType('Uint8Array') - const tempArr = tempVect.toArray() as Uint8Array - tempVect.delete() - return tempArr - }, + /** + * Save the Encryption Parameters as a binary Uint8Array + * + * @function + * @name EncryptionParameters#saveArray + * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use + * @returns {Uint8Array} A byte array containing the CipherText in binary form + */ + saveArray(compression: ComprModeType = ComprModeType.zstd): Uint8Array { + const tempVect = Vector() + const instance = _instance.saveToArray(compression) + tempVect.unsafeInject(instance) + tempVect.setType('Uint8Array') + const tempArr = tempVect.toArray() as Uint8Array + tempVect.delete() + return tempArr + }, - /** - * Load the Encryption Parameters from a base64 string - * - * @function - * @name EncryptionParameters#load - * @param {string} encoded base64 encoded string - */ - load(encoded: string) { - try { - _instance.loadFromString(encoded) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Load the Encryption Parameters from a base64 string + * + * @function + * @name EncryptionParameters#load + * @param {string} encoded base64 encoded string + */ + load(encoded: string) { + try { + _instance.loadFromString(encoded) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Load the Encryption Parameters from an Uint8Array holding binary data - * - * @function - * @name EncryptionParameters#loadArray - * @param {Uint8Array} array TypedArray containing binary data - */ - loadArray(array: Uint8Array) { - try { - _instance.loadFromArray(array) - } catch (e) { - throw Exception.safe(e as SealError) - } - } + /** + * Load the Encryption Parameters from an Uint8Array holding binary data + * + * @function + * @name EncryptionParameters#loadArray + * @param {Uint8Array} array TypedArray containing binary data + */ + loadArray(array: Uint8Array) { + try { + _instance.loadFromArray(array) + } catch (e) { + throw Exception.safe(e as SealError) } } + } + } export const EncryptionParametersInit = ({ loader diff --git a/src/implementation/encryptor.ts b/src/implementation/encryptor.ts index a3c66c76..f60d70d7 100644 --- a/src/implementation/encryptor.ts +++ b/src/implementation/encryptor.ts @@ -59,285 +59,285 @@ export type Encryptor = { const EncryptorConstructor = (library: Library): EncryptorDependencies => - ({ - Exception, - MemoryPoolHandle, - CipherText, - Serializable - }: EncryptorDependencyOptions): EncryptorConstructorOptions => - (context, publicKey, secretKey): Encryptor => { - const Constructor = library.Encryptor - let _instance = constructInstance(context, publicKey, secretKey) + ({ + Exception, + MemoryPoolHandle, + CipherText, + Serializable + }: EncryptorDependencyOptions): EncryptorConstructorOptions => + (context, publicKey, secretKey): Encryptor => { + const Constructor = library.Encryptor + let _instance = constructInstance(context, publicKey, secretKey) - function constructInstance( - context: Context, - publicKey: PublicKey, - secretKey?: SecretKey - ) { - try { - if (secretKey) { - return new Constructor( - context.instance, - publicKey.instance, - secretKey.instance - ) - } - return new Constructor(context.instance, publicKey.instance) - } catch (e) { - throw Exception.safe(e as SealError) - } + function constructInstance( + context: Context, + publicKey: PublicKey, + secretKey?: SecretKey + ) { + try { + if (secretKey) { + return new Constructor( + context.instance, + publicKey.instance, + secretKey.instance + ) } - /** - * @implements Encryptor - */ - - /** - * @interface Encryptor - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name Encryptor#instance - * @type {Instance} - */ - get instance() { - return _instance - }, + return new Constructor(context.instance, publicKey.instance) + } catch (e) { + throw Exception.safe(e as SealError) + } + } + /** + * @implements Encryptor + */ - /** - * Inject this object with a raw WASM instance. No type checking is performed. - * - * @private - * @function - * @name Encryptor#unsafeInject - * @param {Instance} instance WASM instance - */ - unsafeInject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined - } - _instance = instance - }, + /** + * @interface Encryptor + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name Encryptor#instance + * @type {Instance} + */ + get instance() { + return _instance + }, - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name Encryptor#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined - } - }, + /** + * Inject this object with a raw WASM instance. No type checking is performed. + * + * @private + * @function + * @name Encryptor#unsafeInject + * @param {Instance} instance WASM instance + */ + unsafeInject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined + } + _instance = instance + }, - /** - * Encrypts a PlainText and stores the result in the destination parameter. - * Dynamic memory allocations in the process are allocated from the memory - * pool pointed to by the given MemoryPoolHandle. - * - * @function - * @name Encryptor#encrypt - * @param {PlainText} plainText PlainText to encrypt - * @param {CipherText} [cipherText] CipherText destination to store the encrypted result - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText|void} Returns undefined if a CipherText was specified. Otherwise returns a - * CipherText containing the encrypted result - */ - encrypt( - plainText: PlainText, - cipherText?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (cipherText) { - _instance.encrypt(plainText.instance, cipherText.instance, pool) - return - } - const cipher = CipherText() - _instance.encrypt(plainText.instance, cipher.instance, pool) - return cipher - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name Encryptor#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined + } + }, - /** - * Encrypts a PlainText and returns a CipherText as a Serializable object. - * Dynamic memory allocations in the process are allocated from the memory - * pool pointed to by the given MemoryPoolHandle. - * - * @function - * @name Encryptor#encryptSerializable - * @param {PlainText} plainText PlainText to encrypt - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {Serializable} A Serializable containing the encrypted result - */ - encryptSerializable( - plainText: PlainText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): Serializable { - try { - const temp = Serializable() - const instance = _instance.encryptSerializable( - plainText.instance, - pool - ) - temp.unsafeInject(instance) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Encrypts a PlainText and stores the result in the destination parameter. + * Dynamic memory allocations in the process are allocated from the memory + * pool pointed to by the given MemoryPoolHandle. + * + * @function + * @name Encryptor#encrypt + * @param {PlainText} plainText PlainText to encrypt + * @param {CipherText} [cipherText] CipherText destination to store the encrypted result + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText|void} Returns undefined if a CipherText was specified. Otherwise returns a + * CipherText containing the encrypted result + */ + encrypt( + plainText: PlainText, + cipherText?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (cipherText) { + _instance.encrypt(plainText.instance, cipherText.instance, pool) + return + } + const cipher = CipherText() + _instance.encrypt(plainText.instance, cipher.instance, pool) + return cipher + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Encrypts a PlainText with the secret key and stores the result in - * destination. - * - * The encryption parameters for the resulting CipherText - * correspond to: - * 1) in BFV or BGV, the highest (data) level in the modulus switching chain, - * 2) in CKKS, the encryption parameters of the plaintext. - * Dynamic memory allocations in the process are allocated from the memory - * pool pointed to by the given MemoryPoolHandle. - * - * @function - * @name Encryptor#encryptSymmetric - * @param {PlainText} plainText PlainText to encrypt - * @param {CipherText} [cipherText] CipherText destination to store the encrypted result. - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText|void} Returns undefined if a CipherText was specified. Otherwise returns a - * CipherText containing the encrypted result - */ - encryptSymmetric( - plainText: PlainText, - cipherText?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (cipherText) { - _instance.encryptSymmetric( - plainText.instance, - cipherText.instance, - pool - ) - return - } - const cipher = CipherText() - _instance.encryptSymmetric(plainText.instance, cipher.instance, pool) - return cipher - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Encrypts a PlainText and returns a CipherText as a Serializable object. + * Dynamic memory allocations in the process are allocated from the memory + * pool pointed to by the given MemoryPoolHandle. + * + * @function + * @name Encryptor#encryptSerializable + * @param {PlainText} plainText PlainText to encrypt + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {Serializable} A Serializable containing the encrypted result + */ + encryptSerializable( + plainText: PlainText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): Serializable { + try { + const temp = Serializable() + const instance = _instance.encryptSerializable( + plainText.instance, + pool + ) + temp.unsafeInject(instance) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Encrypts a plaintext with the secret key and returns the ciphertext as - * a serializable object. - * - * The encryption parameters for the resulting CipherText - * correspond to: - * 1) in BFV or BGV, the highest (data) level in the modulus switching chain, - * 2) in CKKS, the encryption parameters of the plaintext. - * Dynamic memory allocations in the process are allocated from the memory - * pool pointed to by the given MemoryPoolHandle. - * - * Half of the ciphertext data is pseudo-randomly generated from a seed to - * reduce the object size. The resulting serializable object cannot be used - * directly and is meant to be serialized for the size reduction to have an - * impact. - * - * @function - * @name Encryptor#encryptSymmetricSerializable - * @param {PlainText} plainText PlainText to encrypt - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {Serializable} Returns a Serializable containing the encrypted result - */ - encryptSymmetricSerializable( - plainText: PlainText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): Serializable { - try { - const serialized = Serializable() - const instance = _instance.encryptSymmetricSerializable( - plainText.instance, - pool - ) - serialized.unsafeInject(instance) - return serialized - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Encrypts a PlainText with the secret key and stores the result in + * destination. + * + * The encryption parameters for the resulting CipherText + * correspond to: + * 1) in BFV or BGV, the highest (data) level in the modulus switching chain, + * 2) in CKKS, the encryption parameters of the plaintext. + * Dynamic memory allocations in the process are allocated from the memory + * pool pointed to by the given MemoryPoolHandle. + * + * @function + * @name Encryptor#encryptSymmetric + * @param {PlainText} plainText PlainText to encrypt + * @param {CipherText} [cipherText] CipherText destination to store the encrypted result. + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText|void} Returns undefined if a CipherText was specified. Otherwise returns a + * CipherText containing the encrypted result + */ + encryptSymmetric( + plainText: PlainText, + cipherText?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (cipherText) { + _instance.encryptSymmetric( + plainText.instance, + cipherText.instance, + pool + ) + return + } + const cipher = CipherText() + _instance.encryptSymmetric(plainText.instance, cipher.instance, pool) + return cipher + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Encrypts a zero plaintext with the public key and returns the ciphertext - * as a serializable object. - * - * The encryption parameters for the resulting ciphertext correspond to the - * highest (data) level in the modulus switching chain. Dynamic memory - * allocations in the process are allocated from the memory pool pointed to - * by the given MemoryPoolHandle. - * - * @function - * @name Encryptor#encryptZero - * @param {CipherText} [cipherText] A CipherText to overwrite. - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText|void} Returns undefined if a CipherText was specified. Otherwise returns a - * CipherText containing the encrypted result - */ - encryptZero( - cipherText?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (cipherText) { - _instance.encryptZero(cipherText.instance, pool) - return - } - const cipher = CipherText() - _instance.encryptZero(cipher.instance, pool) - return cipher - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Encrypts a plaintext with the secret key and returns the ciphertext as + * a serializable object. + * + * The encryption parameters for the resulting CipherText + * correspond to: + * 1) in BFV or BGV, the highest (data) level in the modulus switching chain, + * 2) in CKKS, the encryption parameters of the plaintext. + * Dynamic memory allocations in the process are allocated from the memory + * pool pointed to by the given MemoryPoolHandle. + * + * Half of the ciphertext data is pseudo-randomly generated from a seed to + * reduce the object size. The resulting serializable object cannot be used + * directly and is meant to be serialized for the size reduction to have an + * impact. + * + * @function + * @name Encryptor#encryptSymmetricSerializable + * @param {PlainText} plainText PlainText to encrypt + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {Serializable} Returns a Serializable containing the encrypted result + */ + encryptSymmetricSerializable( + plainText: PlainText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): Serializable { + try { + const serialized = Serializable() + const instance = _instance.encryptSymmetricSerializable( + plainText.instance, + pool + ) + serialized.unsafeInject(instance) + return serialized + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Encrypts a zero plaintext with the public key and stores the result in - * destination. - * - * The encryption parameters for the resulting ciphertext correspond to the - * highest (data) level in the modulus switching chain. Dynamic memory - * allocations in the process are allocated from the memory pool pointed to - * by the given MemoryPoolHandle. - * - * @function - * @name Encryptor#encryptZeroSerializable - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {Serializable} A CipherText as a serialized object containing the encrypted result - */ - encryptZeroSerializable( - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): Serializable { - try { - const serialized = Serializable() - const instance = _instance.encryptZeroSerializable(pool) - serialized.unsafeInject(instance) - return serialized - } catch (e) { - throw Exception.safe(e as SealError) - } + /** + * Encrypts a zero plaintext with the public key and returns the ciphertext + * as a serializable object. + * + * The encryption parameters for the resulting ciphertext correspond to the + * highest (data) level in the modulus switching chain. Dynamic memory + * allocations in the process are allocated from the memory pool pointed to + * by the given MemoryPoolHandle. + * + * @function + * @name Encryptor#encryptZero + * @param {CipherText} [cipherText] A CipherText to overwrite. + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText|void} Returns undefined if a CipherText was specified. Otherwise returns a + * CipherText containing the encrypted result + */ + encryptZero( + cipherText?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (cipherText) { + _instance.encryptZero(cipherText.instance, pool) + return } + const cipher = CipherText() + _instance.encryptZero(cipher.instance, pool) + return cipher + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Encrypts a zero plaintext with the public key and stores the result in + * destination. + * + * The encryption parameters for the resulting ciphertext correspond to the + * highest (data) level in the modulus switching chain. Dynamic memory + * allocations in the process are allocated from the memory pool pointed to + * by the given MemoryPoolHandle. + * + * @function + * @name Encryptor#encryptZeroSerializable + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {Serializable} A CipherText as a serialized object containing the encrypted result + */ + encryptZeroSerializable( + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): Serializable { + try { + const serialized = Serializable() + const instance = _instance.encryptZeroSerializable(pool) + serialized.unsafeInject(instance) + return serialized + } catch (e) { + throw Exception.safe(e as SealError) } } + } + } export const EncryptorInit = ({ loader diff --git a/src/implementation/evaluator.ts b/src/implementation/evaluator.ts index c86086ab..e1924775 100644 --- a/src/implementation/evaluator.ts +++ b/src/implementation/evaluator.ts @@ -193,1407 +193,1407 @@ export type Evaluator = { const EvaluatorConstructor = (library: Library): EvaluatorDependencies => - ({ - Exception, - MemoryPoolHandle, - CipherText, - PlainText - }: EvaluatorDependencyOptions): EvaluatorConstructorOptions => - (context): Evaluator => { - const Constructor = library.Evaluator - let _instance: Instance - try { - _instance = new Constructor(context.instance) - } catch (e) { - throw Exception.safe(e as SealError) - } - /** - * @implements Evaluator - */ - - /** - * @interface Evaluator - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name Evaluator#instance - * @type {Instance} - */ - get instance() { - return _instance - }, + ({ + Exception, + MemoryPoolHandle, + CipherText, + PlainText + }: EvaluatorDependencyOptions): EvaluatorConstructorOptions => + (context): Evaluator => { + const Constructor = library.Evaluator + let _instance: Instance + try { + _instance = new Constructor(context.instance) + } catch (e) { + throw Exception.safe(e as SealError) + } + /** + * @implements Evaluator + */ - /** - * Inject this object with a raw WASM instance. No type checking is performed. - * - * @private - * @function - * @name Evaluator#unsafeInject - * @param {Instance} instance WASM instance - */ - unsafeInject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined - } - _instance = instance - }, + /** + * @interface Evaluator + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name Evaluator#instance + * @type {Instance} + */ + get instance() { + return _instance + }, - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name Evaluator#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined - } - }, + /** + * Inject this object with a raw WASM instance. No type checking is performed. + * + * @private + * @function + * @name Evaluator#unsafeInject + * @param {Instance} instance WASM instance + */ + unsafeInject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined + } + _instance = instance + }, - /** - * Negates a CipherText and stores the result in the destination parameter. - * - * @function - * @name Evaluator#negate - * @param {CipherText} encrypted CipherText to negate - * @param {CipherText} [destination] CipherText to store the negated results - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const cipherText = seal.CipherText() - * // ... after encrypting some data ... - * const resultCipher = evaluator.negate(cipherText) - * // or - * const cipherDest = seal.CipherText() - * evaluator.negate(encrypted, cipherDest) - */ - negate( - encrypted: CipherText, - destination?: CipherText - ): CipherText | void { - try { - if (destination) { - _instance.negate(encrypted.instance, destination.instance) - return - } - const temp = CipherText() - _instance.negate(encrypted.instance, temp.instance) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name Evaluator#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined + } + }, - /** - * Adds two CipherTexts. This function adds together a and b - * and stores the result in the destination parameter. - * - * @function - * @name Evaluator#add - * @param {CipherText} a CipherText operand A - * @param {CipherText} b CipherText operand B - * @param {CipherText} [destination] CipherText destination to store the sum - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const cipherTextA = seal.CipherText() - * const cipherTextB = seal.CipherText() - * // ... after encrypting some data ... - * const resultCipher = evaluator.add(cipherTextA, cipherTextB) - * // or - * const cipherDest = seal.CipherText() - * evaluator.add(cipherTextA, cipherTextB, cipherDest) - */ - add( - a: CipherText, - b: CipherText, - destination?: CipherText - ): CipherText | void { - try { - if (destination) { - _instance.add(a.instance, b.instance, destination.instance) - return - } - const temp = CipherText() - _instance.add(a.instance, b.instance, temp.instance) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Negates a CipherText and stores the result in the destination parameter. + * + * @function + * @name Evaluator#negate + * @param {CipherText} encrypted CipherText to negate + * @param {CipherText} [destination] CipherText to store the negated results + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const cipherText = seal.CipherText() + * // ... after encrypting some data ... + * const resultCipher = evaluator.negate(cipherText) + * // or + * const cipherDest = seal.CipherText() + * evaluator.negate(encrypted, cipherDest) + */ + negate( + encrypted: CipherText, + destination?: CipherText + ): CipherText | void { + try { + if (destination) { + _instance.negate(encrypted.instance, destination.instance) + return + } + const temp = CipherText() + _instance.negate(encrypted.instance, temp.instance) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Subtracts two CipherTexts. This function computes the difference of a - * and b and stores the result in the destination parameter. - * - * @function - * @name Evaluator#sub - * @param {CipherText} a CipherText operand A - * @param {CipherText} b CipherText operand B - * @param {CipherText} [destination] CipherText destination to store the difference - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const cipherTextA = seal.CipherText() - * const cipherTextB = seal.CipherText() - * // ... after encrypting some data ... - * const resultCipher = evaluator.sub(cipherTextA, cipherTextB) - * // or - * const cipherDest = seal.CipherText() - * evaluator.sub(cipherTextA, cipherTextB, cipherDest) - */ - sub( - a: CipherText, - b: CipherText, - destination?: CipherText - ): CipherText | void { - try { - if (destination) { - _instance.sub(a.instance, b.instance, destination.instance) - return - } - const temp = CipherText() - _instance.sub(a.instance, b.instance, temp.instance) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Adds two CipherTexts. This function adds together a and b + * and stores the result in the destination parameter. + * + * @function + * @name Evaluator#add + * @param {CipherText} a CipherText operand A + * @param {CipherText} b CipherText operand B + * @param {CipherText} [destination] CipherText destination to store the sum + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const cipherTextA = seal.CipherText() + * const cipherTextB = seal.CipherText() + * // ... after encrypting some data ... + * const resultCipher = evaluator.add(cipherTextA, cipherTextB) + * // or + * const cipherDest = seal.CipherText() + * evaluator.add(cipherTextA, cipherTextB, cipherDest) + */ + add( + a: CipherText, + b: CipherText, + destination?: CipherText + ): CipherText | void { + try { + if (destination) { + _instance.add(a.instance, b.instance, destination.instance) + return + } + const temp = CipherText() + _instance.add(a.instance, b.instance, temp.instance) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Multiplies two CipherTexts. This functions computes the product of a - * and b and stores the result in the destination parameter. Dynamic - * memory allocations in the process are allocated from the memory pool pointed - * to by the given MemoryPoolHandle. - * - * @function - * @name Evaluator#multiply - * @param {CipherText} a CipherText operand A - * @param {CipherText} b CipherText operand B - * @param {CipherText} [destination] CipherText destination to store the product - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const cipherTextA = seal.CipherText() - * const cipherTextB = seal.CipherText() - * // ... after encrypting some data ... - * const resultCipher = evaluator.multiply(cipherTextA, cipherTextB) - * // or - * const cipherDest = seal.CipherText() - * evaluator.multiply(cipherTextA, cipherTextB, cipherDest) - */ - multiply( - a: CipherText, - b: CipherText, - destination?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (destination) { - _instance.multiply( - a.instance, - b.instance, - destination.instance, - pool - ) - return - } - const temp = CipherText() - _instance.multiply(a.instance, b.instance, temp.instance, pool) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Subtracts two CipherTexts. This function computes the difference of a + * and b and stores the result in the destination parameter. + * + * @function + * @name Evaluator#sub + * @param {CipherText} a CipherText operand A + * @param {CipherText} b CipherText operand B + * @param {CipherText} [destination] CipherText destination to store the difference + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const cipherTextA = seal.CipherText() + * const cipherTextB = seal.CipherText() + * // ... after encrypting some data ... + * const resultCipher = evaluator.sub(cipherTextA, cipherTextB) + * // or + * const cipherDest = seal.CipherText() + * evaluator.sub(cipherTextA, cipherTextB, cipherDest) + */ + sub( + a: CipherText, + b: CipherText, + destination?: CipherText + ): CipherText | void { + try { + if (destination) { + _instance.sub(a.instance, b.instance, destination.instance) + return + } + const temp = CipherText() + _instance.sub(a.instance, b.instance, temp.instance) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Squares a CipherText. This functions computes the square of encrypted and - * stores the result in the destination parameter. Dynamic memory allocations - * in the process are allocated from the memory pool pointed to by the given - * MemoryPoolHandle. - * - * @function - * @name Evaluator#square - * @param {CipherText} encrypted CipherText to square - * @param {CipherText} [destination] CipherText destination to store the squared result - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const cipherTextA = seal.CipherText() - * // ... after encrypting some data ... - * const resultCipher = evaluator.square(cipherTextA, cipherTextB) - * // or - * const cipherDest = seal.CipherText() - * evaluator.square(cipherTextA, cipherDest) - */ - square( - encrypted: CipherText, - destination?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (destination) { - _instance.square(encrypted.instance, destination.instance, pool) - return - } - const temp = CipherText() - _instance.square(encrypted.instance, temp.instance, pool) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Multiplies two CipherTexts. This functions computes the product of a + * and b and stores the result in the destination parameter. Dynamic + * memory allocations in the process are allocated from the memory pool pointed + * to by the given MemoryPoolHandle. + * + * @function + * @name Evaluator#multiply + * @param {CipherText} a CipherText operand A + * @param {CipherText} b CipherText operand B + * @param {CipherText} [destination] CipherText destination to store the product + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const cipherTextA = seal.CipherText() + * const cipherTextB = seal.CipherText() + * // ... after encrypting some data ... + * const resultCipher = evaluator.multiply(cipherTextA, cipherTextB) + * // or + * const cipherDest = seal.CipherText() + * evaluator.multiply(cipherTextA, cipherTextB, cipherDest) + */ + multiply( + a: CipherText, + b: CipherText, + destination?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (destination) { + _instance.multiply( + a.instance, + b.instance, + destination.instance, + pool + ) + return + } + const temp = CipherText() + _instance.multiply(a.instance, b.instance, temp.instance, pool) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Relinearizes a CipherText. This functions relinearizes encrypted, reducing - * its size down to 2, and stores the result in the destination parameter. - * If the size of encrypted is K+1, the given relinearization keys need to - * have size at least K-1. Dynamic memory allocations in the process are allocated - * from the memory pool pointed to by the given MemoryPoolHandle. - * - * @function - * @name Evaluator#relinearize - * @param {CipherText} encrypted CipherText to relinearize - * @param {RelinKeys} relinKeys RelinKey used to perform relinearization - * @param {CipherText} [destination] CipherText destination to store the relinearized result - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const relinKeys = keyGenerator.createRelinKeys() - * const cipherTextA = seal.CipherText() - * // ... after encrypting some data ... - * const resultCipher = evaluator.relinearize(cipherTextA, relinKeys) - * // or - * const cipherDest = seal.CipherText() - * evaluator.relinearize(cipherTextA, relinKeys, cipherDest) - */ - relinearize( - encrypted: CipherText, - relinKeys: RelinKeys, - destination?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (destination) { - _instance.relinearize( - encrypted.instance, - relinKeys.instance, - destination.instance, - pool - ) - return - } - const temp = CipherText() - _instance.relinearize( - encrypted.instance, - relinKeys.instance, - temp.instance, - pool - ) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Squares a CipherText. This functions computes the square of encrypted and + * stores the result in the destination parameter. Dynamic memory allocations + * in the process are allocated from the memory pool pointed to by the given + * MemoryPoolHandle. + * + * @function + * @name Evaluator#square + * @param {CipherText} encrypted CipherText to square + * @param {CipherText} [destination] CipherText destination to store the squared result + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const cipherTextA = seal.CipherText() + * // ... after encrypting some data ... + * const resultCipher = evaluator.square(cipherTextA, cipherTextB) + * // or + * const cipherDest = seal.CipherText() + * evaluator.square(cipherTextA, cipherDest) + */ + square( + encrypted: CipherText, + destination?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (destination) { + _instance.square(encrypted.instance, destination.instance, pool) + return + } + const temp = CipherText() + _instance.square(encrypted.instance, temp.instance, pool) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Given a CipherText encrypted modulo q_1...q_k, this function switches the - * modulus down to q_1...q_{k-1} and stores the result in the destination - * parameter. Dynamic memory allocations in the process are allocated from - * the memory pool pointed to by the given MemoryPoolHandle. - * - * @function - * @name Evaluator#cipherModSwitchToNext - * @param {CipherText} encrypted CipherText to switch its modulus down - * @param {CipherText} [destination] CipherText destination to store the switched result - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const cipherTextA = seal.CipherText() - * // ... after encrypting some data ... - * const resultCipher = evaluator.cipherModSwitchToNext(cipherTextA) - * // or - * const cipherDest = seal.CipherText() - * evaluator.cipherModSwitchToNext(cipherTextA, cipherDest) - */ - cipherModSwitchToNext( - encrypted: CipherText, - destination?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (destination) { - _instance.cipherModSwitchToNext( - encrypted.instance, - destination.instance, - pool - ) - return - } - const temp = CipherText() - _instance.cipherModSwitchToNext( - encrypted.instance, - temp.instance, - pool - ) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Relinearizes a CipherText. This functions relinearizes encrypted, reducing + * its size down to 2, and stores the result in the destination parameter. + * If the size of encrypted is K+1, the given relinearization keys need to + * have size at least K-1. Dynamic memory allocations in the process are allocated + * from the memory pool pointed to by the given MemoryPoolHandle. + * + * @function + * @name Evaluator#relinearize + * @param {CipherText} encrypted CipherText to relinearize + * @param {RelinKeys} relinKeys RelinKey used to perform relinearization + * @param {CipherText} [destination] CipherText destination to store the relinearized result + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const relinKeys = keyGenerator.createRelinKeys() + * const cipherTextA = seal.CipherText() + * // ... after encrypting some data ... + * const resultCipher = evaluator.relinearize(cipherTextA, relinKeys) + * // or + * const cipherDest = seal.CipherText() + * evaluator.relinearize(cipherTextA, relinKeys, cipherDest) + */ + relinearize( + encrypted: CipherText, + relinKeys: RelinKeys, + destination?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (destination) { + _instance.relinearize( + encrypted.instance, + relinKeys.instance, + destination.instance, + pool + ) + return + } + const temp = CipherText() + _instance.relinearize( + encrypted.instance, + relinKeys.instance, + temp.instance, + pool + ) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Given a CipherText encrypted modulo q_1...q_k, this function switches the - * modulus down until the parameters reach the given parmsId and stores the - * result in the destination parameter. Dynamic memory allocations in the process - * are allocated from the memory pool pointed to by the given MemoryPoolHandle. - * - * @function - * @name Evaluator#cipherModSwitchTo - * @param {CipherText} encrypted CipherText to switch its modulus down - * @param {ParmsIdType} parmsId Target parmsId to switch to - * @param {CipherText} [destination] CipherText destination to store the switched result - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const context = seal.Context(encParms, true) - * const cipherTextA = seal.CipherText() - * // ... after encrypting some data ... - * const parmsId = context.lastParmsId - * const resultCipher = evaluator.cipherModSwitchTo(cipherTextA, parmsId) - * // or - * const cipherDest = seal.CipherText() - * evaluator.cipherModSwitchTo(cipherTextA, parmsId, cipherDest) - */ - cipherModSwitchTo( - encrypted: CipherText, - parmsId: ParmsIdType, - destination?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (destination) { - _instance.cipherModSwitchTo( - encrypted.instance, - parmsId.instance, - destination.instance, - pool - ) - return - } - const temp = CipherText() - _instance.cipherModSwitchTo( - encrypted.instance, - parmsId.instance, - temp.instance, - pool - ) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Given a CipherText encrypted modulo q_1...q_k, this function switches the + * modulus down to q_1...q_{k-1} and stores the result in the destination + * parameter. Dynamic memory allocations in the process are allocated from + * the memory pool pointed to by the given MemoryPoolHandle. + * + * @function + * @name Evaluator#cipherModSwitchToNext + * @param {CipherText} encrypted CipherText to switch its modulus down + * @param {CipherText} [destination] CipherText destination to store the switched result + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const cipherTextA = seal.CipherText() + * // ... after encrypting some data ... + * const resultCipher = evaluator.cipherModSwitchToNext(cipherTextA) + * // or + * const cipherDest = seal.CipherText() + * evaluator.cipherModSwitchToNext(cipherTextA, cipherDest) + */ + cipherModSwitchToNext( + encrypted: CipherText, + destination?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (destination) { + _instance.cipherModSwitchToNext( + encrypted.instance, + destination.instance, + pool + ) + return + } + const temp = CipherText() + _instance.cipherModSwitchToNext( + encrypted.instance, + temp.instance, + pool + ) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Modulus switches an NTT transformed PlainText from modulo q_1...q_k down - * to modulo q_1...q_{k-1} and stores the result in the destination parameter. - * - * @function - * @name Evaluator#plainModSwitchToNext - * @param {PlainText} plain PlainText to switch its modulus down - * @param {PlainText} [destination] PlainText destination to store the switched result - * @returns {PlainText|void} PlainText containing the result or void if a destination was supplied - * @example - * const plainTextA = seal.PlainText() - * // ... after encoding some data ... - * const resultCipher = evaluator.plainModSwitchToNext(plainTextA) - * // or - * const plainDest = seal.PlainText() - * evaluator.plainModSwitchToNext(plainTextA, plainDest) - */ - plainModSwitchToNext( - plain: PlainText, - destination?: PlainText - ): PlainText | void { - try { - if (destination) { - _instance.plainModSwitchToNext(plain.instance, destination.instance) - return - } - const temp = PlainText() - _instance.plainModSwitchToNext(plain.instance, temp.instance) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Given a CipherText encrypted modulo q_1...q_k, this function switches the + * modulus down until the parameters reach the given parmsId and stores the + * result in the destination parameter. Dynamic memory allocations in the process + * are allocated from the memory pool pointed to by the given MemoryPoolHandle. + * + * @function + * @name Evaluator#cipherModSwitchTo + * @param {CipherText} encrypted CipherText to switch its modulus down + * @param {ParmsIdType} parmsId Target parmsId to switch to + * @param {CipherText} [destination] CipherText destination to store the switched result + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const context = seal.Context(encParms, true) + * const cipherTextA = seal.CipherText() + * // ... after encrypting some data ... + * const parmsId = context.lastParmsId + * const resultCipher = evaluator.cipherModSwitchTo(cipherTextA, parmsId) + * // or + * const cipherDest = seal.CipherText() + * evaluator.cipherModSwitchTo(cipherTextA, parmsId, cipherDest) + */ + cipherModSwitchTo( + encrypted: CipherText, + parmsId: ParmsIdType, + destination?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (destination) { + _instance.cipherModSwitchTo( + encrypted.instance, + parmsId.instance, + destination.instance, + pool + ) + return + } + const temp = CipherText() + _instance.cipherModSwitchTo( + encrypted.instance, + parmsId.instance, + temp.instance, + pool + ) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Given an NTT transformed PlainText modulo q_1...q_k, this function switches - * the modulus down until the parameters reach the given parmsId and stores - * the result in the destination parameter. - * - * @function - * @name Evaluator#plainModSwitchTo - * @param {PlainText} plain PlainText to switch its modulus down - * @param {ParmsIdType} parmsId Target parmsId to switch to - * @param {PlainText} [destination] PlainText destination to store the switched result - * @returns {PlainText|void} PlainText containing the result or void if a destination was supplied - * @example - * const context = seal.Context(encParms, true) - * const plainTextA = seal.PlainText() - * // ... after encoding some data ... - * const parmsId = context.lastParmsId - * const resultCipher = evaluator.plainModSwitchTo(plainTextA, parmsId) - * // or - * const plainDest = seal.PlainText() - * evaluator.plainModSwitchTo(plainTextA, parmsId, plainDest) - */ - plainModSwitchTo( - plain: PlainText, - parmsId: ParmsIdType, - destination?: PlainText - ): PlainText | void { - try { - if (destination) { - _instance.plainModSwitchTo( - plain.instance, - parmsId.instance, - destination.instance - ) - return - } - const temp = PlainText() - _instance.plainModSwitchTo( - plain.instance, - parmsId.instance, - temp.instance - ) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Modulus switches an NTT transformed PlainText from modulo q_1...q_k down + * to modulo q_1...q_{k-1} and stores the result in the destination parameter. + * + * @function + * @name Evaluator#plainModSwitchToNext + * @param {PlainText} plain PlainText to switch its modulus down + * @param {PlainText} [destination] PlainText destination to store the switched result + * @returns {PlainText|void} PlainText containing the result or void if a destination was supplied + * @example + * const plainTextA = seal.PlainText() + * // ... after encoding some data ... + * const resultCipher = evaluator.plainModSwitchToNext(plainTextA) + * // or + * const plainDest = seal.PlainText() + * evaluator.plainModSwitchToNext(plainTextA, plainDest) + */ + plainModSwitchToNext( + plain: PlainText, + destination?: PlainText + ): PlainText | void { + try { + if (destination) { + _instance.plainModSwitchToNext(plain.instance, destination.instance) + return + } + const temp = PlainText() + _instance.plainModSwitchToNext(plain.instance, temp.instance) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Given a CipherText encrypted modulo q_1...q_k, this function switches the - * modulus down to q_1...q_{k-1}, scales the message down accordingly, and - * stores the result in the destination parameter. Dynamic memory allocations - * in the process are allocated from the memory pool pointed to by the given - * MemoryPoolHandle. - * - * @function - * @name Evaluator#rescaleToNext - * @param {CipherText} encrypted CipherText to rescale - * @param {CipherText} [destination] CipherText destination to store the rescaled result - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const cipherTextA = seal.CipherText() - * // ... after encrypting some data ... - * const resultCipher = evaluator.rescaleToNext(cipherTextA) - * // or - * const cipherDest = seal.CipherText() - * evaluator.rescaleToNext(cipherTextA, cipherDest) - */ - rescaleToNext( - encrypted: CipherText, - destination?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (destination) { - _instance.rescaleToNext( - encrypted.instance, - destination.instance, - pool - ) - return - } - const temp = CipherText() - _instance.rescaleToNext(encrypted.instance, temp.instance, pool) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Given an NTT transformed PlainText modulo q_1...q_k, this function switches + * the modulus down until the parameters reach the given parmsId and stores + * the result in the destination parameter. + * + * @function + * @name Evaluator#plainModSwitchTo + * @param {PlainText} plain PlainText to switch its modulus down + * @param {ParmsIdType} parmsId Target parmsId to switch to + * @param {PlainText} [destination] PlainText destination to store the switched result + * @returns {PlainText|void} PlainText containing the result or void if a destination was supplied + * @example + * const context = seal.Context(encParms, true) + * const plainTextA = seal.PlainText() + * // ... after encoding some data ... + * const parmsId = context.lastParmsId + * const resultCipher = evaluator.plainModSwitchTo(plainTextA, parmsId) + * // or + * const plainDest = seal.PlainText() + * evaluator.plainModSwitchTo(plainTextA, parmsId, plainDest) + */ + plainModSwitchTo( + plain: PlainText, + parmsId: ParmsIdType, + destination?: PlainText + ): PlainText | void { + try { + if (destination) { + _instance.plainModSwitchTo( + plain.instance, + parmsId.instance, + destination.instance + ) + return + } + const temp = PlainText() + _instance.plainModSwitchTo( + plain.instance, + parmsId.instance, + temp.instance + ) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Given a CipherText encrypted modulo q_1...q_k, this function switches the - * modulus down until the parameters reach the given parmsId, scales the message - * down accordingly, and stores the result in the destination parameter. Dynamic - * memory allocations in the process are allocated from the memory pool pointed - * to by the given MemoryPoolHandle. - * - * @function - * @name Evaluator#rescaleTo - * @param {CipherText} encrypted CipherText to rescale - * @param {ParmsIdType} parmsId Target parmsId to rescale to - * @param {CipherText} [destination] CipherText destination to store the rescaled result - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const context = seal.Context(encParms, true) - * const cipherTextA = seal.CipherText() - * // ... after encrypting some data ... - * const parmsId = context.lastParmsId - * const resultCipher = evaluator.rescaleTo(cipherTextA, parmsId) - * // or - * const cipherDest = seal.CipherText() - * evaluator.rescaleTo(cipherTextA, parmsId, cipherDest) - */ - rescaleTo( - encrypted: CipherText, - parmsId: ParmsIdType, - destination?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (destination) { - _instance.rescaleTo( - encrypted.instance, - parmsId.instance, - destination.instance, - pool - ) - return - } - const temp = CipherText() - _instance.rescaleTo( - encrypted.instance, - parmsId.instance, - temp.instance, - pool - ) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Given a CipherText encrypted modulo q_1...q_k, this function switches the + * modulus down to q_1...q_{k-1}, scales the message down accordingly, and + * stores the result in the destination parameter. Dynamic memory allocations + * in the process are allocated from the memory pool pointed to by the given + * MemoryPoolHandle. + * + * @function + * @name Evaluator#rescaleToNext + * @param {CipherText} encrypted CipherText to rescale + * @param {CipherText} [destination] CipherText destination to store the rescaled result + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const cipherTextA = seal.CipherText() + * // ... after encrypting some data ... + * const resultCipher = evaluator.rescaleToNext(cipherTextA) + * // or + * const cipherDest = seal.CipherText() + * evaluator.rescaleToNext(cipherTextA, cipherDest) + */ + rescaleToNext( + encrypted: CipherText, + destination?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (destination) { + _instance.rescaleToNext( + encrypted.instance, + destination.instance, + pool + ) + return + } + const temp = CipherText() + _instance.rescaleToNext(encrypted.instance, temp.instance, pool) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Exponentiates a CipherText. This functions raises encrypted to a power and - * stores the result in the destination parameter. Dynamic memory allocations - * in the process are allocated from the memory pool pointed to by the given - * MemoryPoolHandle. The exponentiation is done in a depth-optimal order, and - * relinearization is performed automatically after every multiplication in - * the process. In relinearization the given relinearization keys are used. - * - * @function - * @name Evaluator#exponentiate - * @param {CipherText} encrypted CipherText to exponentiate - * @param {number} exponent Positive integer to exponentiate the CipherText - * @param {RelinKeys} relinKeys RelinKeys used to perform relinearization after each exponentiation - * @param {CipherText} [destination] CipherText destination to store the exponentiated result - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const relinKeys = keyGenerator.createRelinKeys() - * const cipherTextA = seal.CipherText() - * // ... after encrypting some data ... - * const resultCipher = evaluator.exponentiate(cipherTextA, 3, relinKeys) - * // or - * const cipherDest = seal.CipherText() - * evaluator.exponentiate(cipherTextA, 3, relinKeys, cipherDest) - */ - exponentiate( - encrypted: CipherText, - exponent: number, - relinKeys: RelinKeys, - destination?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (destination) { - _instance.exponentiate( - encrypted.instance, - exponent, - relinKeys.instance, - destination.instance, - pool - ) - return - } - const temp = CipherText() - _instance.exponentiate( - encrypted.instance, - exponent, - relinKeys.instance, - temp.instance, - pool - ) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Given a CipherText encrypted modulo q_1...q_k, this function switches the + * modulus down until the parameters reach the given parmsId, scales the message + * down accordingly, and stores the result in the destination parameter. Dynamic + * memory allocations in the process are allocated from the memory pool pointed + * to by the given MemoryPoolHandle. + * + * @function + * @name Evaluator#rescaleTo + * @param {CipherText} encrypted CipherText to rescale + * @param {ParmsIdType} parmsId Target parmsId to rescale to + * @param {CipherText} [destination] CipherText destination to store the rescaled result + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const context = seal.Context(encParms, true) + * const cipherTextA = seal.CipherText() + * // ... after encrypting some data ... + * const parmsId = context.lastParmsId + * const resultCipher = evaluator.rescaleTo(cipherTextA, parmsId) + * // or + * const cipherDest = seal.CipherText() + * evaluator.rescaleTo(cipherTextA, parmsId, cipherDest) + */ + rescaleTo( + encrypted: CipherText, + parmsId: ParmsIdType, + destination?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (destination) { + _instance.rescaleTo( + encrypted.instance, + parmsId.instance, + destination.instance, + pool + ) + return + } + const temp = CipherText() + _instance.rescaleTo( + encrypted.instance, + parmsId.instance, + temp.instance, + pool + ) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Adds a CipherText and a PlainText. This function adds a CipherText and - * a PlainText and stores the result in the destination parameter. The PlainText - * must be valid for the current encryption parameters. - * - * @function - * @name Evaluator#addPlain - * @param {CipherText} encrypted CipherText operand A - * @param {PlainText} plain PlainText operand B - * @param {CipherText} [destination] CipherText destination to store the sum - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const cipherTextA = seal.CipherText() - * const plainTextB = seal.PlainText() - * // ... after encrypting/encoding some data ... - * const resultCipher = evaluator.addPlain(cipherTextA, plainTextB) - * // or - * const cipherDest = seal.CipherText() - * evaluator.addPlain(cipherTextA, plainTextB, cipherDest) - */ - addPlain( - encrypted: CipherText, - plain: PlainText, - destination?: CipherText - ): CipherText | void { - try { - if (destination) { - _instance.addPlain( - encrypted.instance, - plain.instance, - destination.instance - ) - return - } - const temp = CipherText() - _instance.addPlain(encrypted.instance, plain.instance, temp.instance) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Exponentiates a CipherText. This functions raises encrypted to a power and + * stores the result in the destination parameter. Dynamic memory allocations + * in the process are allocated from the memory pool pointed to by the given + * MemoryPoolHandle. The exponentiation is done in a depth-optimal order, and + * relinearization is performed automatically after every multiplication in + * the process. In relinearization the given relinearization keys are used. + * + * @function + * @name Evaluator#exponentiate + * @param {CipherText} encrypted CipherText to exponentiate + * @param {number} exponent Positive integer to exponentiate the CipherText + * @param {RelinKeys} relinKeys RelinKeys used to perform relinearization after each exponentiation + * @param {CipherText} [destination] CipherText destination to store the exponentiated result + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const relinKeys = keyGenerator.createRelinKeys() + * const cipherTextA = seal.CipherText() + * // ... after encrypting some data ... + * const resultCipher = evaluator.exponentiate(cipherTextA, 3, relinKeys) + * // or + * const cipherDest = seal.CipherText() + * evaluator.exponentiate(cipherTextA, 3, relinKeys, cipherDest) + */ + exponentiate( + encrypted: CipherText, + exponent: number, + relinKeys: RelinKeys, + destination?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (destination) { + _instance.exponentiate( + encrypted.instance, + exponent, + relinKeys.instance, + destination.instance, + pool + ) + return + } + const temp = CipherText() + _instance.exponentiate( + encrypted.instance, + exponent, + relinKeys.instance, + temp.instance, + pool + ) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Subtracts a PlainText from a CipherText. This function subtracts a PlainText - * from a CipherText and stores the result in the destination parameter. The - * PlainText must be valid for the current encryption parameters. - * - * @function - * @name Evaluator#subPlain - * @param {CipherText} encrypted CipherText operand A - * @param {PlainText} plain PlainText operand B - * @param {CipherText} [destination] CipherText destination to store the difference - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const cipherTextA = seal.CipherText() - * const plainTextB = seal.PlainText() - * // ... after encrypting/encoding some data ... - * const resultCipher = evaluator.subPlain(cipherTextA, plainTextB) - * // or - * const cipherDest = seal.CipherText() - * evaluator.subPlain(cipherTextA, plainTextB, cipherDest) - */ - subPlain( - encrypted: CipherText, - plain: PlainText, - destination?: CipherText - ): CipherText | void { - try { - if (destination) { - _instance.subPlain( - encrypted.instance, - plain.instance, - destination.instance - ) - return - } - const temp = CipherText() - _instance.subPlain(encrypted.instance, plain.instance, temp.instance) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Adds a CipherText and a PlainText. This function adds a CipherText and + * a PlainText and stores the result in the destination parameter. The PlainText + * must be valid for the current encryption parameters. + * + * @function + * @name Evaluator#addPlain + * @param {CipherText} encrypted CipherText operand A + * @param {PlainText} plain PlainText operand B + * @param {CipherText} [destination] CipherText destination to store the sum + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const cipherTextA = seal.CipherText() + * const plainTextB = seal.PlainText() + * // ... after encrypting/encoding some data ... + * const resultCipher = evaluator.addPlain(cipherTextA, plainTextB) + * // or + * const cipherDest = seal.CipherText() + * evaluator.addPlain(cipherTextA, plainTextB, cipherDest) + */ + addPlain( + encrypted: CipherText, + plain: PlainText, + destination?: CipherText + ): CipherText | void { + try { + if (destination) { + _instance.addPlain( + encrypted.instance, + plain.instance, + destination.instance + ) + return + } + const temp = CipherText() + _instance.addPlain(encrypted.instance, plain.instance, temp.instance) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Multiplies a CipherText with a PlainText. This function multiplies - * a CipherText with a PlainText and stores the result in the destination - * parameter. The PlainText must be a valid for the current encryption parameters, - * and cannot be identially 0. Dynamic memory allocations in the process are - * allocated from the memory pool pointed to by the given MemoryPoolHandle. - * - * @function - * @name Evaluator#multiplyPlain - * @param {CipherText} encrypted CipherText operand A - * @param {PlainText} plain PlainText operand B - * @param {CipherText} [destination] CipherText destination to store the product - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText?} CipherText containing the result or void if a destination was supplied - * @example - * const cipherTextA = seal.CipherText() - * const plainTextB = seal.PlainText() - * // ... after encrypting/encoding some data ... - * const resultCipher = evaluator.multiplyPlain(cipherTextA, plainTextB) - * // or - * const cipherDest = seal.CipherText() - * evaluator.multiplyPlain(cipherTextA, plainTextB, cipherDest) - */ - multiplyPlain( - encrypted: CipherText, - plain: PlainText, - destination?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (destination) { - _instance.multiplyPlain( - encrypted.instance, - plain.instance, - destination.instance, - pool - ) - return - } - const temp = CipherText() - _instance.multiplyPlain( - encrypted.instance, - plain.instance, - temp.instance, - pool - ) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Subtracts a PlainText from a CipherText. This function subtracts a PlainText + * from a CipherText and stores the result in the destination parameter. The + * PlainText must be valid for the current encryption parameters. + * + * @function + * @name Evaluator#subPlain + * @param {CipherText} encrypted CipherText operand A + * @param {PlainText} plain PlainText operand B + * @param {CipherText} [destination] CipherText destination to store the difference + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const cipherTextA = seal.CipherText() + * const plainTextB = seal.PlainText() + * // ... after encrypting/encoding some data ... + * const resultCipher = evaluator.subPlain(cipherTextA, plainTextB) + * // or + * const cipherDest = seal.CipherText() + * evaluator.subPlain(cipherTextA, plainTextB, cipherDest) + */ + subPlain( + encrypted: CipherText, + plain: PlainText, + destination?: CipherText + ): CipherText | void { + try { + if (destination) { + _instance.subPlain( + encrypted.instance, + plain.instance, + destination.instance + ) + return + } + const temp = CipherText() + _instance.subPlain(encrypted.instance, plain.instance, temp.instance) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Transforms a PlainText to NTT domain. This functions applies the number - * Theoretic Transform to a PlainText by first embedding integers modulo the - * PlainText modulus to integers modulo the coefficient modulus and then - * performing David Harvey's NTT on the resulting polynomial. The transformation - * is done with respect to encryption parameters corresponding to a given - * parmsId. The result is stored in the destinationNtt parameter. For the - * operation to be valid, the PlainText must have degree less than PolyModulusDegree - * and each coefficient must be less than the PlainText modulus, i.e., the PlainText - * must be a valid PlainText under the current encryption parameters. Dynamic - * memory allocations in the process are allocated from the memory pool pointed - * to by the given MemoryPoolHandle. - * - * @function - * @name Evaluator#plainTransformToNtt - * @param {PlainText} plain PlainText to transform - * @param {ParmsIdType} parmsId target parmsId to perform NTT transformation - * @param {PlainText} [destinationNtt] PlainText destination to store the transformed result - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {PlainText|void} PlainText containing the result or void if a destination was supplied - * @example - * const context = seal.Context(encParms, true) - * const plainTextA = seal.PlainText() - * // ... after encoding some data ... - * const parmsId = context.lastParmsId - * const resultCipher = evaluator.plainTransformToNtt(plainTextA, parmsId) - * // or - * const plainDest = seal.PlainText() - * evaluator.plainTransformToNtt(plainTextA, parmsId, plainDest) - */ - plainTransformToNtt( - plain: PlainText, - parmsId: ParmsIdType, - destinationNtt?: PlainText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): PlainText | void { - try { - if (destinationNtt) { - _instance.plainTransformToNtt( - plain.instance, - parmsId.instance, - destinationNtt.instance, - pool - ) - return - } - const temp = PlainText() - _instance.plainTransformToNtt( - plain.instance, - parmsId.instance, - temp.instance, - pool - ) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Multiplies a CipherText with a PlainText. This function multiplies + * a CipherText with a PlainText and stores the result in the destination + * parameter. The PlainText must be a valid for the current encryption parameters, + * and cannot be identially 0. Dynamic memory allocations in the process are + * allocated from the memory pool pointed to by the given MemoryPoolHandle. + * + * @function + * @name Evaluator#multiplyPlain + * @param {CipherText} encrypted CipherText operand A + * @param {PlainText} plain PlainText operand B + * @param {CipherText} [destination] CipherText destination to store the product + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText?} CipherText containing the result or void if a destination was supplied + * @example + * const cipherTextA = seal.CipherText() + * const plainTextB = seal.PlainText() + * // ... after encrypting/encoding some data ... + * const resultCipher = evaluator.multiplyPlain(cipherTextA, plainTextB) + * // or + * const cipherDest = seal.CipherText() + * evaluator.multiplyPlain(cipherTextA, plainTextB, cipherDest) + */ + multiplyPlain( + encrypted: CipherText, + plain: PlainText, + destination?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (destination) { + _instance.multiplyPlain( + encrypted.instance, + plain.instance, + destination.instance, + pool + ) + return + } + const temp = CipherText() + _instance.multiplyPlain( + encrypted.instance, + plain.instance, + temp.instance, + pool + ) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Transforms a CipherText to NTT domain. This functions applies David Harvey's - * number Theoretic Transform separately to each polynomial of a CipherText. - * The result is stored in the destinationNtt parameter. - * - * @function - * @name Evaluator#cipherTransformToNtt - * @param {CipherText} encrypted CipherText to transform - * @param {CipherText} [destinationNtt] CipherText destination to store the transformed result - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const cipherTextA = seal.CipherText() - * // ... after encrypting some data ... - * const resultCipher = evaluator.cipherTransformToNtt(cipherTextA) - * // or - * const cipherDest = seal.CipherText() - * evaluator.cipherTransformToNtt(cipherTextA, cipherDest) - */ - cipherTransformToNtt( - encrypted: CipherText, - destinationNtt?: CipherText - ): CipherText | void { - try { - if (destinationNtt) { - _instance.cipherTransformToNtt( - encrypted.instance, - destinationNtt.instance - ) - return - } - const temp = CipherText() - _instance.cipherTransformToNtt(encrypted.instance, temp.instance) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Transforms a PlainText to NTT domain. This functions applies the number + * Theoretic Transform to a PlainText by first embedding integers modulo the + * PlainText modulus to integers modulo the coefficient modulus and then + * performing David Harvey's NTT on the resulting polynomial. The transformation + * is done with respect to encryption parameters corresponding to a given + * parmsId. The result is stored in the destinationNtt parameter. For the + * operation to be valid, the PlainText must have degree less than PolyModulusDegree + * and each coefficient must be less than the PlainText modulus, i.e., the PlainText + * must be a valid PlainText under the current encryption parameters. Dynamic + * memory allocations in the process are allocated from the memory pool pointed + * to by the given MemoryPoolHandle. + * + * @function + * @name Evaluator#plainTransformToNtt + * @param {PlainText} plain PlainText to transform + * @param {ParmsIdType} parmsId target parmsId to perform NTT transformation + * @param {PlainText} [destinationNtt] PlainText destination to store the transformed result + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {PlainText|void} PlainText containing the result or void if a destination was supplied + * @example + * const context = seal.Context(encParms, true) + * const plainTextA = seal.PlainText() + * // ... after encoding some data ... + * const parmsId = context.lastParmsId + * const resultCipher = evaluator.plainTransformToNtt(plainTextA, parmsId) + * // or + * const plainDest = seal.PlainText() + * evaluator.plainTransformToNtt(plainTextA, parmsId, plainDest) + */ + plainTransformToNtt( + plain: PlainText, + parmsId: ParmsIdType, + destinationNtt?: PlainText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): PlainText | void { + try { + if (destinationNtt) { + _instance.plainTransformToNtt( + plain.instance, + parmsId.instance, + destinationNtt.instance, + pool + ) + return + } + const temp = PlainText() + _instance.plainTransformToNtt( + plain.instance, + parmsId.instance, + temp.instance, + pool + ) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Transforms a CipherText back from NTT domain. This functions applies the - * inverse of David Harvey's number Theoretic Transform separately to each - * polynomial of a CipherText. The result is stored in the destination parameter. - * - * @function - * @name Evaluator#cipherTransformFromNtt - * @param {CipherText} encryptedNtt CipherText to transform - * @param {CipherText} [destination] CipherText destination to store the transformed result - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * // ... after cipherTransformToNtt ... - * const resultCipher = evaluator.cipherTransformFromNtt(cipherTextANtt) - * // or - * const cipherDest = seal.CipherText() - * evaluator.cipherTransformFromNtt(cipherTextANtt, cipherDest) - */ - cipherTransformFromNtt( - encryptedNtt: CipherText, - destination?: CipherText - ): CipherText | void { - try { - if (destination) { - _instance.cipherTransformFromNtt( - encryptedNtt.instance, - destination.instance - ) - return - } - const temp = CipherText() - _instance.cipherTransformFromNtt(encryptedNtt.instance, temp.instance) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Transforms a CipherText to NTT domain. This functions applies David Harvey's + * number Theoretic Transform separately to each polynomial of a CipherText. + * The result is stored in the destinationNtt parameter. + * + * @function + * @name Evaluator#cipherTransformToNtt + * @param {CipherText} encrypted CipherText to transform + * @param {CipherText} [destinationNtt] CipherText destination to store the transformed result + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const cipherTextA = seal.CipherText() + * // ... after encrypting some data ... + * const resultCipher = evaluator.cipherTransformToNtt(cipherTextA) + * // or + * const cipherDest = seal.CipherText() + * evaluator.cipherTransformToNtt(cipherTextA, cipherDest) + */ + cipherTransformToNtt( + encrypted: CipherText, + destinationNtt?: CipherText + ): CipherText | void { + try { + if (destinationNtt) { + _instance.cipherTransformToNtt( + encrypted.instance, + destinationNtt.instance + ) + return + } + const temp = CipherText() + _instance.cipherTransformToNtt(encrypted.instance, temp.instance) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Applies a Galois automorphism to a CipherText and writes the result to the - * destination parameter. To evaluate the Galois automorphism, an appropriate - * set of Galois keys must also be provided. Dynamic memory allocations in - * the process are allocated from the memory pool pointed to by the given - * MemoryPoolHandle. - * - * The desired Galois automorphism is given as a Galois element, and must be - * an odd integer in the interval [1, M-1], where M = 2*N, and N = degree(poly_modulus). - * Used with batching, a Galois element 3^i % M corresponds to a cyclic row - * rotation i steps to the left, and a Galois element 3^(N/2-i) % M corresponds - * to a cyclic row rotation i steps to the right. The Galois element M-1 corresponds - * to a column rotation (row swap) in BFV, and complex conjugation in CKKS. - * In the polynomial view (not batching), a Galois automorphism by a Galois - * element p changes Enc(plain(x)) to Enc(plain(x^p)). - * - * @function - * @name Evaluator#applyGalois - * @param {CipherText} encrypted CipherText to apply the automorphism - * @param {number} galoisElt number representing the Galois element - * @param {GaloisKeys} galoisKeys GaloisKeys used to perform rotations - * @param {CipherText} [destination] CipherText destination to store the result - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * ... - * const evaluator = seal.Evaluator(context) - * const arr = Int32Array.from({ length: encoder.slotCount }, (_, i) => i) - * const plain = encoder.encode(arr) - * const cipher = encryptor.encrypt(plain) - * const cipherDest = seal.CipherText() - * const galElt = 2 * parms.polyModulusDegree - 1 - * evaluator.applyGalois(cipher, galElt, galoisKeys, cipherDest) - */ - applyGalois( - encrypted: CipherText, - galoisElt: number, - galoisKeys: GaloisKeys, - destination?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (destination) { - _instance.applyGalois( - encrypted.instance, - galoisElt, - galoisKeys.instance, - destination.instance, - pool - ) - return - } - const temp = CipherText() - _instance.applyGalois( - encrypted.instance, - galoisElt, - galoisKeys.instance, - temp.instance, - pool - ) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Transforms a CipherText back from NTT domain. This functions applies the + * inverse of David Harvey's number Theoretic Transform separately to each + * polynomial of a CipherText. The result is stored in the destination parameter. + * + * @function + * @name Evaluator#cipherTransformFromNtt + * @param {CipherText} encryptedNtt CipherText to transform + * @param {CipherText} [destination] CipherText destination to store the transformed result + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * // ... after cipherTransformToNtt ... + * const resultCipher = evaluator.cipherTransformFromNtt(cipherTextANtt) + * // or + * const cipherDest = seal.CipherText() + * evaluator.cipherTransformFromNtt(cipherTextANtt, cipherDest) + */ + cipherTransformFromNtt( + encryptedNtt: CipherText, + destination?: CipherText + ): CipherText | void { + try { + if (destination) { + _instance.cipherTransformFromNtt( + encryptedNtt.instance, + destination.instance + ) + return + } + const temp = CipherText() + _instance.cipherTransformFromNtt(encryptedNtt.instance, temp.instance) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Rotates PlainText matrix rows cyclically. When batching is used with the - * BFV/BGV scheme, this function rotates the encrypted PlainText matrix rows - * cyclically to the left (steps > 0) or to the right (steps < 0) and writes - * the result to the destination parameter. Since the size of the batched - * matrix is 2-by-(N/2), where N is the degree of the polynomial modulus, - * the number of steps to rotate must have absolute value at most N/2-1. Dynamic - * memory allocations in the process are allocated from the memory pool pointed - * to by the given MemoryPoolHandle. - * - * @function - * @name Evaluator#rotateRows - * @param {CipherText} encrypted CipherText to rotate rows - * @param {number} steps Int representing steps to rotate (negative = right, positive = left) - * @param {GaloisKeys} galoisKeys GaloisKeys used to perform rotations - * @param {CipherText} [destination] CipherText destination to store the rotated result - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const galoisKeys = keyGenerator.createGaloisKeys() - * const cipherTextA = seal.CipherText() - * // ... after encrypting some data ... - * const resultCipher = evaluator.rotateRows(cipherTextA, 3, galoisKeys) - * // or - * const cipherDest = seal.CipherText() - * evaluator.rotateRows(cipherTextA, 3, galoisKeys, cipherDest) - */ - rotateRows( - encrypted: CipherText, - steps: number, - galoisKeys: GaloisKeys, - destination?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (destination) { - _instance.rotateRows( - encrypted.instance, - steps, - galoisKeys.instance, - destination.instance, - pool - ) - return - } - const temp = CipherText() - _instance.rotateRows( - encrypted.instance, - steps, - galoisKeys.instance, - temp.instance, - pool - ) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Applies a Galois automorphism to a CipherText and writes the result to the + * destination parameter. To evaluate the Galois automorphism, an appropriate + * set of Galois keys must also be provided. Dynamic memory allocations in + * the process are allocated from the memory pool pointed to by the given + * MemoryPoolHandle. + * + * The desired Galois automorphism is given as a Galois element, and must be + * an odd integer in the interval [1, M-1], where M = 2*N, and N = degree(poly_modulus). + * Used with batching, a Galois element 3^i % M corresponds to a cyclic row + * rotation i steps to the left, and a Galois element 3^(N/2-i) % M corresponds + * to a cyclic row rotation i steps to the right. The Galois element M-1 corresponds + * to a column rotation (row swap) in BFV, and complex conjugation in CKKS. + * In the polynomial view (not batching), a Galois automorphism by a Galois + * element p changes Enc(plain(x)) to Enc(plain(x^p)). + * + * @function + * @name Evaluator#applyGalois + * @param {CipherText} encrypted CipherText to apply the automorphism + * @param {number} galoisElt number representing the Galois element + * @param {GaloisKeys} galoisKeys GaloisKeys used to perform rotations + * @param {CipherText} [destination] CipherText destination to store the result + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * ... + * const evaluator = seal.Evaluator(context) + * const arr = Int32Array.from({ length: encoder.slotCount }, (_, i) => i) + * const plain = encoder.encode(arr) + * const cipher = encryptor.encrypt(plain) + * const cipherDest = seal.CipherText() + * const galElt = 2 * parms.polyModulusDegree - 1 + * evaluator.applyGalois(cipher, galElt, galoisKeys, cipherDest) + */ + applyGalois( + encrypted: CipherText, + galoisElt: number, + galoisKeys: GaloisKeys, + destination?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (destination) { + _instance.applyGalois( + encrypted.instance, + galoisElt, + galoisKeys.instance, + destination.instance, + pool + ) + return + } + const temp = CipherText() + _instance.applyGalois( + encrypted.instance, + galoisElt, + galoisKeys.instance, + temp.instance, + pool + ) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Rotates PlainText matrix columns cyclically. When batching is used with - * the BFV scheme, this function rotates the encrypted PlainText matrix columns - * cyclically, and writes the result to the destination parameter. Since the - * size of the batched matrix is 2-by-(N/2), where N is the degree of the - * polynomial modulus, this means simply swapping the two rows. Dynamic memory - * allocations in the process are allocated from the memory pool pointed to - * by the given MemoryPoolHandle. - * - * @function - * @name Evaluator#rotateColumns - * @param {CipherText} encrypted CipherText to rotate columns - * @param {GaloisKeys} galoisKeys GaloisKeys used to perform rotations - * @param {CipherText} [destination] CipherText destination to store the rotated result - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const galoisKeys = keyGenerator.createGaloisKeys() - * const cipherTextA = seal.CipherText() - * // ... after encrypting some data ... - * const resultCipher = evaluator.rotateColumns(cipherTextA, galoisKeys) - * // or - * const cipherDest = seal.CipherText() - * evaluator.rotateColumns(cipherTextA, galoisKeys, cipherDest) - */ - rotateColumns( - encrypted: CipherText, - galoisKeys: GaloisKeys, - destination?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (destination) { - _instance.rotateColumns( - encrypted.instance, - galoisKeys.instance, - destination.instance, - pool - ) - return - } - const temp = CipherText() - _instance.rotateColumns( - encrypted.instance, - galoisKeys.instance, - temp.instance, - pool - ) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Rotates PlainText matrix rows cyclically. When batching is used with the + * BFV/BGV scheme, this function rotates the encrypted PlainText matrix rows + * cyclically to the left (steps > 0) or to the right (steps < 0) and writes + * the result to the destination parameter. Since the size of the batched + * matrix is 2-by-(N/2), where N is the degree of the polynomial modulus, + * the number of steps to rotate must have absolute value at most N/2-1. Dynamic + * memory allocations in the process are allocated from the memory pool pointed + * to by the given MemoryPoolHandle. + * + * @function + * @name Evaluator#rotateRows + * @param {CipherText} encrypted CipherText to rotate rows + * @param {number} steps Int representing steps to rotate (negative = right, positive = left) + * @param {GaloisKeys} galoisKeys GaloisKeys used to perform rotations + * @param {CipherText} [destination] CipherText destination to store the rotated result + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const galoisKeys = keyGenerator.createGaloisKeys() + * const cipherTextA = seal.CipherText() + * // ... after encrypting some data ... + * const resultCipher = evaluator.rotateRows(cipherTextA, 3, galoisKeys) + * // or + * const cipherDest = seal.CipherText() + * evaluator.rotateRows(cipherTextA, 3, galoisKeys, cipherDest) + */ + rotateRows( + encrypted: CipherText, + steps: number, + galoisKeys: GaloisKeys, + destination?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (destination) { + _instance.rotateRows( + encrypted.instance, + steps, + galoisKeys.instance, + destination.instance, + pool + ) + return + } + const temp = CipherText() + _instance.rotateRows( + encrypted.instance, + steps, + galoisKeys.instance, + temp.instance, + pool + ) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Rotates PlainText vector cyclically. When using the CKKS scheme, this function - * rotates the encrypted PlainText vector cyclically to the left (steps > 0) - * or to the right (steps < 0) and writes the result to the destination parameter. - * Since the size of the batched matrix is 2-by-(N/2), where N is the degree - * of the polynomial modulus, the number of steps to rotate must have absolute - * value at most N/2-1. Dynamic memory allocations in the process are allocated - * from the memory pool pointed to by the given MemoryPoolHandle. - * - * @function - * @name Evaluator#rotateVector - * @param {CipherText} encrypted CipherText to rotate the entire vector - * @param {number} steps Int representing steps to rotate (negative = right, positive = left) - * @param {GaloisKeys} galoisKeys GaloisKeys used to perform rotations - * @param {CipherText} [destination] CipherText destination to store the rotated result - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const galoisKeys = keyGenerator.createGaloisKeys() - * const cipherTextA = seal.CipherText() - * // ... after encrypting some data ... - * const resultCipher = evaluator.rotateVector(cipherTextA, 3, galoisKeys) - * // or - * const cipherDest = seal.CipherText() - * evaluator.rotateVector(cipherTextA, 3, galoisKeys, cipherDest) - */ - rotateVector( - encrypted: CipherText, - steps: number, - galoisKeys: GaloisKeys, - destination?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (destination) { - _instance.rotateVector( - encrypted.instance, - steps, - galoisKeys.instance, - destination.instance, - pool - ) - return - } - const temp = CipherText() - _instance.rotateVector( - encrypted.instance, - steps, - galoisKeys.instance, - temp.instance, - pool - ) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Rotates PlainText matrix columns cyclically. When batching is used with + * the BFV scheme, this function rotates the encrypted PlainText matrix columns + * cyclically, and writes the result to the destination parameter. Since the + * size of the batched matrix is 2-by-(N/2), where N is the degree of the + * polynomial modulus, this means simply swapping the two rows. Dynamic memory + * allocations in the process are allocated from the memory pool pointed to + * by the given MemoryPoolHandle. + * + * @function + * @name Evaluator#rotateColumns + * @param {CipherText} encrypted CipherText to rotate columns + * @param {GaloisKeys} galoisKeys GaloisKeys used to perform rotations + * @param {CipherText} [destination] CipherText destination to store the rotated result + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const galoisKeys = keyGenerator.createGaloisKeys() + * const cipherTextA = seal.CipherText() + * // ... after encrypting some data ... + * const resultCipher = evaluator.rotateColumns(cipherTextA, galoisKeys) + * // or + * const cipherDest = seal.CipherText() + * evaluator.rotateColumns(cipherTextA, galoisKeys, cipherDest) + */ + rotateColumns( + encrypted: CipherText, + galoisKeys: GaloisKeys, + destination?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (destination) { + _instance.rotateColumns( + encrypted.instance, + galoisKeys.instance, + destination.instance, + pool + ) + return + } + const temp = CipherText() + _instance.rotateColumns( + encrypted.instance, + galoisKeys.instance, + temp.instance, + pool + ) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Complex conjugates PlainText slot values. When using the CKKS scheme, this - * function complex conjugates all values in the underlying PlainText, and - * writes the result to the destination parameter. Dynamic memory allocations - * in the process are allocated from the memory pool pointed to by the given - * MemoryPoolHandle. - * - * @function - * @name Evaluator#complexConjugate - * @param {CipherText} encrypted CipherText to complex conjugate - * @param {GaloisKeys} galoisKeys GaloisKeys used to perform rotations - * @param {CipherText} [destination] CipherText destination to store the conjugated result - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const galoisKeys = keyGenerator.createGaloisKeys() - * const cipherTextA = seal.CipherText() - * // ... after encrypting some data ... - * const resultCipher = evaluator.complexConjugate(cipherTextA, galoisKeys) - * // or - * const cipherDest = seal.CipherText() - * evaluator.complexConjugate(cipherTextA, galoisKeys, cipherDest) - */ - complexConjugate( - encrypted: CipherText, - galoisKeys: GaloisKeys, - destination?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (destination) { - _instance.complexConjugate( - encrypted.instance, - galoisKeys.instance, - destination.instance, - pool - ) - return - } - const temp = CipherText() - _instance.complexConjugate( - encrypted.instance, - galoisKeys.instance, - temp.instance, - pool - ) - return temp - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Rotates PlainText vector cyclically. When using the CKKS scheme, this function + * rotates the encrypted PlainText vector cyclically to the left (steps > 0) + * or to the right (steps < 0) and writes the result to the destination parameter. + * Since the size of the batched matrix is 2-by-(N/2), where N is the degree + * of the polynomial modulus, the number of steps to rotate must have absolute + * value at most N/2-1. Dynamic memory allocations in the process are allocated + * from the memory pool pointed to by the given MemoryPoolHandle. + * + * @function + * @name Evaluator#rotateVector + * @param {CipherText} encrypted CipherText to rotate the entire vector + * @param {number} steps Int representing steps to rotate (negative = right, positive = left) + * @param {GaloisKeys} galoisKeys GaloisKeys used to perform rotations + * @param {CipherText} [destination] CipherText destination to store the rotated result + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const galoisKeys = keyGenerator.createGaloisKeys() + * const cipherTextA = seal.CipherText() + * // ... after encrypting some data ... + * const resultCipher = evaluator.rotateVector(cipherTextA, 3, galoisKeys) + * // or + * const cipherDest = seal.CipherText() + * evaluator.rotateVector(cipherTextA, 3, galoisKeys, cipherDest) + */ + rotateVector( + encrypted: CipherText, + steps: number, + galoisKeys: GaloisKeys, + destination?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (destination) { + _instance.rotateVector( + encrypted.instance, + steps, + galoisKeys.instance, + destination.instance, + pool + ) + return + } + const temp = CipherText() + _instance.rotateVector( + encrypted.instance, + steps, + galoisKeys.instance, + temp.instance, + pool + ) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Sum all elements in the encrypted CipherText. The resulting CipherText contains the sum in every element. - * - * @function - * @name Evaluator#sumElements - * @param {CipherText} encrypted CipherText to sum elements - * @param {GaloisKeys} galoisKeys GaloisKeys used to perform rotations - * @param {SchemeType} scheme Scheme that was used for encryption - * @param {CipherText} [destination] CipherText destination to store the result - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const galoisKeys = keyGenerator.createGaloisKeys() - * const cipherTextA = seal.CipherText() - * // ... after encrypting some data ... - * const resultCipher = evaluator.sumElements(cipherTextA, galoisKeys, seal.SchemeTypes.BFV) - * // or - * const cipherDest = seal.CipherText() - * evaluator.sumElements(cipherTextA, galoisKeys, seal.SchemeTypes.BFV, cipherDest) - */ - sumElements( - encrypted: CipherText, - galoisKeys: GaloisKeys, - scheme: SchemeType, - destination?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (destination) { - _instance.sumElements( - encrypted.instance, - galoisKeys.instance, - scheme, - destination.instance, - pool - ) - return - } + /** + * Complex conjugates PlainText slot values. When using the CKKS scheme, this + * function complex conjugates all values in the underlying PlainText, and + * writes the result to the destination parameter. Dynamic memory allocations + * in the process are allocated from the memory pool pointed to by the given + * MemoryPoolHandle. + * + * @function + * @name Evaluator#complexConjugate + * @param {CipherText} encrypted CipherText to complex conjugate + * @param {GaloisKeys} galoisKeys GaloisKeys used to perform rotations + * @param {CipherText} [destination] CipherText destination to store the conjugated result + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const galoisKeys = keyGenerator.createGaloisKeys() + * const cipherTextA = seal.CipherText() + * // ... after encrypting some data ... + * const resultCipher = evaluator.complexConjugate(cipherTextA, galoisKeys) + * // or + * const cipherDest = seal.CipherText() + * evaluator.complexConjugate(cipherTextA, galoisKeys, cipherDest) + */ + complexConjugate( + encrypted: CipherText, + galoisKeys: GaloisKeys, + destination?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (destination) { + _instance.complexConjugate( + encrypted.instance, + galoisKeys.instance, + destination.instance, + pool + ) + return + } + const temp = CipherText() + _instance.complexConjugate( + encrypted.instance, + galoisKeys.instance, + temp.instance, + pool + ) + return temp + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - const newDest = CipherText() - _instance.sumElements( - encrypted.instance, - galoisKeys.instance, - scheme, - newDest.instance, - pool - ) - return newDest - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Sum all elements in the encrypted CipherText. The resulting CipherText contains the sum in every element. + * + * @function + * @name Evaluator#sumElements + * @param {CipherText} encrypted CipherText to sum elements + * @param {GaloisKeys} galoisKeys GaloisKeys used to perform rotations + * @param {SchemeType} scheme Scheme that was used for encryption + * @param {CipherText} [destination] CipherText destination to store the result + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const galoisKeys = keyGenerator.createGaloisKeys() + * const cipherTextA = seal.CipherText() + * // ... after encrypting some data ... + * const resultCipher = evaluator.sumElements(cipherTextA, galoisKeys, seal.SchemeTypes.BFV) + * // or + * const cipherDest = seal.CipherText() + * evaluator.sumElements(cipherTextA, galoisKeys, seal.SchemeTypes.BFV, cipherDest) + */ + sumElements( + encrypted: CipherText, + galoisKeys: GaloisKeys, + scheme: SchemeType, + destination?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (destination) { + _instance.sumElements( + encrypted.instance, + galoisKeys.instance, + scheme, + destination.instance, + pool + ) + return + } - /** - * Perform the dot product (A.B) of two CipherTexts The resulting CipherText contains the dot product in every - * element. - * - * @function - * @name Evaluator#dotProduct - * @param {CipherText} a CipherText operand A - * @param {CipherText} b CipherText operand B - * @param {RelinKeys} relinKeys RelinKeys used to perform relinearization after multiplication - * @param {GaloisKeys} galoisKeys GaloisKeys used to perform rotations - * @param {SchemeType} scheme Scheme that was used for encryption - * @param {CipherText} [destination] CipherText destination to store the result - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const relinKeys = keyGenerator.createRelinKeys() - * const galoisKeys = keyGenerator.createGaloisKeys() - * const cipherTextA = seal.CipherText() - * const cipherTextB = seal.CipherText() - * // ... after encrypting some data ... - * const resultCipher = evaluator.dotProduct(cipherTextA, cipherTextB, relinKeys, galoisKeys, seal.SchemeTypes.BFV) - * // or - * const cipherDest = seal.CipherText() - * evaluator.dotProduct(cipherTextA, cipherTextB, relinKeys, galoisKeys, seal.SchemeTypes.BFV, cipherDest) - */ - dotProduct( - a: CipherText, - b: CipherText, - relinKeys: RelinKeys, - galoisKeys: GaloisKeys, - scheme: SchemeType, - destination?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (destination) { - _instance.multiply( - a.instance, - b.instance, - destination.instance, - pool - ) - _instance.relinearize( - destination.instance, - relinKeys.instance, - destination.instance, - pool - ) - _instance.sumElements( - destination.instance, - galoisKeys.instance, - scheme, - destination.instance, - pool - ) - return - } + const newDest = CipherText() + _instance.sumElements( + encrypted.instance, + galoisKeys.instance, + scheme, + newDest.instance, + pool + ) + return newDest + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - const newDest = CipherText() - _instance.multiply(a.instance, b.instance, newDest.instance, pool) - _instance.relinearize( - newDest.instance, - relinKeys.instance, - newDest.instance, - pool - ) - _instance.sumElements( - newDest.instance, - galoisKeys.instance, - scheme, - newDest.instance, - pool - ) - return newDest - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Perform the dot product (A.B) of two CipherTexts The resulting CipherText contains the dot product in every + * element. + * + * @function + * @name Evaluator#dotProduct + * @param {CipherText} a CipherText operand A + * @param {CipherText} b CipherText operand B + * @param {RelinKeys} relinKeys RelinKeys used to perform relinearization after multiplication + * @param {GaloisKeys} galoisKeys GaloisKeys used to perform rotations + * @param {SchemeType} scheme Scheme that was used for encryption + * @param {CipherText} [destination] CipherText destination to store the result + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const relinKeys = keyGenerator.createRelinKeys() + * const galoisKeys = keyGenerator.createGaloisKeys() + * const cipherTextA = seal.CipherText() + * const cipherTextB = seal.CipherText() + * // ... after encrypting some data ... + * const resultCipher = evaluator.dotProduct(cipherTextA, cipherTextB, relinKeys, galoisKeys, seal.SchemeTypes.BFV) + * // or + * const cipherDest = seal.CipherText() + * evaluator.dotProduct(cipherTextA, cipherTextB, relinKeys, galoisKeys, seal.SchemeTypes.BFV, cipherDest) + */ + dotProduct( + a: CipherText, + b: CipherText, + relinKeys: RelinKeys, + galoisKeys: GaloisKeys, + scheme: SchemeType, + destination?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (destination) { + _instance.multiply( + a.instance, + b.instance, + destination.instance, + pool + ) + _instance.relinearize( + destination.instance, + relinKeys.instance, + destination.instance, + pool + ) + _instance.sumElements( + destination.instance, + galoisKeys.instance, + scheme, + destination.instance, + pool + ) + return + } - /** - * Perform the dot product (A.B) of CipherText (A) and PlainText (B). The resulting CipherText contains the dot - * product in every element. - * - * @function - * @name Evaluator#dotProductPlain - * @param {CipherText} a CipherText operand A - * @param {PlainText} b PlainText operand B - * @param {GaloisKeys} galoisKeys GaloisKeys used to perform rotations - * @param {SchemeType} scheme Scheme that was used for encryption - * @param {CipherText} [destination] CipherText destination to store the result - * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use - * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied - * @example - * const galoisKeys = keyGenerator.createGaloisKeys() - * const cipherTextA = seal.CipherText() - * const plainTextB = seal.PlainText() - * // ... after encoding / encrypting some data ... - * const resultCipher = evaluator.dotProductPlain(cipherTextA, plainTextB, galoisKeys, seal.SchemeTypes.BFV) - * // or - * const cipherDest = seal.CipherText() - * evaluator.dotProductPlain(cipherTextA, plainTextB, galoisKeys, seal.SchemeTypes.BFV, cipherDest) - */ - dotProductPlain( - a: CipherText, - b: PlainText, - galoisKeys: GaloisKeys, - scheme: SchemeType, - destination?: CipherText, - pool: MemoryPoolHandle = MemoryPoolHandle.global - ): CipherText | void { - try { - if (destination) { - _instance.multiplyPlain( - a.instance, - b.instance, - destination.instance, - pool - ) - _instance.sumElements( - destination.instance, - galoisKeys.instance, - scheme, - destination.instance, - pool - ) - return - } + const newDest = CipherText() + _instance.multiply(a.instance, b.instance, newDest.instance, pool) + _instance.relinearize( + newDest.instance, + relinKeys.instance, + newDest.instance, + pool + ) + _instance.sumElements( + newDest.instance, + galoisKeys.instance, + scheme, + newDest.instance, + pool + ) + return newDest + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - const newDest = CipherText() - _instance.multiplyPlain( - a.instance, - b.instance, - newDest.instance, - pool - ) - _instance.sumElements( - newDest.instance, - galoisKeys.instance, - scheme, - newDest.instance, - pool - ) - return newDest - } catch (e) { - throw Exception.safe(e as SealError) - } + /** + * Perform the dot product (A.B) of CipherText (A) and PlainText (B). The resulting CipherText contains the dot + * product in every element. + * + * @function + * @name Evaluator#dotProductPlain + * @param {CipherText} a CipherText operand A + * @param {PlainText} b PlainText operand B + * @param {GaloisKeys} galoisKeys GaloisKeys used to perform rotations + * @param {SchemeType} scheme Scheme that was used for encryption + * @param {CipherText} [destination] CipherText destination to store the result + * @param {MemoryPoolHandle} [pool={@link MemoryPoolHandle.global}] MemoryPool to use + * @returns {CipherText|void} CipherText containing the result or void if a destination was supplied + * @example + * const galoisKeys = keyGenerator.createGaloisKeys() + * const cipherTextA = seal.CipherText() + * const plainTextB = seal.PlainText() + * // ... after encoding / encrypting some data ... + * const resultCipher = evaluator.dotProductPlain(cipherTextA, plainTextB, galoisKeys, seal.SchemeTypes.BFV) + * // or + * const cipherDest = seal.CipherText() + * evaluator.dotProductPlain(cipherTextA, plainTextB, galoisKeys, seal.SchemeTypes.BFV, cipherDest) + */ + dotProductPlain( + a: CipherText, + b: PlainText, + galoisKeys: GaloisKeys, + scheme: SchemeType, + destination?: CipherText, + pool: MemoryPoolHandle = MemoryPoolHandle.global + ): CipherText | void { + try { + if (destination) { + _instance.multiplyPlain( + a.instance, + b.instance, + destination.instance, + pool + ) + _instance.sumElements( + destination.instance, + galoisKeys.instance, + scheme, + destination.instance, + pool + ) + return } + + const newDest = CipherText() + _instance.multiplyPlain( + a.instance, + b.instance, + newDest.instance, + pool + ) + _instance.sumElements( + newDest.instance, + galoisKeys.instance, + scheme, + newDest.instance, + pool + ) + return newDest + } catch (e) { + throw Exception.safe(e as SealError) } } + } + } export const EvaluatorInit = ({ loader diff --git a/src/implementation/exception.ts b/src/implementation/exception.ts index 975ac379..6207f99e 100644 --- a/src/implementation/exception.ts +++ b/src/implementation/exception.ts @@ -16,39 +16,39 @@ export type Exception = { const ExceptionConstructor = (library: Library): ExceptionDependencies => - (): ExceptionConstructorOptions => - (): Exception => { - // Static methods - const _getException = library.getException - - /** - * @implements Exception - */ - - /** - * @interface Exception - */ - return { - /** - * Takes a caught exception in SEAL library and gets a safe error string - * - * @function - * @name Exception.safe - * @param {(number|Error|string)} error Unsafe error to normalize - * @returns {Error} - */ - safe(error: number | Error | string): Error { - if (typeof error === 'number') { - return new Error(_getException(error)) - } - - if (error instanceof Error) { - return error - } - return new Error(error || 'Unknown Error!') - } + (): ExceptionConstructorOptions => + (): Exception => { + // Static methods + const _getException = library.getException + + /** + * @implements Exception + */ + + /** + * @interface Exception + */ + return { + /** + * Takes a caught exception in SEAL library and gets a safe error string + * + * @function + * @name Exception.safe + * @param {(number|Error|string)} error Unsafe error to normalize + * @returns {Error} + */ + safe(error: number | Error | string): Error { + if (typeof error === 'number') { + return new Error(_getException(error)) } + + if (error instanceof Error) { + return error + } + return new Error(error || 'Unknown Error!') } + } + } export const ExceptionInit = ({ loader diff --git a/src/implementation/galois-keys.ts b/src/implementation/galois-keys.ts index b918ce06..a42eb2f4 100644 --- a/src/implementation/galois-keys.ts +++ b/src/implementation/galois-keys.ts @@ -40,250 +40,250 @@ export type GaloisKeys = { const GaloisKeysConstructor = (library: Library): GaloisKeysDependencies => - ({ - Exception, - ComprModeType, - Vector - }: GaloisKeysDependencyOptions): GaloisKeysConstructorOptions => - (): GaloisKeys => { - const Constructor = library.GaloisKeys - let _instance = new Constructor() + ({ + Exception, + ComprModeType, + Vector + }: GaloisKeysDependencyOptions): GaloisKeysConstructorOptions => + (): GaloisKeys => { + const Constructor = library.GaloisKeys + let _instance = new Constructor() - /** - * @implements GaloisKeys - */ + /** + * @implements GaloisKeys + */ - /** - * @interface GaloisKeys - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name GaloisKeys#instance - * @type {Instance} - */ - get instance() { - return _instance - }, + /** + * @interface GaloisKeys + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name GaloisKeys#instance + * @type {Instance} + */ + get instance() { + return _instance + }, - /** - * Inject this object with a raw WASM instance - * - * @private - * @function - * @name GaloisKeys#inject - * @param {Instance} instance WASM instance - */ - inject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined - } - _instance = new Constructor(instance) - instance.delete() - }, + /** + * Inject this object with a raw WASM instance + * + * @private + * @function + * @name GaloisKeys#inject + * @param {Instance} instance WASM instance + */ + inject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined + } + _instance = new Constructor(instance) + instance.delete() + }, - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name GaloisKeys#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined - } - }, + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name GaloisKeys#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined + } + }, - /** - * Returns the current number of keyswitching keys. Only keys that are - * non-empty are counted. - * - * @readonly - * @name GaloisKeys#size - * @type {number} - */ - get size() { - return _instance.size() - }, + /** + * Returns the current number of keyswitching keys. Only keys that are + * non-empty are counted. + * + * @readonly + * @name GaloisKeys#size + * @type {number} + */ + get size() { + return _instance.size() + }, - /** - * Returns the index of a Galois key in the backing KSwitchKeys instance that - * corresponds to the given Galois element, assuming that it exists in the - * backing KSwitchKeys. - * - * @function - * @name GaloisKeys#getIndex - * @param {number} galoisElt The Galois element - * @returns {number} The index of the galois element - */ - getIndex(galoisElt: number): number { - try { - return _instance.getIndex(galoisElt) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Returns the index of a Galois key in the backing KSwitchKeys instance that + * corresponds to the given Galois element, assuming that it exists in the + * backing KSwitchKeys. + * + * @function + * @name GaloisKeys#getIndex + * @param {number} galoisElt The Galois element + * @returns {number} The index of the galois element + */ + getIndex(galoisElt: number): number { + try { + return _instance.getIndex(galoisElt) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Returns whether a Galois key corresponding to a given Galois element exists. - * - * @function - * @name GaloisKeys#hasKey - * @param {number} galoisElt The Galois element - * @returns {boolean} True if the key exists - */ - hasKey(galoisElt: number): boolean { - try { - return _instance.hasKey(galoisElt) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - /** - * Save the Encryption Parameters to a base64 string - * - * @function - * @name GaloisKeys#save - * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use - * @returns {string} Base64 encoded string - */ - save(compression: ComprModeType = ComprModeType.zstd): string { - try { - return _instance.saveToString(compression) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Returns whether a Galois key corresponding to a given Galois element exists. + * + * @function + * @name GaloisKeys#hasKey + * @param {number} galoisElt The Galois element + * @returns {boolean} True if the key exists + */ + hasKey(galoisElt: number): boolean { + try { + return _instance.hasKey(galoisElt) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + /** + * Save the Encryption Parameters to a base64 string + * + * @function + * @name GaloisKeys#save + * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use + * @returns {string} Base64 encoded string + */ + save(compression: ComprModeType = ComprModeType.zstd): string { + try { + return _instance.saveToString(compression) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Save the GaloisKeys as a binary Uint8Array - * - * @function - * @name GaloisKeys#saveArray - * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use - * @returns {Uint8Array} A byte array containing the GaloisKeys in binary form - */ - saveArray(compression: ComprModeType = ComprModeType.zstd): Uint8Array { - const tempVect = Vector() - const instance = _instance.saveToArray(compression) - tempVect.unsafeInject(instance) - tempVect.setType('Uint8Array') - const tempArr = tempVect.toArray() as Uint8Array - tempVect.delete() - return tempArr - }, + /** + * Save the GaloisKeys as a binary Uint8Array + * + * @function + * @name GaloisKeys#saveArray + * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use + * @returns {Uint8Array} A byte array containing the GaloisKeys in binary form + */ + saveArray(compression: ComprModeType = ComprModeType.zstd): Uint8Array { + const tempVect = Vector() + const instance = _instance.saveToArray(compression) + tempVect.unsafeInject(instance) + tempVect.setType('Uint8Array') + const tempArr = tempVect.toArray() as Uint8Array + tempVect.delete() + return tempArr + }, - /** - * Load a GaloisKeys from a base64 string - * - * @function - * @name GaloisKeys#load - * @param {Context} context Encryption context to enforce - * @param {string} encoded Base64 encoded string - */ - load(context: Context, encoded: string) { - try { - _instance.loadFromString(context.instance, encoded) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Load a GaloisKeys from a base64 string + * + * @function + * @name GaloisKeys#load + * @param {Context} context Encryption context to enforce + * @param {string} encoded Base64 encoded string + */ + load(context: Context, encoded: string) { + try { + _instance.loadFromString(context.instance, encoded) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Load a GaloisKeys from an Uint8Array holding binary data - * - * @function - * @name GaloisKeys#loadArray - * @param {Context} context Encryption context to enforce - * @param {Uint8Array} array TypedArray containing binary data - */ - loadArray(context: Context, array: Uint8Array) { - try { - _instance.loadFromArray(context.instance, array) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Load a GaloisKeys from an Uint8Array holding binary data + * + * @function + * @name GaloisKeys#loadArray + * @param {Context} context Encryption context to enforce + * @param {Uint8Array} array TypedArray containing binary data + */ + loadArray(context: Context, array: Uint8Array) { + try { + _instance.loadFromArray(context.instance, array) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Copy an existing GaloisKeys and overwrite this instance - * - * @function - * @name GaloisKeys#copy - * @param {GaloisKeys} key GaloisKeys to copy - * @example - * const keyA = keyGenerator.createGaloisKeys() - * const keyB = seal.GaloisKeys() - * keyB.copy(keyA) - * // keyB holds a copy of keyA - */ - copy(key: GaloisKeys) { - try { - _instance.copy(key.instance) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Copy an existing GaloisKeys and overwrite this instance + * + * @function + * @name GaloisKeys#copy + * @param {GaloisKeys} key GaloisKeys to copy + * @example + * const keyA = keyGenerator.createGaloisKeys() + * const keyB = seal.GaloisKeys() + * keyB.copy(keyA) + * // keyB holds a copy of keyA + */ + copy(key: GaloisKeys) { + try { + _instance.copy(key.instance) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Clone and return a new instance of this GaloisKeys - * - * @function - * @name GaloisKeys#clone - * @returns {GaloisKeys} - * @example - * const keyA = keyGenerator.createGaloisKeys() - * const keyB = keyA.clone() - * // keyB holds a copy of keyA - */ - clone(): GaloisKeys { - try { - const clonedInstance = _instance.clone() - const key = GaloisKeysConstructor(library)({ - Exception, - ComprModeType, - Vector - })() - key.inject(clonedInstance) - return key - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Clone and return a new instance of this GaloisKeys + * + * @function + * @name GaloisKeys#clone + * @returns {GaloisKeys} + * @example + * const keyA = keyGenerator.createGaloisKeys() + * const keyB = keyA.clone() + * // keyB holds a copy of keyA + */ + clone(): GaloisKeys { + try { + const clonedInstance = _instance.clone() + const key = GaloisKeysConstructor(library)({ + Exception, + ComprModeType, + Vector + })() + key.inject(clonedInstance) + return key + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Move a GaloisKeys into this one and delete the old reference - * - * @function - * @name GaloisKeys#move - * @param {GaloisKeys} key GaloisKeys to move - * @example - * const keyA = keyGenerator.createGaloisKeys() - * const keyB = seal.GaloisKeys() - * keyB.move(keyA) - * // keyB holds a the instance of keyA. - * // keyA no longer holds an instance - */ - move(key: GaloisKeys) { - try { - _instance.move(key.instance) - // TODO: find optimization - // This method results in a copy instead of a real move. - // Therefore, we need to delete the old instance. - key.delete() - } catch (e) { - throw Exception.safe(e as SealError) - } - } + /** + * Move a GaloisKeys into this one and delete the old reference + * + * @function + * @name GaloisKeys#move + * @param {GaloisKeys} key GaloisKeys to move + * @example + * const keyA = keyGenerator.createGaloisKeys() + * const keyB = seal.GaloisKeys() + * keyB.move(keyA) + * // keyB holds a the instance of keyA. + * // keyA no longer holds an instance + */ + move(key: GaloisKeys) { + try { + _instance.move(key.instance) + // TODO: find optimization + // This method results in a copy instead of a real move. + // Therefore, we need to delete the old instance. + key.delete() + } catch (e) { + throw Exception.safe(e as SealError) } } + } + } export const GaloisKeysInit = ({ loader diff --git a/src/implementation/key-generator.ts b/src/implementation/key-generator.ts index 315c069c..c9a8209b 100644 --- a/src/implementation/key-generator.ts +++ b/src/implementation/key-generator.ts @@ -46,231 +46,231 @@ export type KeyGenerator = { const KeyGeneratorConstructor = (library: Library): KeyGeneratorDependencies => - ({ - Exception, - PublicKey, - SecretKey, - RelinKeys, - GaloisKeys, - Serializable - }: KeyGeneratorDependencyOptions): KeyGeneratorConstructorOptions => - (context, secretKey): KeyGenerator => { - const Constructor = library.KeyGenerator - let _instance = constructInstance(context, secretKey) + ({ + Exception, + PublicKey, + SecretKey, + RelinKeys, + GaloisKeys, + Serializable + }: KeyGeneratorDependencyOptions): KeyGeneratorConstructorOptions => + (context, secretKey): KeyGenerator => { + const Constructor = library.KeyGenerator + let _instance = constructInstance(context, secretKey) - function constructInstance(context: Context, secretKey?: SecretKey) { - try { - if (secretKey) { - return new Constructor(context.instance, secretKey.instance) - } - return new Constructor(context.instance) - } catch (e) { - throw Exception.safe(e as SealError) - } + function constructInstance(context: Context, secretKey?: SecretKey) { + try { + if (secretKey) { + return new Constructor(context.instance, secretKey.instance) } - /** - * @implements KeyGenerator - */ + return new Constructor(context.instance) + } catch (e) { + throw Exception.safe(e as SealError) + } + } + /** + * @implements KeyGenerator + */ - /** - * @interface KeyGenerator - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name KeyGenerator#instance - * @type {Instance} - */ - get instance() { - return _instance - }, + /** + * @interface KeyGenerator + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name KeyGenerator#instance + * @type {Instance} + */ + get instance() { + return _instance + }, - /** - * Inject this object with a raw WASM instance. No type checking is performed. - * - * @private - * @function - * @name KeyGenerator#unsafeInject - * @param {Instance} instance WASM instance - */ - unsafeInject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined - } - _instance = instance - }, + /** + * Inject this object with a raw WASM instance. No type checking is performed. + * + * @private + * @function + * @name KeyGenerator#unsafeInject + * @param {Instance} instance WASM instance + */ + unsafeInject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined + } + _instance = instance + }, - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name KeyGenerator#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined - } - }, + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name KeyGenerator#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined + } + }, - /** - * Return the generated SecretKey - * - * @function - * @name KeyGenerator#secretKey - * @returns {SecretKey} The secret key that was generated upon instantiation of this KeyGenerator - */ - secretKey(): SecretKey { - try { - const key = SecretKey() - const instance = _instance.secretKey() - key.inject(instance) - return key - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Return the generated SecretKey + * + * @function + * @name KeyGenerator#secretKey + * @returns {SecretKey} The secret key that was generated upon instantiation of this KeyGenerator + */ + secretKey(): SecretKey { + try { + const key = SecretKey() + const instance = _instance.secretKey() + key.inject(instance) + return key + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Create a new PublicKey instance - * - * @function - * @name KeyGenerator#createPublicKey - * @returns {PublicKey} A new PublicKey instance - */ - createPublicKey(): PublicKey { - try { - const key = PublicKey() - _instance.createPublicKey(key.instance) - return key - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Create a new PublicKey instance + * + * @function + * @name KeyGenerator#createPublicKey + * @returns {PublicKey} A new PublicKey instance + */ + createPublicKey(): PublicKey { + try { + const key = PublicKey() + _instance.createPublicKey(key.instance) + return key + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Create a new, Serializable PublicKey instance - * - * @function - * @name KeyGenerator#createPublicKeySerializable - * @returns {Serializable} A new, serializable, PublicKey instance - */ - createPublicKeySerializable(): Serializable { - try { - const serialized = Serializable() - const instance = _instance.createPublicKeySerializable() - serialized.unsafeInject(instance) - return serialized - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Create a new, Serializable PublicKey instance + * + * @function + * @name KeyGenerator#createPublicKeySerializable + * @returns {Serializable} A new, serializable, PublicKey instance + */ + createPublicKeySerializable(): Serializable { + try { + const serialized = Serializable() + const instance = _instance.createPublicKeySerializable() + serialized.unsafeInject(instance) + return serialized + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Generates and returns relinearization keys. This function returns - * relinearization keys in a fully expanded form and is meant to be used - * primarily for demo, testing, and debugging purposes. - * - * @function - * @name KeyGenerator#createRelinKeys - * @returns {RelinKeys} New RelinKeys from the KeyGenerator's internal secret key - */ - createRelinKeys(): RelinKeys { - try { - const keys = RelinKeys() - _instance.createRelinKeys(keys.instance) - return keys - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Generates and returns relinearization keys. This function returns + * relinearization keys in a fully expanded form and is meant to be used + * primarily for demo, testing, and debugging purposes. + * + * @function + * @name KeyGenerator#createRelinKeys + * @returns {RelinKeys} New RelinKeys from the KeyGenerator's internal secret key + */ + createRelinKeys(): RelinKeys { + try { + const keys = RelinKeys() + _instance.createRelinKeys(keys.instance) + return keys + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Generates and returns relinearization keys as a serializable object. - * - * Half of the key data is pseudo-randomly generated from a seed to reduce - * the object size. The resulting serializable object cannot be used - * directly and is meant to be serialized for the size reduction to have an - * impact. - * - * - * @function - * @name KeyGenerator#createRelinKeysSerializable - * @returns {Serializable} New, serializable RelinKeys from the KeyGenerator's internal secret key - */ - createRelinKeysSerializable(): Serializable { - try { - const serialized = Serializable() - const instance = _instance.createRelinKeysSerializable() - serialized.unsafeInject(instance) - return serialized - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Generates and returns relinearization keys as a serializable object. + * + * Half of the key data is pseudo-randomly generated from a seed to reduce + * the object size. The resulting serializable object cannot be used + * directly and is meant to be serialized for the size reduction to have an + * impact. + * + * + * @function + * @name KeyGenerator#createRelinKeysSerializable + * @returns {Serializable} New, serializable RelinKeys from the KeyGenerator's internal secret key + */ + createRelinKeysSerializable(): Serializable { + try { + const serialized = Serializable() + const instance = _instance.createRelinKeysSerializable() + serialized.unsafeInject(instance) + return serialized + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Generates and returns Galois keys. This function returns Galois keys in - * a fully expanded form and is meant to be used primarily for demo, testing, - * and debugging purposes. The user can optionally give an input a vector of desired - * Galois rotation step counts, where negative step counts correspond to - * rotations to the right and positive step counts correspond to rotations to - * the left. A step count of zero can be used to indicate a column rotation - * in the BFV scheme complex conjugation in the CKKS scheme. - * - * @function - * @name KeyGenerator#createGaloisKeys - * @param {Int32Array} [steps=Int32Array.from([])] Specific Galois Elements to generate - * @returns {GaloisKeys} New GaloisKeys from the KeyGenerator's internal secret key - */ - createGaloisKeys(steps: Int32Array = Int32Array.from([])): GaloisKeys { - try { - const keys = GaloisKeys() - _instance.createGaloisKeys(steps, keys.instance) - return keys - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Generates and returns Galois keys. This function returns Galois keys in + * a fully expanded form and is meant to be used primarily for demo, testing, + * and debugging purposes. The user can optionally give an input a vector of desired + * Galois rotation step counts, where negative step counts correspond to + * rotations to the right and positive step counts correspond to rotations to + * the left. A step count of zero can be used to indicate a column rotation + * in the BFV scheme complex conjugation in the CKKS scheme. + * + * @function + * @name KeyGenerator#createGaloisKeys + * @param {Int32Array} [steps=Int32Array.from([])] Specific Galois Elements to generate + * @returns {GaloisKeys} New GaloisKeys from the KeyGenerator's internal secret key + */ + createGaloisKeys(steps: Int32Array = Int32Array.from([])): GaloisKeys { + try { + const keys = GaloisKeys() + _instance.createGaloisKeys(steps, keys.instance) + return keys + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Generates and returns Galois keys as a serializable object. This function - * creates specific Galois keys that can be used to apply specific Galois - * automorphisms on encrypted data. The user can optionally give an input a vector - * of desired Galois rotation step counts, where negative step counts - * correspond to rotations to the right and positive step counts correspond - * to rotations to the left. A step count of zero can be used to indicate - * a column rotation in the BFV scheme complex conjugation in the CKKS scheme. - * Half of the key data is pseudo-randomly generated from a seed to reduce - * the object size. The resulting serializable object cannot be used - * directly and is meant to be serialized for the size reduction to have an - * impact. - * - * @function - * @name KeyGenerator#createGaloisKeysSerializable - * @param {Int32Array} [steps=Int32Array.from([])] Specific Galois Elements to generate - * @returns {Serializable} Base64 encoded string - */ - createGaloisKeysSerializable( - steps: Int32Array = Int32Array.from([]) - ): Serializable { - try { - const serialized = Serializable() - const instance = _instance.createGaloisKeysSerializable(steps) - serialized.unsafeInject(instance) - return serialized - } catch (e) { - throw Exception.safe(e as SealError) - } - } + /** + * Generates and returns Galois keys as a serializable object. This function + * creates specific Galois keys that can be used to apply specific Galois + * automorphisms on encrypted data. The user can optionally give an input a vector + * of desired Galois rotation step counts, where negative step counts + * correspond to rotations to the right and positive step counts correspond + * to rotations to the left. A step count of zero can be used to indicate + * a column rotation in the BFV scheme complex conjugation in the CKKS scheme. + * Half of the key data is pseudo-randomly generated from a seed to reduce + * the object size. The resulting serializable object cannot be used + * directly and is meant to be serialized for the size reduction to have an + * impact. + * + * @function + * @name KeyGenerator#createGaloisKeysSerializable + * @param {Int32Array} [steps=Int32Array.from([])] Specific Galois Elements to generate + * @returns {Serializable} Base64 encoded string + */ + createGaloisKeysSerializable( + steps: Int32Array = Int32Array.from([]) + ): Serializable { + try { + const serialized = Serializable() + const instance = _instance.createGaloisKeysSerializable(steps) + serialized.unsafeInject(instance) + return serialized + } catch (e) { + throw Exception.safe(e as SealError) } } + } + } export const KeyGeneratorInit = ({ loader diff --git a/src/implementation/memory-pool-handle.ts b/src/implementation/memory-pool-handle.ts index 46043cd7..f5b1c98e 100644 --- a/src/implementation/memory-pool-handle.ts +++ b/src/implementation/memory-pool-handle.ts @@ -15,49 +15,49 @@ export type MemoryPoolHandle = { const MemoryPoolHandleConstructor = (library: Library): MemoryPoolHandleDependencies => - (): MemoryPoolHandleConstructorOptions => - (): MemoryPoolHandle => { - // Static methods - const _global = library.MemoryPoolHandle.MemoryPoolHandleGlobal - const _threadLocal = library.MemoryPoolHandle.MemoryPoolHandleThreadLocal + (): MemoryPoolHandleConstructorOptions => + (): MemoryPoolHandle => { + // Static methods + const _global = library.MemoryPoolHandle.MemoryPoolHandleGlobal + const _threadLocal = library.MemoryPoolHandle.MemoryPoolHandleThreadLocal + /** + * @implements MemoryPoolHandle + */ + + /** + * @interface MemoryPoolHandle + */ + return { + /** + * The MemoryPoolHandle pointing to the global memory pool. + * + * @readonly + * @name MemoryPoolHandle.global + * @type {MemoryPoolHandle.global} + */ + get global() { /** - * @implements MemoryPoolHandle + * @typedef {MemoryPoolHandle.global} MemoryPoolHandle.global */ + return _global() + }, + /** + * The MemoryPoolHandle pointing to the thread-local memory pool. + * + * @readonly + * @name MemoryPoolHandle.threadLocal + * @type {MemoryPoolHandle.threadLocal} + */ + get threadLocal() { /** - * @interface MemoryPoolHandle + * @typedef {MemoryPoolHandle.threadLocal} MemoryPoolHandle.threadLocal */ - return { - /** - * The MemoryPoolHandle pointing to the global memory pool. - * - * @readonly - * @name MemoryPoolHandle.global - * @type {MemoryPoolHandle.global} - */ - get global() { - /** - * @typedef {MemoryPoolHandle.global} MemoryPoolHandle.global - */ - return _global() - }, - - /** - * The MemoryPoolHandle pointing to the thread-local memory pool. - * - * @readonly - * @name MemoryPoolHandle.threadLocal - * @type {MemoryPoolHandle.threadLocal} - */ - get threadLocal() { - /** - * @typedef {MemoryPoolHandle.threadLocal} MemoryPoolHandle.threadLocal - */ - return _threadLocal() - } - } + return _threadLocal() } + } + } export const MemoryPoolHandleInit = ({ loader diff --git a/src/implementation/modulus.ts b/src/implementation/modulus.ts index 660e4b4d..9ee9d72d 100644 --- a/src/implementation/modulus.ts +++ b/src/implementation/modulus.ts @@ -18,15 +18,15 @@ export type ModulusDependencies = { } export type ModulusConstructorOptions = { - (value: BigInt): Modulus + (value: bigint): Modulus } export type Modulus = { readonly instance: Instance readonly inject: (instance: Instance) => void readonly delete: () => void - readonly setValue: (value: BigInt) => void - readonly value: BigInt + readonly setValue: (value: bigint) => void + readonly value: bigint readonly bitCount: number readonly isZero: boolean readonly isPrime: boolean @@ -38,200 +38,200 @@ export type Modulus = { const ModulusConstructor = (library: Library): ModulusDependencies => - ({ - Exception, - ComprModeType, - Vector - }: ModulusDependencyOptions): ModulusConstructorOptions => - (value: BigInt): Modulus => { - // Static methods - const Constructor = library.Modulus - - let _instance = createModulus(value) - - function createModulus(value: BigInt) { - try { - const inst = new Constructor() - inst.setValue(value.toString()) - return inst - } catch (e) { - throw Exception.safe(e as SealError) - } + ({ + Exception, + ComprModeType, + Vector + }: ModulusDependencyOptions): ModulusConstructorOptions => + (value: bigint): Modulus => { + // Static methods + const Constructor = library.Modulus + + let _instance = createModulus(value) + + function createModulus(value: bigint) { + try { + const inst = new Constructor() + inst.setValue(value.toString()) + return inst + } catch (e) { + throw Exception.safe(e as SealError) + } + } + + /** + * @implements Modulus + */ + + /** + * @interface Modulus + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name Modulus#instance + * @type {Instance} + */ + get instance() { + return _instance + }, + + /** + * Inject this object with a raw WASM instance + * + * @private + * @function + * @name Modulus#inject + * @param {Instance} instance WASM instance + */ + inject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined } - - /** - * @implements Modulus - */ - - /** - * @interface Modulus - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name Modulus#instance - * @type {Instance} - */ - get instance() { - return _instance - }, - - /** - * Inject this object with a raw WASM instance - * - * @private - * @function - * @name Modulus#inject - * @param {Instance} instance WASM instance - */ - inject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined - } - _instance = new Constructor(instance) - instance.delete() - }, - - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name Modulus#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined - } - }, - - /** - * Loads a Modulus from a string representing an uint64 value. - * - * @function - * @name Modulus#setValue - * @param {BigInt} value BigInt value to set - */ - setValue(value: BigInt) { - try { - _instance.setValue(value.toString()) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - - /** - * The value of the current Modulus as a BigInt. - * - * @readonly - * @name Modulus#value - * @type {BigInt} - */ - get value() { - // eslint-disable-next-line no-undef - return BigInt(_instance.value()) - }, - - /** - * The significant bit count of the value of the current Modulus. - * - * @readonly - * @name Modulus#bitCount - * @type {number} - */ - get bitCount() { - return _instance.bitCount() - }, - - /** - * Whether the value of the current Modulus is zero. - * - * @readonly - * @name Modulus#isZero - * @type {boolean} - */ - get isZero() { - return _instance.isZero() - }, - - /** - * Whether the value of the current Modulus is a prime number. - * - * @readonly - * @name Modulus#isPrime - * @type {boolean} - */ - get isPrime() { - return _instance.isPrime() - }, - - /** - * Save the Modulus as a base64 string - * - * @function - * @name Modulus#save - * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use - * @returns {string} Base64 encoded string - */ - save(compression: ComprModeType = ComprModeType.zstd): string { - return _instance.saveToString(compression) - }, - - /** - * Save the Modulus as a binary Uint8Array - * - * @function - * @name Modulus#saveArray - * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use - * @returns {Uint8Array} A byte array containing the Modulus in binary form - */ - saveArray(compression: ComprModeType = ComprModeType.zstd): Uint8Array { - const tempVect = Vector() - const instance = _instance.saveToArray(compression) - tempVect.unsafeInject(instance) - tempVect.setType('Uint8Array') - const tempArr = tempVect.toArray() as Uint8Array - tempVect.delete() - return tempArr - }, - - /** - * Load a Modulus from a base64 string - * - * @function - * @name Modulus#load - * @param {string} encoded Base64 encoded string - */ - load(encoded: string) { - try { - _instance.loadFromString(encoded) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - - /** - * Load a Modulus from an Uint8Array holding binary data - * - * @function - * @name Modulus#loadArray - * @param {Uint8Array} array TypedArray containing binary data - */ - loadArray(array: Uint8Array) { - try { - _instance.loadFromArray(array) - } catch (e) { - throw Exception.safe(e as SealError) - } - } + _instance = new Constructor(instance) + instance.delete() + }, + + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name Modulus#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined + } + }, + + /** + * Loads a Modulus from a string representing an uint64 value. + * + * @function + * @name Modulus#setValue + * @param {BigInt} value BigInt value to set + */ + setValue(value: bigint) { + try { + _instance.setValue(value.toString()) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * The value of the current Modulus as a BigInt. + * + * @readonly + * @name Modulus#value + * @type {BigInt} + */ + get value() { + // eslint-disable-next-line no-undef + return BigInt(_instance.value()) + }, + + /** + * The significant bit count of the value of the current Modulus. + * + * @readonly + * @name Modulus#bitCount + * @type {number} + */ + get bitCount() { + return _instance.bitCount() + }, + + /** + * Whether the value of the current Modulus is zero. + * + * @readonly + * @name Modulus#isZero + * @type {boolean} + */ + get isZero() { + return _instance.isZero() + }, + + /** + * Whether the value of the current Modulus is a prime number. + * + * @readonly + * @name Modulus#isPrime + * @type {boolean} + */ + get isPrime() { + return _instance.isPrime() + }, + + /** + * Save the Modulus as a base64 string + * + * @function + * @name Modulus#save + * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use + * @returns {string} Base64 encoded string + */ + save(compression: ComprModeType = ComprModeType.zstd): string { + return _instance.saveToString(compression) + }, + + /** + * Save the Modulus as a binary Uint8Array + * + * @function + * @name Modulus#saveArray + * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use + * @returns {Uint8Array} A byte array containing the Modulus in binary form + */ + saveArray(compression: ComprModeType = ComprModeType.zstd): Uint8Array { + const tempVect = Vector() + const instance = _instance.saveToArray(compression) + tempVect.unsafeInject(instance) + tempVect.setType('Uint8Array') + const tempArr = tempVect.toArray() as Uint8Array + tempVect.delete() + return tempArr + }, + + /** + * Load a Modulus from a base64 string + * + * @function + * @name Modulus#load + * @param {string} encoded Base64 encoded string + */ + load(encoded: string) { + try { + _instance.loadFromString(encoded) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Load a Modulus from an Uint8Array holding binary data + * + * @function + * @name Modulus#loadArray + * @param {Uint8Array} array TypedArray containing binary data + */ + loadArray(array: Uint8Array) { + try { + _instance.loadFromArray(array) + } catch (e) { + throw Exception.safe(e as SealError) } } + } + } export const ModulusInit = ({ loader }: LoaderOptions): ModulusDependencies => { const library: Library = loader.library diff --git a/src/implementation/parms-id-type.ts b/src/implementation/parms-id-type.ts index 7e0f9ce4..25567ebd 100644 --- a/src/implementation/parms-id-type.ts +++ b/src/implementation/parms-id-type.ts @@ -22,83 +22,83 @@ export type ParmsIdType = { const ParmsIdTypeConstructor = (library: Library): ParmsIdTypeDependencies => - ({ - Exception - }: ParmsIdTypeDependencyOptions): ParmsIdTypeConstructorOptions => - (): ParmsIdType => { - const Constructor = library.ParmsIdType + ({ + Exception + }: ParmsIdTypeDependencyOptions): ParmsIdTypeConstructorOptions => + (): ParmsIdType => { + const Constructor = library.ParmsIdType - let _instance: Instance + let _instance: Instance - /** - * @implements ParmsIdType - */ + /** + * @implements ParmsIdType + */ - /** - * @interface ParmsIdType - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name ParmsIdType#instance - * @type {Instance} - */ - get instance() { - return _instance - }, + /** + * @interface ParmsIdType + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name ParmsIdType#instance + * @type {Instance} + */ + get instance() { + return _instance + }, - /** - * Inject this object with a raw WASM instance - * - * @private - * @function - * @name ParmsIdType#inject - * @param {Instance} instance WASM instance - */ - inject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined - } - _instance = new Constructor(instance) - instance.delete() - }, + /** + * Inject this object with a raw WASM instance + * + * @private + * @function + * @name ParmsIdType#inject + * @param {Instance} instance WASM instance + */ + inject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined + } + _instance = new Constructor(instance) + instance.delete() + }, - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name ParmsIdType#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined - } - }, + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name ParmsIdType#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined + } + }, - /** - * The values of the current ParmsIdType as an Array of BigInts. - * - * @readonly - * @name ParmsIdType#values - * @type {BigUint64Array} - */ - get values() { - try { - const instance = _instance.values() - return BigUint64Array.from(instance) - } catch (e) { - throw Exception.safe(e as SealError) - } - } + /** + * The values of the current ParmsIdType as an Array of BigInts. + * + * @readonly + * @name ParmsIdType#values + * @type {BigUint64Array} + */ + get values() { + try { + const instance = _instance.values() + return BigUint64Array.from(instance) + } catch (e) { + throw Exception.safe(e as SealError) } } + } + } export const ParmsIdTypeInit = ({ loader diff --git a/src/implementation/plain-modulus.ts b/src/implementation/plain-modulus.ts index 5fc0d9f1..106b5735 100644 --- a/src/implementation/plain-modulus.ts +++ b/src/implementation/plain-modulus.ts @@ -31,74 +31,74 @@ export type PlainModulus = { const PlainModulusConstructor = (library: Library): PlainModulusDependencies => - ({ - Exception, - Modulus, - Vector - }: PlainModulusDependencyOptions): PlainModulusConstructorOptions => - (): PlainModulus => { - // Static methods - const _Batching = library.PlainModulus.Batching - const _BatchingVector = library.PlainModulus.BatchingVector + ({ + Exception, + Modulus, + Vector + }: PlainModulusDependencyOptions): PlainModulusConstructorOptions => + (): PlainModulus => { + // Static methods + const _Batching = library.PlainModulus.Batching + const _BatchingVector = library.PlainModulus.BatchingVector - /** - * @implements PlainModulus - */ + /** + * @implements PlainModulus + */ - /** - * @interface PlainModulus - */ - return { - /** - * Creates a prime number PlainModulus for use as plainPlainModulus encryption - * parameter that supports batching with a given polyPlainModulusDegree. - * - * @function - * @name PlainModulus.Batching - * @param {number} polyModulusDegree The degree of the polynomial modulus - * @param {number} bitSize The bit-size of the desired prime number - * @returns {Modulus} A PlainModulus containing the prime number - */ - Batching(polyModulusDegree: number, bitSize: number): Modulus { - try { - const smallMod = Modulus(BigInt(0)) - smallMod.inject(_Batching(polyModulusDegree, bitSize)) - return smallMod - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * @interface PlainModulus + */ + return { + /** + * Creates a prime number PlainModulus for use as plainPlainModulus encryption + * parameter that supports batching with a given polyPlainModulusDegree. + * + * @function + * @name PlainModulus.Batching + * @param {number} polyModulusDegree The degree of the polynomial modulus + * @param {number} bitSize The bit-size of the desired prime number + * @returns {Modulus} A PlainModulus containing the prime number + */ + Batching(polyModulusDegree: number, bitSize: number): Modulus { + try { + const smallMod = Modulus(BigInt(0)) + smallMod.inject(_Batching(polyModulusDegree, bitSize)) + return smallMod + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Creates several prime number PlainModulus elements that can be used as - * plainPlainModulus encryption parameters, each supporting batching with a given - * polyPlainModulusDegree. - * - * @function - * @name PlainModulus.BatchingVector - * @param {Number} polyPlainModulusDegree The degree of the polynomial modulus - * @param {Int32Array} bitSizes Int32Array containing values representing bit-sizes of primes - * @returns {Vector} Vector of Modulus containing prime numbers - */ - BatchingVector( - polyPlainModulusDegree: number, - bitSizes: Int32Array - ): Vector { - try { - const vectBitSizes = Vector() - vectBitSizes.from(bitSizes) - const vect = _BatchingVector( - polyPlainModulusDegree, - vectBitSizes.instance - ) - vectBitSizes.delete() - return vect - } catch (e) { - throw Exception.safe(e as SealError) - } - } + /** + * Creates several prime number PlainModulus elements that can be used as + * plainPlainModulus encryption parameters, each supporting batching with a given + * polyPlainModulusDegree. + * + * @function + * @name PlainModulus.BatchingVector + * @param {Number} polyPlainModulusDegree The degree of the polynomial modulus + * @param {Int32Array} bitSizes Int32Array containing values representing bit-sizes of primes + * @returns {Vector} Vector of Modulus containing prime numbers + */ + BatchingVector( + polyPlainModulusDegree: number, + bitSizes: Int32Array + ): Vector { + try { + const vectBitSizes = Vector() + vectBitSizes.from(bitSizes) + const vect = _BatchingVector( + polyPlainModulusDegree, + vectBitSizes.instance + ) + vectBitSizes.delete() + return vect + } catch (e) { + throw Exception.safe(e as SealError) } } + } + } export const PlainModulusInit = ({ loader diff --git a/src/implementation/plain-text.ts b/src/implementation/plain-text.ts index 523d6757..b0342cf9 100644 --- a/src/implementation/plain-text.ts +++ b/src/implementation/plain-text.ts @@ -67,457 +67,457 @@ export type PlainText = { const PlainTextConstructor = (library: Library): PlainTextDependencies => - ({ - Exception, - ComprModeType, - ParmsIdType, - MemoryPoolHandle, - Vector - }: PlainTextDependencyOptions): PlainTextConstructorOptions => - ({ - capacity, - coeffCount, - pool = MemoryPoolHandle.global - } = {}): PlainText => { - // Static methods - const Constructor = library.Plaintext - - let _instance = construct({ - capacity, - coeffCount, - pool - }) - - function construct({ - capacity, - coeffCount, - pool = MemoryPoolHandle.global - }: { - capacity?: number - coeffCount?: number - pool?: MemoryPoolHandle - }) { - try { - if (capacity === undefined && coeffCount === undefined) { - return new Constructor(pool) - } else if (capacity === undefined && coeffCount !== undefined) { - return new Constructor(coeffCount, pool) - } else if (capacity !== undefined && coeffCount !== undefined) { - return new Constructor(capacity, coeffCount, pool) - } else { - throw new Error(INVALID_PLAIN_CONSRUCTOR_OPTIONS) - } - } catch (e) { - throw Exception.safe(e as SealError) - } + ({ + Exception, + ComprModeType, + ParmsIdType, + MemoryPoolHandle, + Vector + }: PlainTextDependencyOptions): PlainTextConstructorOptions => + ({ + capacity, + coeffCount, + pool = MemoryPoolHandle.global + } = {}): PlainText => { + // Static methods + const Constructor = library.Plaintext + + let _instance = construct({ + capacity, + coeffCount, + pool + }) + + function construct({ + capacity, + coeffCount, + pool = MemoryPoolHandle.global + }: { + capacity?: number + coeffCount?: number + pool?: MemoryPoolHandle + }) { + try { + if (capacity === undefined && coeffCount === undefined) { + return new Constructor(pool) + } else if (capacity === undefined && coeffCount !== undefined) { + return new Constructor(coeffCount, pool) + } else if (capacity !== undefined && coeffCount !== undefined) { + return new Constructor(capacity, coeffCount, pool) + } else { + throw new Error(INVALID_PLAIN_CONSRUCTOR_OPTIONS) + } + } catch (e) { + throw Exception.safe(e as SealError) + } + } + /** + * @implements PlainText + */ + + /** + * @interface PlainText + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name PlainText#instance + * @type {Instance} + */ + get instance() { + return _instance + }, + + /** + * Inject this object with a raw WASM instance. No type checking is performed. + * + * @private + * @function + * @name PlainText#unsafeInject + * @param {Instance} instance WASM instance + */ + unsafeInject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined + } + _instance = instance + }, + + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name PlainText#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined + } + }, + + /** + * Allocates enough memory to accommodate the backing array of a plaintext + * with given capacity. + * + * @function + * @name PlainText#reserve + * @param {number} capacity The capacity to reserve + */ + reserve(capacity: number) { + try { + return _instance.reserve(capacity) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Allocates enough memory to accommodate the backing array of the current + * PlainText and copies it over to the new location. This function is meant + * to reduce the memory use of the PlainText to smallest possible and can be + * particularly important after modulus switching. + * + * @function + * @name PlainText#shrinkToFit + */ + shrinkToFit() { + _instance.shrinkToFit() + }, + + /** + * Resets the PlainText. This function releases any memory allocated by the + * PlainText, returning it to the memory pool. + * + * @function + * @name PlainText#release + */ + release() { + _instance.release() + }, + + /** + * Resizes the PlainText to have a given coefficient count. The PlainText + * is automatically reallocated if the new coefficient count does not fit in + * the current capacity. + * + * @function + * @name PlainText#resize + * @param {number} coeffCount The number of coefficients in the plaintext polynomial + */ + resize(coeffCount: number) { + try { + _instance.resize(coeffCount) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Sets the PlainText polynomial to zero. + * + * @function + * @name PlainText#setZero + */ + setZero() { + _instance.setZero() + }, + + /** + * Whether the current PlainText polynomial has all zero coefficients. + * + * @readonly + * @name PlainText#isZero + * @type {boolean} + */ + get isZero() { + return _instance.isZero() + }, + + /** + * The capacity of the current allocation. + * + * @readonly + * @name PlainText#capacity + * @type {number} + */ + get capacity() { + return _instance.capacity() + }, + + /** + * The coefficient count of the current PlainText polynomial. + * + * @readonly + * @name PlainText#coeffCount + * @type {number} + */ + get coeffCount() { + return _instance.coeffCount() + }, + + /** + * The significant coefficient count of the current PlainText polynomial. + * + * @readonly + * @name PlainText#significantCoeffCount + * @type {number} + */ + get significantCoeffCount() { + return _instance.significantCoeffCount() + }, + + /** + * Returns the non-zero coefficient count of the current PlainText polynomial. + * + * @readonly + * @name PlainText#nonzeroCoeffCount + * @type {number} + */ + get nonzeroCoeffCount() { + return _instance.nonzeroCoeffCount() + }, + + /** + * Returns a human-readable string description of the PlainText polynomial. + * + * The returned string is of the form "7FFx^3 + 1x^1 + 3" with a format + * summarized by the following: + * 1. Terms are listed in order of strictly decreasing exponent + * 2. Coefficient values are non-negative and in hexadecimal format (hexadecimal + * letters are in upper-case) + * 3. Exponents are positive and in decimal format + * 4. Zero coefficient terms (including the constant term) are omitted unless + * the polynomial is exactly 0 (see rule 9) + * 5. Term with the exponent value of one is written as x^1 + * 6. Term with the exponent value of zero (the constant term) is written as + * just a hexadecimal number without x or exponent + * 7. Terms are separated exactly by + + * 8. Other than the +, no other terms have whitespace + * 9. If the polynomial is exactly 0, the string "0" is returned + * + * @function + * @name PlainText#toPolynomial + * @throws std::invalid_argument if the PlainText is in NTT transformed form + * @returns {string} Polynomial string + */ + toPolynomial(): string { + try { + return _instance.toPolynomial() + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Whether the PlainText is in NTT form. + * + * @readonly + * @name PlainText#isNttForm + * @type {boolean} + */ + get isNttForm() { + return _instance.isNttForm() + }, + + /** + * The reference to parmsId of the PlainText. The parmsId must remain zero unless the + * PlainText polynomial is in NTT form. + * + * @see {@link EncryptionParameters} for more information about parmsId. + * + * @readonly + * @name PlainText#parmsId + * @type {ParmsIdType} + */ + get parmsId() { + const parms = ParmsIdType() + parms.inject(_instance.parmsId()) + return parms + }, + + /** + * The reference to the scale. This is only needed when using the CKKS + * encryption scheme. The user should have little or no reason to ever change + * the scale by hand. + * + * @readonly + * @name PlainText#scale + * @type {number} + */ + get scale() { + return _instance.scale() + }, + + /** + * Sets the PlainText scale. This is only needed when using the + * CKKS encryption scheme. The user should have little or no reason to ever + * change the scale by hand. + * + * @function + * @name PlainText#setScale + * @param {number} scale The scale to set + */ + setScale(scale: number) { + _instance.setScale(scale) + }, + + /** + * The currently used MemoryPoolHandle. + * + * @readonly + * @name PlainText#pool + * @type {MemoryPoolHandle} + */ + get pool() { + return _instance.pool() + }, + + /** + * Save the PlainText to a base64 string + * + * @function + * @name PlainText#save + * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use + * @returns {string} Base64 encoded string + */ + save(compression: ComprModeType = ComprModeType.zstd): string { + return _instance.saveToString(compression) + }, + + /** + * Save the PlainText as a binary Uint8Array + * + * @function + * @name PlainText#saveArray + * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use + * @returns {Uint8Array} A byte array containing the PlainText in binary form + */ + saveArray(compression: ComprModeType = ComprModeType.zstd): Uint8Array { + const tempVect = Vector() + const instance = _instance.saveToArray(compression) + tempVect.unsafeInject(instance) + tempVect.setType('Uint8Array') + const tempArr = tempVect.toArray() as Uint8Array + tempVect.delete() + return tempArr + }, + + /** + * Load a PlainText from a base64 string + * + * @function + * @name PlainText#load + * @param {Context} context Encryption context to enforce + * @param {string} encoded Base64 encoded string + */ + load(context: Context, encoded: string) { + try { + _instance.loadFromString(context.instance, encoded) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Load a PlainText from an Uint8Array holding binary data + * + * @function + * @name PlainText#loadArray + * @param {Context} context Encryption context to enforce + * @param {Uint8Array} array TypedArray containing binary data + */ + loadArray(context: Context, array: Uint8Array) { + try { + _instance.loadFromArray(context.instance, array) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Copy an existing PlainText and overwrite this instance + * + * @function + * @name PlainText#copy + * @param {PlainText} plain PlainText to copy + * @example + * const plainTextA = seal.PlainText() + * // ... after encoding some data ... + * const plainTextB = seal.PlainText() + * plainTextB.copy(plainTextA) + * // plainTextB holds a copy of plainTextA + */ + copy(plain: PlainText) { + try { + _instance.copy(plain.instance) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Clone and return a new instance of this PlainText + * + * @function + * @name PlainText#clone + * @returns {PlainText} + * @example + * const plainTextA = seal.PlainText() + * // ... after encoding some data ... + * const plainTextB = plainTextA.clone() + * // plainTextB holds a copy of plainTextA + */ + clone(): PlainText { + try { + const clonedInstance = _instance.clone() + const plain = PlainTextConstructor(library)({ + Exception, + ComprModeType, + ParmsIdType, + MemoryPoolHandle, + Vector + })() + plain.unsafeInject(clonedInstance) + return plain + } catch (e) { + throw Exception.safe(e as SealError) } - /** - * @implements PlainText - */ - - /** - * @interface PlainText - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name PlainText#instance - * @type {Instance} - */ - get instance() { - return _instance - }, - - /** - * Inject this object with a raw WASM instance. No type checking is performed. - * - * @private - * @function - * @name PlainText#unsafeInject - * @param {Instance} instance WASM instance - */ - unsafeInject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined - } - _instance = instance - }, - - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name PlainText#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined - } - }, - - /** - * Allocates enough memory to accommodate the backing array of a plaintext - * with given capacity. - * - * @function - * @name PlainText#reserve - * @param {number} capacity The capacity to reserve - */ - reserve(capacity: number) { - try { - return _instance.reserve(capacity) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - - /** - * Allocates enough memory to accommodate the backing array of the current - * PlainText and copies it over to the new location. This function is meant - * to reduce the memory use of the PlainText to smallest possible and can be - * particularly important after modulus switching. - * - * @function - * @name PlainText#shrinkToFit - */ - shrinkToFit() { - _instance.shrinkToFit() - }, - - /** - * Resets the PlainText. This function releases any memory allocated by the - * PlainText, returning it to the memory pool. - * - * @function - * @name PlainText#release - */ - release() { - _instance.release() - }, - - /** - * Resizes the PlainText to have a given coefficient count. The PlainText - * is automatically reallocated if the new coefficient count does not fit in - * the current capacity. - * - * @function - * @name PlainText#resize - * @param {number} coeffCount The number of coefficients in the plaintext polynomial - */ - resize(coeffCount: number) { - try { - _instance.resize(coeffCount) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - - /** - * Sets the PlainText polynomial to zero. - * - * @function - * @name PlainText#setZero - */ - setZero() { - _instance.setZero() - }, - - /** - * Whether the current PlainText polynomial has all zero coefficients. - * - * @readonly - * @name PlainText#isZero - * @type {boolean} - */ - get isZero() { - return _instance.isZero() - }, - - /** - * The capacity of the current allocation. - * - * @readonly - * @name PlainText#capacity - * @type {number} - */ - get capacity() { - return _instance.capacity() - }, - - /** - * The coefficient count of the current PlainText polynomial. - * - * @readonly - * @name PlainText#coeffCount - * @type {number} - */ - get coeffCount() { - return _instance.coeffCount() - }, - - /** - * The significant coefficient count of the current PlainText polynomial. - * - * @readonly - * @name PlainText#significantCoeffCount - * @type {number} - */ - get significantCoeffCount() { - return _instance.significantCoeffCount() - }, - - /** - * Returns the non-zero coefficient count of the current PlainText polynomial. - * - * @readonly - * @name PlainText#nonzeroCoeffCount - * @type {number} - */ - get nonzeroCoeffCount() { - return _instance.nonzeroCoeffCount() - }, - - /** - * Returns a human-readable string description of the PlainText polynomial. - * - * The returned string is of the form "7FFx^3 + 1x^1 + 3" with a format - * summarized by the following: - * 1. Terms are listed in order of strictly decreasing exponent - * 2. Coefficient values are non-negative and in hexadecimal format (hexadecimal - * letters are in upper-case) - * 3. Exponents are positive and in decimal format - * 4. Zero coefficient terms (including the constant term) are omitted unless - * the polynomial is exactly 0 (see rule 9) - * 5. Term with the exponent value of one is written as x^1 - * 6. Term with the exponent value of zero (the constant term) is written as - * just a hexadecimal number without x or exponent - * 7. Terms are separated exactly by + - * 8. Other than the +, no other terms have whitespace - * 9. If the polynomial is exactly 0, the string "0" is returned - * - * @function - * @name PlainText#toPolynomial - * @throws std::invalid_argument if the PlainText is in NTT transformed form - * @returns {string} Polynomial string - */ - toPolynomial(): string { - try { - return _instance.toPolynomial() - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - - /** - * Whether the PlainText is in NTT form. - * - * @readonly - * @name PlainText#isNttForm - * @type {boolean} - */ - get isNttForm() { - return _instance.isNttForm() - }, - - /** - * The reference to parmsId of the PlainText. The parmsId must remain zero unless the - * PlainText polynomial is in NTT form. - * - * @see {@link EncryptionParameters} for more information about parmsId. - * - * @readonly - * @name PlainText#parmsId - * @type {ParmsIdType} - */ - get parmsId() { - const parms = ParmsIdType() - parms.inject(_instance.parmsId()) - return parms - }, - - /** - * The reference to the scale. This is only needed when using the CKKS - * encryption scheme. The user should have little or no reason to ever change - * the scale by hand. - * - * @readonly - * @name PlainText#scale - * @type {number} - */ - get scale() { - return _instance.scale() - }, - - /** - * Sets the PlainText scale. This is only needed when using the - * CKKS encryption scheme. The user should have little or no reason to ever - * change the scale by hand. - * - * @function - * @name PlainText#setScale - * @param {number} scale The scale to set - */ - setScale(scale: number) { - _instance.setScale(scale) - }, - - /** - * The currently used MemoryPoolHandle. - * - * @readonly - * @name PlainText#pool - * @type {MemoryPoolHandle} - */ - get pool() { - return _instance.pool() - }, - - /** - * Save the PlainText to a base64 string - * - * @function - * @name PlainText#save - * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use - * @returns {string} Base64 encoded string - */ - save(compression: ComprModeType = ComprModeType.zstd): string { - return _instance.saveToString(compression) - }, - - /** - * Save the PlainText as a binary Uint8Array - * - * @function - * @name PlainText#saveArray - * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use - * @returns {Uint8Array} A byte array containing the PlainText in binary form - */ - saveArray(compression: ComprModeType = ComprModeType.zstd): Uint8Array { - const tempVect = Vector() - const instance = _instance.saveToArray(compression) - tempVect.unsafeInject(instance) - tempVect.setType('Uint8Array') - const tempArr = tempVect.toArray() as Uint8Array - tempVect.delete() - return tempArr - }, - - /** - * Load a PlainText from a base64 string - * - * @function - * @name PlainText#load - * @param {Context} context Encryption context to enforce - * @param {string} encoded Base64 encoded string - */ - load(context: Context, encoded: string) { - try { - _instance.loadFromString(context.instance, encoded) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - - /** - * Load a PlainText from an Uint8Array holding binary data - * - * @function - * @name PlainText#loadArray - * @param {Context} context Encryption context to enforce - * @param {Uint8Array} array TypedArray containing binary data - */ - loadArray(context: Context, array: Uint8Array) { - try { - _instance.loadFromArray(context.instance, array) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - - /** - * Copy an existing PlainText and overwrite this instance - * - * @function - * @name PlainText#copy - * @param {PlainText} plain PlainText to copy - * @example - * const plainTextA = seal.PlainText() - * // ... after encoding some data ... - * const plainTextB = seal.PlainText() - * plainTextB.copy(plainTextA) - * // plainTextB holds a copy of plainTextA - */ - copy(plain: PlainText) { - try { - _instance.copy(plain.instance) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - - /** - * Clone and return a new instance of this PlainText - * - * @function - * @name PlainText#clone - * @returns {PlainText} - * @example - * const plainTextA = seal.PlainText() - * // ... after encoding some data ... - * const plainTextB = plainTextA.clone() - * // plainTextB holds a copy of plainTextA - */ - clone(): PlainText { - try { - const clonedInstance = _instance.clone() - const plain = PlainTextConstructor(library)({ - Exception, - ComprModeType, - ParmsIdType, - MemoryPoolHandle, - Vector - })() - plain.unsafeInject(clonedInstance) - return plain - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - - /** - * Move a PlainText into this one and delete the old reference - * - * @function - * @name PlainText#move - * @param {PlainText} plain PlainText to move - * @example - * const plainTextA = seal.PlainText() - * // ... after encoding some data ... - * const plainTextB = seal.PlainText() - * plainTextB.move(plainTextA) - * // plainTextB holds a the instance of plainTextA. - * // plainTextA no longer holds an instance - */ - move(plain: PlainText) { - try { - _instance.move(plain.instance) - // TODO: find optimization - // This method results in a copy instead of a real move. - // Therefore, we need to delete the old instance. - plain.delete() - } catch (e) { - throw Exception.safe(e as SealError) - } - } + }, + + /** + * Move a PlainText into this one and delete the old reference + * + * @function + * @name PlainText#move + * @param {PlainText} plain PlainText to move + * @example + * const plainTextA = seal.PlainText() + * // ... after encoding some data ... + * const plainTextB = seal.PlainText() + * plainTextB.move(plainTextA) + * // plainTextB holds a the instance of plainTextA. + * // plainTextA no longer holds an instance + */ + move(plain: PlainText) { + try { + _instance.move(plain.instance) + // TODO: find optimization + // This method results in a copy instead of a real move. + // Therefore, we need to delete the old instance. + plain.delete() + } catch (e) { + throw Exception.safe(e as SealError) } } + } + } export const PlainTextInit = ({ loader diff --git a/src/implementation/public-key.ts b/src/implementation/public-key.ts index 2115727e..b4a977bc 100644 --- a/src/implementation/public-key.ts +++ b/src/implementation/public-key.ts @@ -37,205 +37,205 @@ export type PublicKey = { const PublicKeyConstructor = (library: Library): PublicKeyDependencies => - ({ - Exception, - ComprModeType, - Vector - }: PublicKeyDependencyOptions): PublicKeyConstructorOptions => - (): PublicKey => { - const Constructor = library.PublicKey - let _instance = new Constructor() - - /** - * @implements PublicKey - */ - - /** - * @interface PublicKey - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name PublicKey#instance - * @type {Instance} - */ - get instance() { - return _instance - }, - - /** - * Inject this object with a raw WASM instance - * - * @private - * @function - * @name PublicKey#inject - * @param {Instance} instance WASM instance - */ - inject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined - } - _instance = new Constructor(instance) - instance.delete() - }, - - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name PublicKey#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined - } - }, - - /** - * Save the Encryption Parameters to a base64 string - * - * @function - * @name PublicKey#save - * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use - * @returns {string} Base64 encoded string - */ - save(compression: ComprModeType = ComprModeType.zstd): string { - try { - return _instance.saveToString(compression) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - - /** - * Save the PublicKey as a binary Uint8Array - * - * @function - * @name PublicKey#saveArray - * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use - * @returns {Uint8Array} A byte array containing the PublicKey in binary form - */ - saveArray(compression: ComprModeType = ComprModeType.zstd): Uint8Array { - const tempVect = Vector() - const instance = _instance.saveToArray(compression) - tempVect.unsafeInject(instance) - tempVect.setType('Uint8Array') - const tempArr = tempVect.toArray() as Uint8Array - tempVect.delete() - return tempArr - }, - - /** - * Load a PublicKey from a base64 string - * - * @function - * @name PublicKey#load - * @param {Context} context Encryption context to enforce - * @param {string} encoded Base64 encoded string - */ - load(context: Context, encoded: string) { - try { - _instance.loadFromString(context.instance, encoded) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - - /** - * Load a PublicKey from an Uint8Array holding binary data - * - * @function - * @name PublicKey#loadArray - * @param {Context} context Encryption context to enforce - * @param {Uint8Array} array TypedArray containing binary data - */ - loadArray(context: Context, array: Uint8Array) { - try { - _instance.loadFromArray(context.instance, array) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - - /** - * Copy an existing PublicKey and overwrite this instance - * - * @function - * @name PublicKey#copy - * @param {PublicKey} key PublicKey to copy - * @example - * const keyA = keyGenerator.createPublicKey() - * const keyB = seal.PublicKey() - * keyB.copy(keyA) - * // keyB holds a copy of keyA - */ - copy(key: PublicKey) { - try { - _instance.copy(key.instance) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - - /** - * Clone and return a new instance of this PublicKey - * - * @function - * @name PublicKey#clone - * @returns {PublicKey} - * @example - * const keyA = keyGenerator.createPublicKey() - * const keyB = keyA.clone() - * // keyB holds a copy of keyA - */ - clone(): PublicKey { - try { - const clonedInstance = _instance.clone() - const key = PublicKeyConstructor(library)({ - Exception, - ComprModeType, - Vector - })() - key.inject(clonedInstance) - return key - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - - /** - * Move a PublicKey into this one and delete the old reference - * - * @function - * @name PublicKey#move - * @param {PublicKey} key PublicKey to move - * @example - * const keyA = keyGenerator.createPublicKey() - * const keyB = seal.PublicKey() - * keyB.move(keyA) - * // keyB holds a the instance of keyA. - * // keyA no longer holds an instance - */ - move(key: PublicKey) { - try { - _instance.move(key.instance) - // TODO: find optimization - // This method results in a copy instead of a real move. - // Therefore, we need to delete the old instance. - key.delete() - } catch (e) { - throw Exception.safe(e as SealError) - } - } + ({ + Exception, + ComprModeType, + Vector + }: PublicKeyDependencyOptions): PublicKeyConstructorOptions => + (): PublicKey => { + const Constructor = library.PublicKey + let _instance = new Constructor() + + /** + * @implements PublicKey + */ + + /** + * @interface PublicKey + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name PublicKey#instance + * @type {Instance} + */ + get instance() { + return _instance + }, + + /** + * Inject this object with a raw WASM instance + * + * @private + * @function + * @name PublicKey#inject + * @param {Instance} instance WASM instance + */ + inject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined + } + _instance = new Constructor(instance) + instance.delete() + }, + + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name PublicKey#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined + } + }, + + /** + * Save the Encryption Parameters to a base64 string + * + * @function + * @name PublicKey#save + * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use + * @returns {string} Base64 encoded string + */ + save(compression: ComprModeType = ComprModeType.zstd): string { + try { + return _instance.saveToString(compression) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Save the PublicKey as a binary Uint8Array + * + * @function + * @name PublicKey#saveArray + * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use + * @returns {Uint8Array} A byte array containing the PublicKey in binary form + */ + saveArray(compression: ComprModeType = ComprModeType.zstd): Uint8Array { + const tempVect = Vector() + const instance = _instance.saveToArray(compression) + tempVect.unsafeInject(instance) + tempVect.setType('Uint8Array') + const tempArr = tempVect.toArray() as Uint8Array + tempVect.delete() + return tempArr + }, + + /** + * Load a PublicKey from a base64 string + * + * @function + * @name PublicKey#load + * @param {Context} context Encryption context to enforce + * @param {string} encoded Base64 encoded string + */ + load(context: Context, encoded: string) { + try { + _instance.loadFromString(context.instance, encoded) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Load a PublicKey from an Uint8Array holding binary data + * + * @function + * @name PublicKey#loadArray + * @param {Context} context Encryption context to enforce + * @param {Uint8Array} array TypedArray containing binary data + */ + loadArray(context: Context, array: Uint8Array) { + try { + _instance.loadFromArray(context.instance, array) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Copy an existing PublicKey and overwrite this instance + * + * @function + * @name PublicKey#copy + * @param {PublicKey} key PublicKey to copy + * @example + * const keyA = keyGenerator.createPublicKey() + * const keyB = seal.PublicKey() + * keyB.copy(keyA) + * // keyB holds a copy of keyA + */ + copy(key: PublicKey) { + try { + _instance.copy(key.instance) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Clone and return a new instance of this PublicKey + * + * @function + * @name PublicKey#clone + * @returns {PublicKey} + * @example + * const keyA = keyGenerator.createPublicKey() + * const keyB = keyA.clone() + * // keyB holds a copy of keyA + */ + clone(): PublicKey { + try { + const clonedInstance = _instance.clone() + const key = PublicKeyConstructor(library)({ + Exception, + ComprModeType, + Vector + })() + key.inject(clonedInstance) + return key + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Move a PublicKey into this one and delete the old reference + * + * @function + * @name PublicKey#move + * @param {PublicKey} key PublicKey to move + * @example + * const keyA = keyGenerator.createPublicKey() + * const keyB = seal.PublicKey() + * keyB.move(keyA) + * // keyB holds a the instance of keyA. + * // keyA no longer holds an instance + */ + move(key: PublicKey) { + try { + _instance.move(key.instance) + // TODO: find optimization + // This method results in a copy instead of a real move. + // Therefore, we need to delete the old instance. + key.delete() + } catch (e) { + throw Exception.safe(e as SealError) } } + } + } export const PublicKeyInit = ({ loader diff --git a/src/implementation/relin-keys.ts b/src/implementation/relin-keys.ts index ffc5d099..89020c46 100644 --- a/src/implementation/relin-keys.ts +++ b/src/implementation/relin-keys.ts @@ -40,252 +40,252 @@ export type RelinKeys = { const RelinKeysConstructor = (library: Library): RelinKeysDependencies => - ({ - Exception, - ComprModeType, - Vector - }: RelinKeysDependencyOptions): RelinKeysConstructorOptions => - (): RelinKeys => { - const Constructor = library.RelinKeys - let _instance = new Constructor() + ({ + Exception, + ComprModeType, + Vector + }: RelinKeysDependencyOptions): RelinKeysConstructorOptions => + (): RelinKeys => { + const Constructor = library.RelinKeys + let _instance = new Constructor() - /** - * @implements RelinKeys - */ + /** + * @implements RelinKeys + */ - /** - * @interface RelinKeys - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name RelinKeys#instance - * @type {Instance} - */ - get instance() { - return _instance - }, + /** + * @interface RelinKeys + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name RelinKeys#instance + * @type {Instance} + */ + get instance() { + return _instance + }, - /** - * Inject this object with a raw WASM instance - * - * @private - * @function - * @name RelinKeys#inject - * @param {Instance} instance WASM instance - */ - inject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined - } - _instance = new Constructor(instance) - instance.delete() - }, + /** + * Inject this object with a raw WASM instance + * + * @private + * @function + * @name RelinKeys#inject + * @param {Instance} instance WASM instance + */ + inject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined + } + _instance = new Constructor(instance) + instance.delete() + }, - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name RelinKeys#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined - } - }, + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name RelinKeys#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined + } + }, - /** - * Returns the current number of keyswitching keys. Only keys that are - * non-empty are counted. - * - * @readonly - * @name RelinKeys#size - * @type {number} - */ - get size() { - return _instance.size() - }, + /** + * Returns the current number of keyswitching keys. Only keys that are + * non-empty are counted. + * + * @readonly + * @name RelinKeys#size + * @type {number} + */ + get size() { + return _instance.size() + }, - /** - * Returns the index of a relinearization key in the backing KSwitchKeys - * instance that corresponds to the given secret key power, assuming that - * it exists in the backing KSwitchKeys. - * - * @function - * @name RelinKeys#getIndex - * @param {number} keyPower The power of the secret key - * @returns {number} The index of the relin key - */ - getIndex(keyPower: number): number { - try { - return _instance.getIndex(keyPower) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Returns the index of a relinearization key in the backing KSwitchKeys + * instance that corresponds to the given secret key power, assuming that + * it exists in the backing KSwitchKeys. + * + * @function + * @name RelinKeys#getIndex + * @param {number} keyPower The power of the secret key + * @returns {number} The index of the relin key + */ + getIndex(keyPower: number): number { + try { + return _instance.getIndex(keyPower) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Returns whether a relinearization key corresponding to a given power of - * the secret key exists. - * - * @function - * @name RelinKeys#hasKey - * @param {number} keyPower The power of the secret key - * @returns {boolean} True if the power exists - */ - hasKey(keyPower: number): boolean { - try { - return _instance.hasKey(keyPower) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Returns whether a relinearization key corresponding to a given power of + * the secret key exists. + * + * @function + * @name RelinKeys#hasKey + * @param {number} keyPower The power of the secret key + * @returns {boolean} True if the power exists + */ + hasKey(keyPower: number): boolean { + try { + return _instance.hasKey(keyPower) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Save the Encryption Parameters to a base64 string - * - * @function - * @name RelinKeys#save - * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use - * @returns {string} Base64 encoded string - */ - save(compression: ComprModeType = ComprModeType.zstd): string { - try { - return _instance.saveToString(compression) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Save the Encryption Parameters to a base64 string + * + * @function + * @name RelinKeys#save + * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use + * @returns {string} Base64 encoded string + */ + save(compression: ComprModeType = ComprModeType.zstd): string { + try { + return _instance.saveToString(compression) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Save the RelinKeys as a binary Uint8Array - * - * @function - * @name RelinKeys#saveArray - * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use - * @returns {Uint8Array} A byte array containing the RelinKeys in binary form - */ - saveArray(compression: ComprModeType = ComprModeType.zstd): Uint8Array { - const tempVect = Vector() - const instance = _instance.saveToArray(compression) - tempVect.unsafeInject(instance) - tempVect.setType('Uint8Array') - const tempArr = tempVect.toArray() as Uint8Array - tempVect.delete() - return tempArr - }, + /** + * Save the RelinKeys as a binary Uint8Array + * + * @function + * @name RelinKeys#saveArray + * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use + * @returns {Uint8Array} A byte array containing the RelinKeys in binary form + */ + saveArray(compression: ComprModeType = ComprModeType.zstd): Uint8Array { + const tempVect = Vector() + const instance = _instance.saveToArray(compression) + tempVect.unsafeInject(instance) + tempVect.setType('Uint8Array') + const tempArr = tempVect.toArray() as Uint8Array + tempVect.delete() + return tempArr + }, - /** - * Load a RelinKeys from a base64 string - * - * @function - * @name RelinKeys#load - * @param {Context} context Encryption context to enforce - * @param {string} encoded Base64 encoded string - */ - load(context: Context, encoded: string) { - try { - _instance.loadFromString(context.instance, encoded) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Load a RelinKeys from a base64 string + * + * @function + * @name RelinKeys#load + * @param {Context} context Encryption context to enforce + * @param {string} encoded Base64 encoded string + */ + load(context: Context, encoded: string) { + try { + _instance.loadFromString(context.instance, encoded) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Load a RelinKeys from an Uint8Array holding binary data - * - * @function - * @name RelinKeys#loadArray - * @param {Context} context Encryption context to enforce - * @param {Uint8Array} array TypedArray containing binary data - */ - loadArray(context: Context, array: Uint8Array) { - try { - _instance.loadFromArray(context.instance, array) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Load a RelinKeys from an Uint8Array holding binary data + * + * @function + * @name RelinKeys#loadArray + * @param {Context} context Encryption context to enforce + * @param {Uint8Array} array TypedArray containing binary data + */ + loadArray(context: Context, array: Uint8Array) { + try { + _instance.loadFromArray(context.instance, array) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Copy an existing RelinKeys and overwrite this instance - * - * @function - * @name RelinKeys#copy - * @param {RelinKeys} key RelinKeys to copy - * @example - * const keyA = keyGenerator.createRelinKeys() - * const keyB = seal.RelinKeys() - * keyB.copy(keyA) - * // keyB holds a copy of keyA - */ - copy(key: RelinKeys) { - try { - _instance.copy(key.instance) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Copy an existing RelinKeys and overwrite this instance + * + * @function + * @name RelinKeys#copy + * @param {RelinKeys} key RelinKeys to copy + * @example + * const keyA = keyGenerator.createRelinKeys() + * const keyB = seal.RelinKeys() + * keyB.copy(keyA) + * // keyB holds a copy of keyA + */ + copy(key: RelinKeys) { + try { + _instance.copy(key.instance) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Clone and return a new instance of this RelinKeys - * - * @function - * @name RelinKeys#clone - * @returns {RelinKeys} - * @example - * const keyA = keyGenerator.createRelinKeys() - * const keyB = keyA.clone() - * // keyB holds a copy of keyA - */ - clone(): RelinKeys { - try { - const clonedInstance = _instance.clone() - const key = RelinKeysConstructor(library)({ - Exception, - ComprModeType, - Vector - })() - key.inject(clonedInstance) - return key - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Clone and return a new instance of this RelinKeys + * + * @function + * @name RelinKeys#clone + * @returns {RelinKeys} + * @example + * const keyA = keyGenerator.createRelinKeys() + * const keyB = keyA.clone() + * // keyB holds a copy of keyA + */ + clone(): RelinKeys { + try { + const clonedInstance = _instance.clone() + const key = RelinKeysConstructor(library)({ + Exception, + ComprModeType, + Vector + })() + key.inject(clonedInstance) + return key + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Move a RelinKeys into this one and delete the old reference - * - * @function - * @name RelinKeys#move - * @param {RelinKeys} key RelinKeys to move - * @example - * const keyA = keyGenerator.createRelinKeys() - * const keyB = seal.RelinKeys() - * keyB.move(keyA) - * // keyB holds a the instance of keyA. - * // keyA no longer holds an instance - */ - move(key: RelinKeys) { - try { - _instance.move(key.instance) - // TODO: find optimization - // This method results in a copy instead of a real move. - // Therefore, we need to delete the old instance. - key.delete() - } catch (e) { - throw Exception.safe(e as SealError) - } - } + /** + * Move a RelinKeys into this one and delete the old reference + * + * @function + * @name RelinKeys#move + * @param {RelinKeys} key RelinKeys to move + * @example + * const keyA = keyGenerator.createRelinKeys() + * const keyB = seal.RelinKeys() + * keyB.move(keyA) + * // keyB holds a the instance of keyA. + * // keyA no longer holds an instance + */ + move(key: RelinKeys) { + try { + _instance.move(key.instance) + // TODO: find optimization + // This method results in a copy instead of a real move. + // Therefore, we need to delete the old instance. + key.delete() + } catch (e) { + throw Exception.safe(e as SealError) } } + } + } export const RelinKeysInit = ({ loader diff --git a/src/implementation/scheme-type.ts b/src/implementation/scheme-type.ts index a33403cc..e7178811 100644 --- a/src/implementation/scheme-type.ts +++ b/src/implementation/scheme-type.ts @@ -17,79 +17,79 @@ export type SchemeType = { const SchemeTypeConstructor = (library: Library): SchemeTypeDependencies => - (): SchemeTypeConstructorOptions => - (): SchemeType => { - // Static methods - const _none = library.SchemeType.none - const _bfv = library.SchemeType.bfv - const _ckks = library.SchemeType.ckks - const _bgv = library.SchemeType.bgv + (): SchemeTypeConstructorOptions => + (): SchemeType => { + // Static methods + const _none = library.SchemeType.none + const _bfv = library.SchemeType.bfv + const _ckks = library.SchemeType.ckks + const _bgv = library.SchemeType.bgv + /** + * @implements SchemeType + */ + + /** + * @interface SchemeType + */ + return { + /** + * Return the 'none' scheme type + * + * @readonly + * @name SchemeType.none + * @type {SchemeType.none} + */ + get none() { /** - * @implements SchemeType + * @typedef {SchemeType.none} SchemeType.none */ + return _none + }, + /** + * Return the 'bfv' scheme type + * + * @readonly + * @name SchemeType.bfv + * @type {SchemeType.bfv} + */ + get bfv() { /** - * @interface SchemeType + * @typedef {SchemeType.bfv} SchemeType.bfv */ - return { - /** - * Return the 'none' scheme type - * - * @readonly - * @name SchemeType.none - * @type {SchemeType.none} - */ - get none() { - /** - * @typedef {SchemeType.none} SchemeType.none - */ - return _none - }, - - /** - * Return the 'bfv' scheme type - * - * @readonly - * @name SchemeType.bfv - * @type {SchemeType.bfv} - */ - get bfv() { - /** - * @typedef {SchemeType.bfv} SchemeType.bfv - */ - return _bfv - }, + return _bfv + }, - /** - * Return the 'ckks' scheme type - * - * @readonly - * @name SchemeType.ckks - * @type {SchemeType.ckks} - */ - get ckks() { - /** - * @typedef {SchemeType.ckks} SchemeType.ckks - */ - return _ckks - }, + /** + * Return the 'ckks' scheme type + * + * @readonly + * @name SchemeType.ckks + * @type {SchemeType.ckks} + */ + get ckks() { + /** + * @typedef {SchemeType.ckks} SchemeType.ckks + */ + return _ckks + }, - /** - * Return the 'bgv' scheme type - * - * @readonly - * @name SchemeType.bgv - * @type {SchemeType.bgv} - */ - get bgv() { - /** - * @typedef {SchemeType.bgv} SchemeType.bgv - */ - return _bgv - } - } + /** + * Return the 'bgv' scheme type + * + * @readonly + * @name SchemeType.bgv + * @type {SchemeType.bgv} + */ + get bgv() { + /** + * @typedef {SchemeType.bgv} SchemeType.bgv + */ + return _bgv } + } + } export const SchemeTypeInit = ({ loader diff --git a/src/implementation/secret-key.ts b/src/implementation/secret-key.ts index 05133f70..f680e6ff 100644 --- a/src/implementation/secret-key.ts +++ b/src/implementation/secret-key.ts @@ -37,205 +37,205 @@ export type SecretKey = { const SecretKeyConstructor = (library: Library): SecretKeyDependencies => - ({ - Exception, - ComprModeType, - Vector - }: SecretKeyDependencyOptions): SecretKeyConstructorOptions => - (): SecretKey => { - const Constructor = library.SecretKey - let _instance = new Constructor() - - /** - * @implements SecretKey - */ - - /** - * @interface SecretKey - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name SecretKey#instance - * @type {Instance} - */ - get instance() { - return _instance - }, - - /** - * Inject this object with a raw WASM instance - * - * @private - * @function - * @name SecretKey#inject - * @param {Instance} instance WASM instance - */ - inject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined - } - _instance = new Constructor(instance) - instance.delete() - }, - - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name SecretKey#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined - } - }, - - /** - * Save the Encryption Parameters to a base64 string - * - * @function - * @name SecretKey#save - * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use - * @returns {string} Base64 encoded string - */ - save(compression: ComprModeType = ComprModeType.zstd): string { - try { - return _instance.saveToString(compression) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - - /** - * Save the SecretKey as a binary Uint8Array - * - * @function - * @name SecretKey#saveArray - * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use - * @returns {Uint8Array} A byte array containing the SecretKey in binary form - */ - saveArray(compression: ComprModeType = ComprModeType.zstd): Uint8Array { - const tempVect = Vector() - const instance = _instance.saveToArray(compression) - tempVect.unsafeInject(instance) - tempVect.setType('Uint8Array') - const tempArr = tempVect.toArray() as Uint8Array - tempVect.delete() - return tempArr - }, - - /** - * Load a SecretKey from a base64 string - * - * @function - * @name SecretKey#load - * @param {Context} context Encryption context to enforce - * @param {string} encoded Base64 encoded string - */ - load(context: Context, encoded: string) { - try { - _instance.loadFromString(context.instance, encoded) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - - /** - * Load a SecretKey from an Uint8Array holding binary data - * - * @function - * @name SecretKey#loadArray - * @param {Context} context Encryption context to enforce - * @param {Uint8Array} array TypedArray containing binary data - */ - loadArray(context: Context, array: Uint8Array) { - try { - _instance.loadFromArray(context.instance, array) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - - /** - * Copy an existing SecretKey and overwrite this instance - * - * @function - * @name SecretKey#copy - * @param {SecretKey} key SecretKey to copy - * @example - * const keyA = keyGenerator.secretKey() - * const keyB = seal.SecretKey() - * keyB.copy(keyA) - * // keyB holds a copy of keyA - */ - copy(key: SecretKey) { - try { - _instance.copy(key.instance) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - - /** - * Clone and return a new instance of this SecretKey - * - * @function - * @name SecretKey#clone - * @returns {SecretKey} - * @example - * const keyA = keyGenerator.secretKey() - * const keyB = keyA.clone() - * // keyB holds a copy of keyA - */ - clone(): SecretKey { - try { - const clonedInstance = _instance.clone() - const key = SecretKeyConstructor(library)({ - Exception, - ComprModeType, - Vector - })() - key.inject(clonedInstance) - return key - } catch (e) { - throw Exception.safe(e as SealError) - } - }, - - /** - * Move a SecretKey into this one and delete the old reference - * - * @function - * @name SecretKey#move - * @param {SecretKey} key SecretKey to move - * @example - * const keyA = keyGenerator.secretKey() - * const keyB = seal.SecretKey() - * keyB.move(keyA) - * // keyB holds a the instance of keyA. - * // keyA no longer holds an instance - */ - move(key: SecretKey) { - try { - _instance.move(key.instance) - // TODO: find optimization - // This method results in a copy instead of a real move. - // Therefore, we need to delete the old instance. - key.delete() - } catch (e) { - throw Exception.safe(e as SealError) - } - } + ({ + Exception, + ComprModeType, + Vector + }: SecretKeyDependencyOptions): SecretKeyConstructorOptions => + (): SecretKey => { + const Constructor = library.SecretKey + let _instance = new Constructor() + + /** + * @implements SecretKey + */ + + /** + * @interface SecretKey + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name SecretKey#instance + * @type {Instance} + */ + get instance() { + return _instance + }, + + /** + * Inject this object with a raw WASM instance + * + * @private + * @function + * @name SecretKey#inject + * @param {Instance} instance WASM instance + */ + inject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined + } + _instance = new Constructor(instance) + instance.delete() + }, + + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name SecretKey#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined + } + }, + + /** + * Save the Encryption Parameters to a base64 string + * + * @function + * @name SecretKey#save + * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use + * @returns {string} Base64 encoded string + */ + save(compression: ComprModeType = ComprModeType.zstd): string { + try { + return _instance.saveToString(compression) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Save the SecretKey as a binary Uint8Array + * + * @function + * @name SecretKey#saveArray + * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use + * @returns {Uint8Array} A byte array containing the SecretKey in binary form + */ + saveArray(compression: ComprModeType = ComprModeType.zstd): Uint8Array { + const tempVect = Vector() + const instance = _instance.saveToArray(compression) + tempVect.unsafeInject(instance) + tempVect.setType('Uint8Array') + const tempArr = tempVect.toArray() as Uint8Array + tempVect.delete() + return tempArr + }, + + /** + * Load a SecretKey from a base64 string + * + * @function + * @name SecretKey#load + * @param {Context} context Encryption context to enforce + * @param {string} encoded Base64 encoded string + */ + load(context: Context, encoded: string) { + try { + _instance.loadFromString(context.instance, encoded) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Load a SecretKey from an Uint8Array holding binary data + * + * @function + * @name SecretKey#loadArray + * @param {Context} context Encryption context to enforce + * @param {Uint8Array} array TypedArray containing binary data + */ + loadArray(context: Context, array: Uint8Array) { + try { + _instance.loadFromArray(context.instance, array) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Copy an existing SecretKey and overwrite this instance + * + * @function + * @name SecretKey#copy + * @param {SecretKey} key SecretKey to copy + * @example + * const keyA = keyGenerator.secretKey() + * const keyB = seal.SecretKey() + * keyB.copy(keyA) + * // keyB holds a copy of keyA + */ + copy(key: SecretKey) { + try { + _instance.copy(key.instance) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Clone and return a new instance of this SecretKey + * + * @function + * @name SecretKey#clone + * @returns {SecretKey} + * @example + * const keyA = keyGenerator.secretKey() + * const keyB = keyA.clone() + * // keyB holds a copy of keyA + */ + clone(): SecretKey { + try { + const clonedInstance = _instance.clone() + const key = SecretKeyConstructor(library)({ + Exception, + ComprModeType, + Vector + })() + key.inject(clonedInstance) + return key + } catch (e) { + throw Exception.safe(e as SealError) + } + }, + + /** + * Move a SecretKey into this one and delete the old reference + * + * @function + * @name SecretKey#move + * @param {SecretKey} key SecretKey to move + * @example + * const keyA = keyGenerator.secretKey() + * const keyB = seal.SecretKey() + * keyB.move(keyA) + * // keyB holds a the instance of keyA. + * // keyA no longer holds an instance + */ + move(key: SecretKey) { + try { + _instance.move(key.instance) + // TODO: find optimization + // This method results in a copy instead of a real move. + // Therefore, we need to delete the old instance. + key.delete() + } catch (e) { + throw Exception.safe(e as SealError) } } + } + } export const SecretKeyInit = ({ loader diff --git a/src/implementation/security-level.ts b/src/implementation/security-level.ts index 85871cdc..b616e4c3 100644 --- a/src/implementation/security-level.ts +++ b/src/implementation/security-level.ts @@ -17,79 +17,79 @@ export type SecurityLevel = { const SecurityLevelConstructor = (library: Library): SecurityLevelDependencies => - (): SecurityLevelConstructorOptions => - (): SecurityLevel => { - // Static methods - const _none = library.SecLevelType.none - const _tc128 = library.SecLevelType.tc128 - const _tc192 = library.SecLevelType.tc192 - const _tc256 = library.SecLevelType.tc256 + (): SecurityLevelConstructorOptions => + (): SecurityLevel => { + // Static methods + const _none = library.SecLevelType.none + const _tc128 = library.SecLevelType.tc128 + const _tc192 = library.SecLevelType.tc192 + const _tc256 = library.SecLevelType.tc256 + /** + * @implements SecurityLevel + */ + + /** + * @interface SecurityLevel + */ + return { + /** + * Returns the 'none' security level + * + * @readonly + * @name SecurityLevel.none + * @type {SecurityLevel.none} + */ + get none() { /** - * @implements SecurityLevel + * @typedef {SecurityLevel.none} SecurityLevel.none */ + return _none + }, + /** + * Returns the '128' security level + * + * @readonly + * @name SecurityLevel.tc128 + * @type {SecurityLevel.tc128} + */ + get tc128() { /** - * @interface SecurityLevel + * @typedef {SecurityLevel.tc128} SecurityLevel.tc128 */ - return { - /** - * Returns the 'none' security level - * - * @readonly - * @name SecurityLevel.none - * @type {SecurityLevel.none} - */ - get none() { - /** - * @typedef {SecurityLevel.none} SecurityLevel.none - */ - return _none - }, - - /** - * Returns the '128' security level - * - * @readonly - * @name SecurityLevel.tc128 - * @type {SecurityLevel.tc128} - */ - get tc128() { - /** - * @typedef {SecurityLevel.tc128} SecurityLevel.tc128 - */ - return _tc128 - }, + return _tc128 + }, - /** - * Returns the '192' security level - * - * @readonly - * @name SecurityLevel.tc192 - * @type {SecurityLevel.tc192} - */ - get tc192() { - /** - * @typedef {SecurityLevel.tc192} SecurityLevel.tc192 - */ - return _tc192 - }, + /** + * Returns the '192' security level + * + * @readonly + * @name SecurityLevel.tc192 + * @type {SecurityLevel.tc192} + */ + get tc192() { + /** + * @typedef {SecurityLevel.tc192} SecurityLevel.tc192 + */ + return _tc192 + }, - /** - * Returns the '256' security level - * - * @readonly - * @name SecurityLevel.tc256 - * @type {SecurityLevel.tc256} - */ - get tc256() { - /** - * @typedef {SecurityLevel.tc256} SecurityLevel.tc256 - */ - return _tc256 - } - } + /** + * Returns the '256' security level + * + * @readonly + * @name SecurityLevel.tc256 + * @type {SecurityLevel.tc256} + */ + get tc256() { + /** + * @typedef {SecurityLevel.tc256} SecurityLevel.tc256 + */ + return _tc256 } + } + } export const SecurityLevelInit = ({ loader }: LoaderOptions): SecurityLevelDependencies => { diff --git a/src/implementation/serializable.ts b/src/implementation/serializable.ts index dd877112..93946192 100644 --- a/src/implementation/serializable.ts +++ b/src/implementation/serializable.ts @@ -31,100 +31,100 @@ export type Serializable = { const SerializableConstructor = (): SerializableDependencies => - ({ - Exception, - Vector, - ComprModeType - }: SerializableDependencyOptions): SerializableConstructorOptions => - (): Serializable => { - let _instance: Instance - - /** - * @implements Serializable - */ + ({ + Exception, + Vector, + ComprModeType + }: SerializableDependencyOptions): SerializableConstructorOptions => + (): Serializable => { + let _instance: Instance - /** - * @interface Serializable - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name Serializable#instance - * @type {Instance} - */ - get instance() { - return _instance - }, + /** + * @implements Serializable + */ - /** - * Inject this object with a raw WASM instance. No type checking is performed. - * - * @private - * @function - * @name Serializable#unsafeInject - * @param {Instance} instance WASM instance - */ - unsafeInject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined - } - _instance = instance - }, + /** + * @interface Serializable + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name Serializable#instance + * @type {Instance} + */ + get instance() { + return _instance + }, - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name Serializable#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined - } - }, + /** + * Inject this object with a raw WASM instance. No type checking is performed. + * + * @private + * @function + * @name Serializable#unsafeInject + * @param {Instance} instance WASM instance + */ + unsafeInject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined + } + _instance = instance + }, - /** - * Save to a base64 string - * - * @function - * @name Serializable#save - * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use - * @returns {string} Base64 encoded string - */ - save(compression: ComprModeType = ComprModeType.zstd): string { - try { - return _instance.saveToString(compression) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name Serializable#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined + } + }, - /** - * Save as a binary Uint8Array - * - * @function - * @name Serializable#saveArray - * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use - * @returns {Uint8Array} A byte array containing the Serializable object in binary form - */ - saveArray(compression: ComprModeType = ComprModeType.zstd): Uint8Array { - const tempVect = Vector() - const instance = _instance.saveToArray(compression) - tempVect.unsafeInject(instance) - tempVect.setType('Uint8Array') - const tempArr = tempVect.toArray() as Uint8Array - tempVect.delete() - return tempArr - } + /** + * Save to a base64 string + * + * @function + * @name Serializable#save + * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use + * @returns {string} Base64 encoded string + */ + save(compression: ComprModeType = ComprModeType.zstd): string { + try { + return _instance.saveToString(compression) + } catch (e) { + throw Exception.safe(e as SealError) } + }, + + /** + * Save as a binary Uint8Array + * + * @function + * @name Serializable#saveArray + * @param {ComprModeType} [compression={@link ComprModeType.zstd}] The compression mode to use + * @returns {Uint8Array} A byte array containing the Serializable object in binary form + */ + saveArray(compression: ComprModeType = ComprModeType.zstd): Uint8Array { + const tempVect = Vector() + const instance = _instance.saveToArray(compression) + tempVect.unsafeInject(instance) + tempVect.setType('Uint8Array') + const tempArr = tempVect.toArray() as Uint8Array + tempVect.delete() + return tempArr } + } + } export const SerializableInit = (): SerializableDependencies => { return SerializableConstructor() diff --git a/src/implementation/vector.ts b/src/implementation/vector.ts index 8eafd666..dcb57b7f 100644 --- a/src/implementation/vector.ts +++ b/src/implementation/vector.ts @@ -46,218 +46,218 @@ export type StringTypes = const VectorConstructor = (library: Library): VectorDependencies => - ({ Exception }: VectorDependencyOptions): VectorConstructorOptions => - (): Vector => { - // Static methods - const _vecFromArrayUint8 = library.vecFromArrayUint8 - const _vecFromArrayUint32 = library.vecFromArrayUint32 - const _vecFromArrayInt32 = library.vecFromArrayInt32 - const _vecFromArrayFloat64 = library.vecFromArrayFloat64 - const _vecFromArrayBigInt64 = library.vecFromArrayBigInt64 - const _vecFromArrayBigUint64 = library.vecFromArrayBigUint64 - const _vecFromArrayModulus = library.vecFromArrayModulus - const _jsArrayUint8FromVec = library.jsArrayUint8FromVec - const _jsArrayUint32FromVec = library.jsArrayUint32FromVec - const _jsArrayInt32FromVec = library.jsArrayInt32FromVec - const _jsArrayFloat64FromVec = library.jsArrayFloat64FromVec - const _jsArrayStringFromVecInt64 = library.jsArrayStringFromVecInt64 - const _jsArrayStringFromVecUint64 = library.jsArrayStringFromVecUint64 - const _jsArrayStringFromVecModulus = library.jsArrayStringFromVecModulus + ({ Exception }: VectorDependencyOptions): VectorConstructorOptions => + (): Vector => { + // Static methods + const _vecFromArrayUint8 = library.vecFromArrayUint8 + const _vecFromArrayUint32 = library.vecFromArrayUint32 + const _vecFromArrayInt32 = library.vecFromArrayInt32 + const _vecFromArrayFloat64 = library.vecFromArrayFloat64 + const _vecFromArrayBigInt64 = library.vecFromArrayBigInt64 + const _vecFromArrayBigUint64 = library.vecFromArrayBigUint64 + const _vecFromArrayModulus = library.vecFromArrayModulus + const _jsArrayUint8FromVec = library.jsArrayUint8FromVec + const _jsArrayUint32FromVec = library.jsArrayUint32FromVec + const _jsArrayInt32FromVec = library.jsArrayInt32FromVec + const _jsArrayFloat64FromVec = library.jsArrayFloat64FromVec + const _jsArrayStringFromVecInt64 = library.jsArrayStringFromVecInt64 + const _jsArrayStringFromVecUint64 = library.jsArrayStringFromVecUint64 + const _jsArrayStringFromVecModulus = library.jsArrayStringFromVecModulus - let _instance: Instance - let _type: StringTypes - /** - * @implements Vector - */ + let _instance: Instance + let _type: StringTypes + /** + * @implements Vector + */ - /** - * @interface Vector - */ - return { - /** - * Get the underlying WASM instance - * - * @private - * @readonly - * @name Vector#instance - * @type {Instance} - */ - get instance() { - return _instance - }, + /** + * @interface Vector + */ + return { + /** + * Get the underlying WASM instance + * + * @private + * @readonly + * @name Vector#instance + * @type {Instance} + */ + get instance() { + return _instance + }, - /** - * Inject this object with a raw WASM instance. No type checking is performed. - * - * @private - * @function - * @name Vector#unsafeInject - * @param {Instance} instance WASM instance - */ - unsafeInject(instance: Instance) { - if (_instance) { - _instance.delete() - _instance = undefined - } - _instance = instance - }, + /** + * Inject this object with a raw WASM instance. No type checking is performed. + * + * @private + * @function + * @name Vector#unsafeInject + * @param {Instance} instance WASM instance + */ + unsafeInject(instance: Instance) { + if (_instance) { + _instance.delete() + _instance = undefined + } + _instance = instance + }, - /** - * Delete the underlying WASM instance. - * - * Should be called before dereferencing this object to prevent the - * WASM heap from growing indefinitely. - * @function - * @name Vector#delete - */ - delete() { - if (_instance) { - _instance.delete() - _instance = undefined - } - }, + /** + * Delete the underlying WASM instance. + * + * Should be called before dereferencing this object to prevent the + * WASM heap from growing indefinitely. + * @function + * @name Vector#delete + */ + delete() { + if (_instance) { + _instance.delete() + _instance = undefined + } + }, - /** - * Converts a JS TypedArray into a vector - * - * @function - * @name Vector#from - * @param {VectorTypes} array The TypedArray to convert - * @param {StringTypes} [type] An optional type override - useful for 'Modulus' only - */ - from(array: VectorTypes, type?: StringTypes) { - try { - _type = type ? type : (array.constructor.name as StringTypes) - switch (_type) { - case 'Uint8Array': - _instance = _vecFromArrayUint8(array) - break - case 'Int32Array': - _instance = _vecFromArrayInt32(array) - break - case 'Uint32Array': - _instance = _vecFromArrayUint32(array) - break - case 'Float64Array': - _instance = _vecFromArrayFloat64(array) - break - case 'BigInt64Array': - _instance = _vecFromArrayBigInt64(array.toString().split(',')) - break - case 'BigUint64Array': - _instance = _vecFromArrayBigUint64(array.toString().split(',')) - break - case 'Modulus': - _instance = _vecFromArrayModulus(array.toString().split(',')) - break - default: - throw new Error(UNSUPPORTED_VECTOR_TYPE) - } - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Converts a JS TypedArray into a vector + * + * @function + * @name Vector#from + * @param {VectorTypes} array The TypedArray to convert + * @param {StringTypes} [type] An optional type override - useful for 'Modulus' only + */ + from(array: VectorTypes, type?: StringTypes) { + try { + _type = type ? type : (array.constructor.name as StringTypes) + switch (_type) { + case 'Uint8Array': + _instance = _vecFromArrayUint8(array) + break + case 'Int32Array': + _instance = _vecFromArrayInt32(array) + break + case 'Uint32Array': + _instance = _vecFromArrayUint32(array) + break + case 'Float64Array': + _instance = _vecFromArrayFloat64(array) + break + case 'BigInt64Array': + _instance = _vecFromArrayBigInt64(array.toString().split(',')) + break + case 'BigUint64Array': + _instance = _vecFromArrayBigUint64(array.toString().split(',')) + break + case 'Modulus': + _instance = _vecFromArrayModulus(array.toString().split(',')) + break + default: + throw new Error(UNSUPPORTED_VECTOR_TYPE) + } + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * The Vector type - * - * @readonly - * @name Vector#type - */ - get type(): StringTypes { - return _type - }, + /** + * The Vector type + * + * @readonly + * @name Vector#type + */ + get type(): StringTypes { + return _type + }, - /** - * Set the Vector type - * - * @function - * @name Vector#setType - * @param {StringTypes} type the type of the vector - */ - setType(type: StringTypes) { - _type = type - }, + /** + * Set the Vector type + * + * @function + * @name Vector#setType + * @param {StringTypes} type the type of the vector + */ + setType(type: StringTypes) { + _type = type + }, - /** - * The vector size - * - * @readonly - * @name Vector#size - * @type {number} - */ - get size(): number { - return _instance.size() - }, + /** + * The vector size + * + * @readonly + * @name Vector#size + * @type {number} + */ + get size(): number { + return _instance.size() + }, - /** - * Get a value pointed to by the specified index - * - * @function - * @name Vector#getValue - * @param {number} index Index of the Vector - * @returns {number} Value of the element in the Vector pointed to by the index - */ - getValue(index: number): number { - try { - return _instance.get(index) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Get a value pointed to by the specified index + * + * @function + * @name Vector#getValue + * @param {number} index Index of the Vector + * @returns {number} Value of the element in the Vector pointed to by the index + */ + getValue(index: number): number { + try { + return _instance.get(index) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Resizes a vector to the given size - * - * @function - * @name Vector#resize - * @param {number} size number of elements to resize - * @param {number} fill Data to fill the vector with - */ - resize(size: number, fill: number) { - try { - _instance.resize(size, fill) - } catch (e) { - throw Exception.safe(e as SealError) - } - }, + /** + * Resizes a vector to the given size + * + * @function + * @name Vector#resize + * @param {number} size number of elements to resize + * @param {number} fill Data to fill the vector with + */ + resize(size: number, fill: number) { + try { + _instance.resize(size, fill) + } catch (e) { + throw Exception.safe(e as SealError) + } + }, - /** - * Copy a vector's data into a Typed Array - * - * Note: we cannot simply return a view on the underlying ArrayBuffer - * because WASM memory can grow and cause all the views to become - * neutered. We have to perform a hard copy to get data from WASM heap to JS. - * - * @function - * @name Vector#toArray - * @returns {VectorTypes} TypedArray containing values from the Vector - */ - toArray(): VectorTypes { - if (!_instance) { - throw new Error(INSTANCE_DELETED) - } - switch (_type) { - case 'Uint8Array': - return Uint8Array.from(_jsArrayUint8FromVec(_instance)) - case 'Int32Array': - return Int32Array.from(_jsArrayInt32FromVec(_instance)) - case 'Uint32Array': - return Uint32Array.from(_jsArrayUint32FromVec(_instance)) - case 'Float64Array': - return Float64Array.from(_jsArrayFloat64FromVec(_instance)) - case 'BigInt64Array': - return BigInt64Array.from(_jsArrayStringFromVecInt64(_instance)) - case 'BigUint64Array': - return BigUint64Array.from(_jsArrayStringFromVecUint64(_instance)) - case 'Modulus': - return BigUint64Array.from(_jsArrayStringFromVecModulus(_instance)) - default: - throw new Error(UNSUPPORTED_VECTOR_TYPE) - } - } + /** + * Copy a vector's data into a Typed Array + * + * Note: we cannot simply return a view on the underlying ArrayBuffer + * because WASM memory can grow and cause all the views to become + * neutered. We have to perform a hard copy to get data from WASM heap to JS. + * + * @function + * @name Vector#toArray + * @returns {VectorTypes} TypedArray containing values from the Vector + */ + toArray(): VectorTypes { + if (!_instance) { + throw new Error(INSTANCE_DELETED) + } + switch (_type) { + case 'Uint8Array': + return Uint8Array.from(_jsArrayUint8FromVec(_instance)) + case 'Int32Array': + return Int32Array.from(_jsArrayInt32FromVec(_instance)) + case 'Uint32Array': + return Uint32Array.from(_jsArrayUint32FromVec(_instance)) + case 'Float64Array': + return Float64Array.from(_jsArrayFloat64FromVec(_instance)) + case 'BigInt64Array': + return BigInt64Array.from(_jsArrayStringFromVecInt64(_instance)) + case 'BigUint64Array': + return BigUint64Array.from(_jsArrayStringFromVecUint64(_instance)) + case 'Modulus': + return BigUint64Array.from(_jsArrayStringFromVecModulus(_instance)) + default: + throw new Error(UNSUPPORTED_VECTOR_TYPE) } } + } + } export const VectorInit = ({ loader }: LoaderOptions): VectorDependencies => { const library: Library = loader.library diff --git a/submodules/SEAL b/submodules/SEAL index 8ba63e63..832c73b8 160000 --- a/submodules/SEAL +++ b/submodules/SEAL @@ -1 +1 @@ -Subproject commit 8ba63e639bcdff53f904b3def51d9c34ee96ced2 +Subproject commit 832c73b8adc6cbbe9d44ce2dca99236f65d522f6 diff --git a/submodules/emsdk b/submodules/emsdk index 7a09f8cc..3d87d5ea 160000 --- a/submodules/emsdk +++ b/submodules/emsdk @@ -1 +1 @@ -Subproject commit 7a09f8cc1c3a83f89f9fec88f2386b84e984e066 +Subproject commit 3d87d5ea8143b3636f872fb05b896eb4a19a070b