From b5fb42a5f2b080676a1ebe1077545dde56b486d0 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Thu, 22 Aug 2024 12:53:23 -0400 Subject: [PATCH 1/6] [CONFIG] [NPM] ESLint airbnb rules added. --- .eslintrc | 35 +- package-lock.json | 1855 ++++++++++++++++++++++++++++++++++++++------- package.json | 4 + 3 files changed, 1607 insertions(+), 287 deletions(-) diff --git a/.eslintrc b/.eslintrc index 6adf1e22..581c04bb 100644 --- a/.eslintrc +++ b/.eslintrc @@ -4,15 +4,22 @@ "parserOptions": { "project": true }, - "plugins": ["@typescript-eslint", "jest", "prettier"], + "plugins": [ + "@typescript-eslint", + "import", + "jest", + "prettier"], "extends": [ "eslint:recommended", "plugin:@typescript-eslint/eslint-recommended", "plugin:@typescript-eslint/recommended", // "plugin:@typescript-eslint/recommended-type-checked", + // "plugin:@typescript-eslint/stylistic-type-checked" + "airbnb-base", "prettier", - // "plugin:import/errors", - // "plugin:import/warnings", + "plugin:import/recommended", + "plugin:import/errors", + "plugin:import/warnings", "plugin:jest/all" ], "rules": { @@ -21,6 +28,15 @@ // CUSTOM OVERRIDES // TODO: remove no-restricted-syntax override and replace for...Of due /// "iterators/generators require regenerator-runtime, which is too heavyweight for this guide to allow them. Separately, loops should be avoided in favor of array iterations." + "import/extensions": [ + "error", + "always", + { + "pattern": { + "ts": "never" + } + } + ], "no-restricted-syntax": 0, "no-console": "off", "no-underscore-dangle": 0, @@ -37,5 +53,16 @@ "@typescript-eslint/explicit-function-return-type": "error" } } - ] + ], + "settings": { + "import/parsers": { + "@typescript-eslint/parser": [".ts", ".tsx"] + }, + "import/resolver": { + "typescript": { + "alwaysTryTypes": true, // always try to resolve types under `@types` directory even it doesn"t contain any source code, like `@types/unist` + "project": "." + } + } + } } diff --git a/package-lock.json b/package-lock.json index 1e0e6243..64813ea6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "MIT", "dependencies": { + "@jest/globals": "^29.7.0", "pino": "^9.0.0", "pino-pretty": "^11.0.0" }, @@ -17,7 +18,10 @@ "@typescript-eslint/eslint-plugin": "^7.0.0", "@typescript-eslint/parser": "^7.0.0", "eslint": "^8.51.0", + "eslint-config-airbnb-base": "^15.0.0", "eslint-config-prettier": "^9.0.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-import": "^2.29.1", "eslint-plugin-jest": "^28.0.0", "eslint-plugin-prettier": "^5.1.2", "jest": "^29.5.0", @@ -40,7 +44,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -53,7 +56,6 @@ "version": "7.22.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, "dependencies": { "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" @@ -66,7 +68,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -78,7 +79,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -92,7 +92,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -100,14 +99,12 @@ "node_modules/@babel/code-frame/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/@babel/code-frame/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -116,7 +113,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, "engines": { "node": ">=4" } @@ -125,7 +121,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -137,7 +132,6 @@ "version": "7.21.7", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz", "integrity": "sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -146,7 +140,6 @@ "version": "7.21.8", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", - "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.21.4", @@ -175,14 +168,12 @@ "node_modules/@babel/core/node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/@babel/generator": { "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", - "dev": true, "dependencies": { "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", @@ -197,7 +188,6 @@ "version": "7.21.5", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz", "integrity": "sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.21.5", "@babel/helper-validator-option": "^7.21.0", @@ -216,7 +206,6 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -225,7 +214,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, "dependencies": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" @@ -238,7 +226,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -250,7 +237,6 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", - "dev": true, "dependencies": { "@babel/types": "^7.21.4" }, @@ -262,7 +248,6 @@ "version": "7.21.5", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz", "integrity": "sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==", - "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.21.5", "@babel/helper-module-imports": "^7.21.4", @@ -281,7 +266,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -290,7 +274,6 @@ "version": "7.21.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", - "dev": true, "dependencies": { "@babel/types": "^7.21.5" }, @@ -302,7 +285,6 @@ "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -314,7 +296,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -323,7 +304,6 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -332,7 +312,6 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -341,7 +320,6 @@ "version": "7.21.5", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz", "integrity": "sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==", - "dev": true, "dependencies": { "@babel/template": "^7.20.7", "@babel/traverse": "^7.21.5", @@ -355,7 +333,6 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -369,7 +346,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -381,7 +357,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -395,7 +370,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -403,14 +377,12 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/@babel/highlight/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -419,7 +391,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, "engines": { "node": ">=4" } @@ -428,7 +399,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -440,7 +410,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -452,7 +421,6 @@ "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -464,7 +432,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -476,7 +443,6 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -488,7 +454,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -500,7 +465,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -512,7 +476,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -527,7 +490,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -539,7 +501,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -551,7 +512,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -563,7 +523,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -575,7 +534,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -587,7 +545,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -599,7 +556,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -614,7 +570,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -629,7 +584,6 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.22.13", "@babel/parser": "^7.22.15", @@ -643,7 +597,6 @@ "version": "7.23.2", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.22.13", "@babel/generator": "^7.23.0", @@ -664,7 +617,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -840,7 +792,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -856,7 +807,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, "engines": { "node": ">=8" } @@ -929,7 +879,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", @@ -944,7 +893,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, "dependencies": { "expect": "^29.7.0", "jest-snapshot": "^29.7.0" @@ -957,7 +905,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, "dependencies": { "jest-get-type": "^29.6.3" }, @@ -969,7 +916,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -986,7 +932,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -1093,7 +1039,6 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -1149,7 +1094,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -1175,7 +1119,6 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -1192,7 +1135,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -1206,7 +1148,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -1215,7 +1156,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -1223,14 +1163,12 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.18", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -1239,8 +1177,7 @@ "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", @@ -1293,14 +1230,12 @@ "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" }, "node_modules/@sinonjs/commons": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, "dependencies": { "type-detect": "4.0.8" } @@ -1309,7 +1244,6 @@ "version": "10.3.0", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0" } @@ -1383,7 +1317,6 @@ "version": "4.1.6", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -1391,14 +1324,12 @@ "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -1407,7 +1338,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } @@ -1422,23 +1352,27 @@ "pretty-format": "^29.0.0" } }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { "version": "18.16.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz", - "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==", - "dev": true + "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==" }, "node_modules/@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, "node_modules/@types/yargs": { "version": "17.0.24", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, "dependencies": { "@types/yargs-parser": "*" } @@ -1446,8 +1380,7 @@ "node_modules/@types/yargs-parser": { "version": "21.0.0", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "7.18.0", @@ -1772,7 +1705,6 @@ "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" }, @@ -1787,7 +1719,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1806,11 +1737,48 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -1821,6 +1789,88 @@ "node": ">=8" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/async": { "version": "3.2.5", "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", @@ -1836,6 +1886,22 @@ "node": ">=8.0.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -1861,7 +1927,6 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -1892,7 +1957,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -1930,8 +1994,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", @@ -1956,7 +2019,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1966,7 +2028,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -1978,7 +2039,6 @@ "version": "4.21.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, "funding": [ { "type": "opencollective", @@ -2018,7 +2078,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, "dependencies": { "node-int64": "^0.4.0" } @@ -2052,6 +2111,26 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2065,7 +2144,6 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, "engines": { "node": ">=6" } @@ -2074,7 +2152,6 @@ "version": "1.0.30001482", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001482.tgz", "integrity": "sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -2094,7 +2171,6 @@ "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" @@ -2119,7 +2195,6 @@ "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, "funding": [ { "type": "github", @@ -2170,7 +2245,6 @@ "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" }, @@ -2181,8 +2255,7 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colorette": { "version": "2.0.20", @@ -2192,14 +2265,19 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true, + "license": "MIT" }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/create-jest": { "version": "29.7.0", @@ -2242,6 +2320,60 @@ "node": ">= 8" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/dateformat": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", @@ -2254,7 +2386,6 @@ "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" }, @@ -2296,19 +2427,55 @@ "node": ">=0.10.0" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "engines": { "node": ">=0.3.1" @@ -2318,7 +2485,6 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -2367,8 +2533,7 @@ "node_modules/electron-to-chromium": { "version": "1.4.380", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.380.tgz", - "integrity": "sha512-XKGdI4pWM78eLH2cbXJHiBnWUwFSzZM7XujsB6stDiGu9AeSqziedP6amNLpJzE3i0rLTcfAwdCTs5ecP5yeSg==", - "dev": true + "integrity": "sha512-XKGdI4pWM78eLH2cbXJHiBnWUwFSzZM7XujsB6stDiGu9AeSqziedP6amNLpJzE3i0rLTcfAwdCTs5ecP5yeSg==" }, "node_modules/emittery": { "version": "0.13.1", @@ -2396,6 +2561,20 @@ "once": "^1.4.0" } }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -2405,11 +2584,150 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, "engines": { "node": ">=6" } @@ -2418,7 +2736,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, "engines": { "node": ">=8" } @@ -2478,6 +2795,26 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "dev": true, + "license": "MIT", + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" + } + }, "node_modules/eslint-config-prettier": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", @@ -2490,6 +2827,137 @@ "eslint": ">=7.0.0" } }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "dev": true, + "license": "ISC", + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/eslint-plugin-jest": { "version": "28.8.0", "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.8.0.tgz", @@ -2699,7 +3167,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -2802,7 +3269,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", @@ -2865,8 +3331,7 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -2900,7 +3365,6 @@ "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" } @@ -2954,7 +3418,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2966,7 +3429,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -2994,17 +3456,25 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -3015,16 +3485,48 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -3038,11 +3540,30 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, "engines": { "node": ">=8.0.0" } @@ -3059,11 +3580,41 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.6", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz", + "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3095,11 +3646,27 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, "engines": { "node": ">=4" } }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -3121,11 +3688,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/graphemer": { "version": "1.4.0", @@ -3133,27 +3712,92 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "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/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "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", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/help-me": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", @@ -3215,75 +3859,183 @@ "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, + "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "hasown": "^2.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, + "license": "MIT", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, + "license": "MIT", "dependencies": { - "has": "^1.0.3" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3328,15 +4080,43 @@ "node": ">=0.10.0" } }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "engines": { "node": ">=0.12.0" } }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -3346,6 +4126,39 @@ "node": ">=8" } }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -3358,6 +4171,74 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -3368,7 +4249,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, "engines": { "node": ">=8" } @@ -3377,7 +4257,6 @@ "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", "@babel/parser": "^7.14.7", @@ -3602,7 +4481,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -3662,7 +4540,6 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -3671,7 +4548,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -3709,7 +4585,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -3724,7 +4599,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -3744,7 +4618,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -3775,7 +4648,6 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -3882,7 +4754,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -3913,7 +4784,6 @@ "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" }, @@ -3925,7 +4795,6 @@ "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -3939,14 +4808,12 @@ "node_modules/jest-snapshot/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 + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -4011,7 +4878,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -4026,7 +4892,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4048,14 +4913,12 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -4068,7 +4931,6 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, "bin": { "jsesc": "bin/jsesc" }, @@ -4098,7 +4960,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, "bin": { "json5": "lib/cli.js" }, @@ -4147,7 +5008,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -4171,7 +5031,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, "dependencies": { "yallist": "^3.0.2" } @@ -4234,7 +5093,6 @@ "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, "dependencies": { "tmpl": "1.0.5" } @@ -4242,8 +5100,7 @@ "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "node_modules/merge2": { "version": "1.4.1", @@ -4259,7 +5116,6 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -4281,7 +5137,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4300,46 +5155,150 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" }, "node_modules/node-releases": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, + "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/on-exit-leak-free": { @@ -4406,7 +5365,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -4418,7 +5376,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -4433,7 +5390,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, "engines": { "node": ">=6" } @@ -4472,7 +5428,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "engines": { "node": ">=8" } @@ -4481,7 +5436,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -4514,14 +5468,12 @@ "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -4594,7 +5546,6 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true, "engines": { "node": ">= 6" } @@ -4611,6 +5562,16 @@ "node": ">=8" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -4652,7 +5613,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -4666,7 +5626,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, "engines": { "node": ">=10" }, @@ -4763,8 +5722,7 @@ "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "node_modules/readable-stream": { "version": "4.3.0", @@ -4788,6 +5746,25 @@ "node": ">= 12.13.0" } }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -4830,11 +5807,20 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, "engines": { "node": ">=8" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/resolve.exports": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", @@ -4892,6 +5878,43 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-stable-stringify": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", @@ -4909,11 +5932,44 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4935,11 +5991,29 @@ "node": ">=8" } }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/sisteransi": { "version": "1.0.5", @@ -4951,7 +6025,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, "engines": { "node": ">=8" } @@ -4995,14 +6068,12 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -5037,6 +6108,58 @@ "node": ">=8" } }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -5082,7 +6205,6 @@ "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" }, @@ -5119,11 +6241,20 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -5150,14 +6281,12 @@ "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, "engines": { "node": ">=4" } @@ -5166,7 +6295,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -5291,6 +6419,42 @@ } } }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/tslib": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", @@ -5314,7 +6478,6 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, "engines": { "node": ">=4" } @@ -5331,6 +6494,83 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typescript": { "version": "5.5.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", @@ -5345,11 +6585,26 @@ "node": ">=14.17" } }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, "funding": [ { "type": "opencollective", @@ -5414,7 +6669,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, "dependencies": { "makeerror": "1.0.12" } @@ -5434,6 +6688,43 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -5460,7 +6751,6 @@ "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", "signal-exit": "^3.0.7" @@ -5481,8 +6771,7 @@ "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yargs": { "version": "17.7.2", diff --git a/package.json b/package.json index b5f9b291..cfc5e069 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "type": "module", "version": "1.0.0", "dependencies": { + "@jest/globals": "^29.7.0", "pino": "^9.0.0", "pino-pretty": "^11.0.0" }, @@ -15,7 +16,10 @@ "@typescript-eslint/eslint-plugin": "^7.0.0", "@typescript-eslint/parser": "^7.0.0", "eslint": "^8.51.0", + "eslint-config-airbnb-base": "^15.0.0", "eslint-config-prettier": "^9.0.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-import": "^2.29.1", "eslint-plugin-jest": "^28.0.0", "eslint-plugin-prettier": "^5.1.2", "jest": "^29.5.0", From d153509f9d88dff34b3d6bb8166162b00b132d5d Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Thu, 22 Aug 2024 16:14:58 -0400 Subject: [PATCH 2/6] [CONFIG] ESLint new rules discovered for typescript --- .eslintrc | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/.eslintrc b/.eslintrc index 581c04bb..cd4438fe 100644 --- a/.eslintrc +++ b/.eslintrc @@ -40,10 +40,19 @@ "no-restricted-syntax": 0, "no-console": "off", "no-underscore-dangle": 0, - "no-plusplus": ["error", { "allowForLoopAfterthoughts": true }] - // , - // "import/no-unresolved": [2, {"commonjs": true, "amd": true}], - // "import/extensions": ["error", { "js": "always", "json": "always"}] + "no-plusplus": ["error", { "allowForLoopAfterthoughts": true }], + // Note: you must disable the base rule as it can report incorrect errors + // https://stackoverflow.com/a/63961972/6366150 + "no-shadow": "off", + "@typescript-eslint/no-shadow": "error", + // Note: you must disable the base rule as it can report incorrect errors + // https://github.com/typescript-eslint/typescript-eslint/issues/2621#issuecomment-701970389 + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": "error", + // Note: you must disable the base rule as it can report incorrect errors + // https://stackoverflow.com/a/77212380/6366150 + "no-use-before-define": "off", + "@typescript-eslint/no-use-before-define": "error" }, "overrides": [ { From b61db944d6b7603aa24d556823e4bd6ba5bf5788 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Thu, 22 Aug 2024 11:41:26 -0400 Subject: [PATCH 3/6] [REFACTOR] ESLint auto fixes --- src/hackerrank/implementation/bonAppetit.ts | 7 ++++--- src/hackerrank/implementation/dayOfProgrammer.ts | 4 ++-- .../greedy_algorithms/luck-balance.ts | 1 + .../miscellaneous/friend_circle_queries.ts | 1 + .../ctci_recursive_staircase.ts | 4 +++- src/hackerrank/lib/Node.ts | 2 ++ src/hackerrank/projecteuler/euler001.ts | 2 +- src/hackerrank/warmup/compareTriplets.ts | 6 ++---- src/hackerrank/warmup/simpleArraySum.test.ts | 3 +-- src/hackerrank/warmup/simpleArraySum.ts | 2 -- src/hackerrank/warmup/solveMeFirst.ts | 2 -- src/hackerrank/warmup/timeConversion.test.ts | 3 +-- src/projecteuler/helpers/bigNumbers.test.ts | 2 +- src/projecteuler/helpers/bigNumbers.ts | 5 ++--- src/projecteuler/helpers/collatz.test.ts | 2 +- src/projecteuler/helpers/divisors.test.ts | 2 +- src/projecteuler/helpers/divisors.ts | 13 ++++++------- src/projecteuler/helpers/isPalindrome.test.ts | 2 +- src/projecteuler/helpers/matrix.test.ts | 2 +- src/projecteuler/helpers/matrix.ts | 2 +- src/projecteuler/helpers/minmax.test.ts | 2 +- src/projecteuler/helpers/numberToWord.test.ts | 2 +- src/projecteuler/helpers/numberToWord.ts | 2 +- src/projecteuler/helpers/product.test.ts | 2 +- src/projecteuler/helpers/sum.test.ts | 2 +- src/projecteuler/helpers/wordScore.test.ts | 2 +- src/projecteuler/lib/BNode.ts | 2 ++ src/projecteuler/problem0005.bruteforce-test.ts | 3 +-- src/projecteuler/problem0007.bruteforce-test.ts | 3 +-- src/projecteuler/problem0008.test.ts | 3 +-- src/projecteuler/problem0010.bruteforce-test.ts | 3 +-- src/projecteuler/problem0019.ts | 2 +- 32 files changed, 45 insertions(+), 50 deletions(-) diff --git a/src/hackerrank/implementation/bonAppetit.ts b/src/hackerrank/implementation/bonAppetit.ts index 88c7a329..6ae02e96 100644 --- a/src/hackerrank/implementation/bonAppetit.ts +++ b/src/hackerrank/implementation/bonAppetit.ts @@ -5,9 +5,10 @@ import { logger as console } from '../../logger'; export function bonAppetit(bill: number[], k: number, b: number): string { - const totalSum = bill.reduce((previousValue, currentValue) => { - return previousValue + currentValue; - }, 0); + const totalSum = bill.reduce( + (previousValue, currentValue) => previousValue + currentValue, + 0 + ); const billActual = (totalSum - bill[k]) / 2; const account = b - billActual; diff --git a/src/hackerrank/implementation/dayOfProgrammer.ts b/src/hackerrank/implementation/dayOfProgrammer.ts index 5fb2e5fc..713d8c20 100644 --- a/src/hackerrank/implementation/dayOfProgrammer.ts +++ b/src/hackerrank/implementation/dayOfProgrammer.ts @@ -24,12 +24,12 @@ export function dayOfProgrammer(year: number): string { leap = (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0 ? 1 : 0; } - copyOfdaysInMonthNumber[2] = copyOfdaysInMonthNumber[2] + leap; + copyOfdaysInMonthNumber[2] += leap; // transition year if (year === 1918) { const adjustDaysIn1918 = 13; - copyOfdaysInMonthNumber[2] = copyOfdaysInMonthNumber[2] - adjustDaysIn1918; + copyOfdaysInMonthNumber[2] -= adjustDaysIn1918; } let accumDays = 0; diff --git a/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck-balance.ts b/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck-balance.ts index 264e575f..fc27db62 100644 --- a/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck-balance.ts +++ b/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck-balance.ts @@ -4,6 +4,7 @@ class Contest { luck: number; + important: number; constructor(luck: number, important: number) { diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries.ts b/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries.ts index 9f562d4a..6ba8d1bb 100644 --- a/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries.ts +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries.ts @@ -4,6 +4,7 @@ class GropingFriends { _friendship: Record = {}; + _large_friendship: number = 0; constructor() { diff --git a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.ts b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.ts index efd8e9dc..7e7b9c52 100644 --- a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.ts +++ b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.ts @@ -8,7 +8,9 @@ const STEPS_LIMIT = 3; export class StepPerms { TOP_LIMIT = 1; + STEPS_LIMIT = 1; + CACHE: Record = {}; constructor(top_limit: number, steps_limit: number) { @@ -17,7 +19,7 @@ export class StepPerms { } step_perms_comput_with_cache(n_steps: number): number { - if (0 <= n_steps && n_steps <= 2) { + if (n_steps >= 0 && n_steps <= 2) { return n_steps; } diff --git a/src/hackerrank/lib/Node.ts b/src/hackerrank/lib/Node.ts index b8a84e33..063a4ef9 100644 --- a/src/hackerrank/lib/Node.ts +++ b/src/hackerrank/lib/Node.ts @@ -2,7 +2,9 @@ export class Node { left: Node | null; + right: Node | null; + data: T; constructor(data: T) { diff --git a/src/hackerrank/projecteuler/euler001.ts b/src/hackerrank/projecteuler/euler001.ts index d30370da..1cade6d0 100644 --- a/src/hackerrank/projecteuler/euler001.ts +++ b/src/hackerrank/projecteuler/euler001.ts @@ -18,7 +18,7 @@ export function sum_ap(n: number, d: number): number { // Function to find the sum of all multiples of a and b below n export function euler001(a: number, b: number, n: number): number { // Since, we need the sum of multiples less than N - n = n - 1; + n -= 1; const lcm = Math.floor((a * b) / gcd(a, b)); return sum_ap(n, a) + sum_ap(n, b) - sum_ap(n, lcm); diff --git a/src/hackerrank/warmup/compareTriplets.ts b/src/hackerrank/warmup/compareTriplets.ts index 5ff10428..4028ecc9 100644 --- a/src/hackerrank/warmup/compareTriplets.ts +++ b/src/hackerrank/warmup/compareTriplets.ts @@ -2,8 +2,6 @@ * @link Problem definition [[docs/hackerrank/warmup/compareTriplets.md]] */ -'use strict'; - export function compareTriplets(a: number[], b: number[]): number[] { const awards = [0, 0]; @@ -13,9 +11,9 @@ export function compareTriplets(a: number[], b: number[]): number[] { for (let i = 0; i < a.length; i++) { if (a[i] > b[i]) { - awards[0] = awards[0] + 1; + awards[0] += 1; } else if (a[i] < b[i]) { - awards[1] = awards[1] + 1; + awards[1] += 1; } } diff --git a/src/hackerrank/warmup/simpleArraySum.test.ts b/src/hackerrank/warmup/simpleArraySum.test.ts index 6f225e56..8e7a4386 100644 --- a/src/hackerrank/warmup/simpleArraySum.test.ts +++ b/src/hackerrank/warmup/simpleArraySum.test.ts @@ -1,9 +1,8 @@ +import { describe, expect, it } from '@jest/globals'; import { logger as console } from '../../logger'; import { simpleArraySum } from './simpleArraySum'; -import { describe, expect, it } from '@jest/globals'; - describe('problem simpleArraySum', () => { it('problem simpleArraySum Test case 0', () => { expect.assertions(1); diff --git a/src/hackerrank/warmup/simpleArraySum.ts b/src/hackerrank/warmup/simpleArraySum.ts index 66d6230c..48dee9ce 100644 --- a/src/hackerrank/warmup/simpleArraySum.ts +++ b/src/hackerrank/warmup/simpleArraySum.ts @@ -2,8 +2,6 @@ * @link Problem definition [[docs/hackerrank/warmup/simpleArraySum.md]] */ -'use strict'; - export function simpleArraySum(ar: number[]): number { let acum = 0; diff --git a/src/hackerrank/warmup/solveMeFirst.ts b/src/hackerrank/warmup/solveMeFirst.ts index b2f8a2f8..b14262dc 100644 --- a/src/hackerrank/warmup/solveMeFirst.ts +++ b/src/hackerrank/warmup/solveMeFirst.ts @@ -2,8 +2,6 @@ * @link Problem definition [[docs/hackerrank/warmup/solveMeFirst.md]] */ -'use strict'; - export function solveMeFirst(inputLines: string[]): number { let result = 0; diff --git a/src/hackerrank/warmup/timeConversion.test.ts b/src/hackerrank/warmup/timeConversion.test.ts index 2b4728df..58366041 100644 --- a/src/hackerrank/warmup/timeConversion.test.ts +++ b/src/hackerrank/warmup/timeConversion.test.ts @@ -1,9 +1,8 @@ +import { describe, expect, it } from '@jest/globals'; import { logger as console } from '../../logger'; import { timeConversion } from './timeConversion'; -import { describe, expect, it } from '@jest/globals'; - describe('timeConversion', () => { it('timeConversion example', () => { expect.assertions(2); diff --git a/src/projecteuler/helpers/bigNumbers.test.ts b/src/projecteuler/helpers/bigNumbers.test.ts index b38e1a6b..7387935d 100644 --- a/src/projecteuler/helpers/bigNumbers.test.ts +++ b/src/projecteuler/helpers/bigNumbers.test.ts @@ -8,7 +8,7 @@ import { bigSum, bigSumMany, bigPower -} from './'; +} from '.'; describe('bigNumber operations', () => { it('bigNum examples', () => { diff --git a/src/projecteuler/helpers/bigNumbers.ts b/src/projecteuler/helpers/bigNumbers.ts index 3ac7df9e..3e344c68 100644 --- a/src/projecteuler/helpers/bigNumbers.ts +++ b/src/projecteuler/helpers/bigNumbers.ts @@ -9,9 +9,8 @@ export const bigNum = (strNumber: string, base = 10): number[] => { return result; }; -export const bigNumToString = (number: number[]): string => { - return number.reduce((a, b) => `${a}${b}`, ''); -}; +export const bigNumToString = (number: number[]): string => + number.reduce((a, b) => `${a}${b}`, ''); export const bigSum = (strNumberA: string, strNumberB: string): string => { const result = []; diff --git a/src/projecteuler/helpers/collatz.test.ts b/src/projecteuler/helpers/collatz.test.ts index 5e01ef7d..b2ef4090 100644 --- a/src/projecteuler/helpers/collatz.test.ts +++ b/src/projecteuler/helpers/collatz.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from '@jest/globals'; -import { collatz } from './'; +import { collatz } from '.'; // 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 diff --git a/src/projecteuler/helpers/divisors.test.ts b/src/projecteuler/helpers/divisors.test.ts index d6a02c96..1f427d00 100644 --- a/src/projecteuler/helpers/divisors.test.ts +++ b/src/projecteuler/helpers/divisors.test.ts @@ -8,7 +8,7 @@ import { primeFactors, properDivisors, ___DIVISORS_ABUNDANCE___ -} from './'; +} from '.'; describe('divisors of a number', () => { it('divisors of one', () => { diff --git a/src/projecteuler/helpers/divisors.ts b/src/projecteuler/helpers/divisors.ts index 4a1d76a2..2215783c 100644 --- a/src/projecteuler/helpers/divisors.ts +++ b/src/projecteuler/helpers/divisors.ts @@ -1,5 +1,5 @@ import { logger as console } from '../../logger'; -import { sum } from './'; +import { sum } from '.'; export const divisors = (target: number): number[] => { let top = Math.abs(target); @@ -74,8 +74,8 @@ export const nextPrimeFactor = (_target: number): PrimeFactor => { } return { - factor: factor, - carry: carry, + factor, + carry, cycles: i - init }; }; @@ -103,12 +103,11 @@ export const primeFactors = (target: number): PrimeFactors => { factor = partial.carry; } - return { factors: factors, cycles: cycles }; + return { factors, cycles }; }; -export const isPrime = (target: number): boolean => { - return target != 1 && target === nextPrimeFactor(target).factor; -}; +export const isPrime = (target: number): boolean => + target != 1 && target === nextPrimeFactor(target).factor; export enum ___DIVISORS_ABUNDANCE___ { DIVISORS_ABUNDANT = 'abundant', diff --git a/src/projecteuler/helpers/isPalindrome.test.ts b/src/projecteuler/helpers/isPalindrome.test.ts index 1affb7a8..7005d01a 100644 --- a/src/projecteuler/helpers/isPalindrome.test.ts +++ b/src/projecteuler/helpers/isPalindrome.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from '@jest/globals'; -import { isPalindrome } from './'; +import { isPalindrome } from '.'; describe('number is Palindrome', () => { it('some numbers are palindrome', () => { diff --git a/src/projecteuler/helpers/matrix.test.ts b/src/projecteuler/helpers/matrix.test.ts index cedb8cd1..12718001 100644 --- a/src/projecteuler/helpers/matrix.test.ts +++ b/src/projecteuler/helpers/matrix.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from '@jest/globals'; -import { matrix } from './'; +import { matrix } from '.'; describe('matrix generator', () => { it('matrix 3 × 3 with initial value of 1', () => { diff --git a/src/projecteuler/helpers/matrix.ts b/src/projecteuler/helpers/matrix.ts index f1da6e28..974b0171 100644 --- a/src/projecteuler/helpers/matrix.ts +++ b/src/projecteuler/helpers/matrix.ts @@ -1,4 +1,4 @@ -import { nullable } from './'; +import { nullable } from '.'; export const matrix = ( m: number, diff --git a/src/projecteuler/helpers/minmax.test.ts b/src/projecteuler/helpers/minmax.test.ts index 4503c98c..f1304f5a 100644 --- a/src/projecteuler/helpers/minmax.test.ts +++ b/src/projecteuler/helpers/minmax.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from '@jest/globals'; -import { minimum, maximum } from './'; +import { minimum, maximum } from '.'; describe('maximum and minimum', () => { it('minimum', () => { diff --git a/src/projecteuler/helpers/numberToWord.test.ts b/src/projecteuler/helpers/numberToWord.test.ts index 44897228..5f1f3200 100644 --- a/src/projecteuler/helpers/numberToWord.test.ts +++ b/src/projecteuler/helpers/numberToWord.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from '@jest/globals'; -import { numberToWord } from './'; +import { numberToWord } from '.'; describe('transform numbers to word representation in british english', () => { it('transform numbers to word, common cases up to 2 digits', () => { diff --git a/src/projecteuler/helpers/numberToWord.ts b/src/projecteuler/helpers/numberToWord.ts index 88fb0709..59806622 100644 --- a/src/projecteuler/helpers/numberToWord.ts +++ b/src/projecteuler/helpers/numberToWord.ts @@ -1,4 +1,4 @@ -import { nullable } from './'; +import { nullable } from '.'; import { bigNum } from './bigNumbers'; const _CENTS_ = 'hundred'; diff --git a/src/projecteuler/helpers/product.test.ts b/src/projecteuler/helpers/product.test.ts index f172f43f..3f52197d 100644 --- a/src/projecteuler/helpers/product.test.ts +++ b/src/projecteuler/helpers/product.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from '@jest/globals'; -import { product } from './'; +import { product } from '.'; describe('product of all numbers in array', () => { it('product of some positive, negative or zero integers', () => { diff --git a/src/projecteuler/helpers/sum.test.ts b/src/projecteuler/helpers/sum.test.ts index 3d719c2f..0feb4777 100644 --- a/src/projecteuler/helpers/sum.test.ts +++ b/src/projecteuler/helpers/sum.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from '@jest/globals'; -import { sum } from './'; +import { sum } from '.'; describe('sum all numbers in array', () => { it('sum of some consecutives positive integers', () => { diff --git a/src/projecteuler/helpers/wordScore.test.ts b/src/projecteuler/helpers/wordScore.test.ts index 0a072e59..a451a548 100644 --- a/src/projecteuler/helpers/wordScore.test.ts +++ b/src/projecteuler/helpers/wordScore.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from '@jest/globals'; -import { wordScore } from './'; +import { wordScore } from '.'; describe('wordScore', () => { it('score of a word', () => { diff --git a/src/projecteuler/lib/BNode.ts b/src/projecteuler/lib/BNode.ts index d35b8038..5753f4a7 100644 --- a/src/projecteuler/lib/BNode.ts +++ b/src/projecteuler/lib/BNode.ts @@ -2,7 +2,9 @@ import { nullable } from '../helpers'; export default class BNode { value: nullable; + l: nullable>; + r: nullable>; constructor( diff --git a/src/projecteuler/problem0005.bruteforce-test.ts b/src/projecteuler/problem0005.bruteforce-test.ts index 35c6b495..575d92b0 100644 --- a/src/projecteuler/problem0005.bruteforce-test.ts +++ b/src/projecteuler/problem0005.bruteforce-test.ts @@ -1,9 +1,8 @@ +import { describe, expect, it } from '@jest/globals'; import { logger as console } from '../logger'; import { problem0005Simple } from './problem0005-simple'; -import { describe, expect, it } from '@jest/globals'; - describe('problem 0005 simple', () => { it('problem 0005 simple solution found by BRUTE FORCE FULL', async () => { expect.assertions(1); diff --git a/src/projecteuler/problem0007.bruteforce-test.ts b/src/projecteuler/problem0007.bruteforce-test.ts index 154fdec1..365e47d8 100644 --- a/src/projecteuler/problem0007.bruteforce-test.ts +++ b/src/projecteuler/problem0007.bruteforce-test.ts @@ -2,12 +2,11 @@ /** * @link Problem definition [[docs/projecteuler/problem0007.md]] */ +import { describe, expect, it } from '@jest/globals'; import { logger as console } from '../logger'; import { problem0007 } from './problem0007'; -import { describe, expect, it } from '@jest/globals'; - describe('problem 0007 BRUTEFORCE', () => { it('problem 0007 BRUTEFORCE large', () => { expect.assertions(1); diff --git a/src/projecteuler/problem0008.test.ts b/src/projecteuler/problem0008.test.ts index 05328ed1..3f9a4685 100644 --- a/src/projecteuler/problem0008.test.ts +++ b/src/projecteuler/problem0008.test.ts @@ -1,9 +1,8 @@ +import { describe, expect, it } from '@jest/globals'; import { logger as console } from '../logger'; import { problem0008 } from './problem0008'; -import { describe, expect, it } from '@jest/globals'; - describe('problem 0008', () => { it('problem 0008 solution found', () => { expect.assertions(1); diff --git a/src/projecteuler/problem0010.bruteforce-test.ts b/src/projecteuler/problem0010.bruteforce-test.ts index e4c3d984..e377b01a 100644 --- a/src/projecteuler/problem0010.bruteforce-test.ts +++ b/src/projecteuler/problem0010.bruteforce-test.ts @@ -1,11 +1,10 @@ /* istanbul ignore file */ +import { describe, expect, it } from '@jest/globals'; import { logger as console } from '../logger'; import { problem0010 } from './problem0010'; -import { describe, expect, it } from '@jest/globals'; - describe('problem 0010', () => { it('problem 0010 solution found BRUTE FORCE', () => { expect.assertions(1); diff --git a/src/projecteuler/problem0019.ts b/src/projecteuler/problem0019.ts index bfcbdc66..a47bb63b 100644 --- a/src/projecteuler/problem0019.ts +++ b/src/projecteuler/problem0019.ts @@ -16,7 +16,7 @@ export function problem0019( for (let y = 1900; y <= _untilYear; y++) { const leap = (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0 ? 1 : 0; - daysInMonth['FEBRUARY'] = 28 + leap; + daysInMonth.FEBRUARY = 28 + leap; Object.entries(daysInMonth).forEach(([month, days], index) => { console.debug(`Month(${index}): ${month} | days: ${days}`); From 8164eee394f70b0ef722d7a0631b9b4a803604ec Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Thu, 22 Aug 2024 16:14:58 -0400 Subject: [PATCH 4/6] [REFACTOR] ESLint manual fixes --- .../implementation/breakingRecords.ts | 2 +- src/hackerrank/implementation/kangaroo.ts | 4 +- .../implementation/migratoryBirds.ts | 4 +- .../minimumAbsoluteDifference.ts | 2 +- src/hackerrank/implementation/sockMerchant.ts | 6 +- .../arrays/cruch_bruteforce.test.ts | 2 +- .../arrays/cruch_bruteforce.ts | 8 +- .../arrays/cruch_optimized.test.ts | 2 +- .../arrays/cruch_optimized.ts | 16 +-- .../arrays/ctci_array_left_rotation.ts | 16 +-- .../arrays/minimum_swaps_2.ts | 12 +- .../count_triplets_1_bruteforce.ts | 2 +- .../count_triplets_1_optmized.ts | 16 +-- .../frequency_queries_bruteforce.ts | 10 +- .../sherlock_and_anagrams.ts | 23 ++-- .../dynamic_programming/max_array_sum.ts | 16 +-- .../greedy_algorithms/angry_children.ts | 2 + .../greedy_algorithms/greedy_florist.ts | 4 +- ...minimum_absolute_difference_in_an_array.ts | 12 +- .../miscellaneous/flipping-bits.test.ts | 4 +- .../miscellaneous/flipping-bits.ts | 16 +-- .../miscellaneous/friend_circle_queries.ts | 26 ++--- .../ctci_fibonacci_numbers.ts | 4 +- .../ctci_recursive_staircase.ts | 18 +-- .../recursive_digit_sum.ts | 8 +- .../search/ctci_ice_cream_parlor.ts | 4 +- .../ctci_ice_cream_parlor_bruteforce.test.ts | 6 +- .../ctci_ice_cream_parlor_bruteforce.ts | 14 ++- .../search/ctci_ice_cream_parlor_optimized.ts | 16 ++- .../search/swap_nodes_algo.big.test.ts | 14 +-- .../search/swap_nodes_algo.test.ts | 30 ++--- .../search/swap_nodes_algo.ts | 105 +++++++++--------- src/hackerrank/projecteuler/euler001.ts | 12 +- src/hackerrank/warmup/birthdayCakeCandles.ts | 2 +- src/hackerrank/warmup/compareTriplets.ts | 2 + src/hackerrank/warmup/miniMaxSum.ts | 2 +- src/hackerrank/warmup/simpleArraySum.ts | 2 + src/hackerrank/warmup/solveMeFirst.ts | 6 +- src/hello_world.test.ts | 2 +- src/hello_world.ts | 2 + src/projecteuler/helpers/divisors.ts | 10 +- src/projecteuler/helpers/index.ts | 4 +- src/projecteuler/helpers/matrix.ts | 2 +- src/projecteuler/helpers/nullable.ts | 3 + src/projecteuler/helpers/numberToWord.ts | 2 +- src/projecteuler/problem0016-alt.ts | 4 +- 46 files changed, 256 insertions(+), 223 deletions(-) create mode 100644 src/projecteuler/helpers/nullable.ts diff --git a/src/hackerrank/implementation/breakingRecords.ts b/src/hackerrank/implementation/breakingRecords.ts index 4cb7ae86..0db44d79 100644 --- a/src/hackerrank/implementation/breakingRecords.ts +++ b/src/hackerrank/implementation/breakingRecords.ts @@ -3,7 +3,7 @@ */ export function breakingRecords(scores: number[]): number[] { - if (scores.length == 0) { + if (scores.length === 0) { throw new Error('Empty input'); } diff --git a/src/hackerrank/implementation/kangaroo.ts b/src/hackerrank/implementation/kangaroo.ts index 857a84e1..85f9a0db 100644 --- a/src/hackerrank/implementation/kangaroo.ts +++ b/src/hackerrank/implementation/kangaroo.ts @@ -8,8 +8,8 @@ export function kangaroo( x2: number, v2: number ): string { - if (v1 == v2) { - if (x1 != x2) return 'NO'; + if (v1 === v2) { + if (x1 !== x2) return 'NO'; return 'YES'; } diff --git a/src/hackerrank/implementation/migratoryBirds.ts b/src/hackerrank/implementation/migratoryBirds.ts index 87c99270..212b9161 100644 --- a/src/hackerrank/implementation/migratoryBirds.ts +++ b/src/hackerrank/implementation/migratoryBirds.ts @@ -9,7 +9,7 @@ interface Birds { } export function migratoryBirds(arr: number[]): number { - if (arr.length == 0) { + if (arr.length === 0) { throw new Error('Empty input'); } @@ -28,7 +28,7 @@ export function migratoryBirds(arr: number[]): number { console.debug(`bird = ${bird} ~> map[bird] = ${map[bird]}`); console.debug(`max = ${max} ~> map[max] = ${map[max]}`); - if (map[bird] > map[max] || (map[bird] == map[max] && bird < max)) + if (map[bird] > map[max] || (map[bird] === map[max] && bird < max)) max = bird; } diff --git a/src/hackerrank/implementation/minimumAbsoluteDifference.ts b/src/hackerrank/implementation/minimumAbsoluteDifference.ts index 2f0d53ee..289ef5d6 100644 --- a/src/hackerrank/implementation/minimumAbsoluteDifference.ts +++ b/src/hackerrank/implementation/minimumAbsoluteDifference.ts @@ -5,7 +5,7 @@ import { logger as console } from '../../logger'; export function minimumAbsoluteDifference(arr: number[]): number { - if (arr.length == 0) { + if (arr.length === 0) { throw new Error('Empty input'); } diff --git a/src/hackerrank/implementation/sockMerchant.ts b/src/hackerrank/implementation/sockMerchant.ts index 187a844e..a00c8b37 100644 --- a/src/hackerrank/implementation/sockMerchant.ts +++ b/src/hackerrank/implementation/sockMerchant.ts @@ -19,10 +19,10 @@ export function sockMerchant(n: number, ar: number[]): number { console.debug(matches); - for (const k in matches) { - console.debug(matches[k]); + for (const match of Object.values(matches)) { + console.debug(match); - result += Math.floor(matches[k] / 2); + result += Math.floor(match / 2); } return result; diff --git a/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce.test.ts b/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce.test.ts index 7ea898de..b38ea7aa 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce.test.ts +++ b/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from '@jest/globals'; import { logger as console } from '../../../logger'; -import { default as TEST_CASES } from './cruch_testcases_test.json'; +import TEST_CASES from './cruch_testcases_test.json'; import { arrayManipulation } from './cruch_bruteforce'; diff --git a/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce.ts b/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce.ts index 2b3f9444..db0478b9 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce.ts +++ b/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce.ts @@ -12,11 +12,11 @@ export function arrayManipulation(n: number, queries: number[][]): number { let maximum = 0; queries.forEach((query) => { - const [a_start, b_end, k_value] = query; + const [aStart, bEnd, kValue] = query; console.debug(`start -> ${result}`); - for (let i = a_start; i <= b_end; i++) { - result[i] += k_value; + for (let i = aStart; i <= bEnd; i++) { + result[i] += kValue; console.debug(`result -> ${result}`); } }); @@ -27,3 +27,5 @@ export function arrayManipulation(n: number, queries: number[][]): number { return maximum; } + +export default { arrayManipulation }; diff --git a/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized.test.ts b/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized.test.ts index 80e4da34..79d0854a 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized.test.ts +++ b/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from '@jest/globals'; import { logger as console } from '../../../logger'; -import { default as TEST_CASES } from './cruch_testcases_test.json'; +import TEST_CASES from './cruch_testcases_test.json'; import { arrayManipulation } from './cruch_optimized'; diff --git a/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized.ts b/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized.ts index 77fc622a..a95f77db 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized.ts +++ b/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized.ts @@ -5,25 +5,27 @@ export function arrayManipulation(n: number, queries: number[][]): number { // why adding 2? // first slot to adjust 1-based index and - // last slot for storing accum_sum result + // last slot for storing accumSum result const LENGTH = n + 2; const INITIAL_VALUE = 0; const result = Array(LENGTH).fill(INITIAL_VALUE); let maximum = 0; queries.forEach((query) => { - const [a_start, b_end, k_value] = query; + const [aStart, bEnd, kValue] = query; - result[a_start] += k_value; - result[b_end + 1] -= k_value; + result[aStart] += kValue; + result[bEnd + 1] -= kValue; }); - let accum_sum = 0; + let accumSum = 0; result.forEach((value) => { - accum_sum += value; - maximum = Math.max(maximum, accum_sum); + accumSum += value; + maximum = Math.max(maximum, accumSum); }); return maximum; } + +export default { arrayManipulation }; diff --git a/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation.ts b/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation.ts index 5befbdd5..b60de67e 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation.ts +++ b/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation.ts @@ -2,19 +2,19 @@ * @link Problem definition [[docs/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation.md]] */ -export function rotLeftOne(a_numbers: number[]): number[] { - const first = a_numbers.shift(); - if (first != undefined) { - a_numbers.push(first); +export function rotLeftOne(aNumbers: number[]): number[] { + const first = aNumbers.shift(); + if (first !== undefined) { + aNumbers.push(first); } - return a_numbers; + return aNumbers; } -export function rotLeft(a_numbers: number[], d_rotations: number): number[] { - let output = [...a_numbers]; +export function rotLeft(aNumbers: number[], dRotations: number): number[] { + let output = [...aNumbers]; - for (let i = 0; i < d_rotations; i++) { + for (let i = 0; i < dRotations; i++) { output = rotLeftOne(output); } diff --git a/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2.ts b/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2.ts index 12c92022..81f3113c 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2.ts +++ b/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2.ts @@ -3,18 +3,18 @@ */ export function minimumSwaps(arr: number[]): number { - const indexed_group = arr.map((x) => x - 1); + const indexedGroup = arr.map((x) => x - 1); let swaps = 0; let index = 0; - const size = indexed_group.length; + const size = indexedGroup.length; while (index < size) { - if (indexed_group[index] == index) { + if (indexedGroup[index] === index) { index += 1; } else { - const temp = indexed_group[index]; - indexed_group[index] = indexed_group[temp]; - indexed_group[temp] = temp; + const temp = indexedGroup[index]; + indexedGroup[index] = indexedGroup[temp]; + indexedGroup[temp] = temp; swaps += 1; } } diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1_bruteforce.ts b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1_bruteforce.ts index a7c3694a..ffc33a2c 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1_bruteforce.ts +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1_bruteforce.ts @@ -13,7 +13,7 @@ export function countTriplets(arr: number[], ratio: number): number { for (let k = j + 1; k < size; k++) { console.debug(`${arr[i]}, ${arr[j]}, ${arr[k]}`); - if (ratio * arr[i] == arr[j] && ratio * arr[j] == arr[k]) { + if (ratio * arr[i] === arr[j] && ratio * arr[j] === arr[k]) { counter += 1; } } diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1_optmized.ts b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1_optmized.ts index 4ac7a639..277a80aa 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1_optmized.ts +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1_optmized.ts @@ -6,7 +6,7 @@ export function countTriplets(arr: number[], ratio: number): number { let triplets = 0; - const a_counter: Record = arr.reduce( + const aCounter: Record = arr.reduce( (accumulator: Record, entry: number) => { if (entry in accumulator) { accumulator[entry] += 1; @@ -18,20 +18,20 @@ export function countTriplets(arr: number[], ratio: number): number { {} ); - const b_counter: Record = {}; + const bCounter: Record = {}; arr.forEach((x) => { const j = Math.floor(x / ratio); const k = x * ratio; - a_counter[x] -= 1; - if (b_counter[j] && a_counter[k] && x % ratio == 0) { - triplets += b_counter[j] * a_counter[k]; + aCounter[x] -= 1; + if (bCounter[j] && aCounter[k] && x % ratio === 0) { + triplets += bCounter[j] * aCounter[k]; } - if (x in b_counter) { - b_counter[x] += 1; + if (x in bCounter) { + bCounter[x] += 1; } else { - b_counter[x] = 1; + bCounter[x] = 1; } }); diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries_bruteforce.ts b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries_bruteforce.ts index 05b67778..fd65d58b 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries_bruteforce.ts +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries_bruteforce.ts @@ -6,7 +6,7 @@ // Complete the freqQuery function below. export function freqQuery(queries: number[][]): number[] { const result: number[] = []; - const data_map: Record = {}; + const dataMap: Record = {}; const __INITIAL__ = 0; const __INSERT__ = 1; @@ -19,17 +19,17 @@ export function freqQuery(queries: number[][]): number[] { queries.forEach((query) => { const [operation, data] = query; - const current = data_map?.[data] ?? __INITIAL__; + const current = dataMap?.[data] ?? __INITIAL__; switch (operation) { case __INSERT__: - data_map[data] = current + 1; + dataMap[data] = current + 1; break; case __DELETE__: - data_map[data] = Math.max(0, current - 1); + dataMap[data] = Math.max(0, current - 1); break; case __SELECT__: { - const uniqueDatavalues = new Set(Object.values(data_map)); + const uniqueDatavalues = new Set(Object.values(dataMap)); if (uniqueDatavalues.has(data)) { result.push(__FOUND__); } else { diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.ts b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.ts index ff0cca56..94156c9f 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.ts +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.ts @@ -24,42 +24,41 @@ export function sherlockAndAnagrams(s: string): number { // Add substrings to a candidate list. // two strings are anagrams if sorted strings are the same. - const anagram_candidate = substr + const anagramCandidate = substr .split('') .sort((a: string, b: string) => a.localeCompare(b)) .join(''); - if (anagram_candidate in candidates) { - candidates[anagram_candidate].push(substr); + if (anagramCandidate in candidates) { + candidates[anagramCandidate].push(substr); } else { - candidates[anagram_candidate] = [substr]; + candidates[anagramCandidate] = [substr]; } } } let total: bigint = BigInt(0); - let q_candidates = 0; + let qCandidates = 0; // Final Anagram list for (const word of Object.keys(candidates)) { - const quantity_of_anagrams = candidates[word].length; + const quantityOfAnagrams = candidates[word].length; const k = 2; - if (quantity_of_anagrams <= 1) { + if (quantityOfAnagrams <= 1) { delete candidates[word]; } else { // Binomial coefficient: https://en.wikipedia.org/wiki/Binomial_coefficient - q_candidates += quantity_of_anagrams; + qCandidates += quantityOfAnagrams; const count = - extraLongFactorials(quantity_of_anagrams) / - (extraLongFactorials(k) * - extraLongFactorials(quantity_of_anagrams - k)); + extraLongFactorials(quantityOfAnagrams) / + (extraLongFactorials(k) * extraLongFactorials(quantityOfAnagrams - k)); total += count; console.debug(`'Partial anagrams of ${word}: ${count}`); } } console.debug( - `'sherlockAndAnagrams(${s}) Filtered # candidates: ${q_candidates}` + `'sherlockAndAnagrams(${s}) Filtered # candidates: ${qCandidates}` ); console.debug(`'sherlockAndAnagrams(${s}) # anagrams: ${total}`); diff --git a/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum.ts b/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum.ts index 1be45324..06aaafde 100644 --- a/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum.ts +++ b/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum.ts @@ -9,26 +9,26 @@ const bigIntMax = (...args: bigint[]): bigint => export function maxSubsetSum(arr: number[]): number { const arrCopy: bigint[] = arr.map((x: number): bigint => BigInt(x)); - if (arrCopy.length == 0) { + if (arrCopy.length === 0) { return 0; } const total = arrCopy.length; - if (total == 1) { + if (total === 1) { return Number(arrCopy[0]); } - let t_max = bigIntMax(arrCopy[0], arrCopy[1]); - arrCopy[1] = t_max; + let tMax = bigIntMax(arrCopy[0], arrCopy[1]); + arrCopy[1] = tMax; for (let i = 2; i < total; i++) { - t_max = bigIntMax(arrCopy[i - 2] + arrCopy[i], t_max); - t_max = bigIntMax(arrCopy[i], t_max); - arrCopy[i] = t_max; + tMax = bigIntMax(arrCopy[i - 2] + arrCopy[i], tMax); + tMax = bigIntMax(arrCopy[i], tMax); + arrCopy[i] = tMax; } - return Number(t_max); + return Number(tMax); } export default { maxSubsetSum }; diff --git a/src/hackerrank/interview_preparation_kit/greedy_algorithms/angry_children.ts b/src/hackerrank/interview_preparation_kit/greedy_algorithms/angry_children.ts index 2a53f148..58d89667 100644 --- a/src/hackerrank/interview_preparation_kit/greedy_algorithms/angry_children.ts +++ b/src/hackerrank/interview_preparation_kit/greedy_algorithms/angry_children.ts @@ -17,3 +17,5 @@ export function maxMin(k: number, arr: number[]): number { return result; } + +export default { maxMin }; diff --git a/src/hackerrank/interview_preparation_kit/greedy_algorithms/greedy_florist.ts b/src/hackerrank/interview_preparation_kit/greedy_algorithms/greedy_florist.ts index 10b0f188..7fe5d293 100644 --- a/src/hackerrank/interview_preparation_kit/greedy_algorithms/greedy_florist.ts +++ b/src/hackerrank/interview_preparation_kit/greedy_algorithms/greedy_florist.ts @@ -11,10 +11,10 @@ export function getMinimumCost(k: number, c: number[]): number { let total: number = 0; let i: number = 0; - flowers.forEach((flower_cost) => { + flowers.forEach((flowerCost) => { const position = Math.floor(i / k); - total += (position + 1) * flower_cost; + total += (position + 1) * flowerCost; i += 1; }); diff --git a/src/hackerrank/interview_preparation_kit/greedy_algorithms/minimum_absolute_difference_in_an_array.ts b/src/hackerrank/interview_preparation_kit/greedy_algorithms/minimum_absolute_difference_in_an_array.ts index fbacf827..bde87be0 100644 --- a/src/hackerrank/interview_preparation_kit/greedy_algorithms/minimum_absolute_difference_in_an_array.ts +++ b/src/hackerrank/interview_preparation_kit/greedy_algorithms/minimum_absolute_difference_in_an_array.ts @@ -3,17 +3,17 @@ */ export function minimumAbsoluteDifference(arr: number[]): number { - const sorted_nums = arr + const sortedNums = arr .map((x: number): number => x) .sort((a: number, b: number): number => b - a); - let result = Math.abs(sorted_nums[sorted_nums.length - 1] - sorted_nums[0]); + let result = Math.abs(sortedNums[sortedNums.length - 1] - sortedNums[0]); - for (let i = 0; i < sorted_nums.length - 1; i++) { - const a_value = sorted_nums[i]; - const b_value = sorted_nums[i + 1]; + for (let i = 0; i < sortedNums.length - 1; i++) { + const aValue = sortedNums[i]; + const bValue = sortedNums[i + 1]; - const diff = Math.abs(a_value - b_value); + const diff = Math.abs(aValue - bValue); result = Math.min(result, diff); } diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits.test.ts b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits.test.ts index 0999f6a3..c496ba34 100644 --- a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits.test.ts +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits.test.ts @@ -57,8 +57,8 @@ describe('flipping bits', () => { it('flipping bits test cases', () => { expect.assertions(8); - TEST_CASES.forEach((test_set) => { - test_set.tests.forEach((test) => { + TEST_CASES.forEach((testSet) => { + testSet.tests.forEach((test) => { const answer = flippingBits(test.input); console.debug(`flippingBits(${test.input}) solution found: ${answer}`); diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits.ts b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits.ts index 644467b3..7e3b9e25 100644 --- a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits.ts +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits.ts @@ -6,20 +6,20 @@ const __BINARY_BASE__ = 2; const __NUMBER_SIZE_IN_BITS__ = 32; export function flippingBits(n: number): number { - let n_binary_str = n.toString(__BINARY_BASE__); - n_binary_str = n_binary_str.padStart(__NUMBER_SIZE_IN_BITS__, '0'); + let nBinaryStr = n.toString(__BINARY_BASE__); + nBinaryStr = nBinaryStr.padStart(__NUMBER_SIZE_IN_BITS__, '0'); - let result_bin_str = ''; + let resultBinStr = ''; - n_binary_str.split('').forEach((bin_digit) => { - if (bin_digit == '1') { - result_bin_str += '0'; + nBinaryStr.split('').forEach((binDigit) => { + if (binDigit === '1') { + resultBinStr += '0'; } else { - result_bin_str += '1'; + resultBinStr += '1'; } }); - return parseInt(result_bin_str, __BINARY_BASE__); + return parseInt(resultBinStr, __BINARY_BASE__); } export default { flippingBits }; diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries.ts b/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries.ts index 6ba8d1bb..8c90ea5e 100644 --- a/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries.ts +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries.ts @@ -12,27 +12,27 @@ class GropingFriends { this._large_friendship = 0; } - add(point_a: number): void { - if (!this._friendship?.[point_a]) { - this._friendship[point_a] = -1; + add(pointA: number): void { + if (!this._friendship?.[pointA]) { + this._friendship[pointA] = -1; } } - find(point_a: number): number { - if (this._friendship[point_a] < 0) { - return point_a; + find(pointA: number): number { + if (this._friendship[pointA] < 0) { + return pointA; } - return this.find(this._friendship[point_a]); + return this.find(this._friendship[pointA]); } - unite(point_a: number, point_b: number): boolean { - this.add(point_a); - this.add(point_b); + unite(pointA: number, pointB: number): boolean { + this.add(pointA); + this.add(pointB); - let _a = this.find(point_a); - let _b = this.find(point_b); + let _a = this.find(pointA); + let _b = this.find(pointB); - if (_a == _b) { + if (_a === _b) { return false; } diff --git a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_fibonacci_numbers.ts b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_fibonacci_numbers.ts index e710de27..4b14fb17 100644 --- a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_fibonacci_numbers.ts +++ b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_fibonacci_numbers.ts @@ -3,10 +3,10 @@ */ export function fibonacci(n: number): number { - if (n == 0) { + if (n === 0) { return 0; } - if (n == 1) { + if (n === 1) { return 1; } diff --git a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.ts b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.ts index 7e7b9c52..dc72c2b6 100644 --- a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.ts +++ b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.ts @@ -13,21 +13,21 @@ export class StepPerms { CACHE: Record = {}; - constructor(top_limit: number, steps_limit: number) { - this.TOP_LIMIT = top_limit; - this.STEPS_LIMIT = steps_limit; + constructor(topLimit: number, stepsLimit: number) { + this.TOP_LIMIT = topLimit; + this.STEPS_LIMIT = stepsLimit; } - step_perms_comput_with_cache(n_steps: number): number { - if (n_steps >= 0 && n_steps <= 2) { - return n_steps; + step_perms_comput_with_cache(nSteps: number): number { + if (nSteps >= 0 && nSteps <= 2) { + return nSteps; } const keys = new Set(Object.keys(this.CACHE)); let result = 0; - for (let i = 1; i <= Math.min(this.STEPS_LIMIT, n_steps); i++) { - const searchKey = n_steps - i; + for (let i = 1; i <= Math.min(this.STEPS_LIMIT, nSteps); i++) { + const searchKey = nSteps - i; if (!keys.has(searchKey.toString())) { this.CACHE[searchKey] = this.step_perms_comput_with_cache(searchKey); } @@ -35,7 +35,7 @@ export class StepPerms { result += this.CACHE[searchKey]; } - return result + (n_steps <= this.STEPS_LIMIT ? 1 : 0); + return result + (nSteps <= this.STEPS_LIMIT ? 1 : 0); } } diff --git a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum.ts b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum.ts index d9cc2be8..78437690 100644 --- a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum.ts +++ b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum.ts @@ -2,14 +2,16 @@ * @link Problem definition [[docs/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive-digit-sum.md]] */ +const __RADIX__ = 10; + export function superDigitCompute(n: string): number { - if (n.length == 1) { - return parseInt(n); + if (n.length === 1) { + return parseInt(n, __RADIX__); } let partial = 0; for (const digit of n) { - partial += parseInt(digit); + partial += parseInt(digit, __RADIX__); } return superDigitCompute(`${partial}`); diff --git a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor.ts b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor.ts index 844684a4..2c34477d 100644 --- a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor.ts +++ b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor.ts @@ -2,6 +2,8 @@ * @link Problem definition [[docs/hackerrank/interview_preparation_kit/search/ctci-ice-cream-parlor.md]] */ +const __RADIX__ = 10; + export function whatFlavorsCompute( cost: number[], money: number @@ -9,7 +11,7 @@ export function whatFlavorsCompute( const cache: Record = {}; for (const [key, price] of Object.entries(cost)) { - const i = parseInt(key); + const i = parseInt(key, __RADIX__); const diff = money - price; if (Number.isInteger(cache?.[diff])) { diff --git a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce.test.ts b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce.test.ts index e6373d16..bf43914e 100644 --- a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce.test.ts +++ b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce.test.ts @@ -3,7 +3,7 @@ import { logger as console } from '../../../logger'; import { whatFlavors, - what_flavors_bruteforce_compute + whatFlavorsBruteforceCompute } from './ctci_ice_cream_parlor_bruteforce'; import TEST_CASES from './ctci_ice_cream_parlor.testcases.json'; import TEST_CASES_BORDER_CASES from './ctci_ice_cream_parlor.border_testcases.json'; @@ -14,7 +14,7 @@ describe('ctci_ice_cream_parlor_bruteforce', () => { TEST_CASES.forEach((testSet) => { testSet?.tests.forEach((test) => { - const answer = what_flavors_bruteforce_compute(test.costs, test.money); + const answer = whatFlavorsBruteforceCompute(test.costs, test.money); console.debug( `${testSet.title} ctci_ice_cream_parlor_bruteforce(${test.costs}, ${test.money}) solution found: ${answer}` @@ -32,7 +32,7 @@ describe('ctci_ice_cream_parlor_bruteforce', () => { TEST_CASES_BORDER_CASES.forEach((testSet) => { testSet?.tests.forEach((test) => { expect( - what_flavors_bruteforce_compute(test.costs, test.money) + whatFlavorsBruteforceCompute(test.costs, test.money) ).toStrictEqual(test.expected); expect(whatFlavors(test.costs, test.money)).toBeUndefined(); }); diff --git a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce.ts b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce.ts index 9cc2c8c3..9f732a86 100644 --- a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce.ts +++ b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce.ts @@ -2,18 +2,20 @@ * @link Problem definition [[docs/hackerrank/interview_preparation_kit/search/ctci-ice-cream-parlor.md]] */ -export function what_flavors_bruteforce_compute( +export function whatFlavorsBruteforceCompute( cost: number[], money: number ): number[] { - for (const _i in cost) { - const i: number = parseInt(_i); + const RADIX = 10; + + for (const key of Object.keys(cost)) { + const i: number = parseInt(key, RADIX); const x: number = cost[i]; const budget = money - x; for (let j = i + 1; j < cost.length; j++) { - if (budget - cost[j] == 0) { + if (budget - cost[j] === 0) { console.log(`${i + 1} ${j + 1}`); return [i + 1, j + 1]; } @@ -24,7 +26,7 @@ export function what_flavors_bruteforce_compute( } export function whatFlavors(cost: number[], money: number): void { - console.log(what_flavors_bruteforce_compute(cost, money)?.join(' ')); + console.log(whatFlavorsBruteforceCompute(cost, money)?.join(' ')); } -export default { what_flavors_bruteforce_compute, whatFlavors }; +export default { whatFlavorsBruteforceCompute, whatFlavors }; diff --git a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_optimized.ts b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_optimized.ts index 2488267e..0daa68bb 100644 --- a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_optimized.ts +++ b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_optimized.ts @@ -2,6 +2,8 @@ * @link Problem definition [[docs/hackerrank/interview_preparation_kit/search/ctci-ice-cream-parlor.md]] */ +const __RADIX__ = 10; + export function whatFlavorsCompute(cost: number[], money: number): number[] { let ans1: number | null = null; let ans2: number | null = null; @@ -12,17 +14,19 @@ export function whatFlavorsCompute(cost: number[], money: number): number[] { CACHE[price] = Number.isInteger(CACHE[price]) ? CACHE[price] + 1 : 1; } - for (const i in cost) { + for (const key of Object.keys(cost)) { + const i = parseInt(key, __RADIX__); + const v1 = cost[i]; const v2 = money - v1; - if (v1 != v2 && CACHE?.[v1] && CACHE?.[v2]) { + if (v1 !== v2 && CACHE?.[v1] && CACHE?.[v2]) { ans1 = v1; ans2 = v2; break; } - if (v1 == v2 && CACHE?.[v1] && CACHE[v1] > 1) { + if (v1 === v2 && CACHE?.[v1] && CACHE[v1] > 1) { ans1 = v1; ans2 = v1; break; @@ -30,10 +34,10 @@ export function whatFlavorsCompute(cost: number[], money: number): number[] { } const result: Set = new Set(); - for (const i in cost) { - const x: number = parseInt(i); + for (const key of Object.keys(cost)) { + const x = parseInt(key, __RADIX__); - if (cost[x] == ans1 || cost[x] == ans2) { + if (cost[x] === ans1 || cost[x] === ans2) { result.add(x + 1); } } diff --git a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.big.test.ts b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.big.test.ts index e3685a12..1515ab1d 100644 --- a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.big.test.ts +++ b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.big.test.ts @@ -1,18 +1,18 @@ import { describe, expect, it } from '@jest/globals'; import { Node } from '../../lib/Node'; -import { swapNodes, build_tree, flat_tree } from './swap_nodes_algo'; +import { swapNodes, buildTree, flatTree } from './swap_nodes_algo'; import BIG_TEST_CASES from './swap_nodes_algo.big.testcases.json'; describe('swap_nodes_algo', () => { - it('build_tree and plain test cases', () => { + it('buildTree and plain test cases', () => { expect.assertions(1); BIG_TEST_CASES.forEach((test) => { - const t_to_test: Node = build_tree(test.nodes); - const t_result: number[] = flat_tree(t_to_test); + const tToTest: Node = buildTree(test.nodes); + const tResult: number[] = flatTree(tToTest); - expect(t_result).toStrictEqual(test.flattened); + expect(tResult).toStrictEqual(test.flattened); }); }); @@ -20,9 +20,9 @@ describe('swap_nodes_algo', () => { expect.assertions(1); BIG_TEST_CASES.forEach((test) => { - const t_result: number[][] = swapNodes(test.nodes, test.queries); + const tResult: number[][] = swapNodes(test.nodes, test.queries); - expect(t_result).toStrictEqual(test.expected); + expect(tResult).toStrictEqual(test.expected); }); }); }); diff --git a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.test.ts b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.test.ts index 6e0c0914..77fb833d 100644 --- a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.test.ts +++ b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.test.ts @@ -1,39 +1,39 @@ import { describe, expect, it } from '@jest/globals'; -import { build_tree, flat_tree, swapNodes } from './swap_nodes_algo'; +import { buildTree, flatTree, swapNodes } from './swap_nodes_algo'; import TEST_CASES from './swap_nodes_algo.testcases.json'; describe('swap_nodes_algo', () => { - it('test_build_tree_empty', () => { + it('test_buildTree_empty', () => { expect.assertions(1); - const t_input: number[][] = []; - const t_to_test = build_tree(t_input); - const t_result = flat_tree(t_to_test); + const tInput: number[][] = []; + const tToTest = buildTree(tInput); + const tResult = flatTree(tToTest); const expected = [1]; - expect(t_result).toStrictEqual(expected); + expect(tResult).toStrictEqual(expected); }); it('test_build_malformed_tree', () => { expect.assertions(1); - const t_input: number[][] = [[], []]; - const t_to_test = build_tree(t_input); - const t_result = flat_tree(t_to_test); + const tInput: number[][] = [[], []]; + const tToTest = buildTree(tInput); + const tResult = flatTree(tToTest); const expected = [1]; - expect(t_result).toStrictEqual(expected); + expect(tResult).toStrictEqual(expected); }); it('build tree and flattened tree test cases', () => { expect.assertions(4); TEST_CASES.forEach((test) => { - const t_to_test = build_tree(test.nodes); - const t_result = flat_tree(t_to_test); + const tToTest = buildTree(test.nodes); + const tResult = flatTree(tToTest); - expect(t_result).toStrictEqual(test.flattened); + expect(tResult).toStrictEqual(test.flattened); }); }); @@ -41,9 +41,9 @@ describe('swap_nodes_algo', () => { expect.assertions(4); TEST_CASES.forEach((test) => { - const t_result: number[][] = swapNodes(test.nodes, test.queries); + const tResult: number[][] = swapNodes(test.nodes, test.queries); - expect(t_result).toStrictEqual(test.expected); + expect(tResult).toStrictEqual(test.expected); }); }); }); diff --git a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.ts b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.ts index 3ade8fae..80c8312f 100644 --- a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.ts +++ b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.ts @@ -9,8 +9,9 @@ import { Node } from '../../lib/Node'; export const __INITIAL_LEVEL__: number = 1; export const __ROOT_VALUE__: number = 1; export const __LEAF_VALUE__: number = -1; +const __RADIX__ = 10; -export function callback_collect_nodes( +export function callbackCollectNodes( root: Node | null | undefined, collect: Record[]>, level: number @@ -24,7 +25,7 @@ export function callback_collect_nodes( } } -export function callback_collect_flat( +export function callbackCollectFlat( root: Node | null | undefined, collect: Record[]>, level: number @@ -39,7 +40,7 @@ export function callback_collect_flat( } } -export function traverse_in_order_collector( +export function traverseInOrderCollector( root: Node | null | undefined, collect: Record[]>, level: number, @@ -50,52 +51,53 @@ export function traverse_in_order_collector( ) => void ): Record[]> { if (root?.left !== null) { - traverse_in_order_collector(root?.left, collect, level + 1, callbackFn); + traverseInOrderCollector(root?.left, collect, level + 1, callbackFn); } callbackFn(root, collect, level); if (root?.right !== null) { - traverse_in_order_collector(root?.right, collect, level + 1, callbackFn); + traverseInOrderCollector(root?.right, collect, level + 1, callbackFn); } return collect; } -export function build_tree(indexes: number[][]): Node { +export function buildTree(indexes: number[][]): Node { const indexesCopy: number[][] = [...indexes]; const root: Node = new Node(__ROOT_VALUE__); - let node_collector: Record[]> = {}; + let nodeCollector: Record[]> = {}; while (indexesCopy.length > 0) { - node_collector = {}; + nodeCollector = {}; - traverse_in_order_collector( + traverseInOrderCollector( root, - node_collector, + nodeCollector, __INITIAL_LEVEL__, - callback_collect_nodes + callbackCollectNodes ); - const last_level: number = parseInt( - Object.keys(node_collector) - .sort((a, b) => parseInt(b) - parseInt(a)) - .shift() as string + const lastLevel: number = parseInt( + Object.keys(nodeCollector) + .sort((a, b) => parseInt(b, __RADIX__) - parseInt(a, __RADIX__)) + .shift() as string, + __RADIX__ ); - const level_size = Math.min( + const levelSize = Math.min( indexesCopy.length, - node_collector[last_level]?.length + nodeCollector[lastLevel]?.length ); - for (let i = 0; i < level_size; i++) { - const current_node: Node = node_collector[last_level][i]; - const new_element: number[] = indexesCopy.shift() as Array; + for (let i = 0; i < levelSize; i++) { + const currentNode: Node = nodeCollector[lastLevel][i]; + const newElement: number[] = indexesCopy.shift() as Array; - if ((new_element?.[0] ?? __LEAF_VALUE__) != __LEAF_VALUE__) { - current_node.left = new Node(new_element[0]); + if ((newElement?.[0] ?? __LEAF_VALUE__) !== __LEAF_VALUE__) { + currentNode.left = new Node(newElement[0]); } - if ((new_element?.[1] ?? __LEAF_VALUE__) != __LEAF_VALUE__) { - current_node.right = new Node(new_element[1]); + if ((newElement?.[1] ?? __LEAF_VALUE__) !== __LEAF_VALUE__) { + currentNode.right = new Node(newElement[1]); } } } @@ -103,24 +105,25 @@ export function build_tree(indexes: number[][]): Node { return root; } -export function flat_tree(root: Node | null): number[] { - let node_collector: Record[]> = {}; +export function flatTree(root: Node | null): number[] { + let nodeCollector: Record[]> = {}; - node_collector = traverse_in_order_collector( + nodeCollector = traverseInOrderCollector( root, - node_collector, + nodeCollector, __INITIAL_LEVEL__, - callback_collect_flat + callbackCollectFlat ); - const last_level: number = parseInt( - Object.keys(node_collector) - .sort((a, b) => parseInt(b) - parseInt(a)) - .shift() as string + const lastLevel: number = parseInt( + Object.keys(nodeCollector) + .sort((a, b) => parseInt(b, __RADIX__) - parseInt(a, __RADIX__)) + .shift() as string, + __RADIX__ ); const output: number[] = []; - node_collector[last_level].forEach((node: Node) => { + nodeCollector[lastLevel].forEach((node: Node) => { output.push(node.data); }); @@ -128,39 +131,41 @@ export function flat_tree(root: Node | null): number[] { } export function swapNodes(indexes: number[][], queries: number[]): number[][] { - const tree: Node = build_tree(indexes); + const tree: Node = buildTree(indexes); const output: number[][] = []; - let node_collector: Record[]> = {}; + let nodeCollector: Record[]> = {}; - traverse_in_order_collector( + traverseInOrderCollector( tree, - node_collector, + nodeCollector, __INITIAL_LEVEL__, - callback_collect_nodes + callbackCollectNodes ); - node_collector = Object.fromEntries( - Object.entries(node_collector).sort(([a], [b]) => parseInt(a) - parseInt(b)) + nodeCollector = Object.fromEntries( + Object.entries(nodeCollector).sort( + ([a], [b]) => parseInt(a, __RADIX__) - parseInt(b, __RADIX__) + ) ); - let flattened_tree: number[] = flat_tree(tree); + let flattenedTree: number[] = flatTree(tree); - console.debug(`Plain tree: ${flattened_tree}`); + console.debug(`Plain tree: ${flattenedTree}`); - for (const query in queries) { - for (const [level, node_list] of Object.entries(node_collector)) { - const t_level: number = parseInt(level); + for (const query of queries) { + for (const [level, nodeList] of Object.entries(nodeCollector)) { + const tLevel: number = parseInt(level, __RADIX__); - if (t_level % queries[query] == 0) { - for (const node of node_list) { + if (tLevel % query === 0) { + for (const node of nodeList) { // swap branches [node.left, node.right] = [node.right, node.left]; } } } - flattened_tree = flat_tree(tree); - output.push(flattened_tree); + flattenedTree = flatTree(tree); + output.push(flattenedTree); } return output; diff --git a/src/hackerrank/projecteuler/euler001.ts b/src/hackerrank/projecteuler/euler001.ts index 1cade6d0..c5cbea0a 100644 --- a/src/hackerrank/projecteuler/euler001.ts +++ b/src/hackerrank/projecteuler/euler001.ts @@ -4,22 +4,22 @@ // Function to return gcd of a and b export function gcd(a: number, b: number): number { - if (a == 0) return b; + if (a === 0) return b; return gcd(b % a, a); } -export function sum_ap(n: number, d: number): number { +export function sumAp(n: number, d: number): number { // Number of terms - n = Math.floor(n / d); + const _n = Math.floor(n / d); - return Math.floor((n * (1 + n) * d) / 2); + return Math.floor((_n * (1 + _n) * d) / 2); } // Function to find the sum of all multiples of a and b below n export function euler001(a: number, b: number, n: number): number { // Since, we need the sum of multiples less than N - n -= 1; + const _n = n - 1; const lcm = Math.floor((a * b) / gcd(a, b)); - return sum_ap(n, a) + sum_ap(n, b) - sum_ap(n, lcm); + return sumAp(_n, a) + sumAp(_n, b) - sumAp(_n, lcm); } diff --git a/src/hackerrank/warmup/birthdayCakeCandles.ts b/src/hackerrank/warmup/birthdayCakeCandles.ts index 9c3b32b1..d91daf2e 100644 --- a/src/hackerrank/warmup/birthdayCakeCandles.ts +++ b/src/hackerrank/warmup/birthdayCakeCandles.ts @@ -3,7 +3,7 @@ */ export function birthdayCakeCandles(ar: number[]): number { - if (ar.length == 0) { + if (ar.length === 0) { throw new Error('Empty input'); } diff --git a/src/hackerrank/warmup/compareTriplets.ts b/src/hackerrank/warmup/compareTriplets.ts index 4028ecc9..ac6df4de 100644 --- a/src/hackerrank/warmup/compareTriplets.ts +++ b/src/hackerrank/warmup/compareTriplets.ts @@ -19,3 +19,5 @@ export function compareTriplets(a: number[], b: number[]): number[] { return awards; } + +export default { compareTriplets }; diff --git a/src/hackerrank/warmup/miniMaxSum.ts b/src/hackerrank/warmup/miniMaxSum.ts index a4cd6773..f5be1eff 100644 --- a/src/hackerrank/warmup/miniMaxSum.ts +++ b/src/hackerrank/warmup/miniMaxSum.ts @@ -3,7 +3,7 @@ */ export function miniMaxSum(arr: number[]): string { - if (arr.length == 0) { + if (arr.length === 0) { throw new Error('Empty input'); } diff --git a/src/hackerrank/warmup/simpleArraySum.ts b/src/hackerrank/warmup/simpleArraySum.ts index 48dee9ce..311e57a3 100644 --- a/src/hackerrank/warmup/simpleArraySum.ts +++ b/src/hackerrank/warmup/simpleArraySum.ts @@ -11,3 +11,5 @@ export function simpleArraySum(ar: number[]): number { return acum; } + +export default { simpleArraySum }; diff --git a/src/hackerrank/warmup/solveMeFirst.ts b/src/hackerrank/warmup/solveMeFirst.ts index b14262dc..91be3553 100644 --- a/src/hackerrank/warmup/solveMeFirst.ts +++ b/src/hackerrank/warmup/solveMeFirst.ts @@ -2,12 +2,16 @@ * @link Problem definition [[docs/hackerrank/warmup/solveMeFirst.md]] */ +const __RADIX__ = 10; + export function solveMeFirst(inputLines: string[]): number { let result = 0; inputLines.forEach((v) => { - result += parseInt(v); + result += parseInt(v, __RADIX__); }); return result; } + +export default { solveMeFirst }; diff --git a/src/hello_world.test.ts b/src/hello_world.test.ts index 7ad0edbe..0e204bf8 100644 --- a/src/hello_world.test.ts +++ b/src/hello_world.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from '@jest/globals'; -import { hello } from '../src/hello_world'; +import { hello } from './hello_world'; describe('test hello', () => { it('should return hello world', () => { diff --git a/src/hello_world.ts b/src/hello_world.ts index 4fa72332..23e40d9e 100644 --- a/src/hello_world.ts +++ b/src/hello_world.ts @@ -3,3 +3,5 @@ const greeting = 'world'; export function hello(world: string = greeting): string { return `Hello ${world}!`; } + +export default { hello }; diff --git a/src/projecteuler/helpers/divisors.ts b/src/projecteuler/helpers/divisors.ts index 2215783c..9e471c3a 100644 --- a/src/projecteuler/helpers/divisors.ts +++ b/src/projecteuler/helpers/divisors.ts @@ -1,5 +1,5 @@ import { logger as console } from '../../logger'; -import { sum } from '.'; +import { sum } from './sum'; export const divisors = (target: number): number[] => { let top = Math.abs(target); @@ -65,7 +65,7 @@ export const nextPrimeFactor = (_target: number): PrimeFactor => { const init = 1; let i = init; - if (top != 1) { + if (top !== 1) { do { i += 1; factor = i; @@ -107,7 +107,7 @@ export const primeFactors = (target: number): PrimeFactors => { }; export const isPrime = (target: number): boolean => - target != 1 && target === nextPrimeFactor(target).factor; + target !== 1 && target === nextPrimeFactor(target).factor; export enum ___DIVISORS_ABUNDANCE___ { DIVISORS_ABUNDANT = 'abundant', @@ -116,8 +116,8 @@ export enum ___DIVISORS_ABUNDANCE___ { } export const abundance = (target: number): ___DIVISORS_ABUNDANCE___ => { - const divisors = properDivisors(target); - const divSum = sum(divisors); + const tDivisors = properDivisors(target); + const divSum = sum(tDivisors); if (divSum > target) { return ___DIVISORS_ABUNDANCE___.DIVISORS_ABUNDANT; diff --git a/src/projecteuler/helpers/index.ts b/src/projecteuler/helpers/index.ts index 102a314d..d2ff33ae 100644 --- a/src/projecteuler/helpers/index.ts +++ b/src/projecteuler/helpers/index.ts @@ -1,5 +1,3 @@ -type nullable = T | null | undefined; - export { bigNum, bigNumToString, @@ -27,7 +25,7 @@ export { isPalindrome } from './isPalindrome'; export { matrix } from './matrix'; export { maximum, minimum } from './minmax'; export { numberToWord } from './numberToWord'; -export { nullable }; +export { nullable } from './nullable'; export { product } from './product'; export { sum } from './sum'; export { wordScore } from './wordScore'; diff --git a/src/projecteuler/helpers/matrix.ts b/src/projecteuler/helpers/matrix.ts index 974b0171..6ce04f94 100644 --- a/src/projecteuler/helpers/matrix.ts +++ b/src/projecteuler/helpers/matrix.ts @@ -1,4 +1,4 @@ -import { nullable } from '.'; +import { nullable } from './nullable'; export const matrix = ( m: number, diff --git a/src/projecteuler/helpers/nullable.ts b/src/projecteuler/helpers/nullable.ts new file mode 100644 index 00000000..98c56213 --- /dev/null +++ b/src/projecteuler/helpers/nullable.ts @@ -0,0 +1,3 @@ +export type nullable = T | null | undefined; + +export default nullable; diff --git a/src/projecteuler/helpers/numberToWord.ts b/src/projecteuler/helpers/numberToWord.ts index 59806622..3b05ea84 100644 --- a/src/projecteuler/helpers/numberToWord.ts +++ b/src/projecteuler/helpers/numberToWord.ts @@ -1,4 +1,4 @@ -import { nullable } from '.'; +import { nullable } from './nullable'; import { bigNum } from './bigNumbers'; const _CENTS_ = 'hundred'; diff --git a/src/projecteuler/problem0016-alt.ts b/src/projecteuler/problem0016-alt.ts index cc795a60..5561fe18 100644 --- a/src/projecteuler/problem0016-alt.ts +++ b/src/projecteuler/problem0016-alt.ts @@ -17,6 +17,8 @@ import { logger as console } from '../logger'; +const __RADIX__ = 10; + function problem0016alt(base: string, exponent: number): string { const newBase = BigInt(base); let powerOf = BigInt(1); @@ -33,7 +35,7 @@ function problem0016alt(base: string, exponent: number): string { let result = 0; digits.forEach((num: string) => { - result += parseInt(num); + result += parseInt(num, __RADIX__); }); console.log(`Sum of Digits: (${result})`); From b5f110ae5db2f42bea09f279579a5fdb050f0e12 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Thu, 22 Aug 2024 17:31:29 -0400 Subject: [PATCH 5/6] [REFACTOR] ESLint manual fixes: ".forEach( () => {} )" replaced by "for...of". --- src/projecteuler/problem0019.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/projecteuler/problem0019.ts b/src/projecteuler/problem0019.ts index a47bb63b..4ea1f299 100644 --- a/src/projecteuler/problem0019.ts +++ b/src/projecteuler/problem0019.ts @@ -18,9 +18,7 @@ export function problem0019( const leap = (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0 ? 1 : 0; daysInMonth.FEBRUARY = 28 + leap; - Object.entries(daysInMonth).forEach(([month, days], index) => { - console.debug(`Month(${index}): ${month} | days: ${days}`); - + for (const days of Object.values(daysInMonth)) { accumulatedRemainder += days % 7; if (accumulatedRemainder % 7 === _dayOfWeek) { if (y <= _sinceYear) { @@ -28,7 +26,7 @@ export function problem0019( } resultCount += 1; } - }); + } } console.log(`result ${String(resultCount)}`); From 350180f98a2e66270c9fe7593de528175a8de175 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Thu, 22 Aug 2024 17:35:05 -0400 Subject: [PATCH 6/6] [REFACTOR] [Hacker Rank] Interview Preparation Kit: Search: Swap Nodes [Algo]. ESLint manual fixes: no-param-reassign fixed by OOP new solution. https://eslint.org/docs/latest/rules/no-param-reassign --- .../search/swap_nodes_algo.big.test.ts | 11 +- .../search/swap_nodes_algo.test.ts | 36 ++-- .../search/swap_nodes_algo.ts | 187 +++++++----------- 3 files changed, 97 insertions(+), 137 deletions(-) diff --git a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.big.test.ts b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.big.test.ts index 1515ab1d..d459996a 100644 --- a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.big.test.ts +++ b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.big.test.ts @@ -1,7 +1,6 @@ import { describe, expect, it } from '@jest/globals'; -import { Node } from '../../lib/Node'; -import { swapNodes, buildTree, flatTree } from './swap_nodes_algo'; +import { Tree, swapNodes } from './swap_nodes_algo'; import BIG_TEST_CASES from './swap_nodes_algo.big.testcases.json'; describe('swap_nodes_algo', () => { @@ -9,10 +8,10 @@ describe('swap_nodes_algo', () => { expect.assertions(1); BIG_TEST_CASES.forEach((test) => { - const tToTest: Node = buildTree(test.nodes); - const tResult: number[] = flatTree(tToTest); + const tree: Tree = new Tree(test.nodes); + const tresult: number[] = tree.flatTree(); - expect(tResult).toStrictEqual(test.flattened); + expect(tresult).toStrictEqual(test.flattened); }); }); @@ -20,7 +19,7 @@ describe('swap_nodes_algo', () => { expect.assertions(1); BIG_TEST_CASES.forEach((test) => { - const tResult: number[][] = swapNodes(test.nodes, test.queries); + const tResult = swapNodes(test.nodes, test.queries); expect(tResult).toStrictEqual(test.expected); }); diff --git a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.test.ts b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.test.ts index 77fb833d..6e5540fa 100644 --- a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.test.ts +++ b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.test.ts @@ -1,37 +1,43 @@ import { describe, expect, it } from '@jest/globals'; -import { buildTree, flatTree, swapNodes } from './swap_nodes_algo'; +import { Node } from '../../lib/Node'; +import { Tree, swapNodes, __INITIAL_LEVEL__ } from './swap_nodes_algo'; import TEST_CASES from './swap_nodes_algo.testcases.json'; describe('swap_nodes_algo', () => { it('test_buildTree_empty', () => { - expect.assertions(1); + expect.assertions(4); - const tInput: number[][] = []; - const tToTest = buildTree(tInput); - const tResult = flatTree(tToTest); - const expected = [1]; + const input: number[][] = []; + const tree: Tree = new Tree(input); + const expected: number[] = [1]; - expect(tResult).toStrictEqual(expected); + expect(tree.flatTree()).toStrictEqual(expected); + expect(tree.getRoot()).not.toBeNull(); + expect(tree.getRoot()).toBeInstanceOf(Node); + expect(tree.getRoot().data).toBe(__INITIAL_LEVEL__); }); it('test_build_malformed_tree', () => { - expect.assertions(1); + expect.assertions(4); - const tInput: number[][] = [[], []]; - const tToTest = buildTree(tInput); - const tResult = flatTree(tToTest); - const expected = [1]; + const input: number[][] = [[], []]; + const tree: Tree = new Tree(input); + const tresult: number[] = tree.flatTree(); + const expected: number[] = [__INITIAL_LEVEL__]; - expect(tResult).toStrictEqual(expected); + expect(tresult).toStrictEqual(expected); + expect(tree.getRoot()).not.toBeNull(); + expect(tree.getRoot()).toBeInstanceOf(Node); + expect(tree.getRoot().data).toBe(__INITIAL_LEVEL__); }); it('build tree and flattened tree test cases', () => { expect.assertions(4); TEST_CASES.forEach((test) => { - const tToTest = buildTree(test.nodes); - const tResult = flatTree(tToTest); + const tree = new Tree(test.nodes); + const tResult = tree.flatTree(); expect(tResult).toStrictEqual(test.flattened); }); diff --git a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.ts b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.ts index 80c8312f..d1c602bf 100644 --- a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.ts +++ b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.ts @@ -2,7 +2,6 @@ * @link Problem export functioninition [[docs/hackerrank/interview_preparation_kit/search/swap-nodes-algo.md]] */ -import { logger as console } from '../../../logger'; import { Node } from '../../lib/Node'; // CONSTANTS @@ -11,136 +10,97 @@ export const __ROOT_VALUE__: number = 1; export const __LEAF_VALUE__: number = -1; const __RADIX__ = 10; -export function callbackCollectNodes( - root: Node | null | undefined, - collect: Record[]>, - level: number -): void { - if (root) { - if (collect?.[level] === undefined) { - collect[level] = [root]; - } else { - collect[level].push(root); - } - } -} +export class Tree { + root: Node; -export function callbackCollectFlat( - root: Node | null | undefined, - collect: Record[]>, - level: number -): void { - const _level: number = 0 * level; // set a unique key to use dict as a list - if (root) { - if (collect?.[_level] === undefined) { - collect[_level] = [root]; - } else { - collect[_level].push(root); - } - } -} + nodeCollector: Record[]>; + + constructor(indexes: number[][]) { + this.root = new Node(__ROOT_VALUE__); + this.nodeCollector = {}; + this.nodeCollector[__INITIAL_LEVEL__] = [this.root]; -export function traverseInOrderCollector( - root: Node | null | undefined, - collect: Record[]>, - level: number, - callbackFn: ( - root: Node | null | undefined, - collect: Record[]>, - level: number - ) => void -): Record[]> { - if (root?.left !== null) { - traverseInOrderCollector(root?.left, collect, level + 1, callbackFn); + this.buildTree(indexes); } - callbackFn(root, collect, level); + buildTree(indexes: number[][]): Tree { + const indexesCopy = [...indexes]; + let currentLevel = __INITIAL_LEVEL__; - if (root?.right !== null) { - traverseInOrderCollector(root?.right, collect, level + 1, callbackFn); - } + while (indexesCopy.length > 0) { + const levelSize = Math.min( + indexesCopy.length, + this.nodeCollector[currentLevel]?.length + ); - return collect; -} + const nextLevel = currentLevel + 1; -export function buildTree(indexes: number[][]): Node { - const indexesCopy: number[][] = [...indexes]; - const root: Node = new Node(__ROOT_VALUE__); - let nodeCollector: Record[]> = {}; - - while (indexesCopy.length > 0) { - nodeCollector = {}; - - traverseInOrderCollector( - root, - nodeCollector, - __INITIAL_LEVEL__, - callbackCollectNodes - ); - - const lastLevel: number = parseInt( - Object.keys(nodeCollector) - .sort((a, b) => parseInt(b, __RADIX__) - parseInt(a, __RADIX__)) - .shift() as string, - __RADIX__ - ); - - const levelSize = Math.min( - indexesCopy.length, - nodeCollector[lastLevel]?.length - ); - for (let i = 0; i < levelSize; i++) { - const currentNode: Node = nodeCollector[lastLevel][i]; - const newElement: number[] = indexesCopy.shift() as Array; - - if ((newElement?.[0] ?? __LEAF_VALUE__) !== __LEAF_VALUE__) { - currentNode.left = new Node(newElement[0]); + if (levelSize > 0) { + this.nodeCollector[nextLevel] = []; } - if ((newElement?.[1] ?? __LEAF_VALUE__) !== __LEAF_VALUE__) { - currentNode.right = new Node(newElement[1]); + + for (let i = 0; i < levelSize; i++) { + const currentNode = this.nodeCollector[currentLevel][i]; + const newElement = indexesCopy?.shift() ?? []; + + if ((newElement?.[0] ?? __LEAF_VALUE__) !== __LEAF_VALUE__) { + currentNode.left = new Node(newElement[0]); + this.nodeCollector[nextLevel].push(currentNode.left); + } + if ((newElement?.[1] ?? __LEAF_VALUE__) !== __LEAF_VALUE__) { + currentNode.right = new Node(newElement[1]); + this.nodeCollector[nextLevel].push(currentNode.right); + } + } + + if (this.nodeCollector[nextLevel].length > 0) { + currentLevel = nextLevel; } } + + return this; } - return root; -} + getRoot(): Node { + return this.root; + } -export function flatTree(root: Node | null): number[] { - let nodeCollector: Record[]> = {}; + getCollector(): Record[]> { + return this.nodeCollector; + } - nodeCollector = traverseInOrderCollector( - root, - nodeCollector, - __INITIAL_LEVEL__, - callbackCollectFlat - ); + flatTree(): number[] { + const flatTreeCollector: Node[] = []; - const lastLevel: number = parseInt( - Object.keys(nodeCollector) - .sort((a, b) => parseInt(b, __RADIX__) - parseInt(a, __RADIX__)) - .shift() as string, - __RADIX__ - ); + function traverseInOrderFlat(node: Node): void { + if (node?.left !== null) { + traverseInOrderFlat(node?.left); + } - const output: number[] = []; - nodeCollector[lastLevel].forEach((node: Node) => { - output.push(node.data); - }); + if (node) { + flatTreeCollector.push(node); + } - return output; + if (node?.right !== null) { + traverseInOrderFlat(node?.right); + } + } + + traverseInOrderFlat(this.root); + + const output: number[] = []; + flatTreeCollector.forEach((node) => { + output.push(node.data); + }); + + return output; + } } export function swapNodes(indexes: number[][], queries: number[]): number[][] { - const tree: Node = buildTree(indexes); + const tree: Tree = new Tree(indexes); + let nodeCollector: Record[]> = tree.getCollector(); const output: number[][] = []; - let nodeCollector: Record[]> = {}; - - traverseInOrderCollector( - tree, - nodeCollector, - __INITIAL_LEVEL__, - callbackCollectNodes - ); nodeCollector = Object.fromEntries( Object.entries(nodeCollector).sort( @@ -148,10 +108,6 @@ export function swapNodes(indexes: number[][], queries: number[]): number[][] { ) ); - let flattenedTree: number[] = flatTree(tree); - - console.debug(`Plain tree: ${flattenedTree}`); - for (const query of queries) { for (const [level, nodeList] of Object.entries(nodeCollector)) { const tLevel: number = parseInt(level, __RADIX__); @@ -164,8 +120,7 @@ export function swapNodes(indexes: number[][], queries: number[]): number[][] { } } - flattenedTree = flatTree(tree); - output.push(flattenedTree); + output.push(tree.flatTree()); } return output;