From 537804e44c7fc7c572037e6848d56250fa73ec3c Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 27 Dec 2024 14:55:32 -0600 Subject: [PATCH 1/7] refactor: update to React 19 Signed-off-by: Trezy --- package-lock.json | 81 ++++++++++++++++++----------------------------- package.json | 12 +++---- 2 files changed, 37 insertions(+), 56 deletions(-) diff --git a/package-lock.json b/package-lock.json index df71862e..c0acbbee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.0-development", "license": "MIT", "dependencies": { - "react-reconciler": "0.29.2" + "react-reconciler": "0.31.0" }, "devDependencies": { "@pixi/extension-scripts": "^2.4.1", @@ -17,7 +17,7 @@ "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.2.3", "@testing-library/jest-dom": "^6.4.8", - "@testing-library/react": "^16.0.0", + "@testing-library/react": "^16.1.0", "@testing-library/user-event": "^14.5.2", "@types/eslint": "^8.56.10", "@types/react": "^18.3.2", @@ -28,8 +28,8 @@ "jsdom": "^25.0.0", "pixi.js": "8.2.6", "playwright": "^1.45.3", - "react": "^18.3.1", - "react-dom": "^18.3.1", + "react": "^19.0.0", + "react-dom": "^19.0.0", "rollup": "^4.18.0", "rollup-plugin-esbuild": "^6.1.1", "rollup-plugin-sourcemaps": "^0.6.3", @@ -38,8 +38,8 @@ }, "peerDependencies": { "pixi.js": "^8.2.6", - "react": ">=18.0.0", - "react-dom": ">=18.0.0" + "react": ">=19.0.0", + "react-dom": ">=19.0.0" }, "peerDependenciesMeta": { "react-dom": { @@ -3701,9 +3701,9 @@ "license": "MIT" }, "node_modules/@testing-library/react": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.0.1.tgz", - "integrity": "sha512-dSmwJVtJXmku+iocRhWOUFbrERC76TX2Mnf0ATODz8brzAZrMBbzLwQixlBSanZxR6LddK3eiwpSFZgDET1URg==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.1.0.tgz", + "integrity": "sha512-Q2ToPvg0KsVL0ohND9A3zLJWcOXXcO8IDu3fj11KhNt0UlCWyFyvnCIBkd12tidB2lkiVRG8VFqdhcqhqnAQtg==", "dev": true, "license": "MIT", "dependencies": { @@ -3714,10 +3714,10 @@ }, "peerDependencies": { "@testing-library/dom": "^10.0.0", - "@types/react": "^18.0.0", - "@types/react-dom": "^18.0.0", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -13850,6 +13850,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -14305,18 +14306,6 @@ "dev": true, "license": "MIT" }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/loupe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", @@ -16297,29 +16286,25 @@ } }, "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", + "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", "dev": true, "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "scheduler": "^0.25.0" }, "peerDependencies": { - "react": "^18.3.1" + "react": "^19.0.0" } }, "node_modules/react-is": { @@ -16330,19 +16315,18 @@ "license": "MIT" }, "node_modules/react-reconciler": { - "version": "0.29.2", - "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.29.2.tgz", - "integrity": "sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==", + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.31.0.tgz", + "integrity": "sha512-7Ob7Z+URmesIsIVRjnLoDGwBEG/tVitidU0nMsqX/eeJaLY89RISO/10ERe0MqmzuKUUB1rmY+h1itMbUHg9BQ==", "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "scheduler": "^0.25.0" }, "engines": { "node": ">=0.10.0" }, "peerDependencies": { - "react": "^18.3.1" + "react": "^19.0.0" } }, "node_modules/react-refresh": { @@ -17026,13 +17010,10 @@ } }, "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", + "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==", + "license": "MIT" }, "node_modules/secure-compare": { "version": "3.0.1", diff --git a/package.json b/package.json index 44beb5ce..134371e9 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ ] }, "dependencies": { - "react-reconciler": "0.29.2" + "react-reconciler": "0.31.0" }, "devDependencies": { "@pixi/extension-scripts": "^2.4.1", @@ -69,7 +69,7 @@ "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.2.3", "@testing-library/jest-dom": "^6.4.8", - "@testing-library/react": "^16.0.0", + "@testing-library/react": "^16.1.0", "@testing-library/user-event": "^14.5.2", "@types/eslint": "^8.56.10", "@types/react": "^18.3.2", @@ -80,8 +80,8 @@ "jsdom": "^25.0.0", "pixi.js": "8.2.6", "playwright": "^1.45.3", - "react": "^18.3.1", - "react-dom": "^18.3.1", + "react": "^19.0.0", + "react-dom": "^19.0.0", "rollup": "^4.18.0", "rollup-plugin-esbuild": "^6.1.1", "rollup-plugin-sourcemaps": "^0.6.3", @@ -90,8 +90,8 @@ }, "peerDependencies": { "pixi.js": "^8.2.6", - "react": ">=18.0.0", - "react-dom": ">=18.0.0" + "react": ">=19.0.0", + "react-dom": ">=19.0.0" }, "peerDependenciesMeta": { "react-dom": { From 7ccc43fb259da7dfb22b94ae5ed2cafee2e24e60 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 30 Dec 2024 01:03:59 -0600 Subject: [PATCH 2/7] chore: update pixi eslint config Signed-off-by: Trezy --- .eslintrc.js | 42 - eslint.config.mjs | 35 + package-lock.json | 1826 ++++++++++------- package.json | 3 +- src/helpers/extend.ts | 4 +- src/typedefs/HostConfig.ts | 7 +- test/e2e/components/Application.test.tsx | 22 +- test/e2e/hooks/useApplication.test.tsx | 64 +- test/e2e/hooks/useTick.test.tsx | 59 +- test/unit/core/createRoot.test.ts | 18 +- .../helpers/afterActiveInstanceBlur.test.ts | 4 +- test/unit/helpers/appendChild.test.ts | 16 +- test/unit/helpers/applyProps.test.ts | 16 +- test/unit/hooks/useAssets.test.tsx | 6 +- test/unit/index.test.ts | 68 +- test/unit/typedefs/PixiElements.test.tsx | 20 +- tsconfig.eslint.json | 14 - 17 files changed, 1307 insertions(+), 917 deletions(-) delete mode 100644 .eslintrc.js create mode 100644 eslint.config.mjs delete mode 100644 tsconfig.eslint.json diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index e91e3b54..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,42 +0,0 @@ -/** @type {import('eslint').Linter.Config} */ -module.exports = { - extends: ['@pixi/eslint-config'], - globals: { - globalThis: 'readonly', - }, - ignorePatterns: [ - 'dist/**/*', - 'lib/**/*', - ], - parserOptions: { - project: './tsconfig.eslint.json', - ecmaVersion: 2020, - sourceType: 'module', - }, - rules: { - '@typescript-eslint/consistent-type-imports': [ - 1, - { disallowTypeAnnotations: false, fixStyle: 'inline-type-imports' } - ], - '@typescript-eslint/type-annotation-spacing': 1, - '@typescript-eslint/no-non-null-assertion': 0, - 'max-len': 0, - }, - overrides: [ - { - files: ['*.tests.ts', '*.test.ts'], - rules: { - '@typescript-eslint/no-unused-expressions': 0, - '@typescript-eslint/dot-notation': [ - 0, - { - allowPrivateClassPropertyAccess: true, - allowProtectedClassPropertyAccess: true, - allowIndexSignaturePropertyAccess: true, - }, - ], - 'dot-notation': 0, - }, - }, - ], -}; diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..c349ec55 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,35 @@ +import pixiConfig from '@pixi/eslint-config'; + +export default [ + { + ignores: [ + 'dist/**/*', + 'lib/**/*', + 'types/**/*', + ], + }, + ...pixiConfig, + { + rules: { + 'max-len': 0, + }, + }, + { + files: [ + '*.test.ts', + '*.test.tsx', + ], + rules: { + '@typescript-eslint/no-unused-expressions': 0, + '@typescript-eslint/dot-notation': [ + 0, + { + allowPrivateClassPropertyAccess: true, + allowProtectedClassPropertyAccess: true, + allowIndexSignaturePropertyAccess: true, + }, + ], + 'dot-notation': 0, + }, + }, +]; diff --git a/package-lock.json b/package-lock.json index c0acbbee..7f578a79 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,14 +12,13 @@ "react-reconciler": "0.31.0" }, "devDependencies": { - "@pixi/extension-scripts": "^2.4.1", + "@pixi/extension-scripts": "^4.0.0", "@rollup/plugin-commonjs": "^25.0.8", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.2.3", "@testing-library/jest-dom": "^6.4.8", "@testing-library/react": "^16.1.0", "@testing-library/user-event": "^14.5.2", - "@types/eslint": "^8.56.10", "@types/react": "^18.3.2", "@types/react-reconciler": "0.28.8", "@vitejs/plugin-react": "^4.3.1", @@ -1494,42 +1493,110 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.5", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/core": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.1.tgz", + "integrity": "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -1537,7 +1604,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -1562,16 +1629,13 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -1603,27 +1667,37 @@ "node": "*" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@eslint/js": { + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.17.0.tgz", + "integrity": "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "Apache-2.0", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "node_modules/@eslint/plugin-kit": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz", + "integrity": "sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@fork-of/git-branch": { @@ -1639,44 +1713,42 @@ "node": ">=8" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "Apache-2.0", "engines": { - "node": "*" + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { @@ -1693,13 +1765,19 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", "dev": true, - "license": "BSD-3-Clause" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@inquirer/confirm": { "version": "3.1.22", @@ -2760,31 +2838,48 @@ "license": "MIT" }, "node_modules/@pixi/eslint-config": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@pixi/eslint-config/-/eslint-config-5.1.0.tgz", - "integrity": "sha512-J1/YOGs4tVOleZU1WyoglZQyWHHbZjOyrma2ZbtpLYwmRzAqYesda1RrbMlcWXcAsVqSyothwMuOJxHNBojT1Q==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@pixi/eslint-config/-/eslint-config-6.0.0.tgz", + "integrity": "sha512-vQUf/hYdL+6mbc21BZUJaHI/nVWlRHD3MYHTTuARh/zjNax2cNQ8lhjz9jcGytfUFGg0Aa9ZR0/eYgffuMdmJQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-simple-import-sort": "^10.0.0" + "@eslint/js": "^9.16.0", + "@stylistic/eslint-plugin": "^2.11.0", + "eslint": ">=9", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-simple-import-sort": "^12.1.1", + "globals": "^15.13.0", + "typescript-eslint": "^8.17.0" }, "peerDependencies": { - "eslint": ">=8", + "eslint": ">=9", "typescript": ">=5" } }, + "node_modules/@pixi/eslint-config/node_modules/globals": { + "version": "15.14.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", + "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@pixi/extension-scripts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@pixi/extension-scripts/-/extension-scripts-2.4.1.tgz", - "integrity": "sha512-99kPhE3xk4269k3qADtinRf/0FydVcDOBofhffpM8tqwTwqyyJ7NNqbdvIEiKiPFtQhESv+0tWoKVb7/SRmPdg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@pixi/extension-scripts/-/extension-scripts-4.0.0.tgz", + "integrity": "sha512-k2/DgZRYtyARtsTbWj8U0nj3w569B/ALS4gOUkbEWq7gkswJy3wHbj86NU1pftVYryKOM8omRwznjHb3CdgUHQ==", "dev": true, "license": "MIT", "dependencies": { "@kayahr/jest-electron-runner": "^29.3.0", - "@pixi/eslint-config": "^5.1.0", + "@pixi/eslint-config": "^6.0.0", "@pixi/rollup-plugin-rename-node-modules": "^2.0.0", "@pixi/webdoc-template": "^1.5.5", "@rollup/plugin-commonjs": "^24.0.0", @@ -2795,7 +2890,7 @@ "@webdoc/cli": "^2.2.0", "chalk": "^5.0.0", "clean-package": "^2.2.0", - "eslint": "^8.30.0", + "eslint": "^9.16.0", "gh-pages": "^4.0.0", "glob": "^10.3.10", "http-server": "^14.1.1", @@ -3370,6 +3465,13 @@ "win32" ] }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, "node_modules/@sentry/core": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.2.0.tgz", @@ -3536,6 +3638,39 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@stylistic/eslint-plugin": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.12.1.tgz", + "integrity": "sha512-fubZKIHSPuo07FgRTn6S4Nl0uXPRPYVNpyZzIDGfp7Fny6JjNus6kReLD7NI380JXi4HtUTSOZ34LBuNPO1XLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^8.13.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@stylistic/eslint-plugin/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", @@ -3838,17 +3973,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/eslint": { - "version": "8.56.12", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.12.tgz", - "integrity": "sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -3998,14 +4122,14 @@ "version": "15.7.12", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@types/react": { "version": "18.3.5", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.5.tgz", "integrity": "sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -4039,13 +4163,6 @@ "@types/node": "*" } }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", @@ -4103,95 +4220,72 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.2.tgz", + "integrity": "sha512-adig4SzPLjeQ0Tm+jvsozSGiCliI2ajeURDGHjZ2llnA+A67HihCQ+a3amtPhUakd1GlwHxSRvzOZktbEvhPPg==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.18.2", + "@typescript-eslint/type-utils": "8.18.2", + "@typescript-eslint/utils": "8.18.2", + "@typescript-eslint/visitor-keys": "8.18.2", "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.18.2.tgz", + "integrity": "sha512-y7tcq4StgxQD4mDr9+Jb26dZ+HTZ/SkfqpXSiqeUXZHxOUyjWDKsmwKhJ0/tApR08DgOhrFAoAhyB80/p3ViuA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/scope-manager": "8.18.2", + "@typescript-eslint/types": "8.18.2", + "@typescript-eslint/typescript-estree": "8.18.2", + "@typescript-eslint/visitor-keys": "8.18.2", "debug": "^4.3.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.2.tgz", + "integrity": "sha512-YJFSfbd0CJjy14r/EvWapYgV4R5CHzptssoag2M7y3Ra7XNta6GPAJPPP5KGB9j14viYXyrzRO5GkX7CRfo8/g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "@typescript-eslint/types": "8.18.2", + "@typescript-eslint/visitor-keys": "8.18.2" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -4199,41 +4293,37 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.2.tgz", + "integrity": "sha512-AB/Wr1Lz31bzHfGm/jgbFR0VB0SML/hd2P1yxzKDM48YmP7vbyJNHRExUE/wZsQj2wUCvbWH8poNHFuxLqCTnA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/typescript-estree": "8.18.2", + "@typescript-eslint/utils": "8.18.2", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.2.tgz", + "integrity": "sha512-Z/zblEPp8cIvmEn6+tPDIHUbRu/0z5lqZ+NvolL5SvXWT5rQy7+Nch83M0++XzO0XrWRFWECgOAyE8bsJTl1GQ==", "dev": true, "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -4241,32 +4331,30 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.2.tgz", + "integrity": "sha512-WXAVt595HjpmlfH4crSdM/1bcsqh+1weFRWIa9XMTx/XHZ9TCKMcr725tLYqWOgzKdeDrqVHxFotrvWcEsk2Tg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/types": "8.18.2", + "@typescript-eslint/visitor-keys": "8.18.2", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { @@ -4283,69 +4371,47 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.2.tgz", + "integrity": "sha512-Cr4A0H7DtVIPkauj4sTSXVl+VBWewE9/o40KcF3TV9aqDEOWoXF3/+oRXNby3DYzZeCATvbdksYsGZzplwnK/Q==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" + "@typescript-eslint/scope-manager": "8.18.2", + "@typescript-eslint/types": "8.18.2", + "@typescript-eslint/typescript-estree": "8.18.2" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.2.tgz", + "integrity": "sha512-zORcwn4C3trOWiCqFQP1x6G3xTRyZ1LYydnj51cRnJ6hxBlr/cKPckk+PKPUw/fXmvfKTcw7bwY3w9izgx5jZw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "8.18.2", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true, - "license": "ISC" - }, "node_modules/@vitejs/plugin-react": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", @@ -5776,9 +5842,9 @@ "peer": true }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, "license": "MIT", "bin": { @@ -6013,14 +6079,14 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -6103,16 +6169,16 @@ } }, "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==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "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" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -6140,20 +6206,19 @@ } }, "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==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "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" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -6745,17 +6810,47 @@ } }, "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==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "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" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -7451,9 +7546,9 @@ "license": "MIT" }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -7496,7 +7591,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/data-urls": { @@ -7551,15 +7646,15 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7569,31 +7664,31 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/inspect-js" } }, "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==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" }, @@ -7878,16 +7973,16 @@ } }, "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "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": ">=6.0.0" + "node": ">=0.10.0" } }, "node_modules/dom-accessibility-api": { @@ -7913,6 +8008,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -8103,58 +8213,61 @@ } }, "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==", + "version": "1.23.8", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.8.tgz", + "integrity": "sha512-lfab8IzDn6EpI1ibZakcgS6WsfEBiB+43cuJo+wgylx1xKXf+Sp+YR3vFuQwC/u3sxYwV8Cxe3B0DpVUu/WiJQ==", "dev": true, "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", "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", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", "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", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.6", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "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", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", "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", + "object.assign": "^4.1.7", + "own-keys": "^1.0.0", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", "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" + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" }, "engines": { "node": ">= 0.4" @@ -8164,14 +8277,11 @@ } }, "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==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -8232,15 +8342,15 @@ } }, "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==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -8322,59 +8432,76 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.17.0.tgz", + "integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.17.0", + "@eslint/plugin-kit": "^0.2.3", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, "node_modules/eslint-import-resolver-node": { @@ -8400,9 +8527,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.2.tgz", - "integrity": "sha512-3XnC5fDyc8M4J2E8pt8pmSVRX2M+5yWMCfI/kDZwauQeFgzQOuhcRBFKjTeJagqgk4sFKxe1mvNVnaWwImx/Tg==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "license": "MIT", "dependencies": { @@ -8428,48 +8555,50 @@ } }, "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==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "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", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.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", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/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==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "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" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8499,19 +8628,6 @@ "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-import/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -8526,9 +8642,9 @@ } }, "node_modules/eslint-plugin-simple-import-sort": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz", - "integrity": "sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.1.tgz", + "integrity": "sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==", "dev": true, "license": "MIT", "peerDependencies": { @@ -8536,9 +8652,9 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -8546,25 +8662,32 @@ "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -8581,13 +8704,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -8666,35 +8782,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/eslint/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -8740,32 +8827,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -9282,16 +9356,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/filelist": { @@ -9577,24 +9651,23 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", "dev": true, "license": "ISC" }, @@ -9781,16 +9854,18 @@ } }, "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==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "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" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -9873,17 +9948,22 @@ } }, "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==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "dev": true, "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -9919,15 +9999,15 @@ } }, "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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -10142,22 +10222,6 @@ "node": ">=10.13.0" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/global-agent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", @@ -10266,35 +10330,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "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==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10359,11 +10402,14 @@ } }, "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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -10392,11 +10438,14 @@ } }, "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==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -10405,9 +10454,9 @@ } }, "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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "license": "MIT", "engines": { @@ -10950,15 +10999,15 @@ } }, "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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -10979,14 +11028,15 @@ } }, "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==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -11002,28 +11052,47 @@ "dev": true, "license": "MIT" }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "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==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -11100,12 +11169,14 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" }, "engines": { @@ -11116,13 +11187,14 @@ } }, "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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -11177,6 +11249,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -11197,6 +11285,22 @@ "node": ">=6" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -11230,17 +11334,10 @@ "node": ">=8" } }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-negative-zero": { + "node_modules/is-map": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", "engines": { @@ -11250,6 +11347,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, "node_modules/is-node-process": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", @@ -11268,13 +11372,14 @@ } }, "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==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -11293,16 +11398,6 @@ "node": ">=8" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -11335,15 +11430,30 @@ } }, "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==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -11352,13 +11462,13 @@ } }, "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==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -11381,13 +11491,14 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -11397,13 +11508,15 @@ } }, "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==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -11413,13 +11526,13 @@ } }, "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==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -11441,14 +11554,47 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", + "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -14494,6 +14640,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", @@ -14599,9 +14755,9 @@ } }, "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -15193,9 +15349,9 @@ } }, "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==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, "license": "MIT", "engines": { @@ -15230,15 +15386,17 @@ } }, "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==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -15297,13 +15455,14 @@ } }, "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==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, @@ -15470,6 +15629,24 @@ "dev": true, "license": "MIT" }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-cancelable": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", @@ -16420,6 +16597,29 @@ "node": ">=8" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.9.tgz", + "integrity": "sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "dunder-proto": "^1.0.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", @@ -16443,16 +16643,16 @@ } }, "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==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -16928,15 +17128,16 @@ } }, "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==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -16960,6 +17161,30 @@ "dev": true, "license": "MIT" }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply/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/safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", @@ -16972,15 +17197,15 @@ } }, "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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -17190,16 +17415,73 @@ } }, "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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "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" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -17880,16 +18162,19 @@ } }, "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==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -17899,16 +18184,20 @@ } }, "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==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -18255,13 +18544,6 @@ "node": "*" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, "node_modules/throat": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", @@ -18522,9 +18804,9 @@ } }, "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", "dev": true, "license": "MIT", "engines": { @@ -18676,32 +18958,32 @@ } }, "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==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" }, "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==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -18711,18 +18993,19 @@ } }, "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==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -18732,18 +19015,18 @@ } }, "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==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "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" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -18766,6 +19049,29 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.18.2.tgz", + "integrity": "sha512-KuXezG6jHkvC3MvizeXgupZzaG5wjhU3yE8E7e6viOvAvD9xAWYp8/vy0WULTGe9DYDWcQu7aW03YIV3mSitrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.18.2", + "@typescript-eslint/parser": "8.18.2", + "@typescript-eslint/utils": "8.18.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, "node_modules/uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -18774,16 +19080,19 @@ "license": "MIT" }, "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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -19869,33 +20178,91 @@ } }, "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/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/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "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" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "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==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "for-each": "^0.3.3", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { @@ -20219,6 +20586,35 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zustand": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.2.tgz", + "integrity": "sha512-8qNdnJVJlHlrKXi50LDqqUNmUbuBjoKLrYQBnoChIbVph7vni+sY+YpvdjXG9YLd/Bxr6scMcR+rm5H3aSqPaw==", + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } } } } diff --git a/package.json b/package.json index 134371e9..62cde368 100644 --- a/package.json +++ b/package.json @@ -64,14 +64,13 @@ "react-reconciler": "0.31.0" }, "devDependencies": { - "@pixi/extension-scripts": "^2.4.1", + "@pixi/extension-scripts": "^4.0.0", "@rollup/plugin-commonjs": "^25.0.8", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.2.3", "@testing-library/jest-dom": "^6.4.8", "@testing-library/react": "^16.1.0", "@testing-library/user-event": "^14.5.2", - "@types/eslint": "^8.56.10", "@types/react": "^18.3.2", "@types/react-reconciler": "0.28.8", "@vitejs/plugin-react": "^4.3.1", diff --git a/src/helpers/extend.ts b/src/helpers/extend.ts index 069a5c7e..1593ad8e 100644 --- a/src/helpers/extend.ts +++ b/src/helpers/extend.ts @@ -1,6 +1,8 @@ import { catalogue } from './catalogue'; -export function extend(objects: { [key: string]: new (...args: any) => any }) +export function extend(objects: { + [key: string]: new (...args: any) => any }, +) { Object.assign(catalogue, objects); } diff --git a/src/typedefs/HostConfig.ts b/src/typedefs/HostConfig.ts index 09d4087f..ab96fce3 100644 --- a/src/typedefs/HostConfig.ts +++ b/src/typedefs/HostConfig.ts @@ -1,7 +1,8 @@ -import type { - Container, - Filter, +import { + type Container, + type Filter, } from 'pixi.js'; + import type { NamespacedPixiElements } from './NamespacedPixiElements'; import type { PixiElements } from './PixiElements'; import type { PixiReactNode } from './PixiReactNode'; diff --git a/test/e2e/components/Application.test.tsx b/test/e2e/components/Application.test.tsx index 6c346dce..c895d0a5 100644 --- a/test/e2e/components/Application.test.tsx +++ b/test/e2e/components/Application.test.tsx @@ -5,17 +5,19 @@ import { expect, it, vi, -} from 'vitest' +} from 'vitest'; import { Application } from '../../../src/components/Application'; import { roots } from '../../../src/core/roots'; import { useApplication } from '../../../src/hooks/useApplication'; import { isAppMounted } from '../../utils/isAppMounted'; import { render } from '@testing-library/react'; -describe('Application', () => { +describe('Application', () => +{ describe('onInit', () => { - it('runs the callback once', async () => { + it('runs the callback once', async () => + { const onInitSpy = vi.fn(); const TestComponent = () => ( @@ -28,13 +30,15 @@ describe('Application', () => { }); }); - describe('unmount', () => { + describe('unmount', () => + { it('unmounts after init', async () => { let testApp = null as any as PixiApplication; let testAppIsInitialised = false; - const TestChildComponent = () => { + const TestChildComponent = () => + { const { app, isInitialised, @@ -45,7 +49,8 @@ describe('Application', () => { testApp = app; testAppIsInitialised = isInitialised; - return () => { + return () => + { testApp = app; testAppIsInitialised = isInitialised; }; @@ -95,7 +100,8 @@ describe('Application', () => { testApp = app; testAppIsInitialised = isInitialised; - return () => { + return () => + { testApp = app; testAppIsInitialised = isInitialised; }; @@ -119,7 +125,7 @@ describe('Application', () => { expect(roots.size).toEqual(1); - expect(testAppIsInitialised).to.be.false; + expect(testAppIsInitialised).toBeFalsy(); unmount(); diff --git a/test/e2e/hooks/useApplication.test.tsx b/test/e2e/hooks/useApplication.test.tsx index 7ed0ce38..1cff66dc 100644 --- a/test/e2e/hooks/useApplication.test.tsx +++ b/test/e2e/hooks/useApplication.test.tsx @@ -1,67 +1,73 @@ -import type { ReactNode } from 'react' +import { type Application as PixiApplication } from 'pixi.js'; import { describe, expect, it, } from 'vitest'; +import { Application } from '../../../src/components/Application.ts'; +import { useApplication } from '../../../src/hooks/useApplication.ts'; import { render, renderHook, -} from '@testing-library/react' -import { Application as PixiApplication } from 'pixi.js'; +} from '@testing-library/react'; -import { Application } from '../../../src/components/Application.ts' -import { useApplication } from '../../../src/hooks/useApplication.ts' +import type { ReactNode } from 'react'; describe('useApplication', () => { it('returns the nearest application', async () => { - let initApp: PixiApplication | null = null - let testApp: PixiApplication | null = null + let initApp: PixiApplication | null = null; + let testApp: PixiApplication | null = null; const TestComponentWrapper = (props: { children?: ReactNode, - }) => { - const { children } = props + }) => + { + const { children } = props; - const handleInit = (app: PixiApplication) => (initApp = app) + const handleInit = (app: PixiApplication) => (initApp = app); return ( {children} - ) - } + ); + }; - const TestComponent = () => { - const { app } = useApplication() + const TestComponent = () => + { + const { app } = useApplication(); - if (app) { - testApp = app + if (app) + { + testApp = app; } - return null - } + return null; + }; render(, { wrapper: TestComponentWrapper, - }) + }); - await new Promise(resolve => { - let intervalID = setInterval(() => { - if (initApp) { - clearInterval(intervalID) - setTimeout(resolve, 10) + await new Promise((resolve) => + { + const intervalID = setInterval(() => + { + if (initApp) + { + clearInterval(intervalID); + setTimeout(resolve, 10); } - }, 10) - }) + }, 10); + }); - expect(testApp).to.equal(initApp) - }) + expect(testApp).toEqual(initApp); + }); it('throws when not in a React Pixi tree', () => { - expect(() => renderHook(() => useApplication())).to.throw(Error, /no context found/i) + expect(() => renderHook(() => useApplication())).toThrowError(/no context found/i); }); }); diff --git a/test/e2e/hooks/useTick.test.tsx b/test/e2e/hooks/useTick.test.tsx index 79f411bc..53a5b276 100644 --- a/test/e2e/hooks/useTick.test.tsx +++ b/test/e2e/hooks/useTick.test.tsx @@ -1,56 +1,61 @@ +import { Ticker } from 'pixi.js'; import { describe, expect, it, vi, } from 'vitest'; +import { Application } from '../../../src/components/Application'; +import { useTick } from '../../../src/hooks/useTick'; import { render, renderHook, -} from '@testing-library/react' -import { Ticker } from 'pixi.js'; - -import { Application } from '../../../src/components/Application' -import { useTick } from '../../../src/hooks/useTick' +} from '@testing-library/react'; describe('useTick', () => { - describe('with a function', () => { - it('runs the callback', async () => { - const useTickSpy = vi.fn() + describe('with a function', () => + { + it('runs the callback', async () => + { + const useTickSpy = vi.fn(); - const TestComponent = () => { - useTick(useTickSpy) + const TestComponent = () => + { + useTick(useTickSpy); - return null - } + return null; + }; - render(, { wrapper: Application }) + render(, { wrapper: Application }); - await expect.poll(() => useTickSpy.mock.lastCall?.[0]).toBeInstanceOf(Ticker) + await expect.poll(() => useTickSpy.mock.lastCall?.[0]).toBeInstanceOf(Ticker); }); - }) + }); - describe('with an options hash', () => { - it('runs the callback', async () => { - const useTickSpy = vi.fn() + describe('with an options hash', () => + { + it('runs the callback', async () => + { + const useTickSpy = vi.fn(); - const TestComponent = () => { - useTick({ callback: useTickSpy }) + const TestComponent = () => + { + useTick({ callback: useTickSpy }); - return null - } + return null; + }; - render(, { wrapper: Application }) + render(, { wrapper: Application }); - await expect.poll(() => useTickSpy.mock.lastCall?.[0]).toBeInstanceOf(Ticker) + await expect.poll(() => useTickSpy.mock.lastCall?.[0]).toBeInstanceOf(Ticker); }); - }) + }); it('throws when not in a React Pixi tree', () => { - const result = () => renderHook(() => useTick(() => {})) + const result = () => renderHook(() => useTick(() => { /* noop */ })); - expect(result).to.throw(Error, /no context found/i) + expect(result).toThrowError(/no context found/i); }); }); diff --git a/test/unit/core/createRoot.test.ts b/test/unit/core/createRoot.test.ts index e650f1ec..61e420c1 100644 --- a/test/unit/core/createRoot.test.ts +++ b/test/unit/core/createRoot.test.ts @@ -13,14 +13,14 @@ describe('createRoot', () => const target = document.createElement('canvas'); const root = createRoot(target); - expect(root).to.have.property('fiber'); - expect(root) - .to.have.property('render') - .and.to.be.a('function'); - expect(root).to.have.property('applicationState'); - expect(root).to.have.property('internalState'); - expect(root.internalState).to.have.property('rootContainer'); - expect(root.applicationState.app).to.be.instanceOf(Application); - expect(root.internalState.rootContainer).to.equal(root.applicationState.app.stage); + expect(root).toHaveProperty('fiber'); + expect(root).toHaveProperty('render'); + expect(root).toHaveProperty('render'); + expect(root).toHaveProperty('applicationState'); + expect(root).toHaveProperty('internalState'); + expect(root.render).toBeTypeOf('function'); + expect(root.internalState).toHaveProperty('rootContainer'); + expect(root.applicationState.app).toBeInstanceOf(Application); + expect(root.internalState.rootContainer).toEqual(root.applicationState.app.stage); }); }); diff --git a/test/unit/helpers/afterActiveInstanceBlur.test.ts b/test/unit/helpers/afterActiveInstanceBlur.test.ts index a5977a45..08b4e6e1 100644 --- a/test/unit/helpers/afterActiveInstanceBlur.test.ts +++ b/test/unit/helpers/afterActiveInstanceBlur.test.ts @@ -9,7 +9,7 @@ describe('afterActiveInstanceBlur', () => { it('does nothing', () => { - expect(afterActiveInstanceBlur).to.be.a('function'); - expect(afterActiveInstanceBlur()).to.be.undefined; + expect(afterActiveInstanceBlur).toBeTypeOf('function'); + expect(afterActiveInstanceBlur()).toBeUndefined(); }); }); diff --git a/test/unit/helpers/appendChild.test.ts b/test/unit/helpers/appendChild.test.ts index c3ed82fd..526f241a 100644 --- a/test/unit/helpers/appendChild.test.ts +++ b/test/unit/helpers/appendChild.test.ts @@ -11,30 +11,30 @@ describe('appendChild', () => { it('appends a child instance to a parent instance', () => { - expect(appendChild).to.be.a('function'); + expect(appendChild).toBeTypeOf('function'); const parentInstance = prepareInstance(new Container()); const childInstance = prepareInstance(new Container()); - expect(parentInstance.children).to.be.empty; + expect(parentInstance.children as []).toHaveLength(0); const result = appendChild(parentInstance, childInstance); - expect(parentInstance.children).to.include(childInstance); - expect(result).to.be.undefined; + expect(parentInstance.children).toContain(childInstance); + expect(result).toBeUndefined(); }); it('does nothing if child instance doesn\'t exist', () => { - expect(appendChild).to.be.a('function'); + expect(appendChild).toBeTypeOf('function'); const parentInstance = prepareInstance(new Container()); - expect(parentInstance.children).to.be.empty; + expect(parentInstance.children as []).toHaveLength(0); const result = appendChild(parentInstance, null); - expect(parentInstance.children).to.be.empty; - expect(result).to.be.undefined; + expect(parentInstance.children as []).toHaveLength(0); + expect(result).toBeUndefined(); }); }); diff --git a/test/unit/helpers/applyProps.test.ts b/test/unit/helpers/applyProps.test.ts index 628b592e..7919026c 100644 --- a/test/unit/helpers/applyProps.test.ts +++ b/test/unit/helpers/applyProps.test.ts @@ -13,15 +13,15 @@ describe('applyProps', () => { it('updates the target instance', () => { - expect(applyProps).to.be.a('function'); + expect(applyProps).toBeTypeOf('function'); const instance = prepareInstance(new Container()); - expect(instance.x).to.equal(0); + expect(instance.x).toEqual(0); const result = applyProps(instance, { x: 100 }); - expect(result).to.equal(instance); - expect(instance.x).to.equal(100); + expect(result).toEqual(instance); + expect(instance.x).toEqual(100); }); }); @@ -29,10 +29,10 @@ describe('applyProps', () => { it('updates the target instance', () => { - expect(applyProps).to.be.a('function'); + expect(applyProps).toBeTypeOf('function'); const instance = prepareInstance(new Container()); - expect(instance.x).to.equal(0); + expect(instance.x).toEqual(0); const result = applyProps(instance, { changes: [ @@ -45,8 +45,8 @@ describe('applyProps', () => ], }); - expect(result).to.equal(instance); - expect(instance.x).to.equal(100); + expect(result).toEqual(instance); + expect(instance.x).toEqual(100); }); }); }); diff --git a/test/unit/hooks/useAssets.test.tsx b/test/unit/hooks/useAssets.test.tsx index e3258969..d99e81af 100644 --- a/test/unit/hooks/useAssets.test.tsx +++ b/test/unit/hooks/useAssets.test.tsx @@ -25,11 +25,9 @@ describe('useAssets', async () => setTimeout(() => resolve(new Response()), 1); })); - beforeEach(() => + beforeEach(async () => { - Assets.init({ - skipDetections: true, - }); + await Assets.init({ skipDetections: true }); }); afterEach(() => diff --git a/test/unit/index.test.ts b/test/unit/index.test.ts index 0b99ef48..dec62a27 100644 --- a/test/unit/index.test.ts +++ b/test/unit/index.test.ts @@ -20,84 +20,82 @@ describe('exports', () => { it('exports the `` component', () => { - expect(PixiReact).to.have.property('Application') - .and.to.equal(Application); + expect(PixiReact).toHaveProperty('Application'); + expect(PixiReact.Application).toEqual(Application); }); it('exports the `createRoot()` function', () => { - expect(PixiReact).to.have.property('createRoot') - .and.to.equal(createRoot); + expect(PixiReact).toHaveProperty('createRoot'); + expect(PixiReact.createRoot).toEqual(createRoot); }); it('exports the `extend()` function', () => { - expect(PixiReact).to.have.property('extend') - .and.to.equal(extend); + expect(PixiReact).toHaveProperty('extend'); + expect(PixiReact.extend).toEqual(extend); }); it('exports the `useApp()` hook', () => { - expect(PixiReact).to.have.property('useApp') - .and.to.equal(useApp); + expect(PixiReact).toHaveProperty('useApp'); + expect(PixiReact.useApp).toEqual(useApp); }); it('exports the `useApplication()` hook', () => { - expect(PixiReact).to.have.property('useApplication') - .and.to.equal(useApplication); + expect(PixiReact).toHaveProperty('useApplication'); + expect(PixiReact.useApplication).toEqual(useApplication); }); it('exports the `useAsset()` hook', () => { - expect(PixiReact).to.have.property('useAsset') - .and.to.equal(useAsset); + expect(PixiReact).toHaveProperty('useAsset'); + expect(PixiReact.useAsset).toEqual(useAsset); }); it('exports the `useAssets()` hook', () => { - expect(PixiReact).to.have.property('useAssets') - .and.to.equal(useAssets); + expect(PixiReact).toHaveProperty('useAssets'); + expect(PixiReact.useAssets).toEqual(useAssets); }); it('exports the `UseAssetsStatus()` hook', () => { - expect(PixiReact).to.have.property('UseAssetsStatus') - .and.to.equal(UseAssetsStatus); + expect(PixiReact).toHaveProperty('UseAssetsStatus'); + expect(PixiReact.UseAssetsStatus).toEqual(UseAssetsStatus); }); it('exports the `useExtend()` hook', () => { - expect(PixiReact).to.have.property('useExtend') - .and.to.equal(useExtend); + expect(PixiReact).toHaveProperty('useExtend'); + expect(PixiReact.useExtend).toEqual(useExtend); }); it('exports the `useSuspenseAssets()` hook', () => { - expect(PixiReact).to.have.property('useSuspenseAssets') - .and.to.equal(useSuspenseAssets); + expect(PixiReact).toHaveProperty('useSuspenseAssets'); + expect(PixiReact.useSuspenseAssets).toEqual(useSuspenseAssets); }); it('exports the `useTick()` hook', () => { - expect(PixiReact).to.have.property('useTick') - .and.to.equal(useTick); + expect(PixiReact).toHaveProperty('useTick'); + expect(PixiReact.useTick).toEqual(useTick); }); it('doesn\'t export extraneous keys', () => { - expect(PixiReact).to.have.all.keys( - 'Application', - 'createRoot', - 'extend', - 'useApp', - 'useApplication', - 'useAsset', - 'useAssets', - 'UseAssetsStatus', - 'useExtend', - 'useTick', - 'useSuspenseAssets', - ); + expect(PixiReact).toHaveProperty('Application'); + expect(PixiReact).toHaveProperty('createRoot'); + expect(PixiReact).toHaveProperty('extend'); + expect(PixiReact).toHaveProperty('useApp'); + expect(PixiReact).toHaveProperty('useApplication'); + expect(PixiReact).toHaveProperty('useAsset'); + expect(PixiReact).toHaveProperty('useAssets'); + expect(PixiReact).toHaveProperty('UseAssetsStatus'); + expect(PixiReact).toHaveProperty('useExtend'); + expect(PixiReact).toHaveProperty('useTick'); + expect(PixiReact).toHaveProperty('useSuspenseAssets'); }); }); diff --git a/test/unit/typedefs/PixiElements.test.tsx b/test/unit/typedefs/PixiElements.test.tsx index fec13d7d..c4125187 100644 --- a/test/unit/typedefs/PixiElements.test.tsx +++ b/test/unit/typedefs/PixiElements.test.tsx @@ -17,19 +17,19 @@ describe('PixiElements', () => ); - expect(elements.props.children).to.have.length(4); + expect(elements.props.children).toHaveLength(4); - expect(elements.props.children[0].type).to.equal('graphics'); - expect(elements.props.children[0].props.draw).to.be.a('function'); + expect(elements.props.children[0].type).toEqual('graphics'); + expect(elements.props.children[0].props.draw).toBeTypeOf('function'); - expect(elements.props.children[1].type).to.equal('sprite'); - expect(elements.props.children[1].props.draw).to.be.undefined; - expect(elements.props.children[1].props.texture).to.be.instanceOf(Texture); + expect(elements.props.children[1].type).toEqual('sprite'); + expect(elements.props.children[1].props.draw).toBeUndefined(); + expect(elements.props.children[1].props.texture).toBeInstanceOf(Texture); - expect(elements.props.children[2].type).to.equal('alphaFilter'); - expect(elements.props.children[2].props.alpha).to.equal(0.5); + expect(elements.props.children[2].type).toEqual('alphaFilter'); + expect(elements.props.children[2].props.alpha).toEqual(0.5); - expect(elements.props.children[3].type).to.equal('pixiText'); - expect(elements.props.children[3].props.text).to.equal('Hello, World!'); + expect(elements.props.children[3].type).toEqual('pixiText'); + expect(elements.props.children[3].props.text).toEqual('Hello, World!'); }); }); diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json deleted file mode 100644 index 7e3f163c..00000000 --- a/tsconfig.eslint.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "files": [ - ".eslintrc.js", - "release.config.js", - "rollup.config.mjs", - ], - "include": [ - "./lib/**/*", - "./test/**/*", - "./vitest.setup.ts", - "./vitest.workspace.ts" - ] -} From b40f654c4ade3a15ba2975ae8eff3817a941622c Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 30 Dec 2024 01:14:43 -0600 Subject: [PATCH 3/7] chore: fix a typo Signed-off-by: Trezy --- src/helpers/getChildHostContext.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/helpers/getChildHostContext.ts b/src/helpers/getChildHostContext.ts index 62bdc1e0..506ff69a 100644 --- a/src/helpers/getChildHostContext.ts +++ b/src/helpers/getChildHostContext.ts @@ -1,8 +1,8 @@ import { log } from './log'; -export function getChildHostContext(parentHostContext: T) +export function getChildHostContext(childHostContext: T) { log('info', 'lifecycle::getChildHostContext'); - return parentHostContext; + return childHostContext; } From e121bb8f6a7aeab9ea5dcad24a81bd5195473d07 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 30 Dec 2024 15:20:40 -0600 Subject: [PATCH 4/7] feat: upgrade reconciler for React 19 Signed-off-by: Trezy --- package-lock.json | 79 ++++--------- package.json | 12 +- .../{Application.ts => Application.tsx} | 56 ++++----- src/constants/NO_CONTEXT.ts | 3 + src/core/createRoot.ts | 22 ++-- src/core/reconciler.ts | 78 +++++++++---- src/global.ts | 23 +++- src/helpers/applyProps.ts | 4 +- src/helpers/commitUpdate.ts | 27 ++--- src/helpers/createReconciler.ts | 109 ++++++++++++++++++ src/helpers/createTextInstance.ts | 10 +- src/helpers/getChildHostContext.ts | 3 +- src/helpers/getCurrentUpdatePriority.ts | 9 ++ src/helpers/getRootHostContext.ts | 3 +- src/helpers/hideTextInstance.ts | 11 ++ src/helpers/maySuspendCommit.ts | 8 ++ src/helpers/preloadInstance.ts | 8 ++ src/helpers/prepareUpdate.ts | 14 +-- src/helpers/requestPostPaintCallback.ts | 8 ++ src/helpers/resetFormInstance.ts | 6 + src/helpers/resolveEventTimeStamp.ts | 8 ++ src/helpers/resolveEventType.ts | 8 ++ ...ntPriority.ts => resolveUpdatePriority.ts} | 12 +- src/helpers/setCurrentUpdatePriority.ts | 9 ++ src/helpers/shouldAttemptEagerTransition.ts | 8 ++ src/helpers/startSuspendingCommit.ts | 6 + src/helpers/suspendInstance.ts | 6 + src/helpers/switchInstance.ts | 63 ---------- src/helpers/trackSchedulerEvent.ts | 6 + src/helpers/unhideTextInstance.ts | 11 ++ src/helpers/waitForCommitToBeReady.ts | 8 ++ src/store.ts | 3 + src/typedefs/ApplicationProps.ts | 5 +- src/typedefs/ApplicationRef.ts | 7 ++ src/typedefs/EventPriority.ts | 1 + src/typedefs/HostConfig.ts | 6 +- test/e2e/hooks/useApplication.test.tsx | 7 +- 37 files changed, 419 insertions(+), 248 deletions(-) rename src/components/{Application.ts => Application.tsx} (79%) create mode 100644 src/constants/NO_CONTEXT.ts create mode 100644 src/helpers/createReconciler.ts create mode 100644 src/helpers/getCurrentUpdatePriority.ts create mode 100644 src/helpers/hideTextInstance.ts create mode 100644 src/helpers/maySuspendCommit.ts create mode 100644 src/helpers/preloadInstance.ts create mode 100644 src/helpers/requestPostPaintCallback.ts create mode 100644 src/helpers/resetFormInstance.ts create mode 100644 src/helpers/resolveEventTimeStamp.ts create mode 100644 src/helpers/resolveEventType.ts rename src/helpers/{getCurrentEventPriority.ts => resolveUpdatePriority.ts} (76%) create mode 100644 src/helpers/setCurrentUpdatePriority.ts create mode 100644 src/helpers/shouldAttemptEagerTransition.ts create mode 100644 src/helpers/startSuspendingCommit.ts create mode 100644 src/helpers/suspendInstance.ts delete mode 100644 src/helpers/switchInstance.ts create mode 100644 src/helpers/trackSchedulerEvent.ts create mode 100644 src/helpers/unhideTextInstance.ts create mode 100644 src/helpers/waitForCommitToBeReady.ts create mode 100644 src/typedefs/ApplicationRef.ts create mode 100644 src/typedefs/EventPriority.ts diff --git a/package-lock.json b/package-lock.json index 7f578a79..1467bd7b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,8 +19,8 @@ "@testing-library/jest-dom": "^6.4.8", "@testing-library/react": "^16.1.0", "@testing-library/user-event": "^14.5.2", - "@types/react": "^18.3.2", - "@types/react-reconciler": "0.28.8", + "@types/react": "^19.0.0", + "@types/react-reconciler": "^0.28.9", "@vitejs/plugin-react": "^4.3.1", "@vitest/browser": "^2.0.4", "husky": "^8.0.0", @@ -37,13 +37,7 @@ }, "peerDependencies": { "pixi.js": "^8.2.6", - "react": ">=19.0.0", - "react-dom": ">=19.0.0" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - } + "react": ">=19.0.0" } }, "node_modules/@adobe/css-tools": { @@ -4118,31 +4112,35 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "devOptional": true, - "license": "MIT" - }, "node_modules/@types/react": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.5.tgz", - "integrity": "sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==", - "devOptional": true, + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.2.tgz", + "integrity": "sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==", + "dev": true, "license": "MIT", "dependencies": { - "@types/prop-types": "*", "csstype": "^3.0.2" } }, + "node_modules/@types/react-dom": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.2.tgz", + "integrity": "sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, "node_modules/@types/react-reconciler": { - "version": "0.28.8", - "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.8.tgz", - "integrity": "sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g==", + "version": "0.28.9", + "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.9.tgz", + "integrity": "sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg==", "dev": true, "license": "MIT", - "dependencies": { + "peerDependencies": { "@types/react": "*" } }, @@ -7591,7 +7589,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/data-urls": { @@ -20586,35 +20584,6 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/zustand": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.2.tgz", - "integrity": "sha512-8qNdnJVJlHlrKXi50LDqqUNmUbuBjoKLrYQBnoChIbVph7vni+sY+YpvdjXG9YLd/Bxr6scMcR+rm5H3aSqPaw==", - "license": "MIT", - "engines": { - "node": ">=12.20.0" - }, - "peerDependencies": { - "@types/react": ">=18.0.0", - "immer": ">=9.0.6", - "react": ">=18.0.0", - "use-sync-external-store": ">=1.2.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "immer": { - "optional": true - }, - "react": { - "optional": true - }, - "use-sync-external-store": { - "optional": true - } - } } } } diff --git a/package.json b/package.json index 62cde368..525c1b42 100644 --- a/package.json +++ b/package.json @@ -71,8 +71,8 @@ "@testing-library/jest-dom": "^6.4.8", "@testing-library/react": "^16.1.0", "@testing-library/user-event": "^14.5.2", - "@types/react": "^18.3.2", - "@types/react-reconciler": "0.28.8", + "@types/react": "^19.0.0", + "@types/react-reconciler": "^0.28.9", "@vitejs/plugin-react": "^4.3.1", "@vitest/browser": "^2.0.4", "husky": "^8.0.0", @@ -89,13 +89,7 @@ }, "peerDependencies": { "pixi.js": "^8.2.6", - "react": ">=19.0.0", - "react-dom": ">=19.0.0" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - } + "react": ">=19.0.0" }, "overrides": { "rollup": "^4.18.0" diff --git a/src/components/Application.ts b/src/components/Application.tsx similarity index 79% rename from src/components/Application.ts rename to src/components/Application.tsx index be080259..52f3e7f7 100644 --- a/src/components/Application.ts +++ b/src/components/Application.tsx @@ -6,10 +6,10 @@ import { import { createElement, forwardRef, - type ForwardRefRenderFunction, - type MutableRefObject, + type RefObject, useCallback, useEffect, + useImperativeHandle, useRef, } from 'react'; import { createRoot } from '../core/createRoot'; @@ -19,17 +19,16 @@ import { queueForUnmount } from '../helpers/queueForUnmount'; import { unqueueForUnmount } from '../helpers/unqueueForUnmount'; import { useIsomorphicLayoutEffect } from '../hooks/useIsomorphicLayoutEffect'; import { type ApplicationProps } from '../typedefs/ApplicationProps'; +import { type ApplicationRef } from '../typedefs/ApplicationRef'; const originalDefaultTextStyle = { ...TextStyle.defaultTextStyle }; -/** Creates a React root and renders a Pixi application. */ -export const ApplicationFunction: ForwardRefRenderFunction = ( +export const Application = forwardRef(function Application( props, forwardedRef, -) => +) { const { - attachToDevTools, children, className, defaultTextStyle, @@ -39,9 +38,20 @@ export const ApplicationFunction: ForwardRefRenderFunction = useRef(null); - const canvasRef: MutableRefObject = useRef(null); - const extensionsRef: MutableRefObject> = useRef(new Set()); + const applicationRef: RefObject = useRef(null); + const canvasRef = useRef(null); + const extensionsRef = useRef>(new Set()); + + useImperativeHandle(forwardedRef, () => ({ + getApplication() + { + return applicationRef.current; + }, + getCanvas() + { + return canvasRef.current; + }, + })); const updateResizeTo = useCallback(() => { @@ -75,31 +85,9 @@ export const ApplicationFunction: ForwardRefRenderFunction - { - globalScope.__PIXI_DEVTOOLS__ = { - app: application, - pixi, - renderer: application.renderer, - stage: application.stage, - }; - }); - } }, [onInit]); useIsomorphicLayoutEffect(() => @@ -193,8 +181,4 @@ export const ApplicationFunction: ForwardRefRenderFunction { - const typedKey = /** @type {keyof ApplicationOptions} */ (key); + const typedKey = key as keyof ApplicationOptions; if (isReadOnlyProperty( applicationOptions as unknown as Record, diff --git a/src/core/reconciler.ts b/src/core/reconciler.ts index 37a52dd2..e5d32937 100644 --- a/src/core/reconciler.ts +++ b/src/core/reconciler.ts @@ -1,6 +1,3 @@ -/* eslint-disable no-empty-function */ - -import Reconciler from 'react-reconciler'; import packageData from '../../package.json' with { type: 'json' }; import { afterActiveInstanceBlur } from '../helpers/afterActiveInstanceBlur'; import { appendChild } from '../helpers/appendChild'; @@ -8,48 +5,50 @@ import { beforeActiveInstanceBlur } from '../helpers/beforeActiveInstanceBlur'; import { clearContainer } from '../helpers/clearContainer'; import { commitUpdate } from '../helpers/commitUpdate'; import { createInstance } from '../helpers/createInstance'; +import { createReconciler } from '../helpers/createReconciler'; import { createTextInstance } from '../helpers/createTextInstance'; import { detachDeletedInstance } from '../helpers/detachDeletedInstance'; import { finalizeInitialChildren } from '../helpers/finalizeInitialChildren'; import { getChildHostContext } from '../helpers/getChildHostContext'; -import { getCurrentEventPriority } from '../helpers/getCurrentEventPriority'; +import { getCurrentUpdatePriority } from '../helpers/getCurrentUpdatePriority'; import { getInstanceFromNode } from '../helpers/getInstanceFromNode'; import { getInstanceFromScope } from '../helpers/getInstanceFromScope'; import { getPublicInstance } from '../helpers/getPublicInstance'; import { getRootHostContext } from '../helpers/getRootHostContext'; import { hideInstance } from '../helpers/hideInstance'; +import { hideTextInstance } from '../helpers/hideTextInstance'; import { insertBefore } from '../helpers/insertBefore'; +import { maySuspendCommit } from '../helpers/maySuspendCommit'; +import { preloadInstance } from '../helpers/preloadInstance'; import { prepareForCommit } from '../helpers/prepareForCommit'; import { preparePortalMount } from '../helpers/preparePortalMount'; import { prepareScopeUpdate } from '../helpers/prepareScopeUpdate'; -import { prepareUpdate } from '../helpers/prepareUpdate'; import { removeChild } from '../helpers/removeChild'; +import { requestPostPaintCallback } from '../helpers/requestPostPaintCallback'; import { resetAfterCommit } from '../helpers/resetAfterCommit'; +import { resetFormInstance } from '../helpers/resetFormInstance'; +import { resolveEventTimeStamp } from '../helpers/resolveEventTimeStamp'; +import { resolveEventType } from '../helpers/resolveEventType'; +import { resolveUpdatePriority } from '../helpers/resolveUpdatePriority'; +import { setCurrentUpdatePriority } from '../helpers/setCurrentUpdatePriority'; +import { shouldAttemptEagerTransition } from '../helpers/shouldAttemptEagerTransition'; import { shouldSetTextContent } from '../helpers/shouldSetTextContent'; +import { startSuspendingCommit } from '../helpers/startSuspendingCommit'; +import { suspendInstance } from '../helpers/suspendInstance'; +import { trackSchedulerEvent } from '../helpers/trackSchedulerEvent'; import { unhideInstance } from '../helpers/unhideInstance'; +import { unhideTextInstance } from '../helpers/unhideTextInstance'; +import { waitForCommitToBeReady } from '../helpers/waitForCommitToBeReady'; +import { type HostConfig } from '../typedefs/HostConfig'; -import type { HostConfig } from '../typedefs/HostConfig'; - -const reconcilerConfig: Reconciler.HostConfig< -HostConfig['type'], -HostConfig['props'], -HostConfig['containerInstance'], -HostConfig['instance'], -HostConfig['textInstance'], -HostConfig['suspenseInstance'], -HostConfig['hydratableInstance'], -HostConfig['publicInstance'], -HostConfig['hostContext'], -HostConfig['updatePayload'], -HostConfig['childSet'], -HostConfig['timeoutHandle'], -HostConfig['noTimeout'] -> = { +const reconcilerConfig = { isPrimaryRenderer: false, noTimeout: -1, + NotPendingTransition: null, supportsHydration: false, supportsMutation: true, supportsPersistence: false, + warnsIfNotActing: false, afterActiveInstanceBlur, appendChild, @@ -61,10 +60,12 @@ HostConfig['noTimeout'] commitUpdate, createInstance, createTextInstance, + hideTextInstance, + unhideTextInstance, detachDeletedInstance, finalizeInitialChildren, getChildHostContext, - getCurrentEventPriority, + getCurrentUpdatePriority, getInstanceFromNode, getInstanceFromScope, getPublicInstance, @@ -72,19 +73,46 @@ HostConfig['noTimeout'] hideInstance, insertBefore, insertInContainerBefore: insertBefore, + maySuspendCommit, + preloadInstance, prepareForCommit, preparePortalMount, prepareScopeUpdate, - prepareUpdate, removeChild, removeChildFromContainer: removeChild, + requestPostPaintCallback, resetAfterCommit, + resetFormInstance, + resolveEventTimeStamp, + resolveEventType, + resolveUpdatePriority, scheduleTimeout: setTimeout, + shouldAttemptEagerTransition, + setCurrentUpdatePriority, shouldSetTextContent, + startSuspendingCommit, + suspendInstance, + trackSchedulerEvent, unhideInstance, + waitForCommitToBeReady, }; -const reconciler = Reconciler(reconcilerConfig); +const reconciler = createReconciler< + HostConfig['type'], + HostConfig['props'], + HostConfig['containerInstance'], + HostConfig['instance'], + HostConfig['textInstance'], + HostConfig['suspenseInstance'], + HostConfig['hydratableInstance'], + HostConfig['formInstance'], + HostConfig['publicInstance'], + HostConfig['hostContext'], + HostConfig['childSet'], + HostConfig['timeoutHandle'], + HostConfig['noTimeout'], + HostConfig['transitionStatus'] +>(reconcilerConfig); reconciler.injectIntoDevTools({ bundleType: process.env.NODE_ENV === 'production' ? 0 : 1, diff --git a/src/global.ts b/src/global.ts index f7763403..a1290a0e 100644 --- a/src/global.ts +++ b/src/global.ts @@ -1,7 +1,28 @@ +import type {} from 'react'; +import type {} from 'react/jsx-dev-runtime'; +import type {} from 'react/jsx-runtime'; import type { NamespacedPixiElements } from './typedefs/NamespacedPixiElements'; import type { PixiElements } from './typedefs/PixiElements'; -declare global +declare module 'react' +{ + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX + { + interface IntrinsicElements extends PixiElements, NamespacedPixiElements {} + } +} + +declare module 'react/jsx-runtime' +{ + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX + { + interface IntrinsicElements extends PixiElements, NamespacedPixiElements {} + } +} + +declare module 'react/jsx-dev-runtime' { // eslint-disable-next-line @typescript-eslint/no-namespace namespace JSX diff --git a/src/helpers/applyProps.ts b/src/helpers/applyProps.ts index babe46a3..7f740224 100644 --- a/src/helpers/applyProps.ts +++ b/src/helpers/applyProps.ts @@ -52,7 +52,6 @@ export function applyProps( ) { const { - // eslint-disable-next-line @typescript-eslint/no-unused-vars __pixireact: instanceState = {} as InstanceState, ...instanceProps } = instance; @@ -144,8 +143,7 @@ export function applyProps( if (!ctor) { - /** @type {Container} */ - ctor = /** @type {*} */ (currentInstance.constructor); + ctor = currentInstance.constructor; // eslint-disable-next-line new-cap ctor = new ctor(); diff --git a/src/helpers/commitUpdate.ts b/src/helpers/commitUpdate.ts index 683141de..0ef1396a 100644 --- a/src/helpers/commitUpdate.ts +++ b/src/helpers/commitUpdate.ts @@ -1,32 +1,25 @@ import { applyProps } from '../helpers/applyProps'; import { log } from '../helpers/log'; -import { switchInstance } from './switchInstance'; - -import type { Fiber } from 'react-reconciler'; -import type { HostConfig } from '../typedefs/HostConfig'; -import type { UpdatePayload } from '../typedefs/UpdatePayload'; +import { type HostConfig } from '../typedefs/HostConfig'; +import { prepareUpdate } from './prepareUpdate'; export function commitUpdate( instance: HostConfig['instance'], - updatePayload: UpdatePayload, type: HostConfig['type'], - _oldProps: HostConfig['props'], + oldProps: HostConfig['props'], newProps: HostConfig['props'], - fiber: Fiber, ) { log('info', 'lifecycle::commitUpdate'); - const { - diff, - shouldReconstruct, - } = updatePayload; + const diff = prepareUpdate( + instance, + type, + oldProps, + newProps, + ); - if (shouldReconstruct) - { - switchInstance(instance, type, newProps, fiber); - } - else if (diff) + if (diff) { applyProps(instance, diff); } diff --git a/src/helpers/createReconciler.ts b/src/helpers/createReconciler.ts new file mode 100644 index 00000000..ff953233 --- /dev/null +++ b/src/helpers/createReconciler.ts @@ -0,0 +1,109 @@ +import Reconciler from 'react-reconciler'; +import { type EventPriority } from '../typedefs/EventPriority'; + +export const createReconciler = Reconciler as unknown as < + Type, + Props, + Container, + Instance, + TextInstance, + SuspenseInstance, + HydratableInstance, + FormInstance, + PublicInstance, + HostContext, + ChildSet, + TimeoutHandle, + NoTimeout, + TransitionStatus, +>( + config: Omit< + Reconciler.HostConfig< + Type, + Props, + Container, + Instance, + TextInstance, + SuspenseInstance, + HydratableInstance, + PublicInstance, + HostContext, + null, // updatePayload + ChildSet, + TimeoutHandle, + NoTimeout + >, + 'getCurrentEventPriority' | 'prepareUpdate' | 'commitUpdate' + > & { + /** + * This method should mutate the `instance` and perform prop diffing if needed. + * + * The `internalHandle` data structure is meant to be opaque. If you bend the rules and rely on its internal fields, be aware that it may change significantly between versions. You're taking on additional maintenance risk by reading from it, and giving up all guarantees if you write something to it. + */ + commitUpdate?( + instance: Instance, + type: Type, + prevProps: Props, + nextProps: Props, + internalHandle: Reconciler.OpaqueHandle, + ): void + + // Undocumented + // https://github.com/facebook/react/pull/26722 + NotPendingTransition: TransitionStatus | null + + // https://github.com/facebook/react/pull/28751 + setCurrentUpdatePriority(newPriority: EventPriority): void + + getCurrentUpdatePriority(): EventPriority + + resolveUpdatePriority(): EventPriority + + // https://github.com/facebook/react/pull/28804 + resetFormInstance(form: FormInstance): void + + // https://github.com/facebook/react/pull/25105 + requestPostPaintCallback(callback: (time: number) => void): void + + // https://github.com/facebook/react/pull/26025 + shouldAttemptEagerTransition(): boolean + + // https://github.com/facebook/react/pull/31528 + trackSchedulerEvent(): void + + // https://github.com/facebook/react/pull/31008 + resolveEventType(): null | string + + resolveEventTimeStamp(): number + + /** + * This method is called during render to determine if the Host Component type and props require some kind of loading process to complete before committing an update. + */ + maySuspendCommit(type: Type, props: Props): boolean + + /** + * This method may be called during render if the Host Component type and props might suspend a commit. It can be used to initiate any work that might shorten the duration of a suspended commit. + */ + preloadInstance(type: Type, props: Props): boolean + + /** + * This method is called just before the commit phase. Use it to set up any necessary state while any Host Components that might suspend this commit are evaluated to determine if the commit must be suspended. + */ + startSuspendingCommit(): void + + /** + * This method is called after `startSuspendingCommit` for each Host Component that indicated it might suspend a commit. + */ + suspendInstance(type: Type, props: Props): void + + /** + * This method is called after all `suspendInstance` calls are complete. + * + * Return `null` if the commit can happen immediately. + * + * Return `(initiateCommit: Function) => Function` if the commit must be suspended. The argument to this callback will initiate the commit when called. The return value is a cancellation function that the Reconciler can use to abort the commit. + * + */ + waitForCommitToBeReady(): ((initiateCommit: (...args: unknown[]) => unknown) => (...args: unknown[]) => unknown) | null + }, +) => Reconciler.Reconciler; diff --git a/src/helpers/createTextInstance.ts b/src/helpers/createTextInstance.ts index fd9fc2d8..90013932 100644 --- a/src/helpers/createTextInstance.ts +++ b/src/helpers/createTextInstance.ts @@ -1,17 +1,15 @@ +import { type PixiReactNode } from 'typedefs/PixiReactNode'; +import { type HostConfig } from '../typedefs/HostConfig'; import { log } from './log'; -import type { HostConfig } from '../typedefs/HostConfig'; - /** Always throws, because we don't support this (yet). */ export function createTextInstance( _text: string, _rootContainer: HostConfig['containerInstance'], - _hostContext: null, + _hostContext: HostConfig['hostContext'], _internalHandle: any, -) +): PixiReactNode { log('info', 'lifecycle::createTextInstance'); throw new Error('Text instances are not yet supported. Please use a `` component.'); - - return _rootContainer; } diff --git a/src/helpers/getChildHostContext.ts b/src/helpers/getChildHostContext.ts index 506ff69a..cda6b391 100644 --- a/src/helpers/getChildHostContext.ts +++ b/src/helpers/getChildHostContext.ts @@ -1,8 +1,9 @@ +import { NO_CONTEXT } from '../constants/NO_CONTEXT'; import { log } from './log'; export function getChildHostContext(childHostContext: T) { log('info', 'lifecycle::getChildHostContext'); - return childHostContext; + return childHostContext ?? NO_CONTEXT; } diff --git a/src/helpers/getCurrentUpdatePriority.ts b/src/helpers/getCurrentUpdatePriority.ts new file mode 100644 index 00000000..777729c7 --- /dev/null +++ b/src/helpers/getCurrentUpdatePriority.ts @@ -0,0 +1,9 @@ +import { store } from '../store'; +import { log } from './log'; + +export function getCurrentUpdatePriority() +{ + log('info', 'lifecycle::getCurrentUpdatePriority'); + + return store.currentUpdatePriority; +} diff --git a/src/helpers/getRootHostContext.ts b/src/helpers/getRootHostContext.ts index 5ea0367e..8747d9a2 100644 --- a/src/helpers/getRootHostContext.ts +++ b/src/helpers/getRootHostContext.ts @@ -1,3 +1,4 @@ +import { NO_CONTEXT } from '../constants/NO_CONTEXT'; import { log } from './log'; /** Retrieves the host context from the root container. */ @@ -5,5 +6,5 @@ export function getRootHostContext() { log('info', 'lifecycle::getRootHostContext'); - return null; + return NO_CONTEXT; } diff --git a/src/helpers/hideTextInstance.ts b/src/helpers/hideTextInstance.ts new file mode 100644 index 00000000..d1fa5076 --- /dev/null +++ b/src/helpers/hideTextInstance.ts @@ -0,0 +1,11 @@ +import { type HostConfig } from '../typedefs/HostConfig'; +import { log } from './log'; + +/** Always throws, because we don't support this (yet). */ +export function hideTextInstance( + _textInstance: HostConfig['textInstance'], +) +{ + log('info', 'lifecycle::hideTextInstance'); + throw new Error('Text instances are not yet supported. Please use a `` component.'); +} diff --git a/src/helpers/maySuspendCommit.ts b/src/helpers/maySuspendCommit.ts new file mode 100644 index 00000000..77f89895 --- /dev/null +++ b/src/helpers/maySuspendCommit.ts @@ -0,0 +1,8 @@ +import { log } from './log'; + +export function maySuspendCommit() +{ + log('info', 'lifecycle::maySuspendCommit'); + + return false; +} diff --git a/src/helpers/preloadInstance.ts b/src/helpers/preloadInstance.ts new file mode 100644 index 00000000..553a5bc3 --- /dev/null +++ b/src/helpers/preloadInstance.ts @@ -0,0 +1,8 @@ +import { log } from './log'; + +export function preloadInstance() +{ + log('info', 'lifecycle::preloadInstance'); + + return true; +} diff --git a/src/helpers/prepareUpdate.ts b/src/helpers/prepareUpdate.ts index 317f033a..73fe8aa2 100644 --- a/src/helpers/prepareUpdate.ts +++ b/src/helpers/prepareUpdate.ts @@ -1,9 +1,7 @@ +import { type HostConfig } from '../typedefs/HostConfig'; import { diffProps } from './diffProps'; import { log } from './log'; -import type { HostConfig } from '../typedefs/HostConfig'; -import type { UpdatePayload } from '../typedefs/UpdatePayload'; - export function prepareUpdate( _instance: HostConfig['instance'], _type: HostConfig['type'], @@ -13,17 +11,11 @@ export function prepareUpdate( { log('info', 'lifecycle::prepareUpdate'); - const updatePayload: UpdatePayload = { - shouldReconstruct: false, - }; - const { - // eslint-disable-next-line @typescript-eslint/no-unused-vars children: newChildren, ...newPropsRest } = newProps; const { - // eslint-disable-next-line @typescript-eslint/no-unused-vars children: oldChildren, ...oldPropsRest } = oldProps; @@ -32,8 +24,8 @@ export function prepareUpdate( if (diff.changes.length) { - updatePayload.diff = diff; + return diff; } - return updatePayload; + return null; } diff --git a/src/helpers/requestPostPaintCallback.ts b/src/helpers/requestPostPaintCallback.ts new file mode 100644 index 00000000..522e543a --- /dev/null +++ b/src/helpers/requestPostPaintCallback.ts @@ -0,0 +1,8 @@ +import { log } from './log'; + +export function requestPostPaintCallback( + _callback: (time: number) => void, +) +{ + log('info', 'lifecycle::requestPostPaintCallback'); +} diff --git a/src/helpers/resetFormInstance.ts b/src/helpers/resetFormInstance.ts new file mode 100644 index 00000000..9c049885 --- /dev/null +++ b/src/helpers/resetFormInstance.ts @@ -0,0 +1,6 @@ +import { log } from './log'; + +export function resetFormInstance() +{ + log('info', 'lifecycle::resetFormInstance'); +} diff --git a/src/helpers/resolveEventTimeStamp.ts b/src/helpers/resolveEventTimeStamp.ts new file mode 100644 index 00000000..b02a55c2 --- /dev/null +++ b/src/helpers/resolveEventTimeStamp.ts @@ -0,0 +1,8 @@ +import { log } from './log'; + +export function resolveEventTimeStamp() +{ + log('info', 'lifecycle::resolveEventTimeStamp'); + + return -1.1; +} diff --git a/src/helpers/resolveEventType.ts b/src/helpers/resolveEventType.ts new file mode 100644 index 00000000..35062bec --- /dev/null +++ b/src/helpers/resolveEventType.ts @@ -0,0 +1,8 @@ +import { log } from './log'; + +export function resolveEventType() +{ + log('info', 'lifecycle::resolveEventType'); + + return null; +} diff --git a/src/helpers/getCurrentEventPriority.ts b/src/helpers/resolveUpdatePriority.ts similarity index 76% rename from src/helpers/getCurrentEventPriority.ts rename to src/helpers/resolveUpdatePriority.ts index b815daf5..d78c1d1d 100644 --- a/src/helpers/getCurrentEventPriority.ts +++ b/src/helpers/resolveUpdatePriority.ts @@ -2,12 +2,18 @@ import { ContinuousEventPriority, DefaultEventPriority, DiscreteEventPriority, -} from 'react-reconciler/constants.js'; +} from 'react-reconciler/constants'; +import { store } from '../store'; import { log } from './log'; -export function getCurrentEventPriority() +export function resolveUpdatePriority() { - log('info', 'lifecycle::getCurrentEventPriority'); + log('info', 'lifecycle::resolveUpdatePriority'); + + if (store.currentUpdatePriority) + { + return store.currentUpdatePriority; + } const globalScope = (typeof self !== 'undefined' && self) || (typeof window !== 'undefined' && window); diff --git a/src/helpers/setCurrentUpdatePriority.ts b/src/helpers/setCurrentUpdatePriority.ts new file mode 100644 index 00000000..f872a3ec --- /dev/null +++ b/src/helpers/setCurrentUpdatePriority.ts @@ -0,0 +1,9 @@ +import { store } from '../store'; +import { log } from './log'; + +export function setCurrentUpdatePriority(newPriority: number) +{ + log('info', 'lifecycle::setCurrentUpdatePriority'); + + store.currentUpdatePriority = newPriority; +} diff --git a/src/helpers/shouldAttemptEagerTransition.ts b/src/helpers/shouldAttemptEagerTransition.ts new file mode 100644 index 00000000..9fd8909b --- /dev/null +++ b/src/helpers/shouldAttemptEagerTransition.ts @@ -0,0 +1,8 @@ +import { log } from './log'; + +export function shouldAttemptEagerTransition() +{ + log('info', 'lifecycle::shouldAttemptEagerTransition'); + + return false; +} diff --git a/src/helpers/startSuspendingCommit.ts b/src/helpers/startSuspendingCommit.ts new file mode 100644 index 00000000..e440638b --- /dev/null +++ b/src/helpers/startSuspendingCommit.ts @@ -0,0 +1,6 @@ +import { log } from './log'; + +export function startSuspendingCommit() +{ + log('info', 'lifecycle::startSuspendingCommit'); +} diff --git a/src/helpers/suspendInstance.ts b/src/helpers/suspendInstance.ts new file mode 100644 index 00000000..0cfb758f --- /dev/null +++ b/src/helpers/suspendInstance.ts @@ -0,0 +1,6 @@ +import { log } from './log'; + +export function suspendInstance() +{ + log('info', 'lifecycle::suspendInstance'); +} diff --git a/src/helpers/switchInstance.ts b/src/helpers/switchInstance.ts deleted file mode 100644 index cb405557..00000000 --- a/src/helpers/switchInstance.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { appendChild } from './appendChild'; -import { createInstance } from './createInstance'; -import { removeChild } from './removeChild'; - -import type { Fiber } from 'react-reconciler'; -import type { HostConfig } from '../typedefs/HostConfig'; - -export function switchInstance( - instance: HostConfig['instance'], - type: HostConfig['type'], - newProps: HostConfig['props'], - fiber: Fiber, -) -{ - const parent = instance.__pixireact?.parent; - - if (!parent) - { - return; - } - - const root = instance.__pixireact.root as HostConfig['containerInstance']; - const newInstance = createInstance(type, newProps, root); - - if (!instance.__pixireact.autoRemovedBeforeAppend) - { - removeChild(parent, instance); - } - - if (newInstance.parent) - { - newInstance.__pixireact.autoRemovedBeforeAppend = true; - } - - appendChild(parent as HostConfig['containerInstance'], newInstance); - - // This evil hack switches the react-internal fiber node - // https://github.com/facebook/react/issues/14983 - // https://github.com/facebook/react/pull/15021 - const fibers = [fiber, fiber.alternate]; - - fibers.forEach((fiber) => - { - if (fiber !== null) - { - fiber.stateNode = newInstance; - - if (fiber.ref) - { - if (typeof fiber.ref === 'function') - { - fiber.ref(newInstance); - } - else - { - const ref = fiber.ref; - - ref.current = newInstance; - } - } - } - }); -} diff --git a/src/helpers/trackSchedulerEvent.ts b/src/helpers/trackSchedulerEvent.ts new file mode 100644 index 00000000..5e008949 --- /dev/null +++ b/src/helpers/trackSchedulerEvent.ts @@ -0,0 +1,6 @@ +import { log } from './log'; + +export function trackSchedulerEvent() +{ + log('info', 'lifecycle::trackSchedulerEvent'); +} diff --git a/src/helpers/unhideTextInstance.ts b/src/helpers/unhideTextInstance.ts new file mode 100644 index 00000000..f95a9c27 --- /dev/null +++ b/src/helpers/unhideTextInstance.ts @@ -0,0 +1,11 @@ +import { type HostConfig } from '../typedefs/HostConfig'; +import { log } from './log'; + +/** Always throws, because we don't support this (yet). */ +export function unhideTextInstance( + _textInstance: HostConfig['textInstance'], +) +{ + log('info', 'lifecycle::unhideTextInstance'); + throw new Error('Text instances are not yet supported. Please use a `` component.'); +} diff --git a/src/helpers/waitForCommitToBeReady.ts b/src/helpers/waitForCommitToBeReady.ts new file mode 100644 index 00000000..4da7922d --- /dev/null +++ b/src/helpers/waitForCommitToBeReady.ts @@ -0,0 +1,8 @@ +import { log } from './log'; + +export function waitForCommitToBeReady() +{ + log('info', 'lifecycle::waitForCommitToBeReady'); + + return null; +} diff --git a/src/store.ts b/src/store.ts index 983b9054..a6d886c1 100644 --- a/src/store.ts +++ b/src/store.ts @@ -1,9 +1,12 @@ +import { DefaultEventPriority } from 'react-reconciler/constants'; import { type Root } from './typedefs/Root'; const store: { + currentUpdatePriority: number, debug: boolean, unmountQueue: Set, } = { + currentUpdatePriority: DefaultEventPriority, debug: false, unmountQueue: new Set(), }; diff --git a/src/typedefs/ApplicationProps.ts b/src/typedefs/ApplicationProps.ts index 91973026..1932c19b 100644 --- a/src/typedefs/ApplicationProps.ts +++ b/src/typedefs/ApplicationProps.ts @@ -13,7 +13,10 @@ import type { PixiReactChildNode } from './PixiReactChildNode'; export interface BaseApplicationProps { - /** @description Whether this application chould be attached to the dev tools. NOTE: This should only be enabled on one application at a time. */ + /** + * @description Whether this application chould be attached to the dev tools. NOTE: This should only be enabled on one application at a time. + * @deprecated Pixi.js handles this automatically, making this option superfluous. + */ attachToDevTools?: boolean /** @description CSS classes to be applied to the Pixi Application's canvas element. */ diff --git a/src/typedefs/ApplicationRef.ts b/src/typedefs/ApplicationRef.ts new file mode 100644 index 00000000..be665bed --- /dev/null +++ b/src/typedefs/ApplicationRef.ts @@ -0,0 +1,7 @@ +import { type Application as PixiApplication } from 'pixi.js'; + +export interface ApplicationRef +{ + getApplication(): PixiApplication | null, + getCanvas(): HTMLCanvasElement | null, +} diff --git a/src/typedefs/EventPriority.ts b/src/typedefs/EventPriority.ts new file mode 100644 index 00000000..83ee1a64 --- /dev/null +++ b/src/typedefs/EventPriority.ts @@ -0,0 +1 @@ +export type EventPriority = number; diff --git a/src/typedefs/HostConfig.ts b/src/typedefs/HostConfig.ts index ab96fce3..ca718b3e 100644 --- a/src/typedefs/HostConfig.ts +++ b/src/typedefs/HostConfig.ts @@ -12,10 +12,11 @@ export interface HostConfig childSet: never; containerInstance: PixiReactNode; filterInstance: PixiReactNode; - hostContext: null; + formInstance: never, + hostContext: Record; hydratableInstance: never; instance: PixiReactNode; - noTimeout: -1; + noTimeout: number; props: Record; publicInstance: PixiReactNode; suspenseInstance: PixiReactNode; @@ -23,4 +24,5 @@ export interface HostConfig timeoutHandle: number; type: keyof PixiElements | keyof NamespacedPixiElements; updatePayload: object; + transitionStatus: null, } diff --git a/test/e2e/hooks/useApplication.test.tsx b/test/e2e/hooks/useApplication.test.tsx index 1cff66dc..ee83b521 100644 --- a/test/e2e/hooks/useApplication.test.tsx +++ b/test/e2e/hooks/useApplication.test.tsx @@ -1,18 +1,17 @@ import { type Application as PixiApplication } from 'pixi.js'; +import { type ReactNode } from 'react'; import { describe, expect, it, } from 'vitest'; -import { Application } from '../../../src/components/Application.ts'; -import { useApplication } from '../../../src/hooks/useApplication.ts'; +import { Application } from '../../../src/components/Application'; +import { useApplication } from '../../../src/hooks/useApplication'; import { render, renderHook, } from '@testing-library/react'; -import type { ReactNode } from 'react'; - describe('useApplication', () => { it('returns the nearest application', async () => From 9c6cc076cd7dbce2c07f74862f91c05d204a3f00 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 30 Dec 2024 01:03:59 -0600 Subject: [PATCH 5/7] chore: update pixi eslint config Signed-off-by: Trezy --- README.md | 4 ++-- package-lock.json | 31 +++++++++++++++++++++++++- src/components/Context.ts | 3 +-- src/core/createRoot.ts | 13 +++++------ src/core/roots.ts | 2 +- src/global.ts | 5 +++-- src/helpers/appendChild.ts | 3 +-- src/helpers/applyProps.ts | 15 ++++++------- src/helpers/attach.ts | 3 +-- src/helpers/catalogue.ts | 2 +- src/helpers/createInstance.ts | 3 +-- src/helpers/detach.ts | 3 +-- src/helpers/diffProps.ts | 5 ++--- src/helpers/getAssetKey.ts | 2 +- src/helpers/hideInstance.ts | 3 +-- src/helpers/insertBefore.ts | 3 +-- src/helpers/isDiffSet.ts | 2 +- src/helpers/log.ts | 1 - src/helpers/prepareInstance.ts | 10 ++++----- src/helpers/removeChild.ts | 3 +-- src/helpers/unhideInstance.ts | 3 +-- src/hooks/useAsset.ts | 15 ++++++------- src/hooks/useAssets.ts | 9 ++++---- src/hooks/useSuspenseAssets.ts | 17 +++++++------- src/hooks/useTick.ts | 5 ++--- src/index.ts | 2 +- src/typedefs/ApplicationProps.ts | 20 ++++++++--------- src/typedefs/ApplicationState.ts | 2 +- src/typedefs/BasePixiReactNode.ts | 8 +++---- src/typedefs/ConstructorOptions.ts | 3 +-- src/typedefs/CreateRootOptions.ts | 2 +- src/typedefs/DiffSet.ts | 2 +- src/typedefs/DrawCallback.ts | 2 +- src/typedefs/EventHandlers.ts | 10 ++++----- src/typedefs/HostConfig.ts | 7 +++--- src/typedefs/InstanceState.ts | 4 ++-- src/typedefs/InternalState.ts | 2 +- src/typedefs/NamespacedPixiElements.ts | 2 +- src/typedefs/PixiElements.ts | 7 +++--- src/typedefs/PixiReactChildNode.ts | 4 ++-- src/typedefs/PixiReactNode.ts | 30 +++++++++++++------------ src/typedefs/Root.ts | 8 +++---- src/typedefs/UnresolvedAsset.ts | 2 +- src/typedefs/UpdatePayload.ts | 2 +- src/typedefs/UseAssetsOptions.ts | 3 +-- src/typedefs/UseAssetsResult.ts | 2 +- src/typedefs/UseTickOptions.ts | 2 +- test/e2e/hooks/useApplication.test.tsx | 7 +++--- 48 files changed, 156 insertions(+), 142 deletions(-) diff --git a/README.md b/README.md index ed9d70c8..9845c6a2 100644 --- a/README.md +++ b/README.md @@ -207,8 +207,8 @@ const MyComponent = () => { If you're using Typescript, this new `` component will throw type errors. Pixi React exports a `PixiReactElementProps` type that can be used to solve this. You'll need to pass the `Viewport` into `PixiReactElementProps` and inject it into JSX: ```ts -import type { PixiReactElementProps } from '@pixi/react' -import type { Viewport } from 'pixi-viewport' +import { type PixiReactElementProps } from '@pixi/react' +import { type Viewport } from 'pixi-viewport' declare global { namespace JSX { diff --git a/package-lock.json b/package-lock.json index 1467bd7b..dc26aa6d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7589,7 +7589,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/data-urls": { @@ -20584,6 +20584,35 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zustand": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.2.tgz", + "integrity": "sha512-8qNdnJVJlHlrKXi50LDqqUNmUbuBjoKLrYQBnoChIbVph7vni+sY+YpvdjXG9YLd/Bxr6scMcR+rm5H3aSqPaw==", + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } } } } diff --git a/src/components/Context.ts b/src/components/Context.ts index f7468a44..4fb94a93 100644 --- a/src/components/Context.ts +++ b/src/components/Context.ts @@ -1,6 +1,5 @@ import { createContext } from 'react'; - -import type { ApplicationState } from '../typedefs/ApplicationState'; +import { type ApplicationState } from '../typedefs/ApplicationState'; export const Context = createContext({} as ApplicationState); diff --git a/src/core/createRoot.ts b/src/core/createRoot.ts index 4961f6bf..22165eee 100644 --- a/src/core/createRoot.ts +++ b/src/core/createRoot.ts @@ -1,20 +1,19 @@ import { Application } from 'pixi.js'; +import { type ApplicationOptions } from 'pixi.js'; import { createElement } from 'react'; +import { type ReactNode } from 'react'; import { ConcurrentRoot } from 'react-reconciler/constants.js'; import { ContextProvider } from '../components/Context'; import { isReadOnlyProperty } from '../helpers/isReadOnlyProperty'; import { log } from '../helpers/log'; import { prepareInstance } from '../helpers/prepareInstance'; +import { type ApplicationState } from '../typedefs/ApplicationState'; +import { type CreateRootOptions } from '../typedefs/CreateRootOptions'; +import { type HostConfig } from '../typedefs/HostConfig'; +import { type InternalState } from '../typedefs/InternalState'; import { reconciler } from './reconciler'; import { roots } from './roots'; -import type { ApplicationOptions } from 'pixi.js'; -import type { ReactNode } from 'react'; -import type { ApplicationState } from '../typedefs/ApplicationState'; -import type { CreateRootOptions } from '../typedefs/CreateRootOptions'; -import type { HostConfig } from '../typedefs/HostConfig'; -import type { InternalState } from '../typedefs/InternalState'; - /** Creates a new root for a Pixi React app. */ export function createRoot( /** @description The DOM node which will serve as the root for this tree. */ diff --git a/src/core/roots.ts b/src/core/roots.ts index 26f6f480..d499ca20 100644 --- a/src/core/roots.ts +++ b/src/core/roots.ts @@ -1,4 +1,4 @@ -import type { Root } from '../typedefs/Root'; +import { type Root } from '../typedefs/Root'; /** We store roots here since we can render to multiple canvases. */ export const roots: Map = new Map(); diff --git a/src/global.ts b/src/global.ts index a1290a0e..9a1651fb 100644 --- a/src/global.ts +++ b/src/global.ts @@ -1,8 +1,9 @@ +import { type NamespacedPixiElements } from './typedefs/NamespacedPixiElements'; +import { type PixiElements } from './typedefs/PixiElements'; + import type {} from 'react'; import type {} from 'react/jsx-dev-runtime'; import type {} from 'react/jsx-runtime'; -import type { NamespacedPixiElements } from './typedefs/NamespacedPixiElements'; -import type { PixiElements } from './typedefs/PixiElements'; declare module 'react' { diff --git a/src/helpers/appendChild.ts b/src/helpers/appendChild.ts index 22170daa..5af1a405 100644 --- a/src/helpers/appendChild.ts +++ b/src/helpers/appendChild.ts @@ -2,11 +2,10 @@ import { Container, Filter, } from 'pixi.js'; +import { type HostConfig } from '../typedefs/HostConfig'; import { attach } from './attach'; import { log } from './log'; -import type { HostConfig } from '../typedefs/HostConfig'; - /** Adds elements to our application. */ export function appendChild( parentNode: HostConfig['containerInstance'], diff --git a/src/helpers/applyProps.ts b/src/helpers/applyProps.ts index 7f740224..2073845a 100644 --- a/src/helpers/applyProps.ts +++ b/src/helpers/applyProps.ts @@ -2,10 +2,17 @@ import { Container, Graphics, } from 'pixi.js'; +import { + type FederatedPointerEvent, + type FederatedWheelEvent, +} from 'pixi.js'; import { PixiToReactEventPropNames, ReactToPixiEventPropNames, } from '../constants/EventPropNames'; +import { type DiffSet } from '../typedefs/DiffSet'; +import { type HostConfig } from '../typedefs/HostConfig'; +import { type InstanceState } from '../typedefs/InstanceState'; import { isNull, isUndefined, @@ -15,14 +22,6 @@ import { isDiffSet } from './isDiffSet'; import { isReadOnlyProperty } from './isReadOnlyProperty'; import { log } from './log'; -import type { - FederatedPointerEvent, - FederatedWheelEvent, -} from 'pixi.js'; -import type { DiffSet } from '../typedefs/DiffSet'; -import type { HostConfig } from '../typedefs/HostConfig'; -import type { InstanceState } from '../typedefs/InstanceState'; - const DEFAULT = '__default'; const DEFAULTS_CONTAINERS = new Map(); diff --git a/src/helpers/attach.ts b/src/helpers/attach.ts index 31d6f880..395a118f 100644 --- a/src/helpers/attach.ts +++ b/src/helpers/attach.ts @@ -1,6 +1,5 @@ import { Filter } from 'pixi.js'; - -import type { HostConfig } from '../typedefs/HostConfig'; +import { type HostConfig } from '../typedefs/HostConfig'; export function attach( parentInstance: HostConfig['containerInstance'], diff --git a/src/helpers/catalogue.ts b/src/helpers/catalogue.ts index d93c2092..6416f460 100644 --- a/src/helpers/catalogue.ts +++ b/src/helpers/catalogue.ts @@ -1,4 +1,4 @@ -import type { HostConfig } from '../typedefs/HostConfig'; +import { type HostConfig } from '../typedefs/HostConfig'; export const catalogue: { [name: string]: { diff --git a/src/helpers/createInstance.ts b/src/helpers/createInstance.ts index d065fd27..7c1895ed 100644 --- a/src/helpers/createInstance.ts +++ b/src/helpers/createInstance.ts @@ -1,5 +1,6 @@ import { ReactToPixiEventPropNames } from '../constants/EventPropNames'; import { PixiReactIgnoredProps } from '../constants/PixiReactIgnoredProps'; +import { type HostConfig } from '../typedefs/HostConfig'; import { applyProps } from './applyProps'; import { catalogue } from './catalogue'; import { convertStringToPascalCase } from './convertStringToPascalCase'; @@ -8,8 +9,6 @@ import { log } from './log'; import { parseComponentType } from './parseComponentType'; import { prepareInstance } from './prepareInstance'; -import type { HostConfig } from '../typedefs/HostConfig'; - export function createInstance( type: HostConfig['type'], props: HostConfig['props'], diff --git a/src/helpers/detach.ts b/src/helpers/detach.ts index d8ac3c90..85caefaf 100644 --- a/src/helpers/detach.ts +++ b/src/helpers/detach.ts @@ -1,6 +1,5 @@ import { Filter } from 'pixi.js'; - -import type { HostConfig } from '../typedefs/HostConfig'; +import { type HostConfig } from '../typedefs/HostConfig'; export function detach( childInstance: HostConfig['instance'], diff --git a/src/helpers/diffProps.ts b/src/helpers/diffProps.ts index f309ab16..ad54d2f2 100644 --- a/src/helpers/diffProps.ts +++ b/src/helpers/diffProps.ts @@ -1,10 +1,9 @@ import { ReactToPixiEventPropNames } from '../constants/EventPropNames'; +import { type Change } from '../typedefs/Change'; +import { type HostConfig } from '../typedefs/HostConfig'; import { isEqual } from './compare'; import { gentleCloneProps } from './gentleCloneProps'; -import type { Change } from '../typedefs/Change'; -import type { HostConfig } from '../typedefs/HostConfig'; - const DEFAULT = '__default'; export function diffProps( diff --git a/src/helpers/getAssetKey.ts b/src/helpers/getAssetKey.ts index ef58e123..b075780b 100644 --- a/src/helpers/getAssetKey.ts +++ b/src/helpers/getAssetKey.ts @@ -1,4 +1,4 @@ -import type { UnresolvedAsset } from '../typedefs/UnresolvedAsset'; +import { type UnresolvedAsset } from '../typedefs/UnresolvedAsset'; /** Retrieves the key from an unresolved asset. */ export function getAssetKey(asset: UnresolvedAsset) diff --git a/src/helpers/hideInstance.ts b/src/helpers/hideInstance.ts index 8c7d0d73..2156c92a 100644 --- a/src/helpers/hideInstance.ts +++ b/src/helpers/hideInstance.ts @@ -2,8 +2,7 @@ import { Container, Filter, } from 'pixi.js'; - -import type { HostConfig } from '../typedefs/HostConfig'; +import { type HostConfig } from '../typedefs/HostConfig'; export function hideInstance( instance: HostConfig['instance'] diff --git a/src/helpers/insertBefore.ts b/src/helpers/insertBefore.ts index e0bb0a53..78b4c3be 100644 --- a/src/helpers/insertBefore.ts +++ b/src/helpers/insertBefore.ts @@ -2,13 +2,12 @@ import { Container, Filter, } from 'pixi.js'; +import { type HostConfig } from '../typedefs/HostConfig'; import { attach } from './attach'; import { detach } from './detach'; import { invariant } from './invariant'; import { log } from './log'; -import type { HostConfig } from '../typedefs/HostConfig'; - export function insertBefore( parentInstance: HostConfig['containerInstance'], childInstance: HostConfig['instance'], diff --git a/src/helpers/isDiffSet.ts b/src/helpers/isDiffSet.ts index 0d5f2c19..42702215 100644 --- a/src/helpers/isDiffSet.ts +++ b/src/helpers/isDiffSet.ts @@ -1,4 +1,4 @@ -import type { DiffSet } from '../typedefs/DiffSet'; +import { type DiffSet } from '../typedefs/DiffSet'; /** Whether the input is a diff set. */ export function isDiffSet(input: any): input is DiffSet diff --git a/src/helpers/log.ts b/src/helpers/log.ts index e1bd3407..3ce6dfe0 100644 --- a/src/helpers/log.ts +++ b/src/helpers/log.ts @@ -14,7 +14,6 @@ export function log(logType: LogType, ...args: any[]) if (!(logMethod instanceof Function)) { - // eslint-disable-next-line no-console console.warn(`Attempted to create an invalid log type: "${logType}"`); return; diff --git a/src/helpers/prepareInstance.ts b/src/helpers/prepareInstance.ts index d5e29bdf..b18d37b6 100644 --- a/src/helpers/prepareInstance.ts +++ b/src/helpers/prepareInstance.ts @@ -1,9 +1,9 @@ -import type { - Container, - Filter, +import { + type Container, + type Filter, } from 'pixi.js'; -import type { HostConfig } from '../typedefs/HostConfig'; -import type { InstanceState } from '../typedefs/InstanceState'; +import { type HostConfig } from '../typedefs/HostConfig'; +import { type InstanceState } from '../typedefs/InstanceState'; /** Create the instance with the provided sate and attach the component to it. */ export function prepareInstance( diff --git a/src/helpers/removeChild.ts b/src/helpers/removeChild.ts index 032fe6b5..0409d5a8 100644 --- a/src/helpers/removeChild.ts +++ b/src/helpers/removeChild.ts @@ -1,9 +1,8 @@ import { Filter } from 'pixi.js'; +import { type HostConfig } from '../typedefs/HostConfig'; import { detach } from './detach'; import { log } from './log'; -import type { HostConfig } from '../typedefs/HostConfig'; - /** Removes elements from our scene and disposes of them. */ export function removeChild( _parentInstance: HostConfig['containerInstance'], diff --git a/src/helpers/unhideInstance.ts b/src/helpers/unhideInstance.ts index 598703d0..55f90bec 100644 --- a/src/helpers/unhideInstance.ts +++ b/src/helpers/unhideInstance.ts @@ -2,8 +2,7 @@ import { Container, Filter, } from 'pixi.js'; - -import type { HostConfig } from '../typedefs/HostConfig'; +import { type HostConfig } from '../typedefs/HostConfig'; export function unhideInstance( instance: HostConfig['instance'], diff --git a/src/hooks/useAsset.ts b/src/hooks/useAsset.ts index 20a0b30d..57076b45 100644 --- a/src/hooks/useAsset.ts +++ b/src/hooks/useAsset.ts @@ -2,15 +2,14 @@ import { Assets, Cache, } from 'pixi.js'; -import { getAssetKey } from '../helpers/getAssetKey'; - -import type { - ProgressCallback, - UnresolvedAsset, +import { + type ProgressCallback, + type UnresolvedAsset, } from 'pixi.js'; -import type { AssetRetryOptions } from '../typedefs/AssetRetryOptions'; -import type { AssetRetryState } from '../typedefs/AssetRetryState'; -import type { ErrorCallback } from '../typedefs/ErrorCallback'; +import { getAssetKey } from '../helpers/getAssetKey'; +import { type AssetRetryOptions } from '../typedefs/AssetRetryOptions'; +import { type AssetRetryState } from '../typedefs/AssetRetryState'; +import { type ErrorCallback } from '../typedefs/ErrorCallback'; const errorCache: Map = new Map(); diff --git a/src/hooks/useAssets.ts b/src/hooks/useAssets.ts index b88a37cd..47b1c42e 100644 --- a/src/hooks/useAssets.ts +++ b/src/hooks/useAssets.ts @@ -5,11 +5,10 @@ import { import { useState } from 'react'; import { UseAssetsStatus } from '../constants/UseAssetsStatus'; import { getAssetKey } from '../helpers/getAssetKey'; - -import type { AssetRetryState } from '../typedefs/AssetRetryState'; -import type { UnresolvedAsset } from '../typedefs/UnresolvedAsset'; -import type { UseAssetsOptions } from '../typedefs/UseAssetsOptions'; -import type { UseAssetsResult } from '../typedefs/UseAssetsResult'; +import { type AssetRetryState } from '../typedefs/AssetRetryState'; +import { type UnresolvedAsset } from '../typedefs/UnresolvedAsset'; +import { type UseAssetsOptions } from '../typedefs/UseAssetsOptions'; +import { type UseAssetsResult } from '../typedefs/UseAssetsResult'; const errorCache: Map = new Map(); diff --git a/src/hooks/useSuspenseAssets.ts b/src/hooks/useSuspenseAssets.ts index 992a8904..4a1eb0e8 100644 --- a/src/hooks/useSuspenseAssets.ts +++ b/src/hooks/useSuspenseAssets.ts @@ -3,10 +3,9 @@ import { Cache, } from 'pixi.js'; import { getAssetKey } from '../helpers/getAssetKey'; - -import type { AssetRetryState } from '../typedefs/AssetRetryState'; -import type { UnresolvedAsset } from '../typedefs/UnresolvedAsset'; -import type { UseAssetsOptions } from '../typedefs/UseAssetsOptions'; +import { type AssetRetryState } from '../typedefs/AssetRetryState'; +import { type UnresolvedAsset } from '../typedefs/UnresolvedAsset'; +import { type UseAssetsOptions } from '../typedefs/UseAssetsOptions'; const errorCache: Map = new Map(); @@ -58,12 +57,12 @@ export function useSuspenseAssets( throw Assets .load(assets, (progressValue) => - { - if (typeof onProgress === 'function') { - onProgress(progressValue); - } - }) + if (typeof onProgress === 'function') + { + onProgress(progressValue); + } + }) .catch((error) => { if (!cachedState) diff --git a/src/hooks/useTick.ts b/src/hooks/useTick.ts index f5478dd1..a963bb6e 100644 --- a/src/hooks/useTick.ts +++ b/src/hooks/useTick.ts @@ -1,10 +1,9 @@ +import { type TickerCallback } from 'pixi.js'; import { invariant } from '../helpers/invariant'; +import { type UseTickOptions } from '../typedefs/UseTickOptions'; import { useApplication } from './useApplication'; import { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect'; -import type { TickerCallback } from 'pixi.js'; -import type { UseTickOptions } from '../typedefs/UseTickOptions'; - /** Attaches a callback to the application's Ticker. */ export function useTick( /** @description The function to be called on each tick. */ diff --git a/src/index.ts b/src/index.ts index fdf7933a..75a8f79f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,4 +17,4 @@ export { useAssets } from './hooks/useAssets'; export { useExtend } from './hooks/useExtend'; export { useSuspenseAssets } from './hooks/useSuspenseAssets'; export { useTick } from './hooks/useTick'; -export type { PixiReactElementProps } from './typedefs/PixiReactNode'; +export { type PixiReactElementProps } from './typedefs/PixiReactNode'; diff --git a/src/typedefs/ApplicationProps.ts b/src/typedefs/ApplicationProps.ts index 1932c19b..ff0dffba 100644 --- a/src/typedefs/ApplicationProps.ts +++ b/src/typedefs/ApplicationProps.ts @@ -1,15 +1,15 @@ -import type { - Application, - ApplicationOptions, - ExtensionFormatLoose, - TextStyle, - TextStyleOptions, +import { + type Application, + type ApplicationOptions, + type ExtensionFormatLoose, + type TextStyle, + type TextStyleOptions, } from 'pixi.js'; -import type { - Key, - RefObject, +import { + type Key, + type RefObject, } from 'react'; -import type { PixiReactChildNode } from './PixiReactChildNode'; +import { type PixiReactChildNode } from './PixiReactChildNode'; export interface BaseApplicationProps { diff --git a/src/typedefs/ApplicationState.ts b/src/typedefs/ApplicationState.ts index 6c56d912..397f9699 100644 --- a/src/typedefs/ApplicationState.ts +++ b/src/typedefs/ApplicationState.ts @@ -1,4 +1,4 @@ -import type { Application } from 'pixi.js'; +import { type Application } from 'pixi.js'; export interface ApplicationState { diff --git a/src/typedefs/BasePixiReactNode.ts b/src/typedefs/BasePixiReactNode.ts index da678597..60c9774c 100644 --- a/src/typedefs/BasePixiReactNode.ts +++ b/src/typedefs/BasePixiReactNode.ts @@ -1,7 +1,7 @@ -import type { - Container, - Filter, +import { + type Container, + type Filter, } from 'pixi.js'; -import type { PixiReactNode } from './PixiReactNode'; +import { type PixiReactNode } from './PixiReactNode'; export type BasePixiReactNode any = typeof Container | typeof Filter> = PixiReactNode; diff --git a/src/typedefs/ConstructorOptions.ts b/src/typedefs/ConstructorOptions.ts index 441892f4..ec457644 100644 --- a/src/typedefs/ConstructorOptions.ts +++ b/src/typedefs/ConstructorOptions.ts @@ -1,4 +1,4 @@ -import type { ConstructorOverrides } from './ConstructorOverrides'; +import { type ConstructorOverrides } from './ConstructorOverrides'; /** * We're adding a specific options type overrides for some components because their deprecated overloads get in the way. @@ -10,4 +10,3 @@ export type ConstructorOptions any> = ? ConstructorParameters[0] : R : unknown; - diff --git a/src/typedefs/CreateRootOptions.ts b/src/typedefs/CreateRootOptions.ts index b46df018..5a5de358 100644 --- a/src/typedefs/CreateRootOptions.ts +++ b/src/typedefs/CreateRootOptions.ts @@ -1,4 +1,4 @@ -import type { Application } from 'pixi.js'; +import { type Application } from 'pixi.js'; export interface CreateRootOptions { diff --git a/src/typedefs/DiffSet.ts b/src/typedefs/DiffSet.ts index 843cf312..c62513e5 100644 --- a/src/typedefs/DiffSet.ts +++ b/src/typedefs/DiffSet.ts @@ -1,4 +1,4 @@ -import type { Change } from './Change'; +import { type Change } from './Change'; export interface DiffSet { diff --git a/src/typedefs/DrawCallback.ts b/src/typedefs/DrawCallback.ts index 52be2a04..afa3b036 100644 --- a/src/typedefs/DrawCallback.ts +++ b/src/typedefs/DrawCallback.ts @@ -1,3 +1,3 @@ -import type { Graphics } from 'pixi.js'; +import { type Graphics } from 'pixi.js'; export type DrawCallback = (graphics: Graphics) => void; diff --git a/src/typedefs/EventHandlers.ts b/src/typedefs/EventHandlers.ts index 4f4f62cd..ca8a270d 100644 --- a/src/typedefs/EventHandlers.ts +++ b/src/typedefs/EventHandlers.ts @@ -1,9 +1,9 @@ -import type { - FederatedEventHandler, - FederatedPointerEvent, - FederatedWheelEvent, +import { + type FederatedEventHandler, + type FederatedPointerEvent, + type FederatedWheelEvent, } from 'pixi.js'; -import type { ReactToPixiEventPropNames } from '../constants/EventPropNames'; +import { type ReactToPixiEventPropNames } from '../constants/EventPropNames'; export type EventHandlers = { -readonly [K in keyof typeof ReactToPixiEventPropNames]?: diff --git a/src/typedefs/HostConfig.ts b/src/typedefs/HostConfig.ts index ca718b3e..97bf6b33 100644 --- a/src/typedefs/HostConfig.ts +++ b/src/typedefs/HostConfig.ts @@ -2,10 +2,9 @@ import { type Container, type Filter, } from 'pixi.js'; - -import type { NamespacedPixiElements } from './NamespacedPixiElements'; -import type { PixiElements } from './PixiElements'; -import type { PixiReactNode } from './PixiReactNode'; +import { type NamespacedPixiElements } from './NamespacedPixiElements'; +import { type PixiElements } from './PixiElements'; +import { type PixiReactNode } from './PixiReactNode'; export interface HostConfig { diff --git a/src/typedefs/InstanceState.ts b/src/typedefs/InstanceState.ts index 9aaa0f38..f40c6c2f 100644 --- a/src/typedefs/InstanceState.ts +++ b/src/typedefs/InstanceState.ts @@ -1,5 +1,5 @@ -import type { Filter } from 'pixi.js'; -import type { HostConfig } from './HostConfig'; +import { type Filter } from 'pixi.js'; +import { type HostConfig } from './HostConfig'; export interface InstanceState { diff --git a/src/typedefs/InternalState.ts b/src/typedefs/InternalState.ts index bd4ecbe6..4943bee4 100644 --- a/src/typedefs/InternalState.ts +++ b/src/typedefs/InternalState.ts @@ -1,4 +1,4 @@ -import type { HostConfig } from './HostConfig'; +import { type HostConfig } from './HostConfig'; export interface InternalState { diff --git a/src/typedefs/NamespacedPixiElements.ts b/src/typedefs/NamespacedPixiElements.ts index 9526d38c..e413cefe 100644 --- a/src/typedefs/NamespacedPixiElements.ts +++ b/src/typedefs/NamespacedPixiElements.ts @@ -1,4 +1,4 @@ -import type { PixiElements } from './PixiElements'; +import { type PixiElements } from './PixiElements'; export type NamespacedPixiElements = { [K in keyof PixiElements as `pixi${Capitalize}`]: PixiElements[K]; diff --git a/src/typedefs/PixiElements.ts b/src/typedefs/PixiElements.ts index 6a6e0ef4..72b908a1 100644 --- a/src/typedefs/PixiElements.ts +++ b/src/typedefs/PixiElements.ts @@ -1,7 +1,8 @@ +import { type NameOverrides } from '../constants/NameOverrides'; +import { type PixiComponents } from './PixiComponents'; +import { type PixiReactElementProps } from './PixiReactNode'; + import type * as PIXI from 'pixi.js'; -import type { NameOverrides } from '../constants/NameOverrides'; -import type { PixiComponents } from './PixiComponents'; -import type { PixiReactElementProps } from './PixiReactNode'; export type PixiElements = { [K in PixiComponents as K extends keyof typeof NameOverrides ? typeof NameOverrides[K] : Uncapitalize]: diff --git a/src/typedefs/PixiReactChildNode.ts b/src/typedefs/PixiReactChildNode.ts index 3e1d20f6..40efee79 100644 --- a/src/typedefs/PixiReactChildNode.ts +++ b/src/typedefs/PixiReactChildNode.ts @@ -1,4 +1,4 @@ -import type { ReactNode } from 'react'; -import type { BasePixiReactNode } from './BasePixiReactNode'; +import { type ReactNode } from 'react'; +import { type BasePixiReactNode } from './BasePixiReactNode'; export type PixiReactChildNode = BasePixiReactNode | Iterable | ReactNode; diff --git a/src/typedefs/PixiReactNode.ts b/src/typedefs/PixiReactNode.ts index fae78584..f183e6b8 100644 --- a/src/typedefs/PixiReactNode.ts +++ b/src/typedefs/PixiReactNode.ts @@ -1,19 +1,21 @@ -import { type PixiToReactEventPropNames } from '../constants/EventPropNames'; -import { type ConstructorOptions } from './ConstructorOptions'; -import { type ExcludeFunctionProps, type OmitKeys } from './UtilityTypes'; - -import type { - Container, - Graphics, +import { + type Container, + type Graphics, } from 'pixi.js'; -import type { - Key, - Ref, +import { + type Key, + type Ref, } from 'react'; -import type { DrawCallback } from './DrawCallback'; -import type { EventHandlers } from './EventHandlers'; -import type { InstanceState } from './InstanceState'; -import type { PixiReactChildNode } from './PixiReactChildNode'; +import { type PixiToReactEventPropNames } from '../constants/EventPropNames'; +import { type ConstructorOptions } from './ConstructorOptions'; +import { type DrawCallback } from './DrawCallback'; +import { type EventHandlers } from './EventHandlers'; +import { type InstanceState } from './InstanceState'; +import { type PixiReactChildNode } from './PixiReactChildNode'; +import { + type ExcludeFunctionProps, + type OmitKeys, +} from './UtilityTypes'; export interface BaseNodeProps any = typeof Container> { diff --git a/src/typedefs/Root.ts b/src/typedefs/Root.ts index 234b0ac5..83405517 100644 --- a/src/typedefs/Root.ts +++ b/src/typedefs/Root.ts @@ -1,7 +1,7 @@ -import type { Container } from 'pixi.js'; -import type { Fiber } from 'react-reconciler'; -import type { ApplicationState } from './ApplicationState'; -import type { InternalState } from './InternalState'; +import { type Container } from 'pixi.js'; +import { type Fiber } from 'react-reconciler'; +import { type ApplicationState } from './ApplicationState'; +import { type InternalState } from './InternalState'; export interface Root { diff --git a/src/typedefs/UnresolvedAsset.ts b/src/typedefs/UnresolvedAsset.ts index fdfa5cb1..26f1b5ea 100644 --- a/src/typedefs/UnresolvedAsset.ts +++ b/src/typedefs/UnresolvedAsset.ts @@ -1,3 +1,3 @@ -import type { UnresolvedAsset as PixiUnresolvedAsset } from 'pixi.js'; +import { type UnresolvedAsset as PixiUnresolvedAsset } from 'pixi.js'; export type UnresolvedAsset = PixiUnresolvedAsset | string; diff --git a/src/typedefs/UpdatePayload.ts b/src/typedefs/UpdatePayload.ts index 8a0c0f7d..0e32c5fd 100644 --- a/src/typedefs/UpdatePayload.ts +++ b/src/typedefs/UpdatePayload.ts @@ -1,4 +1,4 @@ -import type { DiffSet } from './DiffSet'; +import { type DiffSet } from './DiffSet'; export interface UpdatePayload { diff --git a/src/typedefs/UseAssetsOptions.ts b/src/typedefs/UseAssetsOptions.ts index dbde377c..ccce5c0b 100644 --- a/src/typedefs/UseAssetsOptions.ts +++ b/src/typedefs/UseAssetsOptions.ts @@ -1,7 +1,6 @@ +import { type ProgressCallback } from 'pixi.js'; import { type ErrorCallback } from './ErrorCallback'; -import type { ProgressCallback } from 'pixi.js'; - export interface UseAssetsOptions { /** @description The maximum number of retries allowed before we give up on loading this asset. */ diff --git a/src/typedefs/UseAssetsResult.ts b/src/typedefs/UseAssetsResult.ts index b525ed2a..a3e92300 100644 --- a/src/typedefs/UseAssetsResult.ts +++ b/src/typedefs/UseAssetsResult.ts @@ -1,4 +1,4 @@ -import type { UseAssetsStatus } from '../constants/UseAssetsStatus'; +import { type UseAssetsStatus } from '../constants/UseAssetsStatus'; export interface UseAssetsResult { diff --git a/src/typedefs/UseTickOptions.ts b/src/typedefs/UseTickOptions.ts index bf9fba38..244bdf06 100644 --- a/src/typedefs/UseTickOptions.ts +++ b/src/typedefs/UseTickOptions.ts @@ -1,4 +1,4 @@ -import type { TickerCallback } from 'pixi.js'; +import { type TickerCallback } from 'pixi.js'; export interface UseTickOptions { diff --git a/test/e2e/hooks/useApplication.test.tsx b/test/e2e/hooks/useApplication.test.tsx index ee83b521..1cff66dc 100644 --- a/test/e2e/hooks/useApplication.test.tsx +++ b/test/e2e/hooks/useApplication.test.tsx @@ -1,17 +1,18 @@ import { type Application as PixiApplication } from 'pixi.js'; -import { type ReactNode } from 'react'; import { describe, expect, it, } from 'vitest'; -import { Application } from '../../../src/components/Application'; -import { useApplication } from '../../../src/hooks/useApplication'; +import { Application } from '../../../src/components/Application.ts'; +import { useApplication } from '../../../src/hooks/useApplication.ts'; import { render, renderHook, } from '@testing-library/react'; +import type { ReactNode } from 'react'; + describe('useApplication', () => { it('returns the nearest application', async () => From 7c20e428d6836940cf1e7adbab786a0e2202d325 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 30 Dec 2024 14:42:24 -0600 Subject: [PATCH 6/7] test: fix `useApplication` test Signed-off-by: Trezy --- test/e2e/hooks/useApplication.test.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/e2e/hooks/useApplication.test.tsx b/test/e2e/hooks/useApplication.test.tsx index 1cff66dc..5682a962 100644 --- a/test/e2e/hooks/useApplication.test.tsx +++ b/test/e2e/hooks/useApplication.test.tsx @@ -4,8 +4,8 @@ import { expect, it, } from 'vitest'; -import { Application } from '../../../src/components/Application.ts'; -import { useApplication } from '../../../src/hooks/useApplication.ts'; +import { Application } from '../../../src/components/Application'; +import { useApplication } from '../../../src/hooks/useApplication'; import { render, renderHook, From 3ea27a2efbf8f614bf3791a5a175790b31c0fff7 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 30 Dec 2024 15:37:36 -0600 Subject: [PATCH 7/7] docs: remove `attachToDevtools` from docs --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index 9845c6a2..b336370c 100644 --- a/README.md +++ b/README.md @@ -120,10 +120,6 @@ const MyComponent = () => { } ``` -###### `attachToDevtools` - -Setting `attachToDevtools` to `true` will automatically attach the application to the [Official Pixi.js Devtools](https://chromewebstore.google.com/detail/pixijs-devtools/dlkffcaaoccbofklocbjcmppahjjboce). - ###### `defaultTextStyle` `defaultTextStyle` is a convenience property. Whatever is passed will automatically be assigned to Pixi.js's [`TextStyle.defaultTextStyle`](https://pixijs.download/release/docs/text.TextStyle.html#defaultTextStyle).