From 4103bf8631348525229990167b15286781b1a3e6 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Wed, 27 Apr 2022 07:45:49 +0200 Subject: [PATCH 01/88] Update all Dependencies to React 18 --- examples/benchmarking/package.json | 4 +- packages/@react-facet/core/package.json | 7 +- .../@react-facet/deferred-mount/package.json | 4 +- .../@react-facet/dom-components/package.json | 9 +- .../dom-fiber-testing-library/package.json | 6 +- packages/@react-facet/dom-fiber/package.json | 10 +- .../@react-facet/shared-facet/package.json | 6 +- packages/@react-facet/spring/package.json | 9 +- yarn.lock | 161 +++++++++--------- 9 files changed, 109 insertions(+), 107 deletions(-) diff --git a/examples/benchmarking/package.json b/examples/benchmarking/package.json index 477c26ff..7e1f6326 100644 --- a/examples/benchmarking/package.json +++ b/examples/benchmarking/package.json @@ -14,8 +14,8 @@ "@react-facet/shared-facet": "0.3.0", "@react-facet/spring": "0.3.0", "ramda": "^0.27.1", - "react": "^16.9.0", - "react-dom": "^16.9.0" + "react": "^18.1.0", + "react-dom": "^18.1.0" }, "devDependencies": { "@types/fs-extra": "^9.0.12", diff --git a/packages/@react-facet/core/package.json b/packages/@react-facet/core/package.json index 1b49a42a..58b0d030 100644 --- a/packages/@react-facet/core/package.json +++ b/packages/@react-facet/core/package.json @@ -41,15 +41,14 @@ "prepublish": "yarn build" }, "peerDependencies": { - "react": "^16.9.0" + "react": "^18.1.0" }, "devDependencies": { "@react-facet/dom-fiber-testing-library": "0.3.0", - "@types/react": "^17.0.11", - "@types/react-reconciler": "^0.18.0", + "@types/react": "^18.0.8", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "^16.9.0", + "react": "^18.1.0", "rimraf": "^3.0.2", "typescript": "^4.3.5" } diff --git a/packages/@react-facet/deferred-mount/package.json b/packages/@react-facet/deferred-mount/package.json index 99b3c448..ba01756b 100644 --- a/packages/@react-facet/deferred-mount/package.json +++ b/packages/@react-facet/deferred-mount/package.json @@ -42,11 +42,11 @@ }, "peerDependencies": { "@react-facet/core": "0.3.0", - "react": "^16.9.0" + "react": "^18.1.0" }, "devDependencies": { "@react-facet/dom-fiber-testing-library": "0.3.0", - "react": "^16.9.0", + "react": "^18.1.0", "rimraf": "^3.0.2", "typescript": "^4.3.5" } diff --git a/packages/@react-facet/dom-components/package.json b/packages/@react-facet/dom-components/package.json index be34c77a..d4039a00 100644 --- a/packages/@react-facet/dom-components/package.json +++ b/packages/@react-facet/dom-components/package.json @@ -42,18 +42,17 @@ }, "peerDependencies": { "@react-facet/core": "0.3.0", - "react": "^16.9.0" + "react": "^18.1.0" }, "devDependencies": { "@react-facet/core": "0.3.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^9.4.1", - "@types/react": "^17.0.11", - "@types/react-reconciler": "^0.18.0", + "@types/react": "^18.0.8", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "^16.9.0", - "react-dom": "^16.9.0", + "react": "^18.1.0", + "react-dom": "^18.1.0", "rimraf": "^3.0.2", "typescript": "^4.3.5" } diff --git a/packages/@react-facet/dom-fiber-testing-library/package.json b/packages/@react-facet/dom-fiber-testing-library/package.json index 74e91020..0db7754c 100644 --- a/packages/@react-facet/dom-fiber-testing-library/package.json +++ b/packages/@react-facet/dom-fiber-testing-library/package.json @@ -41,15 +41,15 @@ "prepublish": "yarn build" }, "dependencies": { - "@testing-library/dom": "^8.0.0" + "@testing-library/dom": "^8.13.0" }, "peerDependencies": { "@react-facet/dom-fiber": "0.3.0", - "react": "^16.9.0" + "react": "^18.1.0" }, "devDependencies": { "@react-facet/dom-fiber": "0.3.0", - "react": "^16.9.0", + "react": "^18.1.0", "rimraf": "^3.0.2", "typescript": "^4.3.5" } diff --git a/packages/@react-facet/dom-fiber/package.json b/packages/@react-facet/dom-fiber/package.json index ef13e048..ea625c1a 100644 --- a/packages/@react-facet/dom-fiber/package.json +++ b/packages/@react-facet/dom-fiber/package.json @@ -41,20 +41,20 @@ "prepublish": "yarn build" }, "dependencies": { - "react-reconciler": "^0.24.0" + "react-reconciler": "^0.28.0" }, "peerDependencies": { "@react-facet/core": "0.3.0", - "react": "^16.9.0" + "react": "^18.1.0" }, "devDependencies": { "@react-facet/core": "0.3.0", "@react-facet/dom-fiber-testing-library": "0.3.0", - "@types/react": "^17.0.11", - "@types/react-reconciler": "^0.18.0", + "@types/react": "^18.0.8", + "@types/react-reconciler": "^0.26.6", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "^16.9.0", + "react": "^18.1.0", "rimraf": "^3.0.2", "typescript": "^4.3.5" } diff --git a/packages/@react-facet/shared-facet/package.json b/packages/@react-facet/shared-facet/package.json index d33cdc77..1d71304e 100644 --- a/packages/@react-facet/shared-facet/package.json +++ b/packages/@react-facet/shared-facet/package.json @@ -42,15 +42,15 @@ }, "peerDependencies": { "@react-facet/core": "0.3.0", - "react": "^16.9.0" + "react": "^18.1.0" }, "devDependencies": { "@react-facet/core": "0.3.0", "@react-facet/dom-fiber-testing-library": "0.3.0", - "@types/react": "^17.0.11", + "@types/react": "^18.0.8", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "^16.9.0", + "react": "^18.1.0", "rimraf": "^3.0.2", "typescript": "^4.3.5" } diff --git a/packages/@react-facet/spring/package.json b/packages/@react-facet/spring/package.json index 5c87e3d9..d009c71e 100644 --- a/packages/@react-facet/spring/package.json +++ b/packages/@react-facet/spring/package.json @@ -42,18 +42,17 @@ }, "peerDependencies": { "@react-facet/core": "0.3.0", - "react": "^16.9.0" + "react": "^18.1.0" }, "devDependencies": { "@react-facet/core": "0.3.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^9.4.1", - "@types/react": "^17.0.11", - "@types/react-reconciler": "^0.18.0", + "@types/react": "^18.0.8", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "^16.9.0", - "react-dom": "^16.9.0", + "react": "^18.1.0", + "react-dom": "^18.1.0", "rimraf": "^3.0.2", "typescript": "^4.3.5" } diff --git a/yarn.lock b/yarn.lock index eb3c2513..0adfb8b6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -944,15 +944,14 @@ __metadata: resolution: "@react-facet/core@workspace:packages/@react-facet/core" dependencies: "@react-facet/dom-fiber-testing-library": 0.3.0 - "@types/react": ^17.0.11 - "@types/react-reconciler": ^0.18.0 + "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: ^16.9.0 + react: ^18.1.0 rimraf: ^3.0.2 typescript: ^4.3.5 peerDependencies: - react: ^16.9.0 + react: ^18.1.0 languageName: unknown linkType: soft @@ -961,12 +960,12 @@ __metadata: resolution: "@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount" dependencies: "@react-facet/dom-fiber-testing-library": 0.3.0 - react: ^16.9.0 + react: ^18.1.0 rimraf: ^3.0.2 typescript: ^4.3.5 peerDependencies: "@react-facet/core": 0.3.0 - react: ^16.9.0 + react: ^18.1.0 languageName: unknown linkType: soft @@ -977,17 +976,16 @@ __metadata: "@react-facet/core": 0.3.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^9.4.1 - "@types/react": ^17.0.11 - "@types/react-reconciler": ^0.18.0 + "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: ^16.9.0 - react-dom: ^16.9.0 + react: ^18.1.0 + react-dom: ^18.1.0 rimraf: ^3.0.2 typescript: ^4.3.5 peerDependencies: "@react-facet/core": 0.3.0 - react: ^16.9.0 + react: ^18.1.0 languageName: unknown linkType: soft @@ -996,13 +994,13 @@ __metadata: resolution: "@react-facet/dom-fiber-testing-library@workspace:packages/@react-facet/dom-fiber-testing-library" dependencies: "@react-facet/dom-fiber": 0.3.0 - "@testing-library/dom": ^8.0.0 - react: ^16.9.0 + "@testing-library/dom": ^8.13.0 + react: ^18.1.0 rimraf: ^3.0.2 typescript: ^4.3.5 peerDependencies: "@react-facet/dom-fiber": 0.3.0 - react: ^16.9.0 + react: ^18.1.0 languageName: unknown linkType: soft @@ -1012,17 +1010,17 @@ __metadata: dependencies: "@react-facet/core": 0.3.0 "@react-facet/dom-fiber-testing-library": 0.3.0 - "@types/react": ^17.0.11 - "@types/react-reconciler": ^0.18.0 + "@types/react": ^18.0.8 + "@types/react-reconciler": ^0.26.6 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: ^16.9.0 - react-reconciler: ^0.24.0 + react: ^18.1.0 + react-reconciler: ^0.28.0 rimraf: ^3.0.2 typescript: ^4.3.5 peerDependencies: "@react-facet/core": 0.3.0 - react: ^16.9.0 + react: ^18.1.0 languageName: unknown linkType: soft @@ -1042,15 +1040,15 @@ __metadata: dependencies: "@react-facet/core": 0.3.0 "@react-facet/dom-fiber-testing-library": 0.3.0 - "@types/react": ^17.0.11 + "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: ^16.9.0 + react: ^18.1.0 rimraf: ^3.0.2 typescript: ^4.3.5 peerDependencies: "@react-facet/core": 0.3.0 - react: ^16.9.0 + react: ^18.1.0 languageName: unknown linkType: soft @@ -1061,17 +1059,16 @@ __metadata: "@react-facet/core": 0.3.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^9.4.1 - "@types/react": ^17.0.11 - "@types/react-reconciler": ^0.18.0 + "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: ^16.9.0 - react-dom: ^16.9.0 + react: ^18.1.0 + react-dom: ^18.1.0 rimraf: ^3.0.2 typescript: ^4.3.5 peerDependencies: "@react-facet/core": 0.3.0 - react: ^16.9.0 + react: ^18.1.0 languageName: unknown linkType: soft @@ -1131,19 +1128,19 @@ __metadata: languageName: node linkType: hard -"@testing-library/dom@npm:^8.0.0": - version: 8.7.2 - resolution: "@testing-library/dom@npm:8.7.2" +"@testing-library/dom@npm:^8.13.0": + version: 8.13.0 + resolution: "@testing-library/dom@npm:8.13.0" dependencies: "@babel/code-frame": ^7.10.4 "@babel/runtime": ^7.12.5 "@types/aria-query": ^4.2.0 - aria-query: ^4.2.2 + aria-query: ^5.0.0 chalk: ^4.1.0 - dom-accessibility-api: ^0.5.6 + dom-accessibility-api: ^0.5.9 lz-string: ^1.4.4 pretty-format: ^27.0.2 - checksum: 9c0b2a9bc7aa92f22d909d677093d4d520c59de36013e97ba6eeaea4b4fccd3cae7e1221712bf079939b7d86aa69740441b206ae1cb9c3a1ecbb420070f4d0c9 + checksum: 880f1872b9949800d4444e3bdbd03df86d6f41ec7c27136dff1da29e87d2df2d7ee904afcdf895ffce351c25bd12119117eae023354d50e707ad56d43b2ed3ed languageName: node linkType: hard @@ -1462,16 +1459,16 @@ __metadata: languageName: node linkType: hard -"@types/react-reconciler@npm:^0.18.0": - version: 0.18.0 - resolution: "@types/react-reconciler@npm:0.18.0" +"@types/react-reconciler@npm:^0.26.6": + version: 0.26.6 + resolution: "@types/react-reconciler@npm:0.26.6" dependencies: "@types/react": "*" - checksum: 15f7a0ba688f0949b5fa52772fd6f34b425a7ff1c81beb8facea58533422a9a33a82a35ad4951768b80aa17c32725f2cba677d5c440e925b09c5b791fcdc60c0 + checksum: 5c96f40338f2ccc544018610b42f467945450a8448b042ce5a052a3a45820ccd028b1fb65157c99f5889a10cd1e17093252c54c56a002bc64acadd6d5a9e4b08 languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:^17.0.11": +"@types/react@npm:*": version: 17.0.27 resolution: "@types/react@npm:17.0.27" dependencies: @@ -1482,6 +1479,17 @@ __metadata: languageName: node linkType: hard +"@types/react@npm:^18.0.8": + version: 18.0.8 + resolution: "@types/react@npm:18.0.8" + dependencies: + "@types/prop-types": "*" + "@types/scheduler": "*" + csstype: ^3.0.2 + checksum: 12d0e6bc390709926d8eaeb7d2edb4ef9c9fbe8eac41cb0619d958386700547bff91c880c2a12a9eb1e0d09afa4f1e86fd1b93164c627824465b72123f149f3b + languageName: node + linkType: hard + "@types/retry@npm:^0.12.0": version: 0.12.1 resolution: "@types/retry@npm:0.12.1" @@ -2187,6 +2195,13 @@ __metadata: languageName: node linkType: hard +"aria-query@npm:^5.0.0": + version: 5.0.0 + resolution: "aria-query@npm:5.0.0" + checksum: c41f98866c5a304561ee8cae55856711cddad6f3f85d8cb43cc5f79667078d9b8979ce32d244c1ff364e6463a4d0b6865804a33ccc717fed701b281cf7dc6296 + languageName: node + linkType: hard + "arr-diff@npm:^4.0.0": version: 4.0.0 resolution: "arr-diff@npm:4.0.0" @@ -2444,8 +2459,8 @@ __metadata: http-server: ^13.0.2 puppeteer: ^10.4.0 ramda: ^0.27.1 - react: ^16.9.0 - react-dom: ^16.9.0 + react: ^18.1.0 + react-dom: ^18.1.0 ts-loader: ^9.2.5 ts-node: ^10.3.0 typescript: ^4.3.5 @@ -3541,6 +3556,13 @@ __metadata: languageName: node linkType: hard +"dom-accessibility-api@npm:^0.5.9": + version: 0.5.14 + resolution: "dom-accessibility-api@npm:0.5.14" + checksum: 782c813f75a09ba6735ef03b5e1624406a3829444ae49d5bdedd272a49d437ae3354f53e02ffc8c9fd9165880250f41546538f27461f839dd4ea1234e77e8d5e + languageName: node + linkType: hard + "dom-converter@npm:^0.2.0": version: 0.2.0 resolution: "dom-converter@npm:0.2.0" @@ -7717,7 +7739,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.6.2, prop-types@npm:^15.7.2": +"prop-types@npm:^15.7.2": version: 15.7.2 resolution: "prop-types@npm:15.7.2" dependencies: @@ -7861,17 +7883,15 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^16.9.0": - version: 16.14.0 - resolution: "react-dom@npm:16.14.0" +"react-dom@npm:^18.1.0": + version: 18.1.0 + resolution: "react-dom@npm:18.1.0" dependencies: loose-envify: ^1.1.0 - object-assign: ^4.1.1 - prop-types: ^15.6.2 - scheduler: ^0.19.1 + scheduler: ^0.22.0 peerDependencies: - react: ^16.14.0 - checksum: 5a5c49da0f106b2655a69f96c622c347febcd10532db391c262b26aec225b235357d9da1834103457683482ab1b229af7a50f6927a6b70e53150275e31785544 + react: ^18.1.0 + checksum: bb0d48eeb0b297c79c2a03978baa29f5b3ff7ba3d070b21e34c9af1a6e7fdf0ca8b8d73e41f9214d91ad40eeb6d1f3559f884cbbc338713374a51320637c23df languageName: node linkType: hard @@ -7889,28 +7909,24 @@ __metadata: languageName: node linkType: hard -"react-reconciler@npm:^0.24.0": - version: 0.24.0 - resolution: "react-reconciler@npm:0.24.0" +"react-reconciler@npm:^0.28.0": + version: 0.28.0 + resolution: "react-reconciler@npm:0.28.0" dependencies: loose-envify: ^1.1.0 - object-assign: ^4.1.1 - prop-types: ^15.6.2 - scheduler: ^0.18.0 + scheduler: ^0.22.0 peerDependencies: - react: ^16.0.0 - checksum: c9c74208325a940ca36e031b71499f6d8e62e96ee673d69e35cc9e6a661aa746a2b0750f2ffcd1bae0a29eaf3d127dc8197ab7e801e6a3a2ab7d45a71b464630 + react: ^18.1.0 + checksum: 6421f9500827219556ead3d86cbdf0553c47d633ecda2144720bf235d404f5e4e1e585336c4dfa80e26a04f1a6117c455a60964917d5600c73a91d8374f0232f languageName: node linkType: hard -"react@npm:^16.9.0": - version: 16.14.0 - resolution: "react@npm:16.14.0" +"react@npm:^18.1.0": + version: 18.1.0 + resolution: "react@npm:18.1.0" dependencies: loose-envify: ^1.1.0 - object-assign: ^4.1.1 - prop-types: ^15.6.2 - checksum: 8484f3ecb13414526f2a7412190575fc134da785c02695eb92bb6028c930bfe1c238d7be2a125088fec663cc7cda0a3623373c46807cf2c281f49c34b79881ac + checksum: 5bb296b561b43ef2220395da4faac86c14a087c8c80e1a7598a5740f01ee605c11eaf249985c1e2000971c4cd32ccb46d40f00479bbd9fb6b1c7cf857393b7d4 languageName: node linkType: hard @@ -8277,23 +8293,12 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"scheduler@npm:^0.18.0": - version: 0.18.0 - resolution: "scheduler@npm:0.18.0" +"scheduler@npm:^0.22.0": + version: 0.22.0 + resolution: "scheduler@npm:0.22.0" dependencies: loose-envify: ^1.1.0 - object-assign: ^4.1.1 - checksum: b6e0b9e0086b200b114f1ef7f9fcac966ad5d84cd3b1867174be0549d3ff713d1fd22d5574cb024b7d3eadf3307f2afc1cb5bfbf28b0d3bc34b200183800fcae - languageName: node - linkType: hard - -"scheduler@npm:^0.19.1": - version: 0.19.1 - resolution: "scheduler@npm:0.19.1" - dependencies: - loose-envify: ^1.1.0 - object-assign: ^4.1.1 - checksum: 73e185a59e2ff5aa3609f5b9cb97ddd376f89e1610579d29939d952411ca6eb7a24907a4ea4556569dacb931467a1a4a56d94fe809ef713aa76748642cd96a6c + checksum: a8ef5cab769c020cd6382ad9ecc3f72dbde56a50a36639b3a42ad9c11f7724f03700bcad373044059b8067d4a6365154dc7c0ca8027ef20ff4900cf58a0fc2c5 languageName: node linkType: hard From 90abed6b86ba8b920334ccccf2120de5a3bc1bd9 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Wed, 27 Apr 2022 08:04:12 +0200 Subject: [PATCH 02/88] Fixes types in setupHostConfig and createFiberRoot --- .../dom-fiber/src/createFiberRoot.ts | 3 ++- .../dom-fiber/src/setupHostConfig.ts | 22 +++++++------------ packages/@react-facet/dom-fiber/src/types.ts | 3 ++- 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/packages/@react-facet/dom-fiber/src/createFiberRoot.ts b/packages/@react-facet/dom-fiber/src/createFiberRoot.ts index f25e8ea6..a76f0948 100644 --- a/packages/@react-facet/dom-fiber/src/createFiberRoot.ts +++ b/packages/@react-facet/dom-fiber/src/createFiberRoot.ts @@ -13,6 +13,7 @@ export const createFiberRoot = styleUnsubscribers: new Map(), style: container.style, }, + 0, false, - false, + null, ) diff --git a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts index da57d7d9..17583874 100644 --- a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts +++ b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts @@ -6,6 +6,7 @@ import { Instance, TextInstance, HydratableInstance, + SuspenseInstance, PublicInstance, HostContext, UpdatePayload, @@ -27,6 +28,7 @@ export const setupHostConfig = (): HostConfig< Container, Instance, TextInstance, + SuspenseInstance, HydratableInstance, PublicInstance, HostContext, @@ -46,7 +48,7 @@ export const setupHostConfig = (): HostConfig< * We need to support setting up the host config in an environment where window is not available globally yet * Ex: screenshot testing */ - setTimeout: + scheduleTimeout: typeof window !== 'undefined' ? window.setTimeout : (handler, timeout) => window.setTimeout(handler, timeout) as unknown as NodeJS.Timeout, @@ -55,18 +57,12 @@ export const setupHostConfig = (): HostConfig< * We need to support setting up the host config in an environment where window is not available globally yet * Ex: screenshot testing */ - clearTimeout: + cancelTimeout: typeof window !== 'undefined' ? window.clearTimeout : (id) => window.clearTimeout(id as unknown as NodeJS.Timeout), noTimeout: noop, - scheduleDeferredCallback: function (callback, options) { - return window.setTimeout(callback, options ? options.timeout : 0) - }, - - cancelDeferredCallback: function (id) { - return window.clearTimeout(id) - }, + preparePortalMount: function () {}, getRootHostContext: function () { return EMPTY @@ -220,7 +216,9 @@ export const setupHostConfig = (): HostConfig< return false }, - prepareForCommit: function () {}, + prepareForCommit: function () { + return null + }, resetAfterCommit: function () {}, @@ -586,10 +584,6 @@ export const setupHostConfig = (): HostConfig< instance.element.textContent = '' }, - shouldDeprioritizeSubtree: function () { - return false - }, - getPublicInstance: function (instance) { return instance.element }, diff --git a/packages/@react-facet/dom-fiber/src/types.ts b/packages/@react-facet/dom-fiber/src/types.ts index bc348fa4..6e27fd9d 100644 --- a/packages/@react-facet/dom-fiber/src/types.ts +++ b/packages/@react-facet/dom-fiber/src/types.ts @@ -154,9 +154,10 @@ export type Instance = ElementContainer export type Container = Instance export type TextInstance = TextContainer export type HydratableInstance = Instance +export type SuspenseInstance = Instance export type PublicInstance = HTMLElement | Text -export type ReactFacetReconciler = Reconciler & { +export type ReactFacetReconciler = Reconciler & { flushPassiveEffects: () => boolean IsThisRendererActing: MutableRefObject } From b84627eb6e4abd1907a2deca68cb47a8edeb7cca Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Thu, 30 Jun 2022 16:51:27 +0200 Subject: [PATCH 03/88] Get the types of setupHostConfig to be happy And the examples now run! --- .../dom-fiber/src/setupHostConfig.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts index ebb81b31..a00b81e0 100644 --- a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts +++ b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts @@ -16,6 +16,7 @@ import { TypeHTML, } from './types' import { HostConfig } from 'react-reconciler' +import { DefaultEventPriority } from 'react-reconciler/constants' import { isFacet, Unsubscribe } from '@react-facet/core' import { setupClassUpdate, @@ -55,7 +56,21 @@ export const setupHostConfig = (): HostConfig< supportsPersistence: false, supportsHydration: false, - now: Date.now, + getCurrentEventPriority: () => { + return DefaultEventPriority + }, + + getInstanceFromNode: () => { + return null + }, + + beforeActiveInstanceBlur: () => {}, + afterActiveInstanceBlur: () => {}, + prepareScopeUpdate: () => {}, + getInstanceFromScope: () => null, + detachDeletedInstance: () => {}, + + clearContainer: () => false, /** * We need to support setting up the host config in an environment where window is not available globally yet From 1b351d5f27f01ed44f6ecaf5d98200324c820b1f Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 11 Jul 2022 10:22:49 +0200 Subject: [PATCH 04/88] Add concurrent examples --- examples/concurrent/.gitignore | 1 + examples/concurrent/README.md | 3 + examples/concurrent/package.json | 34 ++++++ examples/concurrent/src/listMountState.tsx | 110 +++++++++++++++++ .../concurrent/src/listMountTransition.tsx | 112 ++++++++++++++++++ examples/concurrent/src/spinner.gif | Bin 0 -> 47343 bytes examples/concurrent/tsconfig.json | 7 ++ examples/concurrent/webpack.config.js | 65 ++++++++++ yarn.lock | 38 ++++++ 9 files changed, 370 insertions(+) create mode 100644 examples/concurrent/.gitignore create mode 100644 examples/concurrent/README.md create mode 100644 examples/concurrent/package.json create mode 100644 examples/concurrent/src/listMountState.tsx create mode 100644 examples/concurrent/src/listMountTransition.tsx create mode 100644 examples/concurrent/src/spinner.gif create mode 100644 examples/concurrent/tsconfig.json create mode 100644 examples/concurrent/webpack.config.js diff --git a/examples/concurrent/.gitignore b/examples/concurrent/.gitignore new file mode 100644 index 00000000..a9a5aecf --- /dev/null +++ b/examples/concurrent/.gitignore @@ -0,0 +1 @@ +tmp diff --git a/examples/concurrent/README.md b/examples/concurrent/README.md new file mode 100644 index 00000000..7b645023 --- /dev/null +++ b/examples/concurrent/README.md @@ -0,0 +1,3 @@ +# Concurrent Mode + +Examples to see how concurrent mode works when used with Facets. diff --git a/examples/concurrent/package.json b/examples/concurrent/package.json new file mode 100644 index 00000000..13bdf324 --- /dev/null +++ b/examples/concurrent/package.json @@ -0,0 +1,34 @@ +{ + "name": "concurrent", + "version": "0.0.0", + "private": true, + "scripts": { + "start": "webpack serve --port 8081" + }, + "dependencies": { + "@react-facet/core": "0.3.3", + "@react-facet/dom-fiber": "0.3.3", + "@react-facet/shared-facet": "0.3.3", + "@react-facet/spring": "0.3.3", + "ramda": "^0.27.1", + "react": "^18.1.0", + "react-dom": "^18.1.0" + }, + "devDependencies": { + "@types/fs-extra": "^9.0.12", + "@types/puppeteer": "^5.4.4", + "@types/ramda": "^0", + "@types/react": "^18.0.8", + "@types/react-dom": "^18.0.5", + "fs-extra": "^10.0.0", + "html-webpack-plugin": "^5.3.2", + "http-server": "^13.0.2", + "puppeteer": "^10.4.0", + "ts-loader": "^9.2.5", + "ts-node": "^10.3.1", + "typescript": "^4.3.5", + "webpack": "^5.51.1", + "webpack-cli": "^4.8.0", + "webpack-dev-server": "^4.0.0" + } +} diff --git a/examples/concurrent/src/listMountState.tsx b/examples/concurrent/src/listMountState.tsx new file mode 100644 index 00000000..7e95b2e8 --- /dev/null +++ b/examples/concurrent/src/listMountState.tsx @@ -0,0 +1,110 @@ +import { createRoot } from 'react-dom/client' +import React, { useEffect, useState } from 'react' + +interface Data { + name: string + health: number +} + +const allData = Array.from({ length: 2000 }, (): Data => ({ name: 'player', health: 10 })) + +export const ListConcurrent = () => { + const [data, setData] = useState([]) + + useEffect(() => { + const tick = () => { + setData(allData) + } + + setTimeout(tick, 2000) + }, []) + + return ( + <> + +
+
+ {data.length === 0 ? : 'done'} + + + ) +} + +const List = ({ data }: { data: Data[] }) => { + return ( + <> + {data.map((item, index) => ( + + ))} + + ) +} + +const ListItem = () => { + return ( +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ) +} + +const Spinner = () => { + return ( +
+ ) +} + +document.body.innerHTML = ` + +
+` +const domElement = document.getElementById('root') + +if (domElement) { + const root = createRoot(domElement) + root.render() +} diff --git a/examples/concurrent/src/listMountTransition.tsx b/examples/concurrent/src/listMountTransition.tsx new file mode 100644 index 00000000..6e28c4aa --- /dev/null +++ b/examples/concurrent/src/listMountTransition.tsx @@ -0,0 +1,112 @@ +import { createRoot } from 'react-dom/client' +import React, { useEffect, useState, useTransition } from 'react' + +interface Data { + name: string + health: number +} + +const allData = Array.from({ length: 2000 }, (): Data => ({ name: 'player', health: 10 })) + +export const ListConcurrent = () => { + const [isPending, startTransition] = useTransition() + const [data, setData] = useState([]) + + useEffect(() => { + const tick = () => { + startTransition(() => { + setData(allData) + }) + } + + setTimeout(tick, 2000) + }, [startTransition]) + + return ( + <> + +
+ {isPending ? : 'done'} + + + ) +} + +const List = ({ data }: { data: Data[] }) => { + return ( + <> + {data.map((item, index) => ( + + ))} + + ) +} + +const ListItem = () => { + return ( +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ) +} + +const Spinner = () => { + return ( +
+ ) +} + +document.body.innerHTML = ` + +
+` +const domElement = document.getElementById('root') + +if (domElement) { + const root = createRoot(domElement) + root.render() +} diff --git a/examples/concurrent/src/spinner.gif b/examples/concurrent/src/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..09e286c30b4b7bf694b6990c3933795b8bcb8e7e GIT binary patch literal 47343 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

`j`_+r2kYUk0!qBR56 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 literal 0 HcmV?d00001 diff --git a/examples/concurrent/tsconfig.json b/examples/concurrent/tsconfig.json new file mode 100644 index 00000000..93677788 --- /dev/null +++ b/examples/concurrent/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + } +} diff --git a/examples/concurrent/webpack.config.js b/examples/concurrent/webpack.config.js new file mode 100644 index 00000000..8059eaaa --- /dev/null +++ b/examples/concurrent/webpack.config.js @@ -0,0 +1,65 @@ +/* eslint-env node */ + +const fs = require('fs') +const path = require('path') +const HtmlWebpackPlugin = require('html-webpack-plugin') + +const context = path.join(__dirname, 'src') + +/** + * Any file in the root of the src is considered a new HTML page and entry point. + */ +const examples = fs + .readdirSync(context) + .filter((source) => source.endsWith('.tsx')) + .map((fileName) => { + const chunkId = path.parse(fileName).name + + return { + entry: { + [chunkId]: `./${fileName}`, + }, + plugin: new HtmlWebpackPlugin({ + filename: `${chunkId}.html`, + title: 'Ore UI - Example', + chunks: [chunkId], + }), + } + }) + +module.exports = { + mode: process.env.NODE_ENV === 'production' ? 'production' : 'development', + + context, + + performance: { + hints: false, + }, + + entry: examples.map(({ entry }) => entry).reduce((acc, current) => ({ ...acc, ...current }), {}), + + module: { + rules: [ + { + test: /\.tsx?$/, + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + }, + }, + ], + exclude: /node_modules/, + }, + ], + }, + + resolve: { + extensions: ['.tsx', '.ts', '.js'], + }, + + // devtool: process.env.NODE_ENV === 'development' ? 'inline-source-map' : undefined, + + plugins: examples.map(({ plugin }) => plugin), +} diff --git a/yarn.lock b/yarn.lock index 6fb05481..f0ccbec5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1492,6 +1492,15 @@ __metadata: languageName: node linkType: hard +"@types/react-dom@npm:^18.0.5": + version: 18.0.5 + resolution: "@types/react-dom@npm:18.0.5" + dependencies: + "@types/react": "*" + checksum: cd48b81950f499b52a3f0c08261f00046f9b7c96699fa249c9664e257e820daf6ecac815cd1028cebc9d105094adc39d047d1efd79214394b8b2d515574c0787 + languageName: node + linkType: hard + "@types/react-reconciler@npm:^0.28.0": version: 0.28.0 resolution: "@types/react-reconciler@npm:0.28.0" @@ -3089,6 +3098,35 @@ __metadata: languageName: node linkType: hard +"concurrent@workspace:examples/concurrent": + version: 0.0.0-use.local + resolution: "concurrent@workspace:examples/concurrent" + dependencies: + "@react-facet/core": 0.3.3 + "@react-facet/dom-fiber": 0.3.3 + "@react-facet/shared-facet": 0.3.3 + "@react-facet/spring": 0.3.3 + "@types/fs-extra": ^9.0.12 + "@types/puppeteer": ^5.4.4 + "@types/ramda": ^0 + "@types/react": ^18.0.8 + "@types/react-dom": ^18.0.5 + fs-extra: ^10.0.0 + html-webpack-plugin: ^5.3.2 + http-server: ^13.0.2 + puppeteer: ^10.4.0 + ramda: ^0.27.1 + react: ^18.1.0 + react-dom: ^18.1.0 + ts-loader: ^9.2.5 + ts-node: ^10.3.1 + typescript: ^4.3.5 + webpack: ^5.51.1 + webpack-cli: ^4.8.0 + webpack-dev-server: ^4.0.0 + languageName: unknown + linkType: soft + "connect-history-api-fallback@npm:^1.6.0": version: 1.6.0 resolution: "connect-history-api-fallback@npm:1.6.0" From 63c7f2fffa1b82164fcf16eb6a4eacd82847c05a Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 11 Jul 2022 14:53:08 +0200 Subject: [PATCH 05/88] New example to compare with deferred mount --- examples/concurrent/package.json | 1 + examples/concurrent/src/listMountDeferred.tsx | 119 ++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 examples/concurrent/src/listMountDeferred.tsx diff --git a/examples/concurrent/package.json b/examples/concurrent/package.json index 13bdf324..97735d77 100644 --- a/examples/concurrent/package.json +++ b/examples/concurrent/package.json @@ -9,6 +9,7 @@ "@react-facet/core": "0.3.3", "@react-facet/dom-fiber": "0.3.3", "@react-facet/shared-facet": "0.3.3", + "@react-facet/deferred-mount": "0.3.3", "@react-facet/spring": "0.3.3", "ramda": "^0.27.1", "react": "^18.1.0", diff --git a/examples/concurrent/src/listMountDeferred.tsx b/examples/concurrent/src/listMountDeferred.tsx new file mode 100644 index 00000000..16d75cab --- /dev/null +++ b/examples/concurrent/src/listMountDeferred.tsx @@ -0,0 +1,119 @@ +import { createRoot } from 'react-dom/client' +import React, { useEffect, useState } from 'react' +import { useFacetUnwrap } from '@react-facet/core' +import { DeferredMount, DeferredMountProvider, useIsDeferring } from '@react-facet/deferred-mount' + +interface Data { + name: string + health: number +} + +const allData = Array.from({ length: 2000 }, (): Data => ({ name: 'player', health: 10 })) + +export const ListConcurrent = () => { + const [data, setData] = useState([]) + const isDeferring = useFacetUnwrap(useIsDeferring()) + + useEffect(() => { + const tick = () => { + setData(allData) + } + + setTimeout(tick, 2000) + }, []) + + return ( + <> + +

+
+ {isDeferring != true ? 'done' : } + + + ) +} + +const List = ({ data }: { data: Data[] }) => { + return ( + <> + {data.map((item, index) => ( + + + + ))} + + ) +} + +const ListItem = () => { + return ( +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ) +} + +const Spinner = () => { + return ( +
+ ) +} + +document.body.innerHTML = ` + +
+` +const domElement = document.getElementById('root') + +if (domElement) { + const root = createRoot(domElement) + root.render( + + + , + ) +} From 27ff4591cec4d0590e39b9476d8fcd65d6c882aa Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 11 Jul 2022 14:53:29 +0200 Subject: [PATCH 06/88] New hook that allows unwraping into a transition --- packages/@react-facet/core/src/hooks/index.ts | 1 + .../src/hooks/useFacetUnwrapTransition.ts | 62 +++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 packages/@react-facet/core/src/hooks/useFacetUnwrapTransition.ts diff --git a/packages/@react-facet/core/src/hooks/index.ts b/packages/@react-facet/core/src/hooks/index.ts index 6dfd13a0..d2789a92 100644 --- a/packages/@react-facet/core/src/hooks/index.ts +++ b/packages/@react-facet/core/src/hooks/index.ts @@ -8,4 +8,5 @@ export * from './useFacetRef' export * from './useFacetReducer' export * from './useFacetState' export * from './useFacetUnwrap' +export * from './useFacetUnwrapTransition' export * from './useFacetWrap' diff --git a/packages/@react-facet/core/src/hooks/useFacetUnwrapTransition.ts b/packages/@react-facet/core/src/hooks/useFacetUnwrapTransition.ts new file mode 100644 index 00000000..7d6b013d --- /dev/null +++ b/packages/@react-facet/core/src/hooks/useFacetUnwrapTransition.ts @@ -0,0 +1,62 @@ +import { useLayoutEffect, useState, useTransition } from 'react' +import { NoValue } from '..' +import { FacetProp, isFacet, Value } from '../types' + +/** + * Hook that allows consuming values from a Facet as plain React State values. + * + * Unwraps as a transition (useTransition), yielding to more urgent updates such as clicks. + * + * @param facet + * @return a boolean indicating if the transition is pending, plus the unwrapped value. + */ +export function useFacetUnwrapTransition(prop: FacetProp): [boolean, T | NoValue] { + const [state, setState] = useState<{ value: T | NoValue }>(() => { + if (!isFacet(prop)) return { value: prop } + + return { + value: prop.get(), + } + }) + + const [isPending, startTransition] = useTransition() + + useLayoutEffect(() => { + if (isFacet(prop)) { + return prop.observe((value: T) => { + startTransition(() => { + setState((previousState) => { + const { value: previousValue } = previousState + + const typeofValue = typeof previousValue + + /** + * Performs this equality check locally to prevent triggering two consecutive renderings + * for facets that have immutable values (unfortunately we can't handle mutable values). + * + * The two renderings might happen for the same state value if the Facet has a value on mount. + * + * The unwrap will get the value: + * - Once on initialization of the useState above + * - And another time on this observe initialization + */ + if ( + (typeofValue === 'number' || + typeofValue === 'string' || + typeofValue === 'boolean' || + value === undefined || + value === null) && + value === previousValue + ) { + return previousState + } + + return { value } + }) + }) + }) + } + }, [prop, startTransition]) + + return [isPending, isFacet(prop) ? state.value : prop] +} From 5c2fb0635f75cdf21b06debde449bedde15a50b2 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 11 Jul 2022 16:08:59 +0200 Subject: [PATCH 07/88] Bump to 0.4.0-rc.1 --- examples/benchmarking/package.json | 8 +-- examples/concurrent/package.json | 10 ++-- packages/@react-facet/core/package.json | 4 +- .../@react-facet/deferred-mount/package.json | 6 +- .../@react-facet/dom-components/package.json | 6 +- .../dom-fiber-testing-library/package.json | 6 +- packages/@react-facet/dom-fiber/package.json | 8 +-- .../@react-facet/eslint-config/package.json | 2 +- .../@react-facet/shared-facet/package.json | 8 +-- packages/@react-facet/spring/package.json | 6 +- yarn.lock | 59 ++++++++++--------- 11 files changed, 62 insertions(+), 61 deletions(-) diff --git a/examples/benchmarking/package.json b/examples/benchmarking/package.json index 1d8a2082..a8c3db22 100644 --- a/examples/benchmarking/package.json +++ b/examples/benchmarking/package.json @@ -9,10 +9,10 @@ "compare": "ts-node compare.ts" }, "dependencies": { - "@react-facet/core": "0.3.3", - "@react-facet/dom-fiber": "0.3.3", - "@react-facet/shared-facet": "0.3.3", - "@react-facet/spring": "0.3.3", + "@react-facet/core": "0.4.0-rc.1", + "@react-facet/dom-fiber": "0.4.0-rc.1", + "@react-facet/shared-facet": "0.4.0-rc.1", + "@react-facet/spring": "0.4.0-rc.1", "ramda": "^0.27.1", "react": "^18.1.0", "react-dom": "^18.1.0" diff --git a/examples/concurrent/package.json b/examples/concurrent/package.json index 97735d77..cf83b019 100644 --- a/examples/concurrent/package.json +++ b/examples/concurrent/package.json @@ -6,11 +6,11 @@ "start": "webpack serve --port 8081" }, "dependencies": { - "@react-facet/core": "0.3.3", - "@react-facet/dom-fiber": "0.3.3", - "@react-facet/shared-facet": "0.3.3", - "@react-facet/deferred-mount": "0.3.3", - "@react-facet/spring": "0.3.3", + "@react-facet/core": "0.4.0-rc.1", + "@react-facet/deferred-mount": "0.4.0-rc.1", + "@react-facet/dom-fiber": "0.4.0-rc.1", + "@react-facet/shared-facet": "0.4.0-rc.1", + "@react-facet/spring": "0.4.0-rc.1", "ramda": "^0.27.1", "react": "^18.1.0", "react-dom": "^18.1.0" diff --git a/packages/@react-facet/core/package.json b/packages/@react-facet/core/package.json index 46c81bfa..1dd2b7fe 100644 --- a/packages/@react-facet/core/package.json +++ b/packages/@react-facet/core/package.json @@ -29,7 +29,7 @@ "homepage": "https://react-facet.mojang.com/", "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", - "version": "0.3.3", + "version": "0.4.0-rc.1", "main": "src/index.ts", "publishConfig": { "main": "dist/index.js", @@ -44,7 +44,7 @@ "react": "^18.1.0" }, "devDependencies": { - "@react-facet/dom-fiber-testing-library": "0.3.3", + "@react-facet/dom-fiber-testing-library": "0.4.0-rc.1", "@types/react": "^18.0.8", "@types/rimraf": "^3", "cross-env": "^7.0.3", diff --git a/packages/@react-facet/deferred-mount/package.json b/packages/@react-facet/deferred-mount/package.json index 9686158f..1eb4f3ef 100644 --- a/packages/@react-facet/deferred-mount/package.json +++ b/packages/@react-facet/deferred-mount/package.json @@ -29,7 +29,7 @@ "homepage": "https://react-facet.mojang.com/", "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", - "version": "0.3.3", + "version": "0.4.0-rc.1", "main": "src/index.tsx", "publishConfig": { "main": "dist/index.js", @@ -41,11 +41,11 @@ "prepublish": "yarn build" }, "peerDependencies": { - "@react-facet/core": "0.3.3", + "@react-facet/core": "0.4.0-rc.1", "react": "^18.1.0" }, "devDependencies": { - "@react-facet/dom-fiber-testing-library": "0.3.3", + "@react-facet/dom-fiber-testing-library": "0.4.0-rc.1", "react": "^18.1.0", "rimraf": "^3.0.2", "typescript": "^4.3.5" diff --git a/packages/@react-facet/dom-components/package.json b/packages/@react-facet/dom-components/package.json index 76611c18..67093e06 100644 --- a/packages/@react-facet/dom-components/package.json +++ b/packages/@react-facet/dom-components/package.json @@ -29,7 +29,7 @@ "homepage": "https://react-facet.mojang.com/", "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", - "version": "0.3.3", + "version": "0.4.0-rc.1", "main": "src/index.tsx", "publishConfig": { "main": "dist/index.js", @@ -41,11 +41,11 @@ "prepublish": "yarn build" }, "peerDependencies": { - "@react-facet/core": "0.3.3", + "@react-facet/core": "0.4.0-rc.1", "react": "^18.1.0" }, "devDependencies": { - "@react-facet/core": "0.3.3", + "@react-facet/core": "0.4.0-rc.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^9.4.1", "@types/react": "^18.0.8", diff --git a/packages/@react-facet/dom-fiber-testing-library/package.json b/packages/@react-facet/dom-fiber-testing-library/package.json index 8affebd9..9f0edf8f 100644 --- a/packages/@react-facet/dom-fiber-testing-library/package.json +++ b/packages/@react-facet/dom-fiber-testing-library/package.json @@ -29,7 +29,7 @@ "homepage": "https://react-facet.mojang.com/", "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", - "version": "0.3.3", + "version": "0.4.0-rc.1", "main": "src/index.ts", "publishConfig": { "main": "dist/index.js", @@ -44,11 +44,11 @@ "@testing-library/dom": "^8.13.0" }, "peerDependencies": { - "@react-facet/dom-fiber": "0.3.3", + "@react-facet/dom-fiber": "0.4.0-rc.1", "react": "^18.1.0" }, "devDependencies": { - "@react-facet/dom-fiber": "0.3.3", + "@react-facet/dom-fiber": "0.4.0-rc.1", "react": "^18.1.0", "rimraf": "^3.0.2", "typescript": "^4.3.5" diff --git a/packages/@react-facet/dom-fiber/package.json b/packages/@react-facet/dom-fiber/package.json index 0ba9ba7f..b95026e1 100644 --- a/packages/@react-facet/dom-fiber/package.json +++ b/packages/@react-facet/dom-fiber/package.json @@ -29,7 +29,7 @@ "homepage": "https://react-facet.mojang.com/", "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", - "version": "0.3.3", + "version": "0.4.0-rc.1", "main": "src/index.ts", "publishConfig": { "main": "dist/index.js", @@ -44,12 +44,12 @@ "react-reconciler": "^0.28.0" }, "peerDependencies": { - "@react-facet/core": "0.3.3", + "@react-facet/core": "0.4.0-rc.1", "react": "^18.1.0" }, "devDependencies": { - "@react-facet/core": "0.3.3", - "@react-facet/dom-fiber-testing-library": "0.3.3", + "@react-facet/core": "0.4.0-rc.1", + "@react-facet/dom-fiber-testing-library": "0.4.0-rc.1", "@types/react": "^18.0.8", "@types/react-reconciler": "^0.28.0", "@types/rimraf": "^3", diff --git a/packages/@react-facet/eslint-config/package.json b/packages/@react-facet/eslint-config/package.json index 70224d5b..e02b6cd1 100644 --- a/packages/@react-facet/eslint-config/package.json +++ b/packages/@react-facet/eslint-config/package.json @@ -29,7 +29,7 @@ "homepage": "https://react-facet.mojang.com/", "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", - "version": "0.3.3", + "version": "0.4.0-rc.1", "main": "src/index.js", "sideEffects": false, "peerDependencies": { diff --git a/packages/@react-facet/shared-facet/package.json b/packages/@react-facet/shared-facet/package.json index cd4eff00..781fa7b0 100644 --- a/packages/@react-facet/shared-facet/package.json +++ b/packages/@react-facet/shared-facet/package.json @@ -29,7 +29,7 @@ "homepage": "https://react-facet.mojang.com/", "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", - "version": "0.3.3", + "version": "0.4.0-rc.1", "main": "src/index.ts", "publishConfig": { "main": "dist/index.js", @@ -41,12 +41,12 @@ "prepublish": "yarn build" }, "peerDependencies": { - "@react-facet/core": "0.3.3", + "@react-facet/core": "0.4.0-rc.1", "react": "^18.1.0" }, "devDependencies": { - "@react-facet/core": "0.3.3", - "@react-facet/dom-fiber-testing-library": "0.3.3", + "@react-facet/core": "0.4.0-rc.1", + "@react-facet/dom-fiber-testing-library": "0.4.0-rc.1", "@types/react": "^18.0.8", "@types/rimraf": "^3", "cross-env": "^7.0.3", diff --git a/packages/@react-facet/spring/package.json b/packages/@react-facet/spring/package.json index 86268a14..c5892f25 100644 --- a/packages/@react-facet/spring/package.json +++ b/packages/@react-facet/spring/package.json @@ -29,7 +29,7 @@ "homepage": "https://react-facet.mojang.com/", "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", - "version": "0.3.3", + "version": "0.4.0-rc.1", "main": "src/index.ts", "publishConfig": { "main": "dist/index.js", @@ -41,11 +41,11 @@ "prepublish": "yarn build" }, "peerDependencies": { - "@react-facet/core": "0.3.3", + "@react-facet/core": "0.4.0-rc.1", "react": "^18.1.0" }, "devDependencies": { - "@react-facet/core": "0.3.3", + "@react-facet/core": "0.4.0-rc.1", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^9.4.1", "@types/react": "^18.0.8", diff --git a/yarn.lock b/yarn.lock index f0ccbec5..1972a064 100644 --- a/yarn.lock +++ b/yarn.lock @@ -972,11 +972,11 @@ __metadata: languageName: node linkType: hard -"@react-facet/core@0.3.3, @react-facet/core@workspace:packages/@react-facet/core": +"@react-facet/core@0.4.0-rc.1, @react-facet/core@workspace:packages/@react-facet/core": version: 0.0.0-use.local resolution: "@react-facet/core@workspace:packages/@react-facet/core" dependencies: - "@react-facet/dom-fiber-testing-library": 0.3.3 + "@react-facet/dom-fiber-testing-library": 0.4.0-rc.1 "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 @@ -988,16 +988,16 @@ __metadata: languageName: unknown linkType: soft -"@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount": +"@react-facet/deferred-mount@0.4.0-rc.1, @react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount": version: 0.0.0-use.local resolution: "@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount" dependencies: - "@react-facet/dom-fiber-testing-library": 0.3.3 + "@react-facet/dom-fiber-testing-library": 0.4.0-rc.1 react: ^18.1.0 rimraf: ^3.0.2 typescript: ^4.3.5 peerDependencies: - "@react-facet/core": 0.3.3 + "@react-facet/core": 0.4.0-rc.1 react: ^18.1.0 languageName: unknown linkType: soft @@ -1006,7 +1006,7 @@ __metadata: version: 0.0.0-use.local resolution: "@react-facet/dom-components@workspace:packages/@react-facet/dom-components" dependencies: - "@react-facet/core": 0.3.3 + "@react-facet/core": 0.4.0-rc.1 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^9.4.1 "@types/react": ^18.0.8 @@ -1017,32 +1017,32 @@ __metadata: rimraf: ^3.0.2 typescript: ^4.3.5 peerDependencies: - "@react-facet/core": 0.3.3 + "@react-facet/core": 0.4.0-rc.1 react: ^18.1.0 languageName: unknown linkType: soft -"@react-facet/dom-fiber-testing-library@0.3.3, @react-facet/dom-fiber-testing-library@workspace:packages/@react-facet/dom-fiber-testing-library": +"@react-facet/dom-fiber-testing-library@0.4.0-rc.1, @react-facet/dom-fiber-testing-library@workspace:packages/@react-facet/dom-fiber-testing-library": version: 0.0.0-use.local resolution: "@react-facet/dom-fiber-testing-library@workspace:packages/@react-facet/dom-fiber-testing-library" dependencies: - "@react-facet/dom-fiber": 0.3.3 + "@react-facet/dom-fiber": 0.4.0-rc.1 "@testing-library/dom": ^8.13.0 react: ^18.1.0 rimraf: ^3.0.2 typescript: ^4.3.5 peerDependencies: - "@react-facet/dom-fiber": 0.3.3 + "@react-facet/dom-fiber": 0.4.0-rc.1 react: ^18.1.0 languageName: unknown linkType: soft -"@react-facet/dom-fiber@0.3.3, @react-facet/dom-fiber@workspace:packages/@react-facet/dom-fiber": +"@react-facet/dom-fiber@0.4.0-rc.1, @react-facet/dom-fiber@workspace:packages/@react-facet/dom-fiber": version: 0.0.0-use.local resolution: "@react-facet/dom-fiber@workspace:packages/@react-facet/dom-fiber" dependencies: - "@react-facet/core": 0.3.3 - "@react-facet/dom-fiber-testing-library": 0.3.3 + "@react-facet/core": 0.4.0-rc.1 + "@react-facet/dom-fiber-testing-library": 0.4.0-rc.1 "@types/react": ^18.0.8 "@types/react-reconciler": ^0.28.0 "@types/rimraf": ^3 @@ -1052,7 +1052,7 @@ __metadata: rimraf: ^3.0.2 typescript: ^4.3.5 peerDependencies: - "@react-facet/core": 0.3.3 + "@react-facet/core": 0.4.0-rc.1 react: ^18.1.0 languageName: unknown linkType: soft @@ -1067,12 +1067,12 @@ __metadata: languageName: unknown linkType: soft -"@react-facet/shared-facet@0.3.3, @react-facet/shared-facet@workspace:packages/@react-facet/shared-facet": +"@react-facet/shared-facet@0.4.0-rc.1, @react-facet/shared-facet@workspace:packages/@react-facet/shared-facet": version: 0.0.0-use.local resolution: "@react-facet/shared-facet@workspace:packages/@react-facet/shared-facet" dependencies: - "@react-facet/core": 0.3.3 - "@react-facet/dom-fiber-testing-library": 0.3.3 + "@react-facet/core": 0.4.0-rc.1 + "@react-facet/dom-fiber-testing-library": 0.4.0-rc.1 "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 @@ -1080,16 +1080,16 @@ __metadata: rimraf: ^3.0.2 typescript: ^4.3.5 peerDependencies: - "@react-facet/core": 0.3.3 + "@react-facet/core": 0.4.0-rc.1 react: ^18.1.0 languageName: unknown linkType: soft -"@react-facet/spring@0.3.3, @react-facet/spring@workspace:packages/@react-facet/spring": +"@react-facet/spring@0.4.0-rc.1, @react-facet/spring@workspace:packages/@react-facet/spring": version: 0.0.0-use.local resolution: "@react-facet/spring@workspace:packages/@react-facet/spring" dependencies: - "@react-facet/core": 0.3.3 + "@react-facet/core": 0.4.0-rc.1 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^9.4.1 "@types/react": ^18.0.8 @@ -1100,7 +1100,7 @@ __metadata: rimraf: ^3.0.2 typescript: ^4.3.5 peerDependencies: - "@react-facet/core": 0.3.3 + "@react-facet/core": 0.4.0-rc.1 react: ^18.1.0 languageName: unknown linkType: soft @@ -2489,10 +2489,10 @@ __metadata: version: 0.0.0-use.local resolution: "benchmarking@workspace:examples/benchmarking" dependencies: - "@react-facet/core": 0.3.3 - "@react-facet/dom-fiber": 0.3.3 - "@react-facet/shared-facet": 0.3.3 - "@react-facet/spring": 0.3.3 + "@react-facet/core": 0.4.0-rc.1 + "@react-facet/dom-fiber": 0.4.0-rc.1 + "@react-facet/shared-facet": 0.4.0-rc.1 + "@react-facet/spring": 0.4.0-rc.1 "@types/fs-extra": ^9.0.12 "@types/puppeteer": ^5.4.4 "@types/ramda": ^0 @@ -3102,10 +3102,11 @@ __metadata: version: 0.0.0-use.local resolution: "concurrent@workspace:examples/concurrent" dependencies: - "@react-facet/core": 0.3.3 - "@react-facet/dom-fiber": 0.3.3 - "@react-facet/shared-facet": 0.3.3 - "@react-facet/spring": 0.3.3 + "@react-facet/core": 0.4.0-rc.1 + "@react-facet/deferred-mount": 0.4.0-rc.1 + "@react-facet/dom-fiber": 0.4.0-rc.1 + "@react-facet/shared-facet": 0.4.0-rc.1 + "@react-facet/spring": 0.4.0-rc.1 "@types/fs-extra": ^9.0.12 "@types/puppeteer": ^5.4.4 "@types/ramda": ^0 From 2e8fe70a2c52895e7ce786b28f6a547fd2def04d Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 11 Jul 2022 16:09:13 +0200 Subject: [PATCH 08/88] Everything builds (at least) --- .../core/src/hooks/useFacetUnwrap.spec.tsx | 18 ++++---- .../dom-fiber-testing-library/src/setupAct.ts | 3 +- .../dom-fiber/src/createFiberRoot.ts | 13 ++++-- .../dom-fiber/src/createPortal.ts | 7 ++-- packages/@react-facet/dom-fiber/src/index.ts | 41 ++++++++++++++----- 5 files changed, 54 insertions(+), 28 deletions(-) diff --git a/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx b/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx index 8975a0c1..26134b36 100644 --- a/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx +++ b/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx @@ -13,7 +13,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() - return {adaptValue} + return {adaptValue == NO_VALUE ? 'no-value' : adaptValue} } render() @@ -28,7 +28,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() - return {adaptValue} + return {adaptValue == NO_VALUE ? 'no-value' : adaptValue} } render() @@ -43,7 +43,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() - return {adaptValue} + return {adaptValue == NO_VALUE ? 'no-value' : adaptValue} } render() @@ -58,7 +58,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() - return {adaptValue} + return {adaptValue == NO_VALUE ? 'no-value' : adaptValue} } render() @@ -73,7 +73,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() - return {adaptValue} + return {adaptValue == NO_VALUE ? 'no-value' : adaptValue} } render() @@ -89,7 +89,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() - return {adaptValue} + return {adaptValue == NO_VALUE ? 'no-value' : adaptValue} } render() @@ -103,7 +103,7 @@ it('triggers when there is a change in the facet', () => { const ComponentWithFacetEffect = () => { const adaptValue = useFacetUnwrap(demoFacet) - return {adaptValue} + return {adaptValue == NO_VALUE ? 'no-value' : adaptValue} } const scenario = @@ -116,7 +116,7 @@ it('triggers when there is a change in the facet', () => { it('returns static values when given static values', () => { const ComponentWithFacetEffect = () => { const adaptValue = useFacetUnwrap('static string') - return {adaptValue} + return {adaptValue == NO_VALUE ? 'no-value' : adaptValue} } const dom = render() @@ -203,7 +203,7 @@ it('does not trigger a re-render when changing a facet from undefined to undefin const adaptValue = useFacetUnwrap(demoFacet) renderedMock() - return {adaptValue} + return {adaptValue == NO_VALUE ? 'no-value' : adaptValue} } render() diff --git a/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts b/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts index 01dfccb9..4078e29c 100644 --- a/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts +++ b/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts @@ -36,7 +36,8 @@ export const setupAct = ({ batchedUpdates, flushPassiveEffects, IsThisRendererAc } try { - const result = batchedUpdates(callback) + // TODO: check what we should pass as the second argument + const result = batchedUpdates(callback, null) try { if (actingUpdatesScopeDepth === 1 && (isSchedulerMocked === false || previousIsSomeRendererActing === false)) { diff --git a/packages/@react-facet/dom-fiber/src/createFiberRoot.ts b/packages/@react-facet/dom-fiber/src/createFiberRoot.ts index a76f0948..a174d8d6 100644 --- a/packages/@react-facet/dom-fiber/src/createFiberRoot.ts +++ b/packages/@react-facet/dom-fiber/src/createFiberRoot.ts @@ -1,19 +1,24 @@ +import { ConcurrentRoot } from 'react-reconciler/constants' import { FacetFiberRoot, ReactFacetReconciler } from './types' /** * @private consider using render instead */ export const createFiberRoot = - (reconciler: ReactFacetReconciler) => + (reconcilerInstance: ReactFacetReconciler) => (container: HTMLElement): FacetFiberRoot => - reconciler.createContainer( + reconcilerInstance.createContainer( { children: new Set(), element: container, styleUnsubscribers: new Map(), style: container.style, }, - 0, - false, + ConcurrentRoot, + null, + true, + true, + '', + (error) => console.error('[@react-facet/dom-fiber]', error), null, ) diff --git a/packages/@react-facet/dom-fiber/src/createPortal.ts b/packages/@react-facet/dom-fiber/src/createPortal.ts index b3f4219c..e663e73e 100644 --- a/packages/@react-facet/dom-fiber/src/createPortal.ts +++ b/packages/@react-facet/dom-fiber/src/createPortal.ts @@ -1,5 +1,5 @@ import { ReactNode } from 'react' -import { ReactNodeList } from 'react-reconciler' +import { ReactPortal } from 'react-reconciler' // Extracted from React's codebase const REACT_PORTAL_TYPE = Symbol.for('react.portal') @@ -8,10 +8,11 @@ const REACT_PORTAL_TYPE = Symbol.for('react.portal') * Creates a React Portal. * More info: https://reactjs.org/docs/portals.html */ -export function createPortal(children: ReactNodeList, container: HTMLElement, key?: string | null): ReactNode { +export function createPortal(children: ReactNode, container: HTMLElement): ReactPortal { return { $$typeof: REACT_PORTAL_TYPE, - key, + key: null, + implementation: null, children, containerInfo: { children: new Set(), diff --git a/packages/@react-facet/dom-fiber/src/index.ts b/packages/@react-facet/dom-fiber/src/index.ts index 4602ce39..bbd6bad5 100644 --- a/packages/@react-facet/dom-fiber/src/index.ts +++ b/packages/@react-facet/dom-fiber/src/index.ts @@ -1,33 +1,52 @@ import { ReactElement } from 'react' -import { createFiberRoot } from './createFiberRoot' import { createReconciler } from './createReconciler' +import { createFiberRoot } from './createFiberRoot' export * from './types' export * from './createPortal' export * from './createFiberRoot' export * from './createReconciler' -/** - * Render the Facets as the root renderer - */ -export function render(element: ReactElement, container: HTMLElement | null) { - if (container == null) return () => {} +export type RootType = { + render(children: ReactElement): void + unmount(): void +} - const reconcilerInstance = createReconciler() +export function createRoot(container: HTMLElement | null): RootType { + if (container == null) throw new Error('HTML container cannot be null.') - const fiberRoot = createFiberRoot(reconcilerInstance)(container) + const reconcilerInstance = createReconciler() - reconcilerInstance.updateContainer(element, fiberRoot, null, () => {}) + const root = createFiberRoot(reconcilerInstance)(container) if (process.env.NODE_ENV !== 'production') { reconcilerInstance.injectIntoDevTools({ // 0: production, 1: development bundleType: 1, rendererPackageName: '@react-facet/dom-fiber', - version: '0.0.4', + version: '0.4.0', }) } + return { + render(children: ReactElement) { + reconcilerInstance.updateContainer(children, root, null, () => {}) + }, + unmount() { + reconcilerInstance.updateContainer(null, root, null, null) + }, + } +} + +/** + * @deprecated use createRoot instead + */ +export function render(element: ReactElement, container: HTMLElement | null) { + if (container == null) return () => {} + + const root = createRoot(container) + root.render(element) + return () => { - reconcilerInstance.updateContainer(null, fiberRoot, null, () => {}) + root.unmount() } } From c45723600fb479bf1a0ac7698982105c6166076c Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 11 Jul 2022 16:17:35 +0200 Subject: [PATCH 09/88] Bump to 0.4.0-rc.2 --- examples/benchmarking/package.json | 8 +-- examples/concurrent/package.json | 10 ++-- packages/@react-facet/core/package.json | 4 +- .../@react-facet/deferred-mount/package.json | 6 +- .../@react-facet/dom-components/package.json | 6 +- .../dom-fiber-testing-library/package.json | 6 +- packages/@react-facet/dom-fiber/package.json | 8 +-- .../@react-facet/eslint-config/package.json | 2 +- .../@react-facet/shared-facet/package.json | 8 +-- packages/@react-facet/spring/package.json | 6 +- yarn.lock | 60 +++++++++---------- 11 files changed, 62 insertions(+), 62 deletions(-) diff --git a/examples/benchmarking/package.json b/examples/benchmarking/package.json index a8c3db22..22bf7916 100644 --- a/examples/benchmarking/package.json +++ b/examples/benchmarking/package.json @@ -9,10 +9,10 @@ "compare": "ts-node compare.ts" }, "dependencies": { - "@react-facet/core": "0.4.0-rc.1", - "@react-facet/dom-fiber": "0.4.0-rc.1", - "@react-facet/shared-facet": "0.4.0-rc.1", - "@react-facet/spring": "0.4.0-rc.1", + "@react-facet/core": "0.4.0-rc.2", + "@react-facet/dom-fiber": "0.4.0-rc.2", + "@react-facet/shared-facet": "0.4.0-rc.2", + "@react-facet/spring": "0.4.0-rc.2", "ramda": "^0.27.1", "react": "^18.1.0", "react-dom": "^18.1.0" diff --git a/examples/concurrent/package.json b/examples/concurrent/package.json index cf83b019..a4c773ca 100644 --- a/examples/concurrent/package.json +++ b/examples/concurrent/package.json @@ -6,11 +6,11 @@ "start": "webpack serve --port 8081" }, "dependencies": { - "@react-facet/core": "0.4.0-rc.1", - "@react-facet/deferred-mount": "0.4.0-rc.1", - "@react-facet/dom-fiber": "0.4.0-rc.1", - "@react-facet/shared-facet": "0.4.0-rc.1", - "@react-facet/spring": "0.4.0-rc.1", + "@react-facet/core": "0.4.0-rc.2", + "@react-facet/deferred-mount": "0.4.0-rc.2", + "@react-facet/dom-fiber": "0.4.0-rc.2", + "@react-facet/shared-facet": "0.4.0-rc.2", + "@react-facet/spring": "0.4.0-rc.2", "ramda": "^0.27.1", "react": "^18.1.0", "react-dom": "^18.1.0" diff --git a/packages/@react-facet/core/package.json b/packages/@react-facet/core/package.json index 1dd2b7fe..099c2827 100644 --- a/packages/@react-facet/core/package.json +++ b/packages/@react-facet/core/package.json @@ -29,7 +29,7 @@ "homepage": "https://react-facet.mojang.com/", "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", - "version": "0.4.0-rc.1", + "version": "0.4.0-rc.2", "main": "src/index.ts", "publishConfig": { "main": "dist/index.js", @@ -44,7 +44,7 @@ "react": "^18.1.0" }, "devDependencies": { - "@react-facet/dom-fiber-testing-library": "0.4.0-rc.1", + "@react-facet/dom-fiber-testing-library": "0.4.0-rc.2", "@types/react": "^18.0.8", "@types/rimraf": "^3", "cross-env": "^7.0.3", diff --git a/packages/@react-facet/deferred-mount/package.json b/packages/@react-facet/deferred-mount/package.json index 1eb4f3ef..8be79be7 100644 --- a/packages/@react-facet/deferred-mount/package.json +++ b/packages/@react-facet/deferred-mount/package.json @@ -29,7 +29,7 @@ "homepage": "https://react-facet.mojang.com/", "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", - "version": "0.4.0-rc.1", + "version": "0.4.0-rc.2", "main": "src/index.tsx", "publishConfig": { "main": "dist/index.js", @@ -41,11 +41,11 @@ "prepublish": "yarn build" }, "peerDependencies": { - "@react-facet/core": "0.4.0-rc.1", + "@react-facet/core": "0.4.0-rc.2", "react": "^18.1.0" }, "devDependencies": { - "@react-facet/dom-fiber-testing-library": "0.4.0-rc.1", + "@react-facet/dom-fiber-testing-library": "0.4.0-rc.2", "react": "^18.1.0", "rimraf": "^3.0.2", "typescript": "^4.3.5" diff --git a/packages/@react-facet/dom-components/package.json b/packages/@react-facet/dom-components/package.json index 67093e06..21d0acf3 100644 --- a/packages/@react-facet/dom-components/package.json +++ b/packages/@react-facet/dom-components/package.json @@ -29,7 +29,7 @@ "homepage": "https://react-facet.mojang.com/", "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", - "version": "0.4.0-rc.1", + "version": "0.4.0-rc.2", "main": "src/index.tsx", "publishConfig": { "main": "dist/index.js", @@ -41,11 +41,11 @@ "prepublish": "yarn build" }, "peerDependencies": { - "@react-facet/core": "0.4.0-rc.1", + "@react-facet/core": "0.4.0-rc.2", "react": "^18.1.0" }, "devDependencies": { - "@react-facet/core": "0.4.0-rc.1", + "@react-facet/core": "0.4.0-rc.2", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^9.4.1", "@types/react": "^18.0.8", diff --git a/packages/@react-facet/dom-fiber-testing-library/package.json b/packages/@react-facet/dom-fiber-testing-library/package.json index 9f0edf8f..ca6e0967 100644 --- a/packages/@react-facet/dom-fiber-testing-library/package.json +++ b/packages/@react-facet/dom-fiber-testing-library/package.json @@ -29,7 +29,7 @@ "homepage": "https://react-facet.mojang.com/", "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", - "version": "0.4.0-rc.1", + "version": "0.4.0-rc.2", "main": "src/index.ts", "publishConfig": { "main": "dist/index.js", @@ -44,11 +44,11 @@ "@testing-library/dom": "^8.13.0" }, "peerDependencies": { - "@react-facet/dom-fiber": "0.4.0-rc.1", + "@react-facet/dom-fiber": "0.4.0-rc.2", "react": "^18.1.0" }, "devDependencies": { - "@react-facet/dom-fiber": "0.4.0-rc.1", + "@react-facet/dom-fiber": "0.4.0-rc.2", "react": "^18.1.0", "rimraf": "^3.0.2", "typescript": "^4.3.5" diff --git a/packages/@react-facet/dom-fiber/package.json b/packages/@react-facet/dom-fiber/package.json index b95026e1..a352d1b0 100644 --- a/packages/@react-facet/dom-fiber/package.json +++ b/packages/@react-facet/dom-fiber/package.json @@ -29,7 +29,7 @@ "homepage": "https://react-facet.mojang.com/", "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", - "version": "0.4.0-rc.1", + "version": "0.4.0-rc.2", "main": "src/index.ts", "publishConfig": { "main": "dist/index.js", @@ -44,12 +44,12 @@ "react-reconciler": "^0.28.0" }, "peerDependencies": { - "@react-facet/core": "0.4.0-rc.1", + "@react-facet/core": "0.4.0-rc.2", "react": "^18.1.0" }, "devDependencies": { - "@react-facet/core": "0.4.0-rc.1", - "@react-facet/dom-fiber-testing-library": "0.4.0-rc.1", + "@react-facet/core": "0.4.0-rc.2", + "@react-facet/dom-fiber-testing-library": "0.4.0-rc.2", "@types/react": "^18.0.8", "@types/react-reconciler": "^0.28.0", "@types/rimraf": "^3", diff --git a/packages/@react-facet/eslint-config/package.json b/packages/@react-facet/eslint-config/package.json index e02b6cd1..a4f2bfa8 100644 --- a/packages/@react-facet/eslint-config/package.json +++ b/packages/@react-facet/eslint-config/package.json @@ -29,7 +29,7 @@ "homepage": "https://react-facet.mojang.com/", "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", - "version": "0.4.0-rc.1", + "version": "0.4.0-rc.2", "main": "src/index.js", "sideEffects": false, "peerDependencies": { diff --git a/packages/@react-facet/shared-facet/package.json b/packages/@react-facet/shared-facet/package.json index 781fa7b0..082460f5 100644 --- a/packages/@react-facet/shared-facet/package.json +++ b/packages/@react-facet/shared-facet/package.json @@ -29,7 +29,7 @@ "homepage": "https://react-facet.mojang.com/", "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", - "version": "0.4.0-rc.1", + "version": "0.4.0-rc.2", "main": "src/index.ts", "publishConfig": { "main": "dist/index.js", @@ -41,12 +41,12 @@ "prepublish": "yarn build" }, "peerDependencies": { - "@react-facet/core": "0.4.0-rc.1", + "@react-facet/core": "0.4.0-rc.2", "react": "^18.1.0" }, "devDependencies": { - "@react-facet/core": "0.4.0-rc.1", - "@react-facet/dom-fiber-testing-library": "0.4.0-rc.1", + "@react-facet/core": "0.4.0-rc.2", + "@react-facet/dom-fiber-testing-library": "0.4.0-rc.2", "@types/react": "^18.0.8", "@types/rimraf": "^3", "cross-env": "^7.0.3", diff --git a/packages/@react-facet/spring/package.json b/packages/@react-facet/spring/package.json index c5892f25..79f9daa3 100644 --- a/packages/@react-facet/spring/package.json +++ b/packages/@react-facet/spring/package.json @@ -29,7 +29,7 @@ "homepage": "https://react-facet.mojang.com/", "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", - "version": "0.4.0-rc.1", + "version": "0.4.0-rc.2", "main": "src/index.ts", "publishConfig": { "main": "dist/index.js", @@ -41,11 +41,11 @@ "prepublish": "yarn build" }, "peerDependencies": { - "@react-facet/core": "0.4.0-rc.1", + "@react-facet/core": "0.4.0-rc.2", "react": "^18.1.0" }, "devDependencies": { - "@react-facet/core": "0.4.0-rc.1", + "@react-facet/core": "0.4.0-rc.2", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^9.4.1", "@types/react": "^18.0.8", diff --git a/yarn.lock b/yarn.lock index 1972a064..4d506925 100644 --- a/yarn.lock +++ b/yarn.lock @@ -972,11 +972,11 @@ __metadata: languageName: node linkType: hard -"@react-facet/core@0.4.0-rc.1, @react-facet/core@workspace:packages/@react-facet/core": +"@react-facet/core@0.4.0-rc.2, @react-facet/core@workspace:packages/@react-facet/core": version: 0.0.0-use.local resolution: "@react-facet/core@workspace:packages/@react-facet/core" dependencies: - "@react-facet/dom-fiber-testing-library": 0.4.0-rc.1 + "@react-facet/dom-fiber-testing-library": 0.4.0-rc.2 "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 @@ -988,16 +988,16 @@ __metadata: languageName: unknown linkType: soft -"@react-facet/deferred-mount@0.4.0-rc.1, @react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount": +"@react-facet/deferred-mount@0.4.0-rc.2, @react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount": version: 0.0.0-use.local resolution: "@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount" dependencies: - "@react-facet/dom-fiber-testing-library": 0.4.0-rc.1 + "@react-facet/dom-fiber-testing-library": 0.4.0-rc.2 react: ^18.1.0 rimraf: ^3.0.2 typescript: ^4.3.5 peerDependencies: - "@react-facet/core": 0.4.0-rc.1 + "@react-facet/core": 0.4.0-rc.2 react: ^18.1.0 languageName: unknown linkType: soft @@ -1006,7 +1006,7 @@ __metadata: version: 0.0.0-use.local resolution: "@react-facet/dom-components@workspace:packages/@react-facet/dom-components" dependencies: - "@react-facet/core": 0.4.0-rc.1 + "@react-facet/core": 0.4.0-rc.2 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^9.4.1 "@types/react": ^18.0.8 @@ -1017,32 +1017,32 @@ __metadata: rimraf: ^3.0.2 typescript: ^4.3.5 peerDependencies: - "@react-facet/core": 0.4.0-rc.1 + "@react-facet/core": 0.4.0-rc.2 react: ^18.1.0 languageName: unknown linkType: soft -"@react-facet/dom-fiber-testing-library@0.4.0-rc.1, @react-facet/dom-fiber-testing-library@workspace:packages/@react-facet/dom-fiber-testing-library": +"@react-facet/dom-fiber-testing-library@0.4.0-rc.2, @react-facet/dom-fiber-testing-library@workspace:packages/@react-facet/dom-fiber-testing-library": version: 0.0.0-use.local resolution: "@react-facet/dom-fiber-testing-library@workspace:packages/@react-facet/dom-fiber-testing-library" dependencies: - "@react-facet/dom-fiber": 0.4.0-rc.1 + "@react-facet/dom-fiber": 0.4.0-rc.2 "@testing-library/dom": ^8.13.0 react: ^18.1.0 rimraf: ^3.0.2 typescript: ^4.3.5 peerDependencies: - "@react-facet/dom-fiber": 0.4.0-rc.1 + "@react-facet/dom-fiber": 0.4.0-rc.2 react: ^18.1.0 languageName: unknown linkType: soft -"@react-facet/dom-fiber@0.4.0-rc.1, @react-facet/dom-fiber@workspace:packages/@react-facet/dom-fiber": +"@react-facet/dom-fiber@0.4.0-rc.2, @react-facet/dom-fiber@workspace:packages/@react-facet/dom-fiber": version: 0.0.0-use.local resolution: "@react-facet/dom-fiber@workspace:packages/@react-facet/dom-fiber" dependencies: - "@react-facet/core": 0.4.0-rc.1 - "@react-facet/dom-fiber-testing-library": 0.4.0-rc.1 + "@react-facet/core": 0.4.0-rc.2 + "@react-facet/dom-fiber-testing-library": 0.4.0-rc.2 "@types/react": ^18.0.8 "@types/react-reconciler": ^0.28.0 "@types/rimraf": ^3 @@ -1052,7 +1052,7 @@ __metadata: rimraf: ^3.0.2 typescript: ^4.3.5 peerDependencies: - "@react-facet/core": 0.4.0-rc.1 + "@react-facet/core": 0.4.0-rc.2 react: ^18.1.0 languageName: unknown linkType: soft @@ -1067,12 +1067,12 @@ __metadata: languageName: unknown linkType: soft -"@react-facet/shared-facet@0.4.0-rc.1, @react-facet/shared-facet@workspace:packages/@react-facet/shared-facet": +"@react-facet/shared-facet@0.4.0-rc.2, @react-facet/shared-facet@workspace:packages/@react-facet/shared-facet": version: 0.0.0-use.local resolution: "@react-facet/shared-facet@workspace:packages/@react-facet/shared-facet" dependencies: - "@react-facet/core": 0.4.0-rc.1 - "@react-facet/dom-fiber-testing-library": 0.4.0-rc.1 + "@react-facet/core": 0.4.0-rc.2 + "@react-facet/dom-fiber-testing-library": 0.4.0-rc.2 "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 @@ -1080,16 +1080,16 @@ __metadata: rimraf: ^3.0.2 typescript: ^4.3.5 peerDependencies: - "@react-facet/core": 0.4.0-rc.1 + "@react-facet/core": 0.4.0-rc.2 react: ^18.1.0 languageName: unknown linkType: soft -"@react-facet/spring@0.4.0-rc.1, @react-facet/spring@workspace:packages/@react-facet/spring": +"@react-facet/spring@0.4.0-rc.2, @react-facet/spring@workspace:packages/@react-facet/spring": version: 0.0.0-use.local resolution: "@react-facet/spring@workspace:packages/@react-facet/spring" dependencies: - "@react-facet/core": 0.4.0-rc.1 + "@react-facet/core": 0.4.0-rc.2 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^9.4.1 "@types/react": ^18.0.8 @@ -1100,7 +1100,7 @@ __metadata: rimraf: ^3.0.2 typescript: ^4.3.5 peerDependencies: - "@react-facet/core": 0.4.0-rc.1 + "@react-facet/core": 0.4.0-rc.2 react: ^18.1.0 languageName: unknown linkType: soft @@ -2489,10 +2489,10 @@ __metadata: version: 0.0.0-use.local resolution: "benchmarking@workspace:examples/benchmarking" dependencies: - "@react-facet/core": 0.4.0-rc.1 - "@react-facet/dom-fiber": 0.4.0-rc.1 - "@react-facet/shared-facet": 0.4.0-rc.1 - "@react-facet/spring": 0.4.0-rc.1 + "@react-facet/core": 0.4.0-rc.2 + "@react-facet/dom-fiber": 0.4.0-rc.2 + "@react-facet/shared-facet": 0.4.0-rc.2 + "@react-facet/spring": 0.4.0-rc.2 "@types/fs-extra": ^9.0.12 "@types/puppeteer": ^5.4.4 "@types/ramda": ^0 @@ -3102,11 +3102,11 @@ __metadata: version: 0.0.0-use.local resolution: "concurrent@workspace:examples/concurrent" dependencies: - "@react-facet/core": 0.4.0-rc.1 - "@react-facet/deferred-mount": 0.4.0-rc.1 - "@react-facet/dom-fiber": 0.4.0-rc.1 - "@react-facet/shared-facet": 0.4.0-rc.1 - "@react-facet/spring": 0.4.0-rc.1 + "@react-facet/core": 0.4.0-rc.2 + "@react-facet/deferred-mount": 0.4.0-rc.2 + "@react-facet/dom-fiber": 0.4.0-rc.2 + "@react-facet/shared-facet": 0.4.0-rc.2 + "@react-facet/spring": 0.4.0-rc.2 "@types/fs-extra": ^9.0.12 "@types/puppeteer": ^5.4.4 "@types/ramda": ^0 From cc79a81c239fe695048cc027cad6b82351e91b3b Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 11 Jul 2022 16:17:46 +0200 Subject: [PATCH 10/88] Add a test watch script --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index abda2843..01a0fdfd 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "build": "yarn workspaces foreach --topological --verbose run build", "publish": "yarn workspaces foreach --topological --no-private npm publish --tolerate-republish --access public", "test": "cross-env NODE_ENV=test jest --coverage", + "test:watch": "cross-env NODE_ENV=test jest --watchAll", "lint": "eslint .", "package": "yarn workspaces foreach --topological --verbose pack --out=%s-%v.tgz && ts-node ./scripts/moveAllPackagedToArtifacts.ts" }, From a72a9810e39fe9d8db5e72c7721c6a6ae818e770 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 18 Jul 2022 16:06:07 +0200 Subject: [PATCH 11/88] Build script in new concurrent examples --- examples/concurrent/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/concurrent/package.json b/examples/concurrent/package.json index a4c773ca..9bf1e76e 100644 --- a/examples/concurrent/package.json +++ b/examples/concurrent/package.json @@ -3,6 +3,7 @@ "version": "0.0.0", "private": true, "scripts": { + "build": "NODE_ENV=production webpack", "start": "webpack serve --port 8081" }, "dependencies": { From c766074d14d2113e74914416a20a4fc391cd8b66 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 18 Jul 2022 17:21:03 +0200 Subject: [PATCH 12/88] Updates "act" implementation Fixes some of the tests --- .../dom-fiber-testing-library/src/index.ts | 3 + .../dom-fiber-testing-library/src/renderer.ts | 18 ++-- .../dom-fiber-testing-library/src/setupAct.ts | 82 ++++++------------- 3 files changed, 39 insertions(+), 64 deletions(-) diff --git a/packages/@react-facet/dom-fiber-testing-library/src/index.ts b/packages/@react-facet/dom-fiber-testing-library/src/index.ts index 02d59c96..3e9894f7 100644 --- a/packages/@react-facet/dom-fiber-testing-library/src/index.ts +++ b/packages/@react-facet/dom-fiber-testing-library/src/index.ts @@ -1 +1,4 @@ +import { setupAct } from './setupAct' export * from './renderer' + +setupAct() diff --git a/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts b/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts index d91f81eb..ceb3c877 100644 --- a/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts +++ b/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts @@ -1,6 +1,5 @@ -import { ReactElement } from 'react' +import React, { ReactElement } from 'react' import * as testingLibrary from '@testing-library/dom' -import { setupAct } from './setupAct' import { Matcher, MatcherOptions, @@ -13,6 +12,10 @@ import { } from '@testing-library/dom' import { createReconciler, createFiberRoot, FacetFiberRoot } from '@react-facet/dom-fiber' +export interface Act { + (work: () => void): boolean +} + /** * Custom testing-library implementation based on https://github.com/testing-library/react-testing-library * @@ -25,7 +28,8 @@ const setup = () => { const mountedContainers = new Set() - const act = setupAct(reconcilerInstance) + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const act = (React as any).unstable_act as Act function render( ui: ReactElement, @@ -55,7 +59,9 @@ const setup = () => { }) }, rerender: (rerenderUi: ReactElement) => { - render(rerenderUi, baseElement, container, fiberRoot) + act(() => { + reconcilerInstance.updateContainer(rerenderUi, fiberRoot, null, () => {}) + }) }, asFragment: () => { if (typeof document.createRange === 'function') { @@ -94,12 +100,12 @@ const setup = () => { }) } - const fireEventFunction: FireFunction = (...args) => act(() => testingLibrary.fireEvent(...args)) + const fireEventFunction: FireFunction = (...args) => testingLibrary.fireEvent(...args) const fireEvent = fireEventFunction as FireFunction & FireObject mapKeys(testingLibrary.fireEvent as FireObject, (typeArg) => { - fireEvent[typeArg] = (...args) => act(() => testingLibrary.fireEvent[typeArg](...args)) + fireEvent[typeArg] = (...args) => testingLibrary.fireEvent[typeArg](...args) }) return { act, render, cleanup, fireEvent } diff --git a/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts b/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts index 4078e29c..97ab915d 100644 --- a/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts +++ b/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts @@ -1,63 +1,29 @@ -import React, { MutableRefObject } from 'react' -import { ReactFacetReconciler } from '@react-facet/dom-fiber' - -export type Act = (callback: () => A) => A - -export const setupAct = ({ batchedUpdates, flushPassiveEffects, IsThisRendererActing }: ReactFacetReconciler): Act => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const { IsSomeRendererActing } = (React as any).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as { - IsSomeRendererActing: MutableRefObject +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function getGlobalThis(): any { + /* istanbul ignore else */ + if (typeof globalThis !== 'undefined') { + return globalThis } - - const isSchedulerMocked = false - const flushWork = function () { - let didFlushWork = false - while (flushPassiveEffects()) { - didFlushWork = true - } - - return didFlushWork + /* istanbul ignore next */ + if (typeof self !== 'undefined') { + return self } - - let actingUpdatesScopeDepth = 0 - - function act(callback: () => A) { - actingUpdatesScopeDepth++ - - const previousIsSomeRendererActing = IsSomeRendererActing.current - const previousIsThisRendererActing = IsThisRendererActing.current - IsSomeRendererActing.current = true - IsThisRendererActing.current = true - - function onDone() { - actingUpdatesScopeDepth-- - IsSomeRendererActing.current = previousIsSomeRendererActing - IsThisRendererActing.current = previousIsThisRendererActing - } - - try { - // TODO: check what we should pass as the second argument - const result = batchedUpdates(callback, null) - - try { - if (actingUpdatesScopeDepth === 1 && (isSchedulerMocked === false || previousIsSomeRendererActing === false)) { - // we're about to exit the act() scope, - // now's the time to flush effects - flushWork() - } - onDone() - } catch (err) { - onDone() - throw err - } - - return result - } catch (error) { - // on sync errors, we still want to 'cleanup' and decrement actingUpdatesScopeDepth - onDone() - throw error - } + /* istanbul ignore next */ + if (typeof window !== 'undefined') { + return window + } + /* istanbul ignore next */ + if (typeof global !== 'undefined') { + return global } + /* istanbul ignore next */ + throw new Error('unable to locate global object') +} - return act +/** + * More info: https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html#configuring-your-testing-environment + * Reference implementation: https://github.com/testing-library/react-testing-library/blob/c80809a956b0b9f3289c4a6fa8b5e8cc72d6ef6d/src/act-compat.js#L5 + */ +export const setupAct = () => { + getGlobalThis().IS_REACT_ACT_ENVIRONMENT = true } From 8b6fc744068a0c27c13d56aceb62e1042fd44649 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 18 Jul 2022 17:21:33 +0200 Subject: [PATCH 13/88] Update @testing-library/dom --- .../dom-fiber-testing-library/package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/@react-facet/dom-fiber-testing-library/package.json b/packages/@react-facet/dom-fiber-testing-library/package.json index ca6e0967..fbe098f3 100644 --- a/packages/@react-facet/dom-fiber-testing-library/package.json +++ b/packages/@react-facet/dom-fiber-testing-library/package.json @@ -41,7 +41,7 @@ "prepublish": "yarn build" }, "dependencies": { - "@testing-library/dom": "^8.13.0" + "@testing-library/dom": "^8.16.0" }, "peerDependencies": { "@react-facet/dom-fiber": "0.4.0-rc.2", diff --git a/yarn.lock b/yarn.lock index 4d506925..9c92c1f8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1027,7 +1027,7 @@ __metadata: resolution: "@react-facet/dom-fiber-testing-library@workspace:packages/@react-facet/dom-fiber-testing-library" dependencies: "@react-facet/dom-fiber": 0.4.0-rc.2 - "@testing-library/dom": ^8.13.0 + "@testing-library/dom": ^8.16.0 react: ^18.1.0 rimraf: ^3.0.2 typescript: ^4.3.5 @@ -1161,9 +1161,9 @@ __metadata: languageName: node linkType: hard -"@testing-library/dom@npm:^8.13.0": - version: 8.13.0 - resolution: "@testing-library/dom@npm:8.13.0" +"@testing-library/dom@npm:^8.16.0": + version: 8.16.0 + resolution: "@testing-library/dom@npm:8.16.0" dependencies: "@babel/code-frame": ^7.10.4 "@babel/runtime": ^7.12.5 @@ -1173,7 +1173,7 @@ __metadata: dom-accessibility-api: ^0.5.9 lz-string: ^1.4.4 pretty-format: ^27.0.2 - checksum: 880f1872b9949800d4444e3bdbd03df86d6f41ec7c27136dff1da29e87d2df2d7ee904afcdf895ffce351c25bd12119117eae023354d50e707ad56d43b2ed3ed + checksum: 37aabbec872522bcb51106ecb700d9be601293e75445084b6cc195921db4b2d06d6bd4c67ad834174c129f2199c39aa540b6d17c296fcbd701dc99fd800afe36 languageName: node linkType: hard From 60155c10f66626b1d9a5b2c1d8dde0acf3a82d20 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 18 Jul 2022 17:46:55 +0200 Subject: [PATCH 14/88] Fixes dom-fiber tests --- .../dom-fiber-testing-library/src/index.ts | 3 - .../dom-fiber-testing-library/src/renderer.ts | 8 +- .../dom-fiber-testing-library/src/setupAct.ts | 21 +- .../dom-fiber/src/createPortal.spec.tsx | 27 +- .../dom-fiber/src/setupHostConfig.spec.tsx | 348 ++++++++++++------ .../@react-facet/dom-fiber/src/testSetup.ts | 64 ++++ 6 files changed, 330 insertions(+), 141 deletions(-) create mode 100644 packages/@react-facet/dom-fiber/src/testSetup.ts diff --git a/packages/@react-facet/dom-fiber-testing-library/src/index.ts b/packages/@react-facet/dom-fiber-testing-library/src/index.ts index 3e9894f7..02d59c96 100644 --- a/packages/@react-facet/dom-fiber-testing-library/src/index.ts +++ b/packages/@react-facet/dom-fiber-testing-library/src/index.ts @@ -1,4 +1 @@ -import { setupAct } from './setupAct' export * from './renderer' - -setupAct() diff --git a/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts b/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts index ceb3c877..f7753fd8 100644 --- a/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts +++ b/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts @@ -1,4 +1,5 @@ import React, { ReactElement } from 'react' +import { setupAct } from './setupAct' import * as testingLibrary from '@testing-library/dom' import { Matcher, @@ -12,10 +13,6 @@ import { } from '@testing-library/dom' import { createReconciler, createFiberRoot, FacetFiberRoot } from '@react-facet/dom-fiber' -export interface Act { - (work: () => void): boolean -} - /** * Custom testing-library implementation based on https://github.com/testing-library/react-testing-library * @@ -28,8 +25,7 @@ const setup = () => { const mountedContainers = new Set() - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const act = (React as any).unstable_act as Act + const act = setupAct() function render( ui: ReactElement, diff --git a/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts b/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts index 97ab915d..b1a58c6f 100644 --- a/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts +++ b/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts @@ -1,22 +1,23 @@ +import React from 'react' + // eslint-disable-next-line @typescript-eslint/no-explicit-any function getGlobalThis(): any { - /* istanbul ignore else */ if (typeof globalThis !== 'undefined') { return globalThis } - /* istanbul ignore next */ + if (typeof self !== 'undefined') { return self } - /* istanbul ignore next */ + if (typeof window !== 'undefined') { return window } - /* istanbul ignore next */ + if (typeof global !== 'undefined') { return global } - /* istanbul ignore next */ + throw new Error('unable to locate global object') } @@ -24,6 +25,14 @@ function getGlobalThis(): any { * More info: https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html#configuring-your-testing-environment * Reference implementation: https://github.com/testing-library/react-testing-library/blob/c80809a956b0b9f3289c4a6fa8b5e8cc72d6ef6d/src/act-compat.js#L5 */ -export const setupAct = () => { +export const setupAct = (): Act => { getGlobalThis().IS_REACT_ACT_ENVIRONMENT = true + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const act = (React as any).unstable_act as Act + return act +} + +export interface Act { + (work: () => void): boolean } diff --git a/packages/@react-facet/dom-fiber/src/createPortal.spec.tsx b/packages/@react-facet/dom-fiber/src/createPortal.spec.tsx index 46448bee..97662735 100644 --- a/packages/@react-facet/dom-fiber/src/createPortal.spec.tsx +++ b/packages/@react-facet/dom-fiber/src/createPortal.spec.tsx @@ -1,33 +1,14 @@ -import React, { ReactElement } from 'react' -import { createFiberRoot } from './createFiberRoot' +import React from 'react' import { createPortal } from './createPortal' -import { createReconciler } from './createReconciler' - -document.body.innerHTML = `
` - -const reconcilerInstance = createReconciler() -const root = document.getElementById('root') as HTMLElement -const portal = document.getElementById('portal') as HTMLElement -const fiberRoot = createFiberRoot(reconcilerInstance)(root) - -/** - * Render function local to testing that shared the same instance of the reconciler. - * - * This is needed otherwise React complains that we are sharing a context across different renderers. - */ -const render = function render(ui: ReactElement) { - reconcilerInstance.updateContainer(ui, fiberRoot, null, () => {}) -} - -afterEach(() => { - reconcilerInstance.updateContainer(null, fiberRoot, null, () => {}) -}) +import { render, root } from './testSetup' it('portals content', () => { const TestComponent = () => { return
On the other side
} + const portal = document.getElementById('portal') as HTMLElement + render( <>
Hello World
diff --git a/packages/@react-facet/dom-fiber/src/setupHostConfig.spec.tsx b/packages/@react-facet/dom-fiber/src/setupHostConfig.spec.tsx index 0657b362..6914796e 100644 --- a/packages/@react-facet/dom-fiber/src/setupHostConfig.spec.tsx +++ b/packages/@react-facet/dom-fiber/src/setupHostConfig.spec.tsx @@ -1,30 +1,10 @@ import { createFacet, Facet } from '@react-facet/core' -import React, { ReactElement, useEffect, useState } from 'react' +import React, { useEffect, useState } from 'react' import { Fiber } from 'react-reconciler' -import { createFiberRoot } from './createFiberRoot' -import { createReconciler } from './createReconciler' import { setupHostConfig } from './setupHostConfig' +import { act, render, root } from './testSetup' import { InputType, ElementContainer, ElementProps, Props } from './types' -document.body.innerHTML = `
` - -const reconcilerInstance = createReconciler() -const root = document.getElementById('root') as HTMLElement -const fiberRoot = createFiberRoot(reconcilerInstance)(root) - -/** - * Render function local to testing that shared the same instance of the reconciler. - * - * This is needed otherwise React complains that we are sharing a context across different renderers. - */ -const render = function render(ui: ReactElement) { - reconcilerInstance.updateContainer(ui, fiberRoot, null, () => {}) -} - -afterEach(() => { - reconcilerInstance.updateContainer(null, fiberRoot, null, () => {}) -}) - jest.useFakeTimers() describe('mount', () => { @@ -860,7 +840,9 @@ describe('update', () => { render() expect(root).toContainHTML('
Goodbye World
') - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) expect(root).toContainHTML('
Hello World
') }) @@ -880,7 +862,9 @@ describe('update', () => { render() expect(root).toContainHTML('
Hello World
') - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) expect(root).toContainHTML('
Hello World
') }) @@ -900,7 +884,9 @@ describe('update', () => { render() expect(root).toContainHTML('
Hello World
') - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) expect(root).toContainHTML('
Hello World
') }) @@ -920,7 +906,9 @@ describe('update', () => { render() expect(root).toContainHTML('
Hello World
') - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) expect(root).toContainHTML('
Hello World
') }) @@ -942,7 +930,9 @@ describe('update', () => { // jsdom is adding the http://localhost expect(img && img.src).toEqual('http://localhost/frita.png') - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) img = document.getElementsByClassName('image')[0] as HTMLImageElement | undefined // jsdom is adding the http://localhost expect(img && img.src).toEqual('http://localhost/banana.png') @@ -964,7 +954,9 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('
') - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -984,7 +976,9 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1000,9 +994,13 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1025,9 +1023,13 @@ describe('update', () => { } render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1044,11 +1046,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1065,11 +1073,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1086,11 +1100,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('
') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('
') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('
') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('
') }) @@ -1108,11 +1128,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1129,11 +1155,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1150,11 +1182,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1171,11 +1209,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1192,11 +1236,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1213,11 +1263,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1234,11 +1290,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1255,11 +1317,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1276,11 +1344,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1297,11 +1371,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1318,11 +1398,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1339,11 +1425,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1360,11 +1452,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1381,11 +1479,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1402,11 +1506,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1423,11 +1533,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) }) @@ -1536,7 +1652,9 @@ describe('update', () => { firstOnClick.mockClear() secondOnClick.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('click')) expect(firstOnClick).not.toHaveBeenCalled() @@ -1550,7 +1668,9 @@ describe('update', () => { firstOnFocus.mockClear() secondOnFocus.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('focus')) expect(firstOnFocus).not.toHaveBeenCalled() @@ -1564,7 +1684,9 @@ describe('update', () => { firstOnBlur.mockClear() secondOnBlur.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('blur')) expect(firstOnBlur).not.toHaveBeenCalled() @@ -1578,7 +1700,9 @@ describe('update', () => { firstOnMouseDown.mockClear() secondOnMouseDown.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('mousedown')) expect(firstOnMouseDown).not.toHaveBeenCalled() @@ -1592,7 +1716,9 @@ describe('update', () => { firstOnMouseUp.mockClear() secondOnMouseUp.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('mouseup')) expect(firstOnMouseUp).not.toHaveBeenCalled() @@ -1606,7 +1732,9 @@ describe('update', () => { firstOnTouchStart.mockClear() secondOnTouchStart.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('touchstart')) expect(firstOnTouchStart).not.toHaveBeenCalled() @@ -1620,7 +1748,9 @@ describe('update', () => { firstOnTouchMove.mockClear() secondOnTouchMove.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('touchmove')) expect(firstOnTouchMove).not.toHaveBeenCalled() @@ -1634,7 +1764,9 @@ describe('update', () => { firstOnTouchEnd.mockClear() secondOnTouchEnd.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('touchend')) expect(firstOnTouchEnd).not.toHaveBeenCalled() @@ -1648,7 +1780,9 @@ describe('update', () => { firstOnMouseEnter.mockClear() secondOnMouseEnter.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('mouseenter')) expect(firstOnMouseEnter).not.toHaveBeenCalled() @@ -1662,7 +1796,9 @@ describe('update', () => { firstOnMouseLeave.mockClear() secondOnMouseLeave.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('mouseleave')) expect(firstOnMouseLeave).not.toHaveBeenCalled() @@ -1676,7 +1812,9 @@ describe('update', () => { firstOnKeyPress.mockClear() secondOnKeyPress.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('keypress')) expect(firstOnKeyPress).not.toHaveBeenCalled() @@ -1690,7 +1828,9 @@ describe('update', () => { firstOnKeyDown.mockClear() secondOnKeyDown.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('keydown')) expect(firstOnKeyDown).not.toHaveBeenCalled() @@ -1704,7 +1844,9 @@ describe('update', () => { firstOnKeyUp.mockClear() secondOnKeyUp.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('keyup')) expect(firstOnKeyUp).not.toHaveBeenCalled() diff --git a/packages/@react-facet/dom-fiber/src/testSetup.ts b/packages/@react-facet/dom-fiber/src/testSetup.ts new file mode 100644 index 00000000..6a599e73 --- /dev/null +++ b/packages/@react-facet/dom-fiber/src/testSetup.ts @@ -0,0 +1,64 @@ +import React, { ReactElement } from 'react' +import { createFiberRoot } from './createFiberRoot' +import { createReconciler } from './createReconciler' + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function getGlobalThis(): any { + if (typeof globalThis !== 'undefined') { + return globalThis + } + + if (typeof self !== 'undefined') { + return self + } + + if (typeof window !== 'undefined') { + return window + } + + if (typeof global !== 'undefined') { + return global + } + + throw new Error('unable to locate global object') +} + +/** + * More info: https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html#configuring-your-testing-environment + * Reference implementation: https://github.com/testing-library/react-testing-library/blob/c80809a956b0b9f3289c4a6fa8b5e8cc72d6ef6d/src/act-compat.js#L5 + */ +export const setupAct = (): Act => { + getGlobalThis().IS_REACT_ACT_ENVIRONMENT = true + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const act = (React as any).unstable_act as Act + return act +} + +export interface Act { + (work: () => void): boolean +} + +document.body.innerHTML = `
` + +const reconcilerInstance = createReconciler() +export const root = document.getElementById('root') as HTMLElement +const fiberRoot = createFiberRoot(reconcilerInstance)(root) +export const act = setupAct() + +/** + * Render function local to testing that shared the same instance of the reconciler. + * + * This is needed otherwise React complains that we are sharing a context across different renderers. + */ +export const render = function render(ui: ReactElement) { + act(() => { + reconcilerInstance.updateContainer(ui, fiberRoot, null, () => {}) + }) +} + +afterEach(() => { + act(() => { + reconcilerInstance.updateContainer(null, fiberRoot, null, () => {}) + }) +}) From 825e1d35e40039b8c8bbdd1cfd8583133e9931d4 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 18 Jul 2022 17:49:05 +0200 Subject: [PATCH 15/88] Restore act on fireEvent functions This had no impact on the number of failed tests, but I believe it might be a good idea to retain the previous behavior (what is in main). --- .../@react-facet/dom-fiber-testing-library/src/renderer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts b/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts index f7753fd8..3d1b07cd 100644 --- a/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts +++ b/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts @@ -96,12 +96,12 @@ const setup = () => { }) } - const fireEventFunction: FireFunction = (...args) => testingLibrary.fireEvent(...args) + const fireEventFunction: FireFunction = (...args) => act(() => testingLibrary.fireEvent(...args)) const fireEvent = fireEventFunction as FireFunction & FireObject mapKeys(testingLibrary.fireEvent as FireObject, (typeArg) => { - fireEvent[typeArg] = (...args) => testingLibrary.fireEvent[typeArg](...args) + fireEvent[typeArg] = (...args) => act(() => testingLibrary.fireEvent[typeArg](...args)) }) return { act, render, cleanup, fireEvent } From c358a3016f76854cddc40a58bb0467bd1c5a75ff Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Thu, 28 Jul 2022 14:12:42 +0200 Subject: [PATCH 16/88] Wrap an act around setting a facet --- packages/@react-facet/core/src/components/Map.spec.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/@react-facet/core/src/components/Map.spec.tsx b/packages/@react-facet/core/src/components/Map.spec.tsx index 14d43ddd..81f410d6 100644 --- a/packages/@react-facet/core/src/components/Map.spec.tsx +++ b/packages/@react-facet/core/src/components/Map.spec.tsx @@ -90,7 +90,9 @@ it('unmounts components when the array reduces in size', () => { expect(container).toMatchSnapshot() - data.set([{ value: '1' }, { value: '2' }]) + act(() => { + data.set([{ value: '1' }, { value: '2' }]) + }) expect(container).toMatchSnapshot() }) From 5d4d0e15e377ec89380a97943b1020b012ed1041 Mon Sep 17 00:00:00 2001 From: james--nicholls Date: Mon, 12 Dec 2022 10:45:09 +0100 Subject: [PATCH 17/88] feat: updates package versions --- examples/concurrent/package.json | 10 +- packages/@react-facet/core/package.json | 4 +- packages/@react-facet/dom-fiber/package.json | 4 +- .../dom-fiber/src/setupHostConfig.ts | 64 ++++--- .../@react-facet/shared-facet/package.json | 2 +- yarn.lock | 177 +++++++----------- 6 files changed, 119 insertions(+), 142 deletions(-) diff --git a/examples/concurrent/package.json b/examples/concurrent/package.json index 9bf1e76e..c1cf2201 100644 --- a/examples/concurrent/package.json +++ b/examples/concurrent/package.json @@ -7,11 +7,11 @@ "start": "webpack serve --port 8081" }, "dependencies": { - "@react-facet/core": "0.4.0-rc.2", - "@react-facet/deferred-mount": "0.4.0-rc.2", - "@react-facet/dom-fiber": "0.4.0-rc.2", - "@react-facet/shared-facet": "0.4.0-rc.2", - "@react-facet/spring": "0.4.0-rc.2", + "@react-facet/core": "0.4.1", + "@react-facet/deferred-mount": "0.4.1", + "@react-facet/dom-fiber": "0.4.1", + "@react-facet/shared-facet": "0.4.1", + "@react-facet/spring": "0.4.1", "ramda": "^0.27.1", "react": "^18.1.0", "react-dom": "^18.1.0" diff --git a/packages/@react-facet/core/package.json b/packages/@react-facet/core/package.json index 1058b00d..a25b0f8d 100644 --- a/packages/@react-facet/core/package.json +++ b/packages/@react-facet/core/package.json @@ -30,7 +30,7 @@ "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", "version": "0.4.1", - "main": "src/index.ts", + "main": "dist/index.js", "publishConfig": { "main": "dist/index.js", "types": "dist/index.d.ts" @@ -46,7 +46,7 @@ "devDependencies": { "@react-facet/dom-fiber-testing-library": "0.4.1", "@types/react": "^18.0.8", - "@types/react-reconciler": "^0.18.0", + "@types/react-reconciler": "^0.28.0", "@types/rimraf": "^3", "cross-env": "^7.0.3", "react": "^18.1.0", diff --git a/packages/@react-facet/dom-fiber/package.json b/packages/@react-facet/dom-fiber/package.json index ae34b5fa..3aa15ca3 100644 --- a/packages/@react-facet/dom-fiber/package.json +++ b/packages/@react-facet/dom-fiber/package.json @@ -30,7 +30,7 @@ "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", "version": "0.4.1", - "main": "src/index.ts", + "main": "dist/index.js", "publishConfig": { "main": "dist/index.js", "types": "dist/index.d.ts" @@ -51,7 +51,7 @@ "@react-facet/core": "0.4.1", "@react-facet/dom-fiber-testing-library": "0.4.1", "@types/react": "^17.0.11", - "@types/react-reconciler": "^0.18.0", + "@types/react-reconciler": "^0.28.0", "@types/rimraf": "^3", "cross-env": "^7.0.3", "react": "^18.1.0", diff --git a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts index 6ff65030..08cbd915 100644 --- a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts +++ b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts @@ -56,6 +56,16 @@ export const setupHostConfig = (): HostConfig< supportsPersistence: false, supportsHydration: false, + supportsMicrotask: true, + scheduleMicrotask: (callback) => Promise + .resolve(null) + .then(callback) + .catch((error) => { + setTimeout(() => { + throw error + }) + }), + getCurrentEventPriority: () => { return DefaultEventPriority }, @@ -64,11 +74,11 @@ export const setupHostConfig = (): HostConfig< return null }, - beforeActiveInstanceBlur: () => {}, - afterActiveInstanceBlur: () => {}, - prepareScopeUpdate: () => {}, + beforeActiveInstanceBlur: () => { }, + afterActiveInstanceBlur: () => { }, + prepareScopeUpdate: () => { }, getInstanceFromScope: () => null, - detachDeletedInstance: () => {}, + detachDeletedInstance: () => { }, clearContainer: () => false, @@ -90,27 +100,27 @@ export const setupHostConfig = (): HostConfig< noTimeout: noop, - preparePortalMount: function () {}, + preparePortalMount: function() { }, - getRootHostContext: function () { + getRootHostContext: function() { return EMPTY }, - getChildHostContext: function () { + getChildHostContext: function() { return EMPTY }, - shouldSetTextContent: function () { + shouldSetTextContent: function() { return false }, - createTextInstance: function (newText) { + createTextInstance: function(newText) { return { element: document.createTextNode(newText), } }, - createInstance: function (externalType, newProps) { + createInstance: function(externalType, newProps) { if (externalType === 'fast-text') { const element = document.createTextNode('') @@ -322,23 +332,23 @@ export const setupHostConfig = (): HostConfig< } }, - finalizeInitialChildren: function () { + finalizeInitialChildren: function() { return false }, - prepareForCommit: function () { + prepareForCommit: function() { return null }, - resetAfterCommit: function () {}, + resetAfterCommit: function() { }, - commitMount: function () {}, + commitMount: function() { }, - prepareUpdate: function () { + prepareUpdate: function() { return true }, - commitUpdate: function (instance, updatePayload, type, oldProps, newProps) { + commitUpdate: function(instance, updatePayload, type, oldProps, newProps) { const { element: uncastElement } = instance if (type === 'fast-text') { @@ -975,11 +985,11 @@ export const setupHostConfig = (): HostConfig< } }, - commitTextUpdate: function (textInstance, oldText, newText) { + commitTextUpdate: function(textInstance, oldText, newText) { textInstance.element.nodeValue = newText }, - appendInitialChild: function (parent, child) { + appendInitialChild: function(parent, child) { if (isElementContainer(child)) { parent.children.add(child) } @@ -987,7 +997,7 @@ export const setupHostConfig = (): HostConfig< parent.element.appendChild(child.element) }, - appendChildToContainer: function (parent, child) { + appendChildToContainer: function(parent, child) { if (isElementContainer(child)) { parent.children.add(child) } @@ -995,7 +1005,7 @@ export const setupHostConfig = (): HostConfig< parent.element.appendChild(child.element) }, - appendChild: function (parentInstance, child) { + appendChild: function(parentInstance, child) { if (isElementContainer(child)) { parentInstance.children.add(child) } @@ -1003,11 +1013,11 @@ export const setupHostConfig = (): HostConfig< parentInstance.element.appendChild(child.element) }, - insertBefore: function (parentInstance, child, beforeChild) { + insertBefore: function(parentInstance, child, beforeChild) { parentInstance.element.insertBefore(child.element, beforeChild.element) }, - removeChild: function (parentInstance, child) { + removeChild: function(parentInstance, child) { if (isElementContainer(child)) { cleanupElementContainer(parentInstance, child) } @@ -1015,11 +1025,11 @@ export const setupHostConfig = (): HostConfig< parentInstance.element.removeChild(child.element) }, - insertInContainerBefore: function (container, child, beforeChild) { + insertInContainerBefore: function(container, child, beforeChild) { container.element.insertBefore(child.element, beforeChild.element) }, - removeChildFromContainer: function (container, child) { + removeChildFromContainer: function(container, child) { if (isElementContainer(child)) { cleanupElementContainer(container, child) } @@ -1027,11 +1037,11 @@ export const setupHostConfig = (): HostConfig< container.element.removeChild(child.element) }, - resetTextContent: function (instance) { + resetTextContent: function(instance) { instance.element.textContent = '' }, - getPublicInstance: function (instance) { + getPublicInstance: function(instance) { return instance.element }, }) @@ -1067,7 +1077,7 @@ const cleanupElementContainer = (parent: ElementContainer, instance: ElementCont instance.text?.() } -const noop = () => {} +const noop = () => { } const EMPTY = {} diff --git a/packages/@react-facet/shared-facet/package.json b/packages/@react-facet/shared-facet/package.json index 99e77e15..1cdf956d 100644 --- a/packages/@react-facet/shared-facet/package.json +++ b/packages/@react-facet/shared-facet/package.json @@ -30,7 +30,7 @@ "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", "version": "0.4.1", - "main": "src/index.ts", + "main": "dist/index.js", "publishConfig": { "main": "dist/index.js", "types": "dist/index.d.ts" diff --git a/yarn.lock b/yarn.lock index a0432945..c5455522 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,3 +1,6 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + __metadata: version: 6 cacheKey: 8 @@ -953,29 +956,13 @@ __metadata: languageName: node linkType: hard -"@react-facet/core@0.4.0-rc.2, @react-facet/core@workspace:packages/@react-facet/core": - version: 0.0.0-use.local - resolution: "@react-facet/core@workspace:packages/@react-facet/core" - dependencies: - "@react-facet/dom-fiber-testing-library": 0.4.0-rc.2 - "@types/react": ^18.0.8 - "@types/rimraf": ^3 - cross-env: ^7.0.3 - react: ^18.1.0 - rimraf: ^3.0.2 - typescript: ^4.8.2 - peerDependencies: - react: ^18.1.0 - languageName: unknown - linkType: soft - "@react-facet/core@0.4.1, @react-facet/core@workspace:packages/@react-facet/core": version: 0.0.0-use.local resolution: "@react-facet/core@workspace:packages/@react-facet/core" dependencies: "@react-facet/dom-fiber-testing-library": 0.4.1 - "@types/react": ^17.0.11 - "@types/react-reconciler": ^0.18.0 + "@types/react": ^18.0.8 + "@types/react-reconciler": ^0.28.0 "@types/rimraf": ^3 cross-env: ^7.0.3 react: ^18.1.0 @@ -986,17 +973,17 @@ __metadata: languageName: unknown linkType: soft -"@react-facet/deferred-mount@0.4.0-rc.2, @react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount": +"@react-facet/deferred-mount@0.4.1, @react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount": version: 0.0.0-use.local resolution: "@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount" dependencies: "@react-facet/dom-fiber-testing-library": 0.4.1 - react: ^16.9.0 + react: ^18.1.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: "@react-facet/core": 0.4.1 - react: ^16.9.0 + react: ^18.1.0 languageName: unknown linkType: soft @@ -1016,21 +1003,6 @@ __metadata: typescript: ^4.8.2 peerDependencies: "@react-facet/core": 0.4.1 - react: ^16.9.0 - languageName: unknown - linkType: soft - -"@react-facet/dom-fiber-testing-library@0.4.0-rc.2, @react-facet/dom-fiber-testing-library@workspace:packages/@react-facet/dom-fiber-testing-library": - version: 0.0.0-use.local - resolution: "@react-facet/dom-fiber-testing-library@workspace:packages/@react-facet/dom-fiber-testing-library" - dependencies: - "@react-facet/dom-fiber": 0.4.0-rc.2 - "@testing-library/dom": ^8.16.0 - react: ^18.1.0 - rimraf: ^3.0.2 - typescript: ^4.8.2 - peerDependencies: - "@react-facet/dom-fiber": 0.4.0-rc.2 react: ^18.1.0 languageName: unknown linkType: soft @@ -1040,32 +1012,12 @@ __metadata: resolution: "@react-facet/dom-fiber-testing-library@workspace:packages/@react-facet/dom-fiber-testing-library" dependencies: "@react-facet/dom-fiber": 0.4.1 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^8.16.0 react: ^16.9.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: "@react-facet/dom-fiber": 0.4.1 - react: ^16.9.0 - languageName: unknown - linkType: soft - -"@react-facet/dom-fiber@0.4.0-rc.2, @react-facet/dom-fiber@workspace:packages/@react-facet/dom-fiber": - version: 0.0.0-use.local - resolution: "@react-facet/dom-fiber@workspace:packages/@react-facet/dom-fiber" - dependencies: - "@react-facet/core": 0.4.0-rc.2 - "@react-facet/dom-fiber-testing-library": 0.4.0-rc.2 - "@types/react": ^18.0.8 - "@types/react-reconciler": ^0.28.0 - "@types/rimraf": ^3 - cross-env: ^7.0.3 - react: ^18.1.0 - react-reconciler: ^0.28.0 - rimraf: ^3.0.2 - typescript: ^4.8.2 - peerDependencies: - "@react-facet/core": 0.4.0-rc.2 react: ^18.1.0 languageName: unknown linkType: soft @@ -1077,7 +1029,7 @@ __metadata: "@react-facet/core": 0.4.1 "@react-facet/dom-fiber-testing-library": 0.4.1 "@types/react": ^17.0.11 - "@types/react-reconciler": ^0.18.0 + "@types/react-reconciler": ^0.28.0 "@types/rimraf": ^3 cross-env: ^7.0.3 react: ^18.1.0 @@ -1086,7 +1038,7 @@ __metadata: typescript: ^4.8.2 peerDependencies: "@react-facet/core": 0.4.1 - react: ^16.9.0 + react: ^18.1.0 languageName: unknown linkType: soft @@ -1100,58 +1052,20 @@ __metadata: languageName: unknown linkType: soft -"@react-facet/shared-facet@0.4.0-rc.2, @react-facet/shared-facet@workspace:packages/@react-facet/shared-facet": - version: 0.0.0-use.local - resolution: "@react-facet/shared-facet@workspace:packages/@react-facet/shared-facet" - dependencies: - "@react-facet/core": 0.4.0-rc.2 - "@react-facet/dom-fiber-testing-library": 0.4.0-rc.2 - "@types/react": ^18.0.8 - "@types/rimraf": ^3 - cross-env: ^7.0.3 - react: ^18.1.0 - rimraf: ^3.0.2 - typescript: ^4.8.2 - peerDependencies: - "@react-facet/core": 0.4.0-rc.2 - react: ^18.1.0 - languageName: unknown - linkType: soft - "@react-facet/shared-facet@0.4.1, @react-facet/shared-facet@workspace:packages/@react-facet/shared-facet": version: 0.0.0-use.local resolution: "@react-facet/shared-facet@workspace:packages/@react-facet/shared-facet" dependencies: "@react-facet/core": 0.4.1 "@react-facet/dom-fiber-testing-library": 0.4.1 - "@types/react": ^17.0.11 - "@types/rimraf": ^3 - cross-env: ^7.0.3 - react: ^18.1.0 - rimraf: ^3.0.2 - typescript: ^4.8.2 - peerDependencies: - "@react-facet/core": 0.4.1 - react: ^16.9.0 - languageName: unknown - linkType: soft - -"@react-facet/spring@0.4.0-rc.2, @react-facet/spring@workspace:packages/@react-facet/spring": - version: 0.0.0-use.local - resolution: "@react-facet/spring@workspace:packages/@react-facet/spring" - dependencies: - "@react-facet/core": 0.4.0-rc.2 - "@testing-library/jest-dom": ^5.10.1 - "@testing-library/react": ^9.4.1 "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 react: ^18.1.0 - react-dom: ^18.1.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: - "@react-facet/core": 0.4.0-rc.2 + "@react-facet/core": 0.4.1 react: ^18.1.0 languageName: unknown linkType: soft @@ -1172,7 +1086,7 @@ __metadata: typescript: ^4.8.2 peerDependencies: "@react-facet/core": 0.4.1 - react: ^16.9.0 + react: ^18.1.0 languageName: unknown linkType: soft @@ -1592,6 +1506,17 @@ __metadata: languageName: node linkType: hard +"@types/react@npm:^17.0.11": + version: 17.0.52 + resolution: "@types/react@npm:17.0.52" + dependencies: + "@types/prop-types": "*" + "@types/scheduler": "*" + csstype: ^3.0.2 + checksum: a51b98dd87838d161278fdf9dd78e6a4ff8c018f406d6647f77963e144fb52a8beee40c89fd0e7e840eaeaa8bd9fe2f34519410540b1a52d43a6f8b4d2fbce33 + languageName: node + linkType: hard + "@types/react@npm:^18.0.8": version: 18.0.8 resolution: "@types/react@npm:18.0.8" @@ -3182,11 +3107,11 @@ __metadata: version: 0.0.0-use.local resolution: "concurrent@workspace:examples/concurrent" dependencies: - "@react-facet/core": 0.4.0-rc.2 - "@react-facet/deferred-mount": 0.4.0-rc.2 - "@react-facet/dom-fiber": 0.4.0-rc.2 - "@react-facet/shared-facet": 0.4.0-rc.2 - "@react-facet/spring": 0.4.0-rc.2 + "@react-facet/core": 0.4.1 + "@react-facet/deferred-mount": 0.4.1 + "@react-facet/dom-fiber": 0.4.1 + "@react-facet/shared-facet": 0.4.1 + "@react-facet/spring": 0.4.1 "@types/fs-extra": ^9.0.12 "@types/puppeteer": ^5.4.4 "@types/ramda": ^0 @@ -7892,6 +7817,17 @@ __metadata: languageName: node linkType: hard +"prop-types@npm:^15.6.2": + version: 15.8.1 + resolution: "prop-types@npm:15.8.1" + dependencies: + loose-envify: ^1.4.0 + object-assign: ^4.1.1 + react-is: ^16.13.1 + checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 + languageName: node + linkType: hard + "prop-types@npm:^15.7.2": version: 15.7.2 resolution: "prop-types@npm:15.7.2" @@ -8048,7 +7984,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.12.0, react-is@npm:^16.8.1, react-is@npm:^16.8.4": +"react-is@npm:^16.12.0, react-is@npm:^16.13.1, react-is@npm:^16.8.1, react-is@npm:^16.8.4": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f @@ -8074,6 +8010,17 @@ __metadata: languageName: node linkType: hard +"react@npm:^16.9.0": + version: 16.14.0 + resolution: "react@npm:16.14.0" + dependencies: + loose-envify: ^1.1.0 + object-assign: ^4.1.1 + prop-types: ^15.6.2 + checksum: 8484f3ecb13414526f2a7412190575fc134da785c02695eb92bb6028c930bfe1c238d7be2a125088fec663cc7cda0a3623373c46807cf2c281f49c34b79881ac + languageName: node + linkType: hard + "react@npm:^18.1.0": version: 18.1.0 resolution: "react@npm:18.1.0" @@ -9591,6 +9538,26 @@ typescript@^4.8.2: languageName: node linkType: hard +"typescript@npm:^4.3.5": + version: 4.9.3 + resolution: "typescript@npm:4.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 17b8f816050b412403e38d48eef0e893deb6be522d6dc7caf105e54a72e34daf6835c447735fd2b28b66784e72bfbf87f627abb4818a8e43d1fa8106396128dc + languageName: node + linkType: hard + +"typescript@patch:typescript@^4.3.5#~builtin": + version: 4.9.3 + resolution: "typescript@patch:typescript@npm%3A4.9.3#~builtin::version=4.9.3&hash=701156" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: ef65c22622d864497d0a0c5db693523329b3284c15fe632e93ad9aa059e8dc38ef3bd767d6f26b1e5ecf9446f49bd0f6c4e5714a2eeaf352805dc002479843d1 + languageName: node + linkType: hard + "typescript@patch:typescript@^4.8.2#~builtin": version: 4.8.3 resolution: "typescript@patch:typescript@npm%3A4.8.3#~builtin::version=4.8.3&hash=701156" From 0397cdf372648e5d1a9cd372b50007fb1ca0f1ba Mon Sep 17 00:00:00 2001 From: james--nicholls Date: Mon, 12 Dec 2022 14:34:02 +0100 Subject: [PATCH 18/88] debug: adds hide and unhide logs --- .../dom-fiber/src/setupHostConfig.ts | 16 ++++ yarn.lock | 79 ++++++++++++++++++- 2 files changed, 93 insertions(+), 2 deletions(-) diff --git a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts index 08cbd915..a1196951 100644 --- a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts +++ b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts @@ -1044,6 +1044,22 @@ export const setupHostConfig = (): HostConfig< getPublicInstance: function(instance) { return instance.element }, + hideInstance(instance) { + console.log("Hidden: ", instance) + // Detach while the instance is hidden + // const { attach: type, parent } = instance.__r3f ?? {} + // if (type && parent) detach(parent, instance, type) + // if (instance.isObject3D) instance.visible = false + // invalidateInstance(instance) + }, + unhideInstance(instance, props) { + console.log("Unhidden: ", instance, props) + // Re-attach when the instance is unhidden + // const { attach: type, parent } = instance.__r3f ?? {} + // if (type && parent) attach(parent, instance, type) + // if ((instance.isObject3D && props.visible == null) || props.visible) instance.visible = true + // invalidateInstance(instance) + }, }) const cleanupElementContainer = (parent: ElementContainer, instance: ElementContainer) => { diff --git a/yarn.lock b/yarn.lock index f9bc9566..842e28e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -987,7 +987,26 @@ __metadata: languageName: unknown linkType: soft -"@react-facet/deferred-mount@0.4.1, @react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount": +"@react-facet/core@npm:0.4.1": + version: 0.4.1 + resolution: "@react-facet/core@npm:0.4.1" + peerDependencies: + react: ^16.9.0 + checksum: 80dff039c4d089912907d004d2a9303773d6ef826bbc5b8321dafcb74704f6fc95abef36c1398ed8718e0274a578efdf35bcca5e6ab4619021539a9226451d02 + languageName: node + linkType: hard + +"@react-facet/deferred-mount@npm:0.4.1": + version: 0.4.1 + resolution: "@react-facet/deferred-mount@npm:0.4.1" + peerDependencies: + "@react-facet/core": 0.4.1 + react: ^16.9.0 + checksum: 5689c5ee2b5e670804451b1c3521214c6d8762812b79e2bed10baafb04220e914bb50c397d8004d879e74c34591e99fa09cc44f9620d1ccbac52c5d775e79712 + languageName: node + linkType: hard + +"@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount": version: 0.0.0-use.local resolution: "@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount" dependencies: @@ -1026,7 +1045,7 @@ __metadata: resolution: "@react-facet/dom-fiber-testing-library@workspace:packages/@react-facet/dom-fiber-testing-library" dependencies: "@react-facet/dom-fiber": 0.4.3 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^8.16.0 react: ^16.9.0 rimraf: ^3.0.2 typescript: ^4.8.2 @@ -1056,6 +1075,18 @@ __metadata: languageName: unknown linkType: soft +"@react-facet/dom-fiber@npm:0.4.1": + version: 0.4.1 + resolution: "@react-facet/dom-fiber@npm:0.4.1" + dependencies: + react-reconciler: ^0.24.0 + peerDependencies: + "@react-facet/core": 0.4.1 + react: ^16.9.0 + checksum: 26a197ccee7011fdfbd6c359c82444e446aa3b2b9291c8e1364c6b26595961d9dd721c1cc96d4356dacf6176815e2c97e35e777a148284d1d6517b46ba60f0b9 + languageName: node + linkType: hard + "@react-facet/eslint-config@workspace:packages/@react-facet/eslint-config": version: 0.0.0-use.local resolution: "@react-facet/eslint-config@workspace:packages/@react-facet/eslint-config" @@ -1084,6 +1115,16 @@ __metadata: languageName: unknown linkType: soft +"@react-facet/shared-facet@npm:0.4.1": + version: 0.4.1 + resolution: "@react-facet/shared-facet@npm:0.4.1" + peerDependencies: + "@react-facet/core": 0.4.1 + react: ^16.9.0 + checksum: 5208d1f87f7f412e8daf7fb6269453459baab6183159da948142facdfe765daca8e66ccfe1009bd7e1079252cebae5b6bdefe22102e69b42ef83b206bebcb834 + languageName: node + linkType: hard + "@react-facet/spring@0.4.3, @react-facet/spring@workspace:packages/@react-facet/spring": version: 0.0.0-use.local resolution: "@react-facet/spring@workspace:packages/@react-facet/spring" @@ -1104,6 +1145,16 @@ __metadata: languageName: unknown linkType: soft +"@react-facet/spring@npm:0.4.1": + version: 0.4.1 + resolution: "@react-facet/spring@npm:0.4.1" + peerDependencies: + "@react-facet/core": 0.4.1 + react: ^16.9.0 + checksum: 7db1668cbf3b3d41c7db4c497e86adea58e2269e57664693d479a31e09f27fc680539a6dece675f76d18a5abc531d6d30119232ee62f42088fdafd68ed2d3bec + languageName: node + linkType: hard + "@sheerun/mutationobserver-shim@npm:^0.3.2": version: 0.3.3 resolution: "@sheerun/mutationobserver-shim@npm:0.3.3" @@ -8464,6 +8515,20 @@ __metadata: languageName: node linkType: hard +"react-reconciler@npm:^0.24.0": + version: 0.24.0 + resolution: "react-reconciler@npm:0.24.0" + dependencies: + loose-envify: ^1.1.0 + object-assign: ^4.1.1 + prop-types: ^15.6.2 + scheduler: ^0.18.0 + peerDependencies: + react: ^16.0.0 + checksum: c9c74208325a940ca36e031b71499f6d8e62e96ee673d69e35cc9e6a661aa746a2b0750f2ffcd1bae0a29eaf3d127dc8197ab7e801e6a3a2ab7d45a71b464630 + languageName: node + linkType: hard + "react-reconciler@npm:^0.28.0": version: 0.28.0 resolution: "react-reconciler@npm:0.28.0" @@ -8907,6 +8972,16 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard +"scheduler@npm:^0.18.0": + version: 0.18.0 + resolution: "scheduler@npm:0.18.0" + dependencies: + loose-envify: ^1.1.0 + object-assign: ^4.1.1 + checksum: b6e0b9e0086b200b114f1ef7f9fcac966ad5d84cd3b1867174be0549d3ff713d1fd22d5574cb024b7d3eadf3307f2afc1cb5bfbf28b0d3bc34b200183800fcae + languageName: node + linkType: hard + "scheduler@npm:^0.22.0": version: 0.22.0 resolution: "scheduler@npm:0.22.0" From d30a4a9487ec76fd85b29e4556e496f490d1524c Mon Sep 17 00:00:00 2001 From: james--nicholls Date: Thu, 15 Dec 2022 10:42:05 +0100 Subject: [PATCH 19/88] build: update package versions --- examples/concurrent/package.json | 10 ++-- yarn.lock | 87 +++----------------------------- 2 files changed, 11 insertions(+), 86 deletions(-) diff --git a/examples/concurrent/package.json b/examples/concurrent/package.json index c1cf2201..7af7b233 100644 --- a/examples/concurrent/package.json +++ b/examples/concurrent/package.json @@ -7,11 +7,11 @@ "start": "webpack serve --port 8081" }, "dependencies": { - "@react-facet/core": "0.4.1", - "@react-facet/deferred-mount": "0.4.1", - "@react-facet/dom-fiber": "0.4.1", - "@react-facet/shared-facet": "0.4.1", - "@react-facet/spring": "0.4.1", + "@react-facet/core": "0.4.3", + "@react-facet/deferred-mount": "0.4.3", + "@react-facet/dom-fiber": "0.4.3", + "@react-facet/shared-facet": "0.4.3", + "@react-facet/spring": "0.4.3", "ramda": "^0.27.1", "react": "^18.1.0", "react-dom": "^18.1.0" diff --git a/yarn.lock b/yarn.lock index 842e28e9..936ce7ad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -987,26 +987,7 @@ __metadata: languageName: unknown linkType: soft -"@react-facet/core@npm:0.4.1": - version: 0.4.1 - resolution: "@react-facet/core@npm:0.4.1" - peerDependencies: - react: ^16.9.0 - checksum: 80dff039c4d089912907d004d2a9303773d6ef826bbc5b8321dafcb74704f6fc95abef36c1398ed8718e0274a578efdf35bcca5e6ab4619021539a9226451d02 - languageName: node - linkType: hard - -"@react-facet/deferred-mount@npm:0.4.1": - version: 0.4.1 - resolution: "@react-facet/deferred-mount@npm:0.4.1" - peerDependencies: - "@react-facet/core": 0.4.1 - react: ^16.9.0 - checksum: 5689c5ee2b5e670804451b1c3521214c6d8762812b79e2bed10baafb04220e914bb50c397d8004d879e74c34591e99fa09cc44f9620d1ccbac52c5d775e79712 - languageName: node - linkType: hard - -"@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount": +"@react-facet/deferred-mount@0.4.3, @react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount": version: 0.0.0-use.local resolution: "@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount" dependencies: @@ -1075,18 +1056,6 @@ __metadata: languageName: unknown linkType: soft -"@react-facet/dom-fiber@npm:0.4.1": - version: 0.4.1 - resolution: "@react-facet/dom-fiber@npm:0.4.1" - dependencies: - react-reconciler: ^0.24.0 - peerDependencies: - "@react-facet/core": 0.4.1 - react: ^16.9.0 - checksum: 26a197ccee7011fdfbd6c359c82444e446aa3b2b9291c8e1364c6b26595961d9dd721c1cc96d4356dacf6176815e2c97e35e777a148284d1d6517b46ba60f0b9 - languageName: node - linkType: hard - "@react-facet/eslint-config@workspace:packages/@react-facet/eslint-config": version: 0.0.0-use.local resolution: "@react-facet/eslint-config@workspace:packages/@react-facet/eslint-config" @@ -1115,16 +1084,6 @@ __metadata: languageName: unknown linkType: soft -"@react-facet/shared-facet@npm:0.4.1": - version: 0.4.1 - resolution: "@react-facet/shared-facet@npm:0.4.1" - peerDependencies: - "@react-facet/core": 0.4.1 - react: ^16.9.0 - checksum: 5208d1f87f7f412e8daf7fb6269453459baab6183159da948142facdfe765daca8e66ccfe1009bd7e1079252cebae5b6bdefe22102e69b42ef83b206bebcb834 - languageName: node - linkType: hard - "@react-facet/spring@0.4.3, @react-facet/spring@workspace:packages/@react-facet/spring": version: 0.0.0-use.local resolution: "@react-facet/spring@workspace:packages/@react-facet/spring" @@ -1145,16 +1104,6 @@ __metadata: languageName: unknown linkType: soft -"@react-facet/spring@npm:0.4.1": - version: 0.4.1 - resolution: "@react-facet/spring@npm:0.4.1" - peerDependencies: - "@react-facet/core": 0.4.1 - react: ^16.9.0 - checksum: 7db1668cbf3b3d41c7db4c497e86adea58e2269e57664693d479a31e09f27fc680539a6dece675f76d18a5abc531d6d30119232ee62f42088fdafd68ed2d3bec - languageName: node - linkType: hard - "@sheerun/mutationobserver-shim@npm:^0.3.2": version: 0.3.3 resolution: "@sheerun/mutationobserver-shim@npm:0.3.3" @@ -3249,11 +3198,11 @@ __metadata: version: 0.0.0-use.local resolution: "concurrent@workspace:examples/concurrent" dependencies: - "@react-facet/core": 0.4.1 - "@react-facet/deferred-mount": 0.4.1 - "@react-facet/dom-fiber": 0.4.1 - "@react-facet/shared-facet": 0.4.1 - "@react-facet/spring": 0.4.1 + "@react-facet/core": 0.4.3 + "@react-facet/deferred-mount": 0.4.3 + "@react-facet/dom-fiber": 0.4.3 + "@react-facet/shared-facet": 0.4.3 + "@react-facet/spring": 0.4.3 "@types/fs-extra": ^9.0.12 "@types/puppeteer": ^5.4.4 "@types/ramda": ^0 @@ -8515,20 +8464,6 @@ __metadata: languageName: node linkType: hard -"react-reconciler@npm:^0.24.0": - version: 0.24.0 - resolution: "react-reconciler@npm:0.24.0" - dependencies: - loose-envify: ^1.1.0 - object-assign: ^4.1.1 - prop-types: ^15.6.2 - scheduler: ^0.18.0 - peerDependencies: - react: ^16.0.0 - checksum: c9c74208325a940ca36e031b71499f6d8e62e96ee673d69e35cc9e6a661aa746a2b0750f2ffcd1bae0a29eaf3d127dc8197ab7e801e6a3a2ab7d45a71b464630 - languageName: node - linkType: hard - "react-reconciler@npm:^0.28.0": version: 0.28.0 resolution: "react-reconciler@npm:0.28.0" @@ -8972,16 +8907,6 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"scheduler@npm:^0.18.0": - version: 0.18.0 - resolution: "scheduler@npm:0.18.0" - dependencies: - loose-envify: ^1.1.0 - object-assign: ^4.1.1 - checksum: b6e0b9e0086b200b114f1ef7f9fcac966ad5d84cd3b1867174be0549d3ff713d1fd22d5574cb024b7d3eadf3307f2afc1cb5bfbf28b0d3bc34b200183800fcae - languageName: node - linkType: hard - "scheduler@npm:^0.22.0": version: 0.22.0 resolution: "scheduler@npm:0.22.0" From 389d71d1aa9fd70e015f5baff09fbc6bd132ea17 Mon Sep 17 00:00:00 2001 From: james--nicholls Date: Wed, 18 Jan 2023 11:14:45 +0100 Subject: [PATCH 20/88] feat: updates packages and jest --- babel.config.js | 4 +- examples/benchmarking/package.json | 2 +- examples/concurrent/package.json | 2 +- jest.base.config.js | 5 +- jest.setupTestFrameworkScriptFile.js | 7 +- package.json | 12 +- packages/@react-facet/core/package.json | 2 +- .../@react-facet/deferred-mount/package.json | 2 +- .../@react-facet/dom-components/package.json | 5 +- .../dom-components/src/index.spec.tsx | 2 +- .../dom-fiber-testing-library/package.json | 4 +- packages/@react-facet/dom-fiber/package.json | 4 +- .../@react-facet/shared-facet/package.json | 2 +- packages/@react-facet/spring/package.json | 4 +- yarn.lock | 2607 +++++++++++------ 15 files changed, 1673 insertions(+), 991 deletions(-) diff --git a/babel.config.js b/babel.config.js index d96326f8..30e1e306 100644 --- a/babel.config.js +++ b/babel.config.js @@ -5,7 +5,7 @@ module.exports = function (api) { api.cache.forever() return { - presets: ['@babel/preset-typescript'], - plugins: ['@babel/plugin-transform-modules-commonjs', '@babel/plugin-transform-react-jsx'], + presets: ['@babel/preset-typescript', '@babel/preset-react'], + plugins: ['@babel/plugin-transform-modules-commonjs'], } } diff --git a/examples/benchmarking/package.json b/examples/benchmarking/package.json index 67972939..f406e7c0 100644 --- a/examples/benchmarking/package.json +++ b/examples/benchmarking/package.json @@ -14,7 +14,7 @@ "@react-facet/shared-facet": "0.4.3", "@react-facet/spring": "0.4.3", "ramda": "^0.27.1", - "react": "^18.1.0", + "react": "18.1.0", "react-dom": "^18.1.0" }, "devDependencies": { diff --git a/examples/concurrent/package.json b/examples/concurrent/package.json index 7af7b233..103ddb0c 100644 --- a/examples/concurrent/package.json +++ b/examples/concurrent/package.json @@ -13,7 +13,7 @@ "@react-facet/shared-facet": "0.4.3", "@react-facet/spring": "0.4.3", "ramda": "^0.27.1", - "react": "^18.1.0", + "react": "18.1.0", "react-dom": "^18.1.0" }, "devDependencies": { diff --git a/jest.base.config.js b/jest.base.config.js index 1a4ae0c7..109d2c71 100644 --- a/jest.base.config.js +++ b/jest.base.config.js @@ -2,14 +2,15 @@ // Base Jest configuration for individual projects. Use this as a starting point for your package config module.exports = { + testEnvironment: 'jsdom', + testEnvironmentOptions: { url: 'http://localhost' }, watchPathIgnorePatterns: ['/dist/'], testResultsProcessor: '/../../../jest.testResultsProcessor.js', moduleFileExtensions: ['tsx', 'js', 'ts'], testMatch: ['**/?(*.)+(spec|test).js?(x)', '**/?(*.)+(spec|test).ts?(x)'], setupFilesAfterEnv: ['/../../../jest.setupTestFrameworkScriptFile.js'], transform: { - '^.+\\.jsx?$': 'babel-jest', - '^.+\\.tsx?$': 'babel-jest', + '^.+\\.[jt]sx?$': ['babel-jest', { rootMode: 'upward' }], }, testPathIgnorePatterns: ['/node_modules/', '/dist/'], } diff --git a/jest.setupTestFrameworkScriptFile.js b/jest.setupTestFrameworkScriptFile.js index 75674fd5..ca03be8c 100644 --- a/jest.setupTestFrameworkScriptFile.js +++ b/jest.setupTestFrameworkScriptFile.js @@ -1,7 +1,10 @@ /* eslint-disable import/no-named-as-default-member */ // eslint-disable-next-line require-in-package/require-in-package -import React from 'react' -import '@testing-library/jest-dom/extend-expect' +const React = require('react') + +const matchers = require('@testing-library/jest-dom/extend-expect') + +expect.extend(matchers) // Make useEffect run synchronously to make it easier to test // TODO: update this to an official solution once available diff --git a/package.json b/package.json index 1d37b174..145c1c59 100644 --- a/package.json +++ b/package.json @@ -18,10 +18,12 @@ "@babel/core": "7.13.16", "@babel/plugin-transform-modules-commonjs": "7.13.8", "@babel/plugin-transform-react-jsx": "7.13.12", + "@babel/plugin-transform-typescript": "^7.20.7", + "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "7.13.0", - "@jest/core": "26.6.3", - "@testing-library/dom": "7.30.4", - "@testing-library/jest-dom": "5.12.0", + "@jest/core": "^29.3.1", + "@testing-library/dom": "^8.19.0", + "@testing-library/jest-dom": "^5.16.5", "@types/fs-extra": "^9.0.12", "@types/glob": "^7", "@types/prettier": "^2", @@ -40,7 +42,9 @@ "eslint-plugin-require-in-package": "^1.0.3", "fs-extra": "^10.0.0", "glob": "^7.1.7", - "jest": "^26.1.0", + "jest": "^29.3.1", + "jest-cli": "^29.3.1", + "jest-environment-jsdom": "^29.3.1", "jest-junit-reporter": "^1.1.0", "jest-sonar-reporter": "2.0.0", "prettier": "^2.3.2", diff --git a/packages/@react-facet/core/package.json b/packages/@react-facet/core/package.json index 748e3b61..81b8ad7f 100644 --- a/packages/@react-facet/core/package.json +++ b/packages/@react-facet/core/package.json @@ -49,7 +49,7 @@ "@types/react-reconciler": "^0.28.0", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "^18.1.0", + "react": "18.1.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/packages/@react-facet/deferred-mount/package.json b/packages/@react-facet/deferred-mount/package.json index ee91e291..9dcd974d 100644 --- a/packages/@react-facet/deferred-mount/package.json +++ b/packages/@react-facet/deferred-mount/package.json @@ -46,7 +46,7 @@ }, "devDependencies": { "@react-facet/dom-fiber-testing-library": "0.4.3", - "react": "^18.1.0", + "react": "18.1.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/packages/@react-facet/dom-components/package.json b/packages/@react-facet/dom-components/package.json index 9f1ead98..0a0a98bd 100644 --- a/packages/@react-facet/dom-components/package.json +++ b/packages/@react-facet/dom-components/package.json @@ -46,12 +46,13 @@ }, "devDependencies": { "@react-facet/core": "0.4.3", - "@testing-library/jest-dom": "^5.10.1", + "@react-facet/dom-fiber-testing-library": "0.4.3", + "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^9.4.1", "@types/react": "^18.0.8", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "^18.1.0", + "react": "18.1.0", "react-dom": "^18.1.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" diff --git a/packages/@react-facet/dom-components/src/index.spec.tsx b/packages/@react-facet/dom-components/src/index.spec.tsx index 7d6c59e9..88d5452e 100644 --- a/packages/@react-facet/dom-components/src/index.spec.tsx +++ b/packages/@react-facet/dom-components/src/index.spec.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { render, act } from '@testing-library/react' +import { act, render } from '@react-facet/dom-fiber-testing-library' import { fast } from '.' import { createFacet } from '@react-facet/core' diff --git a/packages/@react-facet/dom-fiber-testing-library/package.json b/packages/@react-facet/dom-fiber-testing-library/package.json index 132f6139..02f35b89 100644 --- a/packages/@react-facet/dom-fiber-testing-library/package.json +++ b/packages/@react-facet/dom-fiber-testing-library/package.json @@ -41,7 +41,7 @@ "prepublish": "yarn build" }, "dependencies": { - "@testing-library/dom": "^8.16.0" + "@testing-library/dom": "^8.19.0" }, "peerDependencies": { "@react-facet/dom-fiber": "0.4.3", @@ -49,7 +49,7 @@ }, "devDependencies": { "@react-facet/dom-fiber": "0.4.3", - "react": "^16.9.0", + "react": "18.1.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/packages/@react-facet/dom-fiber/package.json b/packages/@react-facet/dom-fiber/package.json index 5898211f..ddb64ecd 100644 --- a/packages/@react-facet/dom-fiber/package.json +++ b/packages/@react-facet/dom-fiber/package.json @@ -49,12 +49,12 @@ }, "devDependencies": { "@react-facet/core": "0.4.3", - "@react-facet/dom-fiber-testing-library": "0.4.3", + "@react-facet/dom-fiber-testing-library": "workspace:^", "@types/react": "^17.0.11", "@types/react-reconciler": "^0.28.0", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "^18.1.0", + "react": "18.1.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/packages/@react-facet/shared-facet/package.json b/packages/@react-facet/shared-facet/package.json index d43c7128..2232005f 100644 --- a/packages/@react-facet/shared-facet/package.json +++ b/packages/@react-facet/shared-facet/package.json @@ -50,7 +50,7 @@ "@types/react": "^18.0.8", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "^18.1.0", + "react": "18.1.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/packages/@react-facet/spring/package.json b/packages/@react-facet/spring/package.json index a999b751..01c001e5 100644 --- a/packages/@react-facet/spring/package.json +++ b/packages/@react-facet/spring/package.json @@ -46,12 +46,12 @@ }, "devDependencies": { "@react-facet/core": "0.4.3", - "@testing-library/jest-dom": "^5.10.1", + "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^9.4.1", "@types/react": "^18.0.8", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "^18.1.0", + "react": "18.1.0", "react-dom": "^18.1.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" diff --git a/yarn.lock b/yarn.lock index 936ce7ad..59707311 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,23 @@ __metadata: version: 6 cacheKey: 8 +"@adobe/css-tools@npm:^4.0.1": + version: 4.0.1 + resolution: "@adobe/css-tools@npm:4.0.1" + checksum: 80226e2229024c21da9ffa6b5cd4a34b931f071e06f45aba4777ade071d7a6c94605cf73b13718b0c4b34e8b124c65c607b82eaa53a326d3eb73d9682a04a593 + languageName: node + linkType: hard + +"@ampproject/remapping@npm:^2.1.0": + version: 2.2.0 + resolution: "@ampproject/remapping@npm:2.2.0" + dependencies: + "@jridgewell/gen-mapping": ^0.1.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: d74d170d06468913921d72430259424b7e4c826b5a7d39ff839a29d547efb97dc577caa8ba3fb5cf023624e9af9d09651afc3d4112a45e2050328abc9b3a2292 + languageName: node + linkType: hard + "@babel/code-frame@npm:7.12.11": version: 7.12.11 resolution: "@babel/code-frame@npm:7.12.11" @@ -23,6 +40,15 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/code-frame@npm:7.18.6" + dependencies: + "@babel/highlight": ^7.18.6 + checksum: 195e2be3172d7684bf95cff69ae3b7a15a9841ea9d27d3c843662d50cdd7d6470fd9c8e64be84d031117e4a4083486effba39f9aef6bbb2c89f7f21bcfba33ba + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.15.0": version: 7.15.0 resolution: "@babel/compat-data@npm:7.15.0" @@ -30,6 +56,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.20.5": + version: 7.20.10 + resolution: "@babel/compat-data@npm:7.20.10" + checksum: 6ed6c1bb6fc03c225d63b8611788cd976107d1692402b560ebffbf1fa53e63705f8625bb12e12d17ce7f7af34e61e1ca96c77858aac6f57010045271466200c0 + languageName: node + linkType: hard + "@babel/core@npm:7.13.16": version: 7.13.16 resolution: "@babel/core@npm:7.13.16" @@ -76,6 +109,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": + version: 7.20.12 + resolution: "@babel/core@npm:7.20.12" + dependencies: + "@ampproject/remapping": ^2.1.0 + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.20.7 + "@babel/helper-compilation-targets": ^7.20.7 + "@babel/helper-module-transforms": ^7.20.11 + "@babel/helpers": ^7.20.7 + "@babel/parser": ^7.20.7 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.20.12 + "@babel/types": ^7.20.7 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.2 + semver: ^6.3.0 + checksum: 62e6c3e2149a70b5c9729ef5f0d3e2e97e9dcde89fc039c8d8e3463d5d7ba9b29ee84d10faf79b61532ac1645aa62f2bd42338320617e6e3a8a4d8e2a27076e7 + languageName: node + linkType: hard + "@babel/generator@npm:^7.13.16, @babel/generator@npm:^7.15.4, @babel/generator@npm:^7.15.8": version: 7.15.8 resolution: "@babel/generator@npm:7.15.8" @@ -87,6 +143,17 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.20.7, @babel/generator@npm:^7.7.2": + version: 7.20.7 + resolution: "@babel/generator@npm:7.20.7" + dependencies: + "@babel/types": ^7.20.7 + "@jridgewell/gen-mapping": ^0.3.2 + jsesc: ^2.5.1 + checksum: 84b6983ffdb50c80c1c2e3f3c32617a7133d8effd1065f3e0f9bba188a7d54ab42a4dd5e42b61b843c65f9dd1aa870036ff0f848ebd42707aaa8a2b6d31d04f5 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.12.13, @babel/helper-annotate-as-pure@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-annotate-as-pure@npm:7.15.4" @@ -96,6 +163,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-annotate-as-pure@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: 88ccd15ced475ef2243fdd3b2916a29ea54c5db3cd0cfabf9d1d29ff6e63b7f7cd1c27264137d7a40ac2e978b9b9a542c332e78f40eb72abe737a7400788fc1b + languageName: node + linkType: hard + "@babel/helper-compilation-targets@npm:^7.13.16, @babel/helper-compilation-targets@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-compilation-targets@npm:7.15.4" @@ -110,6 +186,21 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/helper-compilation-targets@npm:7.20.7" + dependencies: + "@babel/compat-data": ^7.20.5 + "@babel/helper-validator-option": ^7.18.6 + browserslist: ^4.21.3 + lru-cache: ^5.1.1 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 8c32c873ba86e2e1805b30e0807abd07188acbe00ebb97576f0b09061cc65007f1312b589eccb4349c5a8c7f8bb9f2ab199d41da7030bf103d9f347dcd3a3cf4 + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-create-class-features-plugin@npm:7.15.4" @@ -126,6 +217,31 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-class-features-plugin@npm:^7.20.7": + version: 7.20.12 + resolution: "@babel/helper-create-class-features-plugin@npm:7.20.12" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 + "@babel/helper-member-expression-to-functions": ^7.20.7 + "@babel/helper-optimise-call-expression": ^7.18.6 + "@babel/helper-replace-supers": ^7.20.7 + "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 + "@babel/helper-split-export-declaration": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 1e9ed4243b75278fa24deb40dc62bf537b79307987223a2d2d2ae5abf7ba6dc8435d6e3bb55d52ceb30d3e1eba88e7eb6a1885a8bb519e5cfc3e9dedb97d43e6 + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-environment-visitor@npm:7.18.9" + checksum: b25101f6162ddca2d12da73942c08ad203d7668e06663df685634a8fde54a98bc015f6f62938e8554457a592a024108d45b8f3e651fd6dcdb877275b73cc4420 + languageName: node + linkType: hard + "@babel/helper-function-name@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-function-name@npm:7.15.4" @@ -137,6 +253,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-function-name@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-function-name@npm:7.19.0" + dependencies: + "@babel/template": ^7.18.10 + "@babel/types": ^7.19.0 + checksum: eac1f5db428ba546270c2b8d750c24eb528b8fcfe50c81de2e0bdebf0e20f24bec688d4331533b782e4a907fad435244621ca2193cfcf80a86731299840e0f6e + languageName: node + linkType: hard + "@babel/helper-get-function-arity@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-get-function-arity@npm:7.15.4" @@ -155,6 +281,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-hoist-variables@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-hoist-variables@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: fd9c35bb435fda802bf9ff7b6f2df06308a21277c6dec2120a35b09f9de68f68a33972e2c15505c1a1a04b36ec64c9ace97d4a9e26d6097b76b4396b7c5fa20f + languageName: node + linkType: hard + "@babel/helper-member-expression-to-functions@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-member-expression-to-functions@npm:7.15.4" @@ -164,6 +299,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/helper-member-expression-to-functions@npm:7.20.7" + dependencies: + "@babel/types": ^7.20.7 + checksum: cec17aab7e964830b0146e575bd141127032319f26ed864a65b35abd75ad618d264d3e11449b9b4e29cfd95bb1a7e774afddd4884fdcc29c36ac9cbd2b66359f + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.13.12, @babel/helper-module-imports@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-module-imports@npm:7.15.4" @@ -173,6 +317,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-module-imports@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: f393f8a3b3304b1b7a288a38c10989de754f01d29caf62ce7c4e5835daf0a27b81f3ac687d9d2780d39685aae7b55267324b512150e7b2be967b0c493b6a1def + languageName: node + linkType: hard + "@babel/helper-module-transforms@npm:^7.13.0, @babel/helper-module-transforms@npm:^7.13.14, @babel/helper-module-transforms@npm:^7.15.8": version: 7.15.8 resolution: "@babel/helper-module-transforms@npm:7.15.8" @@ -189,6 +342,22 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.20.11": + version: 7.20.11 + resolution: "@babel/helper-module-transforms@npm:7.20.11" + dependencies: + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-simple-access": ^7.20.2 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/helper-validator-identifier": ^7.19.1 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.20.10 + "@babel/types": ^7.20.7 + checksum: 29319ebafa693d48756c6ba0d871677bb0037e0da084fbe221a17c38d57093fc8aa38543c07d76e788266a937976e37ab4901971ca7f237c5ab45f524b9ecca0 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-optimise-call-expression@npm:7.15.4" @@ -198,6 +367,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-optimise-call-expression@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-optimise-call-expression@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: e518fe8418571405e21644cfb39cf694f30b6c47b10b006609a92469ae8b8775cbff56f0b19732343e2ea910641091c5a2dc73b56ceba04e116a33b0f8bd2fbd + languageName: node + linkType: hard + "@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.13.0, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.8.0": version: 7.14.5 resolution: "@babel/helper-plugin-utils@npm:7.14.5" @@ -205,6 +383,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/helper-plugin-utils@npm:7.20.2" + checksum: f6cae53b7fdb1bf3abd50fa61b10b4470985b400cc794d92635da1e7077bb19729f626adc0741b69403d9b6e411cddddb9c0157a709cc7c4eeb41e663be5d74b + languageName: node + linkType: hard + "@babel/helper-replace-supers@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-replace-supers@npm:7.15.4" @@ -217,6 +402,20 @@ __metadata: languageName: node linkType: hard +"@babel/helper-replace-supers@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/helper-replace-supers@npm:7.20.7" + dependencies: + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-member-expression-to-functions": ^7.20.7 + "@babel/helper-optimise-call-expression": ^7.18.6 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.20.7 + "@babel/types": ^7.20.7 + checksum: b8e0087c9b0c1446e3c6f3f72b73b7e03559c6b570e2cfbe62c738676d9ebd8c369a708cf1a564ef88113b4330750a50232ee1131d303d478b7a5e65e46fbc7c + languageName: node + linkType: hard + "@babel/helper-simple-access@npm:^7.12.13, @babel/helper-simple-access@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-simple-access@npm:7.15.4" @@ -226,6 +425,24 @@ __metadata: languageName: node linkType: hard +"@babel/helper-simple-access@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/helper-simple-access@npm:7.20.2" + dependencies: + "@babel/types": ^7.20.2 + checksum: ad1e96ee2e5f654ffee2369a586e5e8d2722bf2d8b028a121b4c33ebae47253f64d420157b9f0a8927aea3a9e0f18c0103e74fdd531815cf3650a0a4adca11a1 + languageName: node + linkType: hard + +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0": + version: 7.20.0 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.20.0" + dependencies: + "@babel/types": ^7.20.0 + checksum: 34da8c832d1c8a546e45d5c1d59755459ffe43629436707079989599b91e8c19e50e73af7a4bd09c95402d389266731b0d9c5f69e372d8ebd3a709c05c80d7dd + languageName: node + linkType: hard + "@babel/helper-split-export-declaration@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-split-export-declaration@npm:7.15.4" @@ -235,6 +452,22 @@ __metadata: languageName: node linkType: hard +"@babel/helper-split-export-declaration@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-split-export-declaration@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: c6d3dede53878f6be1d869e03e9ffbbb36f4897c7cc1527dc96c56d127d834ffe4520a6f7e467f5b6f3c2843ea0e81a7819d66ae02f707f6ac057f3d57943a2b + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.19.4": + version: 7.19.4 + resolution: "@babel/helper-string-parser@npm:7.19.4" + checksum: b2f8a3920b30dfac81ec282ac4ad9598ea170648f8254b10f475abe6d944808fb006aab325d3eb5a8ad3bea8dfa888cfa6ef471050dae5748497c110ec060943 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.14.5, @babel/helper-validator-identifier@npm:^7.14.9, @babel/helper-validator-identifier@npm:^7.15.7": version: 7.15.7 resolution: "@babel/helper-validator-identifier@npm:7.15.7" @@ -242,6 +475,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1": + version: 7.19.1 + resolution: "@babel/helper-validator-identifier@npm:7.19.1" + checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.12.17, @babel/helper-validator-option@npm:^7.14.5": version: 7.14.5 resolution: "@babel/helper-validator-option@npm:7.14.5" @@ -249,6 +489,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-validator-option@npm:7.18.6" + checksum: f9cc6eb7cc5d759c5abf006402180f8d5e4251e9198197428a97e05d65eb2f8ae5a0ce73b1dfd2d35af41d0eb780627a64edf98a4e71f064eeeacef8de58f2cf + languageName: node + linkType: hard + "@babel/helpers@npm:^7.13.16, @babel/helpers@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helpers@npm:7.15.4" @@ -260,6 +507,17 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/helpers@npm:7.20.7" + dependencies: + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.20.7 + "@babel/types": ^7.20.7 + checksum: 3fb10df3510ba7116a180d5fd983d0f558f7a65c3d599385dba991bff66b74174c88881bc12c2b3cf7284294fcac5b301ded49a8b0098bdf2ef61d0cad8010db + languageName: node + linkType: hard + "@babel/highlight@npm:^7.10.4": version: 7.16.0 resolution: "@babel/highlight@npm:7.16.0" @@ -282,6 +540,17 @@ __metadata: languageName: node linkType: hard +"@babel/highlight@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/highlight@npm:7.18.6" + dependencies: + "@babel/helper-validator-identifier": ^7.18.6 + chalk: ^2.0.0 + js-tokens: ^4.0.0 + checksum: 92d8ee61549de5ff5120e945e774728e5ccd57fd3b2ed6eace020ec744823d4a98e242be1453d21764a30a14769ecd62170fba28539b211799bbaf232bbb2789 + languageName: node + linkType: hard + "@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.15.4, @babel/parser@npm:^7.15.8": version: 7.15.8 resolution: "@babel/parser@npm:7.15.8" @@ -291,6 +560,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/parser@npm:7.20.7" + bin: + parser: ./bin/babel-parser.js + checksum: 25b5266e3bd4be837092685f6b7ef886f1308ff72659a24342eb646ae5014f61ed1771ce8fc20636c890fcae19304fc72c069564ca6075207b7fbf3f75367275 + languageName: node + linkType: hard + "@babel/plugin-syntax-async-generators@npm:^7.8.4": version: 7.8.4 resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" @@ -357,6 +635,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-jsx@npm:^7.18.6, @babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.18.6 + resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6d37ea972970195f1ffe1a54745ce2ae456e0ac6145fae9aa1480f297248b262ea6ebb93010eddb86ebfacb94f57c05a1fc5d232b9a67325b09060299d515c67 + languageName: node + linkType: hard + "@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" @@ -445,6 +734,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-typescript@npm:^7.20.0, @babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.20.0 + resolution: "@babel/plugin-syntax-typescript@npm:7.20.0" + dependencies: + "@babel/helper-plugin-utils": ^7.19.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6189c0b5c32ba3c9a80a42338bd50719d783b20ef29b853d4f03929e971913d3cefd80184e924ae98ad6db09080be8fe6f1ffde9a6db8972523234f0274d36f7 + languageName: node + linkType: hard + "@babel/plugin-transform-modules-commonjs@npm:7.13.8": version: 7.13.8 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.13.8" @@ -459,6 +759,28 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-display-name@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-react-display-name@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 51c087ab9e41ef71a29335587da28417536c6f816c292e092ffc0e0985d2f032656801d4dd502213ce32481f4ba6c69402993ffa67f0818a07606ff811e4be49 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-development@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-react-jsx-development@npm:7.18.6" + dependencies: + "@babel/plugin-transform-react-jsx": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ec9fa65db66f938b75c45e99584367779ac3e0af8afc589187262e1337c7c4205ea312877813ae4df9fb93d766627b8968d74ac2ba702e4883b1dbbe4953ecee + languageName: node + linkType: hard + "@babel/plugin-transform-react-jsx@npm:7.13.12": version: 7.13.12 resolution: "@babel/plugin-transform-react-jsx@npm:7.13.12" @@ -474,6 +796,33 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-jsx@npm:^7.18.6": + version: 7.20.7 + resolution: "@babel/plugin-transform-react-jsx@npm:7.20.7" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/plugin-syntax-jsx": ^7.18.6 + "@babel/types": ^7.20.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 13ecbd1da582177f76ebd74d685947e703a3dcf8bd39cbc62784253201c6f7a667f3573932f6f20602dbcaf077451bf9dd3571892e3ccf4c7176add6358cd641 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-pure-annotations@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.18.6" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 97c4873d409088f437f9084d084615948198dd87fc6723ada0e7e29c5a03623c2f3e03df3f52e7e7d4d23be32a08ea00818bff302812e48713c706713bd06219 + languageName: node + linkType: hard + "@babel/plugin-transform-typescript@npm:^7.13.0": version: 7.15.8 resolution: "@babel/plugin-transform-typescript@npm:7.15.8" @@ -487,6 +836,35 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-typescript@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/plugin-transform-typescript@npm:7.20.7" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.20.7 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/plugin-syntax-typescript": ^7.20.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ca569a1b8001e7e8971874656091789c6b3209f155c91c56bce82b545e43d09d156b4fcf2f0dfcdf7911a2c546c7090c2aff167a5692443f6f0382b358c233e0 + languageName: node + linkType: hard + +"@babel/preset-react@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/preset-react@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-validator-option": ^7.18.6 + "@babel/plugin-transform-react-display-name": ^7.18.6 + "@babel/plugin-transform-react-jsx": ^7.18.6 + "@babel/plugin-transform-react-jsx-development": ^7.18.6 + "@babel/plugin-transform-react-pure-annotations": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 540d9cf0a0cc0bb07e6879994e6fb7152f87dafbac880b56b65e2f528134c7ba33e0cd140b58700c77b2ebf4c81fa6468fed0ba391462d75efc7f8c1699bb4c3 + languageName: node + linkType: hard + "@babel/preset-typescript@npm:7.13.0": version: 7.13.0 resolution: "@babel/preset-typescript@npm:7.13.0" @@ -530,7 +908,18 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.13.15, @babel/traverse@npm:^7.15.4": +"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/template@npm:7.20.7" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + checksum: 2eb1a0ab8d415078776bceb3473d07ab746e6bb4c2f6ca46ee70efb284d75c4a32bb0cd6f4f4946dec9711f9c0780e8e5d64b743208deac6f8e9858afadc349e + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.13.15, @babel/traverse@npm:^7.15.4": version: 7.15.4 resolution: "@babel/traverse@npm:7.15.4" dependencies: @@ -547,6 +936,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.20.10, @babel/traverse@npm:^7.20.12, @babel/traverse@npm:^7.20.7, @babel/traverse@npm:^7.7.2": + version: 7.20.12 + resolution: "@babel/traverse@npm:7.20.12" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.20.7 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: d758b355ab4f1e87984524b67785fa23d74e8a45d2ceb8bcf4d5b2b0cd15ee160db5e68c7078808542805774ca3802e2eafb1b9638afa4cd7f9ecabd0ca7fd56 + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.13.12, @babel/types@npm:^7.13.16, @babel/types@npm:^7.15.4, @babel/types@npm:^7.15.6, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": version: 7.15.6 resolution: "@babel/types@npm:7.15.6" @@ -557,6 +964,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.18.6, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/types@npm:7.20.7" + dependencies: + "@babel/helper-string-parser": ^7.19.4 + "@babel/helper-validator-identifier": ^7.19.1 + to-fast-properties: ^2.0.0 + checksum: b39af241f0b72bba67fd6d0d23914f6faec8c0eba8015c181cbd5ea92e59fc91a52a1ab490d3520c7dbd19ddb9ebb76c476308f6388764f16d8201e37fae6811 + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -654,162 +1072,196 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/console@npm:26.6.2" +"@jest/console@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/console@npm:29.3.1" dependencies: - "@jest/types": ^26.6.2 + "@jest/types": ^29.3.1 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^26.6.2 - jest-util: ^26.6.2 + jest-message-util: ^29.3.1 + jest-util: ^29.3.1 slash: ^3.0.0 - checksum: 69a9ca6ba357d7634fd537e3b87c64369865ffb59f57fe6661223088bd62273d0c1d660fefce3625a427f42a37d32590f6b291e1295ea6d6b7cb31ddae36a737 + checksum: 9eecbfb6df4f5b810374849b7566d321255e6fd6e804546236650384966be532ff75a3e445a3277eadefe67ddf4dc56cd38332abd72d6a450f1bea9866efc6d7 languageName: node linkType: hard -"@jest/core@npm:26.6.3, @jest/core@npm:^26.6.3": - version: 26.6.3 - resolution: "@jest/core@npm:26.6.3" +"@jest/core@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/core@npm:29.3.1" dependencies: - "@jest/console": ^26.6.2 - "@jest/reporters": ^26.6.2 - "@jest/test-result": ^26.6.2 - "@jest/transform": ^26.6.2 - "@jest/types": ^26.6.2 + "@jest/console": ^29.3.1 + "@jest/reporters": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 + ci-info: ^3.2.0 exit: ^0.1.2 - graceful-fs: ^4.2.4 - jest-changed-files: ^26.6.2 - jest-config: ^26.6.3 - jest-haste-map: ^26.6.2 - jest-message-util: ^26.6.2 - jest-regex-util: ^26.0.0 - jest-resolve: ^26.6.2 - jest-resolve-dependencies: ^26.6.3 - jest-runner: ^26.6.3 - jest-runtime: ^26.6.3 - jest-snapshot: ^26.6.2 - jest-util: ^26.6.2 - jest-validate: ^26.6.2 - jest-watcher: ^26.6.2 - micromatch: ^4.0.2 - p-each-series: ^2.1.0 - rimraf: ^3.0.0 + graceful-fs: ^4.2.9 + jest-changed-files: ^29.2.0 + jest-config: ^29.3.1 + jest-haste-map: ^29.3.1 + jest-message-util: ^29.3.1 + jest-regex-util: ^29.2.0 + jest-resolve: ^29.3.1 + jest-resolve-dependencies: ^29.3.1 + jest-runner: ^29.3.1 + jest-runtime: ^29.3.1 + jest-snapshot: ^29.3.1 + jest-util: ^29.3.1 + jest-validate: ^29.3.1 + jest-watcher: ^29.3.1 + micromatch: ^4.0.4 + pretty-format: ^29.3.1 slash: ^3.0.0 strip-ansi: ^6.0.0 - checksum: f52b26ffe9b923ed67b3ff30e170b3a434d4263990f78d96cd43acbd0aa8ad36aecad2f1822f376da3a80228714fd6b7f7acd51744133cfcd2780ba0e3da537b + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: e3ac9201e8a084ccd832b17877b56490402b919f227622bb24f9372931e77b869e60959d34144222ce20fb619d0a6a6be20b257adb077a6b0f430a4584a45b0f languageName: node linkType: hard -"@jest/environment@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/environment@npm:26.6.2" +"@jest/environment@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/environment@npm:29.3.1" dependencies: - "@jest/fake-timers": ^26.6.2 - "@jest/types": ^26.6.2 + "@jest/fake-timers": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" - jest-mock: ^26.6.2 - checksum: 7748081b2a758161785aff161780b05084dccaff908c8ed82c04f7da5d5e5439e77b5eb667306d5c4e1422653c7a67ed2955f26704f48c65c404195e1e21780a + jest-mock: ^29.3.1 + checksum: 974102aba7cc80508f787bb5504dcc96e5392e0a7776a63dffbf54ddc2c77d52ef4a3c08ed2eedec91965befff873f70cd7c9ed56f62bb132dcdb821730e6076 languageName: node linkType: hard -"@jest/fake-timers@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/fake-timers@npm:26.6.2" +"@jest/expect-utils@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/expect-utils@npm:29.3.1" dependencies: - "@jest/types": ^26.6.2 - "@sinonjs/fake-timers": ^6.0.1 + jest-get-type: ^29.2.0 + checksum: 7f3b853eb1e4299988f66b9aa49c1aacb7b8da1cf5518dca4ccd966e865947eed8f1bde6c8f5207d8400e9af870112a44b57aa83515ad6ea5e4a04a971863adb + languageName: node + linkType: hard + +"@jest/expect@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/expect@npm:29.3.1" + dependencies: + expect: ^29.3.1 + jest-snapshot: ^29.3.1 + checksum: 1d7b5cc735c8a99bfbed884d80fdb43b23b3456f4ec88c50fd86404b097bb77fba84f44e707fc9b49f106ca1154ae03f7c54dc34754b03f8a54eeb420196e5bf + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/fake-timers@npm:29.3.1" + dependencies: + "@jest/types": ^29.3.1 + "@sinonjs/fake-timers": ^9.1.2 "@types/node": "*" - jest-message-util: ^26.6.2 - jest-mock: ^26.6.2 - jest-util: ^26.6.2 - checksum: c732658fac4014a424e6629495296c3b2e8697787518df34c74539ec139625e7141ad792b8a4d3c8392b47954ad01be9846b7c57cc8c631490969e7cafa84e6a + jest-message-util: ^29.3.1 + jest-mock: ^29.3.1 + jest-util: ^29.3.1 + checksum: b1dafa8cdc439ef428cd772c775f0b22703677f52615513eda11a104bbfc352d7ec69b1225db95d4ef2e1b4ef0f23e1a7d96de5313aeb0950f672e6548ae069d languageName: node linkType: hard -"@jest/globals@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/globals@npm:26.6.2" +"@jest/globals@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/globals@npm:29.3.1" dependencies: - "@jest/environment": ^26.6.2 - "@jest/types": ^26.6.2 - expect: ^26.6.2 - checksum: 49b28d0cc7e99898eeaf23e6899e3c9ee25a2a4831caa3eb930ec1722de2e92a0e8a6a6f649438fdd20ff0c0d5e522dd78cb719466a57f011a88d60419b903c5 + "@jest/environment": ^29.3.1 + "@jest/expect": ^29.3.1 + "@jest/types": ^29.3.1 + jest-mock: ^29.3.1 + checksum: 4d2b9458aabf7c28fd167e53984477498c897b64eec67a7f84b8fff465235cae1456ee0721cb0e7943f0cda443c7656adb9801f9f34e27495b8ebbd9f3033100 languageName: node linkType: hard -"@jest/reporters@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/reporters@npm:26.6.2" +"@jest/reporters@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/reporters@npm:29.3.1" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^26.6.2 - "@jest/test-result": ^26.6.2 - "@jest/transform": ^26.6.2 - "@jest/types": ^26.6.2 + "@jest/console": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 + "@jridgewell/trace-mapping": ^0.3.15 + "@types/node": "*" chalk: ^4.0.0 collect-v8-coverage: ^1.0.0 exit: ^0.1.2 - glob: ^7.1.2 - graceful-fs: ^4.2.4 + glob: ^7.1.3 + graceful-fs: ^4.2.9 istanbul-lib-coverage: ^3.0.0 - istanbul-lib-instrument: ^4.0.3 + istanbul-lib-instrument: ^5.1.0 istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 - istanbul-reports: ^3.0.2 - jest-haste-map: ^26.6.2 - jest-resolve: ^26.6.2 - jest-util: ^26.6.2 - jest-worker: ^26.6.2 - node-notifier: ^8.0.0 + istanbul-reports: ^3.1.3 + jest-message-util: ^29.3.1 + jest-util: ^29.3.1 + jest-worker: ^29.3.1 slash: ^3.0.0 - source-map: ^0.6.0 string-length: ^4.0.1 - terminal-link: ^2.0.0 - v8-to-istanbul: ^7.0.0 - dependenciesMeta: + strip-ansi: ^6.0.0 + v8-to-istanbul: ^9.0.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: node-notifier: optional: true - checksum: 53c7a697c562becb7682a9a6248ea553013bf7048c08ddce5bf9fb53b975fc9f799ca163f7494e0be6c4d3cf181c8bc392976268da52b7de8ce4470b971ed84e + checksum: 273e0c6953285f01151e9d84ac1e55744802a1ec79fb62dafeea16a49adfe7b24e7f35bef47a0214e5e057272dbfdacf594208286b7766046fd0f3cfa2043840 languageName: node linkType: hard -"@jest/source-map@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/source-map@npm:26.6.2" +"@jest/schemas@npm:^29.0.0": + version: 29.0.0 + resolution: "@jest/schemas@npm:29.0.0" dependencies: + "@sinclair/typebox": ^0.24.1 + checksum: 41355c78f09eb1097e57a3c5d0ca11c9099e235e01ea5fa4e3953562a79a6a9296c1d300f1ba50ca75236048829e056b00685cd2f1ff8285e56fd2ce01249acb + languageName: node + linkType: hard + +"@jest/source-map@npm:^29.2.0": + version: 29.2.0 + resolution: "@jest/source-map@npm:29.2.0" + dependencies: + "@jridgewell/trace-mapping": ^0.3.15 callsites: ^3.0.0 - graceful-fs: ^4.2.4 - source-map: ^0.6.0 - checksum: b171cef442738887dda85527ab78229996db5946c6435ddb56d442c2851889ba493729a9de73100f1a31b9a31a91207b55bc75656ae7df9843d65078b925385e + graceful-fs: ^4.2.9 + checksum: 09f76ab63d15dcf44b3035a79412164f43be34ec189575930f1a00c87e36ea0211ebd6a4fbe2253c2516e19b49b131f348ddbb86223ca7b6bbac9a6bc76ec96e languageName: node linkType: hard -"@jest/test-result@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/test-result@npm:26.6.2" +"@jest/test-result@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/test-result@npm:29.3.1" dependencies: - "@jest/console": ^26.6.2 - "@jest/types": ^26.6.2 + "@jest/console": ^29.3.1 + "@jest/types": ^29.3.1 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: dcb6175825231e9377e43546aed4edd6acc22f1788d5f099bbba36bb55b9115a92f760e88426c076bcdeff5a50d8f697327a920db0cd1fb339781fc3713fa8c7 + checksum: b24ac283321189b624c372a6369c0674b0ee6d9e3902c213452c6334d037113718156b315364bee8cee0f03419c2bdff5e2c63967193fb422830e79cbb26866a languageName: node linkType: hard -"@jest/test-sequencer@npm:^26.6.3": - version: 26.6.3 - resolution: "@jest/test-sequencer@npm:26.6.3" +"@jest/test-sequencer@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/test-sequencer@npm:29.3.1" dependencies: - "@jest/test-result": ^26.6.2 - graceful-fs: ^4.2.4 - jest-haste-map: ^26.6.2 - jest-runner: ^26.6.3 - jest-runtime: ^26.6.3 - checksum: a3450b3d7057f74da1828bb7b3658f228a7c049dc4082c5c49b8bafbd8f69d102a8a99007b7ed5d43464712f7823f53fe3564fda17787f178c219cccf329a461 + "@jest/test-result": ^29.3.1 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.3.1 + slash: ^3.0.0 + checksum: a8325b1ea0ce644486fb63bb67cedd3524d04e3d7b1e6c1e3562bf12ef477ecd0cf34044391b2a07d925e1c0c8b4e0f3285035ceca3a474a2c55980f1708caf3 languageName: node linkType: hard @@ -836,6 +1288,29 @@ __metadata: languageName: node linkType: hard +"@jest/transform@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/transform@npm:29.3.1" + dependencies: + "@babel/core": ^7.11.6 + "@jest/types": ^29.3.1 + "@jridgewell/trace-mapping": ^0.3.15 + babel-plugin-istanbul: ^6.1.1 + chalk: ^4.0.0 + convert-source-map: ^2.0.0 + fast-json-stable-stringify: ^2.1.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.3.1 + jest-regex-util: ^29.2.0 + jest-util: ^29.3.1 + micromatch: ^4.0.4 + pirates: ^4.0.4 + slash: ^3.0.0 + write-file-atomic: ^4.0.1 + checksum: 673df5900ffc95bc811084e09d6e47948034dea6ab6cc4f81f80977e3a52468a6c2284d0ba9796daf25a62ae50d12f7e97fc9a3a0c587f11f2a479ff5493ca53 + languageName: node + linkType: hard + "@jest/types@npm:^24.9.0": version: 24.9.0 resolution: "@jest/types@npm:24.9.0" @@ -885,6 +1360,48 @@ __metadata: languageName: node linkType: hard +"@jest/types@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/types@npm:29.3.1" + dependencies: + "@jest/schemas": ^29.0.0 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: 6f9faf27507b845ff3839c1adc6dbd038d7046d03d37e84c9fc956f60718711a801a5094c7eeee6b39ccf42c0ab61347fdc0fa49ab493ae5a8efd2fd41228ee8 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.1.0": + version: 0.1.1 + resolution: "@jridgewell/gen-mapping@npm:0.1.1" + dependencies: + "@jridgewell/set-array": ^1.0.0 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: 3bcc21fe786de6ffbf35c399a174faab05eb23ce6a03e8769569de28abbf4facc2db36a9ddb0150545ae23a8d35a7cf7237b2aa9e9356a7c626fb4698287d5cc + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.2 + resolution: "@jridgewell/gen-mapping@npm:0.3.2" + dependencies: + "@jridgewell/set-array": ^1.0.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 1832707a1c476afebe4d0fbbd4b9434fdb51a4c3e009ab1e9938648e21b7a97049fa6009393bdf05cab7504108413441df26d8a3c12193996e65493a4efb6882 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:3.1.0": + version: 3.1.0 + resolution: "@jridgewell/resolve-uri@npm:3.1.0" + checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 + languageName: node + linkType: hard + "@jridgewell/resolve-uri@npm:^3.0.3": version: 3.0.7 resolution: "@jridgewell/resolve-uri@npm:3.0.7" @@ -892,6 +1409,20 @@ __metadata: languageName: node linkType: hard +"@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1": + version: 1.1.2 + resolution: "@jridgewell/set-array@npm:1.1.2" + checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:1.4.14": + version: 1.4.14 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" + checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 + languageName: node + linkType: hard + "@jridgewell/sourcemap-codec@npm:^1.4.10": version: 1.4.13 resolution: "@jridgewell/sourcemap-codec@npm:1.4.13" @@ -909,6 +1440,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.17 + resolution: "@jridgewell/trace-mapping@npm:0.3.17" + dependencies: + "@jridgewell/resolve-uri": 3.1.0 + "@jridgewell/sourcemap-codec": 1.4.14 + checksum: 9d703b859cff5cd83b7308fd457a431387db5db96bd781a63bf48e183418dd9d3d44e76b9e4ae13237f6abeeb25d739ec9215c1d5bfdd08f66f750a50074a339 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -979,7 +1520,7 @@ __metadata: "@types/react-reconciler": ^0.28.0 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: ^18.1.0 + react: 18.1.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: @@ -992,7 +1533,7 @@ __metadata: resolution: "@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount" dependencies: "@react-facet/dom-fiber-testing-library": 0.4.3 - react: ^18.1.0 + react: 18.1.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: @@ -1006,12 +1547,13 @@ __metadata: resolution: "@react-facet/dom-components@workspace:packages/@react-facet/dom-components" dependencies: "@react-facet/core": 0.4.3 - "@testing-library/jest-dom": ^5.10.1 + "@react-facet/dom-fiber-testing-library": 0.4.3 + "@testing-library/jest-dom": ^5.16.5 "@testing-library/react": ^9.4.1 "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: ^18.1.0 + react: 18.1.0 react-dom: ^18.1.0 rimraf: ^3.0.2 typescript: ^4.8.2 @@ -1021,13 +1563,13 @@ __metadata: languageName: unknown linkType: soft -"@react-facet/dom-fiber-testing-library@0.4.3, @react-facet/dom-fiber-testing-library@workspace:packages/@react-facet/dom-fiber-testing-library": +"@react-facet/dom-fiber-testing-library@0.4.3, @react-facet/dom-fiber-testing-library@workspace:^, @react-facet/dom-fiber-testing-library@workspace:packages/@react-facet/dom-fiber-testing-library": version: 0.0.0-use.local resolution: "@react-facet/dom-fiber-testing-library@workspace:packages/@react-facet/dom-fiber-testing-library" dependencies: "@react-facet/dom-fiber": 0.4.3 - "@testing-library/dom": ^8.16.0 - react: ^16.9.0 + "@testing-library/dom": ^8.19.0 + react: 18.1.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: @@ -1041,12 +1583,12 @@ __metadata: resolution: "@react-facet/dom-fiber@workspace:packages/@react-facet/dom-fiber" dependencies: "@react-facet/core": 0.4.3 - "@react-facet/dom-fiber-testing-library": 0.4.3 + "@react-facet/dom-fiber-testing-library": "workspace:^" "@types/react": ^17.0.11 "@types/react-reconciler": ^0.28.0 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: ^18.1.0 + react: 18.1.0 react-reconciler: ^0.28.0 rimraf: ^3.0.2 typescript: ^4.8.2 @@ -1075,7 +1617,7 @@ __metadata: "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: ^18.1.0 + react: 18.1.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: @@ -1089,12 +1631,12 @@ __metadata: resolution: "@react-facet/spring@workspace:packages/@react-facet/spring" dependencies: "@react-facet/core": 0.4.3 - "@testing-library/jest-dom": ^5.10.1 + "@testing-library/jest-dom": ^5.16.5 "@testing-library/react": ^9.4.1 "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: ^18.1.0 + react: 18.1.0 react-dom: ^18.1.0 rimraf: ^3.0.2 typescript: ^4.8.2 @@ -1111,6 +1653,13 @@ __metadata: languageName: node linkType: hard +"@sinclair/typebox@npm:^0.24.1": + version: 0.24.51 + resolution: "@sinclair/typebox@npm:0.24.51" + checksum: fd0d855e748ef767eb19da1a60ed0ab928e91e0f358c1dd198d600762c0015440b15755e96d1176e2a0db7e09c6a64ed487828ee10dd0c3e22f61eb09c478cd0 + languageName: node + linkType: hard + "@sinonjs/commons@npm:^1.7.0": version: 1.8.3 resolution: "@sinonjs/commons@npm:1.8.3" @@ -1120,28 +1669,12 @@ __metadata: languageName: node linkType: hard -"@sinonjs/fake-timers@npm:^6.0.1": - version: 6.0.1 - resolution: "@sinonjs/fake-timers@npm:6.0.1" +"@sinonjs/fake-timers@npm:^9.1.2": + version: 9.1.2 + resolution: "@sinonjs/fake-timers@npm:9.1.2" dependencies: "@sinonjs/commons": ^1.7.0 - checksum: 8e331aa1412d905ecc8efd63550f58a6f77dcb510f878172004e53be63eb82650623618763001a918fc5e21257b86c45041e4e97c454ed6a2d187de084abbd11 - languageName: node - linkType: hard - -"@testing-library/dom@npm:7.30.4": - version: 7.30.4 - resolution: "@testing-library/dom@npm:7.30.4" - dependencies: - "@babel/code-frame": ^7.10.4 - "@babel/runtime": ^7.12.5 - "@types/aria-query": ^4.2.0 - aria-query: ^4.2.2 - chalk: ^4.1.0 - dom-accessibility-api: ^0.5.4 - lz-string: ^1.4.4 - pretty-format: ^26.6.2 - checksum: e25450bb1760097f4ec4a4339e615e751f1419bf1fa512d407df584fd9de0a65c7aec4f970a0bd8122952274570db3d3938dfa032ff40ea05bde0539e4fb170b + checksum: 7d3aef54e17c1073101cb64d953157c19d62a40e261a30923fa1ee337b049c5f29cc47b1f0c477880f42b5659848ba9ab897607ac8ea4acd5c30ddcfac57fca6 languageName: node linkType: hard @@ -1160,9 +1693,9 @@ __metadata: languageName: node linkType: hard -"@testing-library/dom@npm:^8.16.0": - version: 8.16.0 - resolution: "@testing-library/dom@npm:8.16.0" +"@testing-library/dom@npm:^8.19.0": + version: 8.19.0 + resolution: "@testing-library/dom@npm:8.19.0" dependencies: "@babel/code-frame": ^7.10.4 "@babel/runtime": ^7.12.5 @@ -1172,40 +1705,24 @@ __metadata: dom-accessibility-api: ^0.5.9 lz-string: ^1.4.4 pretty-format: ^27.0.2 - checksum: 37aabbec872522bcb51106ecb700d9be601293e75445084b6cc195921db4b2d06d6bd4c67ad834174c129f2199c39aa540b6d17c296fcbd701dc99fd800afe36 - languageName: node - linkType: hard - -"@testing-library/jest-dom@npm:5.12.0": - version: 5.12.0 - resolution: "@testing-library/jest-dom@npm:5.12.0" - dependencies: - "@babel/runtime": ^7.9.2 - "@types/testing-library__jest-dom": ^5.9.1 - aria-query: ^4.2.2 - chalk: ^3.0.0 - css: ^3.0.0 - css.escape: ^1.5.1 - lodash: ^4.17.15 - redent: ^3.0.0 - checksum: d6af8912a7d121dba15b9defcddb33288a637e433478e8327a9d90b95077e5142eec41b1bbc91e3fd33b0c85478e94936b09021500f2602d9c3202c5d71475f2 + checksum: 6bb93fef96703b6c47cf1b7cc8f71d402a9576084a94ba4e9926f51bd7bb1287fbb4f6942d82bd03fc6f3d998ae97e60f6aea4618f3a1ce6139597d2a4ecb7b9 languageName: node linkType: hard -"@testing-library/jest-dom@npm:^5.10.1": - version: 5.14.1 - resolution: "@testing-library/jest-dom@npm:5.14.1" +"@testing-library/jest-dom@npm:^5.16.5": + version: 5.16.5 + resolution: "@testing-library/jest-dom@npm:5.16.5" dependencies: + "@adobe/css-tools": ^4.0.1 "@babel/runtime": ^7.9.2 "@types/testing-library__jest-dom": ^5.9.1 - aria-query: ^4.2.2 + aria-query: ^5.0.0 chalk: ^3.0.0 - css: ^3.0.0 css.escape: ^1.5.1 dom-accessibility-api: ^0.5.6 lodash: ^4.17.15 redent: ^3.0.0 - checksum: eeba37ba10be550bd9ab7dd0dda77d9011a96d9a4f75c70ed57d7bf120fe4126b251ccfb1444da1746c19773bbe4efbd96a0408f970d98c9cd1d399b2455d2c1 + checksum: 94911f901a8031f3e489d04ac057cb5373621230f5d92bed80e514e24b069fb58a3166d1dd86963e55f078a1bd999da595e2ab96ed95f452d477e272937d792a languageName: node linkType: hard @@ -1230,6 +1747,13 @@ __metadata: languageName: node linkType: hard +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 + languageName: node + linkType: hard + "@tsconfig/node10@npm:^1.0.7": version: 1.0.8 resolution: "@tsconfig/node10@npm:1.0.8" @@ -1278,6 +1802,19 @@ __metadata: languageName: node linkType: hard +"@types/babel__core@npm:^7.1.14": + version: 7.1.20 + resolution: "@types/babel__core@npm:7.1.20" + dependencies: + "@babel/parser": ^7.1.0 + "@babel/types": ^7.0.0 + "@types/babel__generator": "*" + "@types/babel__template": "*" + "@types/babel__traverse": "*" + checksum: a09c4f0456552547a5b8a5a009a3daec4d362f622168f8e08bda0ded2da0a65ab0b1642e23c433b3616721f5701dc34a996c5bde5baeaea53eda98f438043f2c + languageName: node + linkType: hard + "@types/babel__generator@npm:*": version: 7.6.3 resolution: "@types/babel__generator@npm:7.6.3" @@ -1297,7 +1834,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.4, @types/babel__traverse@npm:^7.0.6": +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": version: 7.14.2 resolution: "@types/babel__traverse@npm:7.14.2" dependencies: @@ -1361,6 +1898,15 @@ __metadata: languageName: node linkType: hard +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.6 + resolution: "@types/graceful-fs@npm:4.1.6" + dependencies: + "@types/node": "*" + checksum: c3070ccdc9ca0f40df747bced1c96c71a61992d6f7c767e8fd24bb6a3c2de26e8b84135ede000b7e79db530a23e7e88dcd9db60eee6395d0f4ce1dae91369dd4 + languageName: node + linkType: hard + "@types/html-minifier-terser@npm:^6.0.0": version: 6.0.0 resolution: "@types/html-minifier-terser@npm:6.0.0" @@ -1422,6 +1968,17 @@ __metadata: languageName: node linkType: hard +"@types/jsdom@npm:^20.0.0": + version: 20.0.1 + resolution: "@types/jsdom@npm:20.0.1" + dependencies: + "@types/node": "*" + "@types/tough-cookie": "*" + parse5: ^7.0.0 + checksum: d55402c5256ef451f93a6e3d3881f98339fe73a5ac2030588df056d6835df8367b5a857b48d27528289057e26dcdd3f502edc00cb877c79174cb3a4c7f2198c1 + languageName: node + linkType: hard + "@types/json-schema@npm:*, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8": version: 7.0.9 resolution: "@types/json-schema@npm:7.0.9" @@ -1450,17 +2007,17 @@ __metadata: languageName: node linkType: hard -"@types/normalize-package-data@npm:^2.4.0": +"@types/prettier@npm:^2": version: 2.4.1 - resolution: "@types/normalize-package-data@npm:2.4.1" - checksum: e87bccbf11f95035c89a132b52b79ce69a1e3652fe55962363063c9c0dae0fe2477ebc585e03a9652adc6f381d24ba5589cc5e51849df4ced3d3e004a7d40ed5 + resolution: "@types/prettier@npm:2.4.1" + checksum: df330c2d6fe7c282839b0f17701e069a9c6c96d2ff54704e933a1b3c1b98844d963a7cb00c5629d173604892ceee802312bbaeb8a97f5da21e13db8f653b519e languageName: node linkType: hard -"@types/prettier@npm:^2, @types/prettier@npm:^2.0.0": - version: 2.4.1 - resolution: "@types/prettier@npm:2.4.1" - checksum: df330c2d6fe7c282839b0f17701e069a9c6c96d2ff54704e933a1b3c1b98844d963a7cb00c5629d173604892ceee802312bbaeb8a97f5da21e13db8f653b519e +"@types/prettier@npm:^2.1.5": + version: 2.7.2 + resolution: "@types/prettier@npm:2.7.2" + checksum: b47d76a5252265f8d25dd2fe2a5a61dc43ba0e6a96ffdd00c594cb4fd74c1982c2e346497e3472805d97915407a09423804cc2110a0b8e1b22cffcab246479b7 languageName: node linkType: hard @@ -1618,6 +2175,13 @@ __metadata: languageName: node linkType: hard +"@types/tough-cookie@npm:*": + version: 4.0.2 + resolution: "@types/tough-cookie@npm:4.0.2" + checksum: e055556ffdaa39ad85ede0af192c93f93f986f4bd9e9426efdc2948e3e2632db3a4a584d4937dbf6d7620527419bc99e6182d3daf2b08685e710f2eda5291905 + languageName: node + linkType: hard + "@types/yargs-parser@npm:*": version: 20.2.1 resolution: "@types/yargs-parser@npm:20.2.1" @@ -1652,6 +2216,15 @@ __metadata: languageName: node linkType: hard +"@types/yargs@npm:^17.0.8": + version: 17.0.19 + resolution: "@types/yargs@npm:17.0.19" + dependencies: + "@types/yargs-parser": "*" + checksum: 89a664ba6cef795a5b14a1b2cdc0e2a943cd654e61cc4286b6a704b944051bc30b0d7fec249dd2685cb6cfd17fdf0750d60ec69859aa5a5911c48a288284e842 + languageName: node + linkType: hard + "@types/yauzl@npm:^2.9.1": version: 2.9.2 resolution: "@types/yauzl@npm:2.9.2" @@ -2004,10 +2577,10 @@ __metadata: languageName: node linkType: hard -"abab@npm:^2.0.3, abab@npm:^2.0.5": - version: 2.0.5 - resolution: "abab@npm:2.0.5" - checksum: 0ec951b46d5418c2c2f923021ec193eaebdb4e802ffd5506286781b454be722a13a8430f98085cd3e204918401d9130ec6cc8f5ae19be315b3a0e857d83196e1 +"abab@npm:^2.0.6": + version: 2.0.6 + resolution: "abab@npm:2.0.6" + checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e languageName: node linkType: hard @@ -2028,13 +2601,13 @@ __metadata: languageName: node linkType: hard -"acorn-globals@npm:^6.0.0": - version: 6.0.0 - resolution: "acorn-globals@npm:6.0.0" +"acorn-globals@npm:^7.0.0": + version: 7.0.1 + resolution: "acorn-globals@npm:7.0.1" dependencies: - acorn: ^7.1.1 - acorn-walk: ^7.1.1 - checksum: 72d95e5b5e585f9acd019b993ab8bbba68bb3cbc9d9b5c1ebb3c2f1fe5981f11deababfb4949f48e6262f9c57878837f5958c0cca396f81023814680ca878042 + acorn: ^8.1.0 + acorn-walk: ^8.0.2 + checksum: 2a2998a547af6d0db5f0cdb90acaa7c3cbca6709010e02121fb8b8617c0fbd8bab0b869579903fde358ac78454356a14fadcc1a672ecb97b04b1c2ccba955ce8 languageName: node linkType: hard @@ -2056,21 +2629,14 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^7.1.1": - version: 7.2.0 - resolution: "acorn-walk@npm:7.2.0" - checksum: 9252158a79b9d92f1bc0dd6acc0fcfb87a67339e84bcc301bb33d6078936d27e35d606b4d35626d2962cd43c256d6f27717e70cbe15c04fff999ab0b2260b21f - languageName: node - linkType: hard - -"acorn-walk@npm:^8.1.1": +"acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.1.1": version: 8.2.0 resolution: "acorn-walk@npm:8.2.0" checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 languageName: node linkType: hard -"acorn@npm:^7.1.1, acorn@npm:^7.4.0": +"acorn@npm:^7.4.0": version: 7.4.1 resolution: "acorn@npm:7.4.1" bin: @@ -2079,21 +2645,21 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.2.4, acorn@npm:^8.4.1": - version: 8.5.0 - resolution: "acorn@npm:8.5.0" +"acorn@npm:^8.1.0, acorn@npm:^8.5.0, acorn@npm:^8.8.1": + version: 8.8.1 + resolution: "acorn@npm:8.8.1" bin: acorn: bin/acorn - checksum: 2e4c1dbed3da327684863debf31d341bf8882c6893c506653872c00977eee45675feb9129255d6c74c88424d2b20d889ca6de5b39776e5e3cccfc756b3ca1da8 + checksum: 4079b67283b94935157698831967642f24a075c52ce3feaaaafe095776dfbe15d86a1b33b1e53860fc0d062ed6c83f4284a5c87c85b9ad51853a01173da6097f languageName: node linkType: hard -"acorn@npm:^8.5.0": - version: 8.8.1 - resolution: "acorn@npm:8.8.1" +"acorn@npm:^8.4.1": + version: 8.5.0 + resolution: "acorn@npm:8.5.0" bin: acorn: bin/acorn - checksum: 4079b67283b94935157698831967642f24a075c52ce3feaaaafe095776dfbe15d86a1b33b1e53860fc0d062ed6c83f4284a5c87c85b9ad51853a01173da6097f + checksum: 2e4c1dbed3da327684863debf31d341bf8882c6893c506653872c00977eee45675feb9129255d6c74c88424d2b20d889ca6de5b39776e5e3cccfc756b3ca1da8 languageName: node linkType: hard @@ -2298,7 +2864,7 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^4.0.2, aria-query@npm:^4.2.2": +"aria-query@npm:^4.0.2": version: 4.2.2 resolution: "aria-query@npm:4.2.2" dependencies: @@ -2452,7 +3018,7 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^26.0.1, babel-jest@npm:^26.6.3": +"babel-jest@npm:^26.0.1": version: 26.6.3 resolution: "babel-jest@npm:26.6.3" dependencies: @@ -2470,6 +3036,23 @@ __metadata: languageName: node linkType: hard +"babel-jest@npm:^29.3.1": + version: 29.3.1 + resolution: "babel-jest@npm:29.3.1" + dependencies: + "@jest/transform": ^29.3.1 + "@types/babel__core": ^7.1.14 + babel-plugin-istanbul: ^6.1.1 + babel-preset-jest: ^29.2.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + slash: ^3.0.0 + peerDependencies: + "@babel/core": ^7.8.0 + checksum: 793848238a771a931ddeb5930b9ec8ab800522ac8d64933665698f4a39603d157e572e20b57d79610277e1df88d3ee82b180d59a21f3570388f602beeb38a595 + languageName: node + linkType: hard + "babel-plugin-dynamic-import-node@npm:^2.3.3": version: 2.3.3 resolution: "babel-plugin-dynamic-import-node@npm:2.3.3" @@ -2492,6 +3075,19 @@ __metadata: languageName: node linkType: hard +"babel-plugin-istanbul@npm:^6.1.1": + version: 6.1.1 + resolution: "babel-plugin-istanbul@npm:6.1.1" + dependencies: + "@babel/helper-plugin-utils": ^7.0.0 + "@istanbuljs/load-nyc-config": ^1.0.0 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-instrument: ^5.0.4 + test-exclude: ^6.0.0 + checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a + languageName: node + linkType: hard + "babel-plugin-jest-hoist@npm:^26.6.2": version: 26.6.2 resolution: "babel-plugin-jest-hoist@npm:26.6.2" @@ -2504,6 +3100,18 @@ __metadata: languageName: node linkType: hard +"babel-plugin-jest-hoist@npm:^29.2.0": + version: 29.2.0 + resolution: "babel-plugin-jest-hoist@npm:29.2.0" + dependencies: + "@babel/template": ^7.3.3 + "@babel/types": ^7.3.3 + "@types/babel__core": ^7.1.14 + "@types/babel__traverse": ^7.0.6 + checksum: 368d271ceae491ae6b96cd691434859ea589fbe5fd5aead7660df75d02394077273c6442f61f390e9347adffab57a32b564d0fabcf1c53c4b83cd426cb644072 + languageName: node + linkType: hard + "babel-preset-current-node-syntax@npm:^1.0.0": version: 1.0.1 resolution: "babel-preset-current-node-syntax@npm:1.0.1" @@ -2538,6 +3146,18 @@ __metadata: languageName: node linkType: hard +"babel-preset-jest@npm:^29.2.0": + version: 29.2.0 + resolution: "babel-preset-jest@npm:29.2.0" + dependencies: + babel-plugin-jest-hoist: ^29.2.0 + babel-preset-current-node-syntax: ^1.0.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 1b09a2db968c36e064daf98082cfffa39c849b63055112ddc56fc2551fd0d4783897265775b1d2f8a257960a3339745de92e74feb01bad86d41c4cecbfa854fc + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -2597,7 +3217,7 @@ __metadata: http-server: ^13.0.2 puppeteer: ^10.4.0 ramda: ^0.27.1 - react: ^18.1.0 + react: 18.1.0 react-dom: ^18.1.0 ts-loader: ^9.2.5 ts-node: ^10.3.1 @@ -2702,13 +3322,6 @@ __metadata: languageName: node linkType: hard -"browser-process-hrtime@npm:^1.0.0": - version: 1.0.0 - resolution: "browser-process-hrtime@npm:1.0.0" - checksum: e30f868cdb770b1201afb714ad1575dd86366b6e861900884665fb627109b3cc757c40067d3bfee1ff2a29c835257ea30725a8018a9afd02ac1c24b408b1e45f - languageName: node - linkType: hard - "browserslist@npm:^4.14.5": version: 4.17.4 resolution: "browserslist@npm:4.17.4" @@ -2739,6 +3352,20 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.21.3": + version: 4.21.4 + resolution: "browserslist@npm:4.21.4" + dependencies: + caniuse-lite: ^1.0.30001400 + electron-to-chromium: ^1.4.251 + node-releases: ^2.0.6 + update-browserslist-db: ^1.0.9 + bin: + browserslist: cli.js + checksum: 4af3793704dbb4615bcd29059ab472344dc7961c8680aa6c4bb84f05340e14038d06a5aead58724eae69455b8fade8b8c69f1638016e87e5578969d74c078b79 + languageName: node + linkType: hard + "bser@npm:2.1.1": version: 2.1.1 resolution: "bser@npm:2.1.1" @@ -2870,17 +3497,17 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": +"camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b languageName: node linkType: hard -"camelcase@npm:^6.0.0": - version: 6.2.0 - resolution: "camelcase@npm:6.2.0" - checksum: 8335cfd0ecc472eae685896a42afd8c9dacd193a91f569120b931c87deb053a1ba82102031b9b48a4dbc1d18066caeacf2e4ace8c3c7f0d02936d348dc0b5a87 +"camelcase@npm:^6.2.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d languageName: node linkType: hard @@ -2898,6 +3525,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001400": + version: 1.0.30001445 + resolution: "caniuse-lite@npm:1.0.30001445" + checksum: f98ca67829c3c52af5af0a62b8510432b2ad9594437d24ad460a6eb1a23d93e7a31631b1f550fbbe482ad05c467aa00da710a41699eb13d1f246d7db4147ab79 + languageName: node + linkType: hard + "capture-exit@npm:^2.0.0": version: 2.0.0 resolution: "capture-exit@npm:2.0.0" @@ -2992,10 +3626,17 @@ __metadata: languageName: node linkType: hard -"cjs-module-lexer@npm:^0.6.0": - version: 0.6.0 - resolution: "cjs-module-lexer@npm:0.6.0" - checksum: 445b039607efd74561d7db8d0867031c8b6a69f25e83fdd861b0fa1fbc11f12de057ba1db80637f3c9016774354092af5325eebb90505d65ccc5389cae09d1fd +"ci-info@npm:^3.2.0": + version: 3.7.1 + resolution: "ci-info@npm:3.7.1" + checksum: 72d93d5101ea1c186511277fbd8d06ae8a6e028cc2fb94361e92bf735b39c5ebd192e8d15a66ff8c4e3ed569f87c2f844e96f90e141b2de5c649f77ec34ff601 + languageName: node + linkType: hard + +"cjs-module-lexer@npm:^1.0.0": + version: 1.2.2 + resolution: "cjs-module-lexer@npm:1.2.2" + checksum: 977f3f042bd4f08e368c890d91eecfbc4f91da0bc009a3c557bc4dfbf32022ad1141244ac1178d44de70fc9f3dea7add7cd9a658a34b9fae98a55d8f92331ce5 languageName: node linkType: hard @@ -3027,14 +3668,14 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^6.0.0": - version: 6.0.0 - resolution: "cliui@npm:6.0.0" +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" dependencies: string-width: ^4.2.0 - strip-ansi: ^6.0.0 - wrap-ansi: ^6.2.0 - checksum: 4fcfd26d292c9f00238117f39fc797608292ae36bac2168cfee4c85923817d0607fe21b3329a8621e01aedf512c99b7eaa60e363a671ffd378df6649fb48ae42 + strip-ansi: ^6.0.1 + wrap-ansi: ^7.0.0 + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 languageName: node linkType: hard @@ -3213,7 +3854,7 @@ __metadata: http-server: ^13.0.2 puppeteer: ^10.4.0 ramda: ^0.27.1 - react: ^18.1.0 + react: 18.1.0 react-dom: ^18.1.0 ts-loader: ^9.2.5 ts-node: ^10.3.1 @@ -3263,6 +3904,13 @@ __metadata: languageName: node linkType: hard +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + "cookie-signature@npm:1.0.6": version: 1.0.6 resolution: "cookie-signature@npm:1.0.6" @@ -3337,7 +3985,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": +"cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -3375,21 +4023,10 @@ __metadata: languageName: node linkType: hard -"css@npm:^3.0.0": - version: 3.0.0 - resolution: "css@npm:3.0.0" - dependencies: - inherits: ^2.0.4 - source-map: ^0.6.1 - source-map-resolve: ^0.6.0 - checksum: 4273ac816ddf99b99acb9c1d1a27d86d266a533cc01118369d941d8e8a78277a83cad3315e267a398c509d930fbb86504e193ea1ebc620a4a4212e06fe76e8be - languageName: node - linkType: hard - -"cssom@npm:^0.4.4": - version: 0.4.4 - resolution: "cssom@npm:0.4.4" - checksum: e3bc1076e7ee4213d4fef05e7ae03bfa83dc05f32611d8edc341f4ecc3d9647b89c8245474c7dd2cdcdb797a27c462e99da7ad00a34399694559f763478ff53f +"cssom@npm:^0.5.0": + version: 0.5.0 + resolution: "cssom@npm:0.5.0" + checksum: 823471aa30091c59e0a305927c30e7768939b6af70405808f8d2ce1ca778cddcb24722717392438329d1691f9a87cb0183b64b8d779b56a961546d54854fde01 languageName: node linkType: hard @@ -3416,14 +4053,14 @@ __metadata: languageName: node linkType: hard -"data-urls@npm:^2.0.0": - version: 2.0.0 - resolution: "data-urls@npm:2.0.0" +"data-urls@npm:^3.0.2": + version: 3.0.2 + resolution: "data-urls@npm:3.0.2" dependencies: - abab: ^2.0.3 - whatwg-mimetype: ^2.3.0 - whatwg-url: ^8.0.0 - checksum: 97caf828aac25e25e04ba6869db0f99c75e6859bb5b424ada28d3e7841941ebf08ddff3c1b1bb4585986bd507a5d54c2a716853ea6cb98af877400e637393e71 + abab: ^2.0.6 + whatwg-mimetype: ^3.0.0 + whatwg-url: ^11.0.0 + checksum: 033fc3dd0fba6d24bc9a024ddcf9923691dd24f90a3d26f6545d6a2f71ec6956f93462f2cdf2183cc46f10dc01ed3bcb36731a8208456eb1a08147e571fe2a76 languageName: node linkType: hard @@ -3481,17 +4118,10 @@ __metadata: languageName: node linkType: hard -"decamelize@npm:^1.2.0": - version: 1.2.0 - resolution: "decamelize@npm:1.2.0" - checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa - languageName: node - linkType: hard - -"decimal.js@npm:^10.2.1": - version: 10.3.1 - resolution: "decimal.js@npm:10.3.1" - checksum: 0351ac9f05fe050f23227aa6a4573bee2d58fa7378fcf28d969a8c789525032effb488a90320fd3fe86a66e17b4bc507d811b15eada5b7f0e7ec5d2af4c24a59 +"decimal.js@npm:^10.4.2": + version: 10.4.3 + resolution: "decimal.js@npm:10.4.3" + checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae languageName: node linkType: hard @@ -3502,6 +4132,13 @@ __metadata: languageName: node linkType: hard +"dedent@npm:^0.7.0": + version: 0.7.0 + resolution: "dedent@npm:0.7.0" + checksum: 87de191050d9a40dd70cad01159a0bcf05ecb59750951242070b6abf9569088684880d00ba92a955b4058804f16eeaf91d604f283929b4f614d181cd7ae633d2 + languageName: node + linkType: hard + "deep-equal@npm:^1.0.1": version: 1.1.1 resolution: "deep-equal@npm:1.1.1" @@ -3658,13 +4295,6 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^26.6.2": - version: 26.6.2 - resolution: "diff-sequences@npm:26.6.2" - checksum: 79af871776ef149a7ff3345d6b1bf37fe6e81f68632aa5542787851f6f60fba19b0be22fdd1e06046f56ae7382763ccfe94a982c39ee72bd107aef435ecbc0cf - languageName: node - linkType: hard - "diff-sequences@npm:^27.0.6": version: 27.0.6 resolution: "diff-sequences@npm:27.0.6" @@ -3672,6 +4302,13 @@ __metadata: languageName: node linkType: hard +"diff-sequences@npm:^29.3.1": + version: 29.3.1 + resolution: "diff-sequences@npm:29.3.1" + checksum: 8edab8c383355022e470779a099852d595dd856f9f5bd7af24f177e74138a668932268b4c4fd54096eed643861575c3652d4ecbbb1a9d710488286aed3ffa443 + languageName: node + linkType: hard + "diff@npm:^4.0.1": version: 4.0.2 resolution: "diff@npm:4.0.2" @@ -3739,7 +4376,7 @@ __metadata: languageName: node linkType: hard -"dom-accessibility-api@npm:^0.5.4, dom-accessibility-api@npm:^0.5.6": +"dom-accessibility-api@npm:^0.5.6": version: 0.5.8 resolution: "dom-accessibility-api@npm:0.5.8" checksum: 6ede8578a7e6123f2eb27c04ff4c7947cb1362f73105c2cf75b700d94ff82740f9566025357f46ced4ae9fa2a6f6f101f4b910bb308ab516e247ed77951f46e5 @@ -3780,12 +4417,12 @@ __metadata: languageName: node linkType: hard -"domexception@npm:^2.0.1": - version: 2.0.1 - resolution: "domexception@npm:2.0.1" +"domexception@npm:^4.0.0": + version: 4.0.0 + resolution: "domexception@npm:4.0.0" dependencies: - webidl-conversions: ^5.0.0 - checksum: d638e9cb05c52999f1b2eb87c374b03311ea5b1d69c2f875bc92da73e17db60c12142b45c950228642ff7f845c536b65305483350d080df59003a653da80b691 + webidl-conversions: ^7.0.0 + checksum: ddbc1268edf33a8ba02ccc596735ede80375ee0cf124b30d2f05df5b464ba78ef4f49889b6391df4a04954e63d42d5631c7fcf8b1c4f12bc531252977a5f13d5 languageName: node linkType: hard @@ -3840,10 +4477,17 @@ __metadata: languageName: node linkType: hard -"emittery@npm:^0.7.1": - version: 0.7.2 - resolution: "emittery@npm:0.7.2" - checksum: 908cd933d48a9bcb58ddf39e9a7d4ba1e049de392ccbef010102539a636e03cea2b28218331b7ede41de8165d9ed7f148851c5112ebd2e943117c0f61eff5f10 +"electron-to-chromium@npm:^1.4.251": + version: 1.4.284 + resolution: "electron-to-chromium@npm:1.4.284" + checksum: be496e9dca6509dbdbb54dc32146fc99f8eb716d28a7ee8ccd3eba0066561df36fc51418d8bd7cf5a5891810bf56c0def3418e74248f51ea4a843d423603d10a + languageName: node + linkType: hard + +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 2b089ab6306f38feaabf4f6f02792f9ec85fc054fda79f44f6790e61bbf6bc4e1616afb9b232e0c5ec5289a8a452f79bfa6d905a6fd64e94b49981f0934001c6 languageName: node linkType: hard @@ -3915,6 +4559,13 @@ __metadata: languageName: node linkType: hard +"entities@npm:^4.4.0": + version: 4.4.0 + resolution: "entities@npm:4.4.0" + checksum: 84d250329f4b56b40fa93ed067b194db21e8815e4eb9b59f43a086f0ecd342814f6bc483de8a77da5d64e0f626033192b1b4f1792232a7ea6b970ebe0f3187c2 + languageName: node + linkType: hard + "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -4433,23 +5084,6 @@ __metadata: languageName: node linkType: hard -"execa@npm:^4.0.0": - version: 4.1.0 - resolution: "execa@npm:4.1.0" - dependencies: - cross-spawn: ^7.0.0 - get-stream: ^5.0.0 - human-signals: ^1.1.1 - is-stream: ^2.0.0 - merge-stream: ^2.0.0 - npm-run-path: ^4.0.0 - onetime: ^5.1.0 - signal-exit: ^3.0.2 - strip-final-newline: ^2.0.0 - checksum: e30d298934d9c52f90f3847704fd8224e849a081ab2b517bbc02f5f7732c24e56a21f14cb96a08256deffeb2d12b2b7cb7e2b014a12fb36f8d3357e06417ed55 - languageName: node - linkType: hard - "execa@npm:^5.0.0": version: 5.1.1 resolution: "execa@npm:5.1.1" @@ -4489,17 +5123,16 @@ __metadata: languageName: node linkType: hard -"expect@npm:^26.6.2": - version: 26.6.2 - resolution: "expect@npm:26.6.2" +"expect@npm:^29.3.1": + version: 29.3.1 + resolution: "expect@npm:29.3.1" dependencies: - "@jest/types": ^26.6.2 - ansi-styles: ^4.0.0 - jest-get-type: ^26.3.0 - jest-matcher-utils: ^26.6.2 - jest-message-util: ^26.6.2 - jest-regex-util: ^26.0.0 - checksum: 79a9b888c5c6d37d11f2cb76def6cf1dc8ff098d38662ee20c9f2ee0da67e9a93435f2327854b2e7554732153870621843e7f83e8cefb1250447ee2bc39883a4 + "@jest/expect-utils": ^29.3.1 + jest-get-type: ^29.2.0 + jest-matcher-utils: ^29.3.1 + jest-message-util: ^29.3.1 + jest-util: ^29.3.1 + checksum: e9588c2a430b558b9a3dc72d4ad05f36b047cb477bc6a7bb9cfeef7614fe7e5edbab424c2c0ce82739ee21ecbbbd24596259528209f84cd72500cc612d910d30 languageName: node linkType: hard @@ -4633,7 +5266,7 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:^2.0.0": +"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb @@ -4788,14 +5421,14 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^3.0.0": - version: 3.0.1 - resolution: "form-data@npm:3.0.1" +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" dependencies: asynckit: ^0.4.0 combined-stream: ^1.0.8 mime-types: ^2.1.12 - checksum: b019e8d35c8afc14a2bd8a7a92fa4f525a4726b6d5a9740e8d2623c30e308fbb58dc8469f90415a856698933c8479b01646a9dff33c87cc4e76d72aedbbf860d + checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c languageName: node linkType: hard @@ -4863,7 +5496,7 @@ __metadata: languageName: node linkType: hard -"fsevents@^2.1.2, fsevents@~2.3.2": +"fsevents@^2.1.2, fsevents@npm:^2.3.2, fsevents@~2.3.2": version: 2.3.2 resolution: "fsevents@npm:2.3.2" dependencies: @@ -4873,7 +5506,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@^2.1.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": +"fsevents@patch:fsevents@^2.1.2#~builtin, fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": version: 2.3.2 resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=18f3a7" dependencies: @@ -4938,7 +5571,7 @@ __metadata: languageName: node linkType: hard -"get-caller-file@npm:^2.0.1": +"get-caller-file@npm:^2.0.5": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 @@ -4990,7 +5623,7 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^5.0.0, get-stream@npm:^5.1.0": +"get-stream@npm:^5.1.0": version: 5.2.0 resolution: "get-stream@npm:5.2.0" dependencies: @@ -5046,7 +5679,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.7": +"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.7": version: 7.2.0 resolution: "glob@npm:7.2.0" dependencies: @@ -5151,10 +5784,10 @@ __metadata: languageName: node linkType: hard -"growly@npm:^1.3.0": - version: 1.3.0 - resolution: "growly@npm:1.3.0" - checksum: 53cdecd4c16d7d9154a9061a9ccb87d602e957502ca69b529d7d1b2436c2c0b700ec544fc6b3e4cd115d59b81e62e44ce86bd0521403b579d3a2a97d7ce72a44 +"graceful-fs@npm:^4.2.9": + version: 4.2.10 + resolution: "graceful-fs@npm:4.2.10" + checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da languageName: node linkType: hard @@ -5289,13 +5922,6 @@ __metadata: languageName: node linkType: hard -"hosted-git-info@npm:^2.1.4": - version: 2.8.9 - resolution: "hosted-git-info@npm:2.8.9" - checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd - languageName: node - linkType: hard - "hpack.js@npm:^2.1.6": version: 2.1.6 resolution: "hpack.js@npm:2.1.6" @@ -5308,12 +5934,12 @@ __metadata: languageName: node linkType: hard -"html-encoding-sniffer@npm:^2.0.1": - version: 2.0.1 - resolution: "html-encoding-sniffer@npm:2.0.1" +"html-encoding-sniffer@npm:^3.0.0": + version: 3.0.0 + resolution: "html-encoding-sniffer@npm:3.0.0" dependencies: - whatwg-encoding: ^1.0.5 - checksum: bf30cce461015ed7e365736fcd6a3063c7bc016a91f74398ef6158886970a96333938f7c02417ab3c12aa82e3e53b40822145facccb9ddfbcdc15a879ae4d7ba + whatwg-encoding: ^2.0.0 + checksum: 8d806aa00487e279e5ccb573366a951a9f68f65c90298eac9c3a2b440a7ffe46615aff2995a2f61c6746c639234e6179a97e18ca5ccbbf93d3725ef2099a4502 languageName: node linkType: hard @@ -5445,6 +6071,17 @@ __metadata: languageName: node linkType: hard +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": 2 + agent-base: 6 + debug: 4 + checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 + languageName: node + linkType: hard + "http-proxy-middleware@npm:^2.0.0": version: 2.0.1 resolution: "http-proxy-middleware@npm:2.0.1" @@ -5501,10 +6138,13 @@ __metadata: languageName: node linkType: hard -"human-signals@npm:^1.1.1": - version: 1.1.1 - resolution: "human-signals@npm:1.1.1" - checksum: d587647c9e8ec24e02821b6be7de5a0fc37f591f6c4e319b3054b43fd4c35a70a94c46fc74d8c1a43c47fde157d23acd7421f375e1c1365b09a16835b8300205 +"https-proxy-agent@npm:^5.0.1": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 languageName: node linkType: hard @@ -5533,7 +6173,7 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:^0.6.2": +"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" dependencies: @@ -6172,7 +6812,14 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-instrument@npm:^4.0.0, istanbul-lib-instrument@npm:^4.0.3": +"istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.0 + resolution: "istanbul-lib-coverage@npm:3.2.0" + checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^4.0.0": version: 4.0.3 resolution: "istanbul-lib-instrument@npm:4.0.3" dependencies: @@ -6184,6 +6831,19 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": + version: 5.2.1 + resolution: "istanbul-lib-instrument@npm:5.2.1" + dependencies: + "@babel/core": ^7.12.3 + "@babel/parser": ^7.14.7 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-coverage: ^3.2.0 + semver: ^6.3.0 + checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 + languageName: node + linkType: hard + "istanbul-lib-report@npm:^3.0.0": version: 3.0.0 resolution: "istanbul-lib-report@npm:3.0.0" @@ -6206,90 +6866,115 @@ __metadata: languageName: node linkType: hard -"istanbul-reports@npm:^3.0.2": - version: 3.0.3 - resolution: "istanbul-reports@npm:3.0.3" +"istanbul-reports@npm:^3.1.3": + version: 3.1.5 + resolution: "istanbul-reports@npm:3.1.5" dependencies: html-escaper: ^2.0.0 istanbul-lib-report: ^3.0.0 - checksum: 56b54e82ac2121ecb79664924eec2987494ef7b19333d686d6b72686ab411172e9c93f8d27d8be7e15ee468de25749f8b1b6b093a73697f443751795954212aa + checksum: 7867228f83ed39477b188ea07e7ccb9b4f5320b6f73d1db93a0981b7414fa4ef72d3f80c4692c442f90fc250d9406e71d8d7ab65bb615cb334e6292b73192b89 languageName: node linkType: hard -"jest-changed-files@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-changed-files@npm:26.6.2" +"jest-changed-files@npm:^29.2.0": + version: 29.2.0 + resolution: "jest-changed-files@npm:29.2.0" dependencies: - "@jest/types": ^26.6.2 - execa: ^4.0.0 - throat: ^5.0.0 - checksum: 8c405f5ff905ee69ace9fd39355233206e3e233badf6a3f3b27e45bbf0a46d86943430be2e080d25b1e085f4231b9b3b27c94317aa04116efb40b592184066f4 + execa: ^5.0.0 + p-limit: ^3.1.0 + checksum: 8ad8290324db1de2ee3c9443d3e3fbfdcb6d72ec7054c5796be2854b2bc239dea38a7c797c8c9c2bd959f539d44305790f2f75b18f3046b04317ed77c7480cb1 languageName: node linkType: hard -"jest-cli@npm:^26.6.3": - version: 26.6.3 - resolution: "jest-cli@npm:26.6.3" +"jest-circus@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-circus@npm:29.3.1" dependencies: - "@jest/core": ^26.6.3 - "@jest/test-result": ^26.6.2 - "@jest/types": ^26.6.2 + "@jest/environment": ^29.3.1 + "@jest/expect": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/types": ^29.3.1 + "@types/node": "*" + chalk: ^4.0.0 + co: ^4.6.0 + dedent: ^0.7.0 + is-generator-fn: ^2.0.0 + jest-each: ^29.3.1 + jest-matcher-utils: ^29.3.1 + jest-message-util: ^29.3.1 + jest-runtime: ^29.3.1 + jest-snapshot: ^29.3.1 + jest-util: ^29.3.1 + p-limit: ^3.1.0 + pretty-format: ^29.3.1 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: 125710debd998ad9693893e7c1235e271b79f104033b8169d82afe0bc0d883f8f5245feef87adcbb22ad27ff749fd001aa998d11a132774b03b4e2b8af77d5d8 + languageName: node + linkType: hard + +"jest-cli@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-cli@npm:29.3.1" + dependencies: + "@jest/core": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/types": ^29.3.1 chalk: ^4.0.0 exit: ^0.1.2 - graceful-fs: ^4.2.4 + graceful-fs: ^4.2.9 import-local: ^3.0.2 - is-ci: ^2.0.0 - jest-config: ^26.6.3 - jest-util: ^26.6.2 - jest-validate: ^26.6.2 + jest-config: ^29.3.1 + jest-util: ^29.3.1 + jest-validate: ^29.3.1 prompts: ^2.0.1 - yargs: ^15.4.1 + yargs: ^17.3.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true bin: jest: bin/jest.js - checksum: c8554147be756f09f5566974f0026485f78742e8642d2723f8fbee5746f50f44fb72b17aad181226655a8446d3ecc8ad8ed0a11a8a55686fa2b9c10d85700121 + checksum: 829895d33060042443bd1e9e87eb68993773d74f2c8a9b863acf53cece39d227ae0e7d76df2e9c5934c414bdf70ce398a34b3122cfe22164acb2499a74d7288d languageName: node linkType: hard -"jest-config@npm:^26.6.3": - version: 26.6.3 - resolution: "jest-config@npm:26.6.3" +"jest-config@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-config@npm:29.3.1" dependencies: - "@babel/core": ^7.1.0 - "@jest/test-sequencer": ^26.6.3 - "@jest/types": ^26.6.2 - babel-jest: ^26.6.3 + "@babel/core": ^7.11.6 + "@jest/test-sequencer": ^29.3.1 + "@jest/types": ^29.3.1 + babel-jest: ^29.3.1 chalk: ^4.0.0 + ci-info: ^3.2.0 deepmerge: ^4.2.2 - glob: ^7.1.1 - graceful-fs: ^4.2.4 - jest-environment-jsdom: ^26.6.2 - jest-environment-node: ^26.6.2 - jest-get-type: ^26.3.0 - jest-jasmine2: ^26.6.3 - jest-regex-util: ^26.0.0 - jest-resolve: ^26.6.2 - jest-util: ^26.6.2 - jest-validate: ^26.6.2 - micromatch: ^4.0.2 - pretty-format: ^26.6.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-circus: ^29.3.1 + jest-environment-node: ^29.3.1 + jest-get-type: ^29.2.0 + jest-regex-util: ^29.2.0 + jest-resolve: ^29.3.1 + jest-runner: ^29.3.1 + jest-util: ^29.3.1 + jest-validate: ^29.3.1 + micromatch: ^4.0.4 + parse-json: ^5.2.0 + pretty-format: ^29.3.1 + slash: ^3.0.0 + strip-json-comments: ^3.1.1 peerDependencies: + "@types/node": "*" ts-node: ">=9.0.0" peerDependenciesMeta: + "@types/node": + optional: true ts-node: optional: true - checksum: 303c798582d3c5d4b4e6ab8a4d91a83ded28e4ebbc0bcfc1ad271f9864437ef5409b7c7773010143811bc8176b0695c096717b91419c6484b56dcc032560a74b - languageName: node - linkType: hard - -"jest-diff@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-diff@npm:26.6.2" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^26.6.2 - jest-get-type: ^26.3.0 - pretty-format: ^26.6.2 - checksum: d00d297f31e1ac0252127089892432caa7a11c69bde29cf3bb6c7a839c8afdb95cf1fd401f9df16a4422745da2e6a5d94b428b30666a2540c38e1c5699915c2d + checksum: 6e663f04ae1024a53a4c2c744499b4408ca9a8b74381dd5e31b11bb3c7393311ecff0fb61b06287768709eb2c9e5a2fd166d258f5a9123abbb4c5812f99c12fe languageName: node linkType: hard @@ -6305,61 +6990,72 @@ __metadata: languageName: node linkType: hard -"jest-docblock@npm:^26.0.0": - version: 26.0.0 - resolution: "jest-docblock@npm:26.0.0" +"jest-diff@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-diff@npm:29.3.1" dependencies: - detect-newline: ^3.0.0 - checksum: e03ef104ee8c571335e6fa394b8fc8d2bd87eec9fe8b3d7d9aac056ada7de288f37ee8ac4922bb3a4222ac304db975d8832d5abc85486092866c534a16847cd5 + chalk: ^4.0.0 + diff-sequences: ^29.3.1 + jest-get-type: ^29.2.0 + pretty-format: ^29.3.1 + checksum: ac5c09745f2b1897e6f53216acaf6ed44fc4faed8e8df053ff4ac3db5d2a1d06a17b876e49faaa15c8a7a26f5671bcbed0a93781dcc2835f781c79a716a591a9 languageName: node linkType: hard -"jest-each@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-each@npm:26.6.2" +"jest-docblock@npm:^29.2.0": + version: 29.2.0 + resolution: "jest-docblock@npm:29.2.0" dependencies: - "@jest/types": ^26.6.2 - chalk: ^4.0.0 - jest-get-type: ^26.3.0 - jest-util: ^26.6.2 - pretty-format: ^26.6.2 - checksum: 4e00ea4667e4fe015b894dc698cce0ae695cf458e021e5da62d4a5b052cd2c0a878da93f8c97cbdde60bcecf70982e8d3a7a5d63e1588f59531cc797a18c39ef + detect-newline: ^3.0.0 + checksum: b3f1227b7d73fc9e4952180303475cf337b36fa65c7f730ac92f0580f1c08439983262fee21cf3dba11429aa251b4eee1e3bc74796c5777116b400d78f9d2bbe languageName: node linkType: hard -"jest-environment-jsdom@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-environment-jsdom@npm:26.6.2" +"jest-each@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-each@npm:29.3.1" dependencies: - "@jest/environment": ^26.6.2 - "@jest/fake-timers": ^26.6.2 - "@jest/types": ^26.6.2 - "@types/node": "*" - jest-mock: ^26.6.2 - jest-util: ^26.6.2 - jsdom: ^16.4.0 - checksum: 8af9ffdf1b147362a19032bfe9ed51b709d43c74dc4b1c45e56d721808bf6cabdca8c226855b55a985ea196ce51cdb171bfe420ceec3daa2d13818d5c1915890 + "@jest/types": ^29.3.1 + chalk: ^4.0.0 + jest-get-type: ^29.2.0 + jest-util: ^29.3.1 + pretty-format: ^29.3.1 + checksum: 16d51ef8f96fba44a3479f1c6f7672027e3b39236dc4e41217c38fe60a3b66b022ffcee72f8835a442f7a8a0a65980a93fb8e73a9782d192452526e442ad049a languageName: node linkType: hard -"jest-environment-node@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-environment-node@npm:26.6.2" +"jest-environment-jsdom@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-environment-jsdom@npm:29.3.1" dependencies: - "@jest/environment": ^26.6.2 - "@jest/fake-timers": ^26.6.2 - "@jest/types": ^26.6.2 + "@jest/environment": ^29.3.1 + "@jest/fake-timers": ^29.3.1 + "@jest/types": ^29.3.1 + "@types/jsdom": ^20.0.0 "@types/node": "*" - jest-mock: ^26.6.2 - jest-util: ^26.6.2 - checksum: 0b69b481e6d6f2350ed241c2dabc70b0b1f3a00f9a410b7dad97c8ab38e88026acf7445ca663eb314f46ff50acee0133100b1006bf4ebda5298ffb02763a6861 + jest-mock: ^29.3.1 + jest-util: ^29.3.1 + jsdom: ^20.0.0 + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: 91b04ed02b2275c3a47740e20c2691f67c4295e17174c8ccd3a71fe77707239e487506bd157279b4257ce1be0a8c2be377817ee85689966a9e604bb6ef1199f0 languageName: node linkType: hard -"jest-get-type@npm:^26.3.0": - version: 26.3.0 - resolution: "jest-get-type@npm:26.3.0" - checksum: 1cc6465ae4f5e880be22ba52fd270fa64c21994915f81b41f8f7553a7957dd8e077cc8d03035de9412e2d739f8bad6a032ebb5dab5805692a5fb9e20dd4ea666 +"jest-environment-node@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-environment-node@npm:29.3.1" + dependencies: + "@jest/environment": ^29.3.1 + "@jest/fake-timers": ^29.3.1 + "@jest/types": ^29.3.1 + "@types/node": "*" + jest-mock: ^29.3.1 + jest-util: ^29.3.1 + checksum: 16d4854bd2d35501bd4862ca069baf27ce9f5fd7642fdcab9d2dab49acd28c082d0c8882bf2bb28ed7bbaada486da577c814c9688ddc62d1d9f74a954fde996a languageName: node linkType: hard @@ -6370,6 +7066,13 @@ __metadata: languageName: node linkType: hard +"jest-get-type@npm:^29.2.0": + version: 29.2.0 + resolution: "jest-get-type@npm:29.2.0" + checksum: e396fd880a30d08940ed8a8e43cd4595db1b8ff09649018eb358ca701811137556bae82626af73459e3c0f8c5e972ed1e57fd3b1537b13a260893dac60a90942 + languageName: node + linkType: hard + "jest-haste-map@npm:^26.6.2": version: 26.6.2 resolution: "jest-haste-map@npm:26.6.2" @@ -6395,29 +7098,26 @@ __metadata: languageName: node linkType: hard -"jest-jasmine2@npm:^26.6.3": - version: 26.6.3 - resolution: "jest-jasmine2@npm:26.6.3" +"jest-haste-map@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-haste-map@npm:29.3.1" dependencies: - "@babel/traverse": ^7.1.0 - "@jest/environment": ^26.6.2 - "@jest/source-map": ^26.6.2 - "@jest/test-result": ^26.6.2 - "@jest/types": ^26.6.2 + "@jest/types": ^29.3.1 + "@types/graceful-fs": ^4.1.3 "@types/node": "*" - chalk: ^4.0.0 - co: ^4.6.0 - expect: ^26.6.2 - is-generator-fn: ^2.0.0 - jest-each: ^26.6.2 - jest-matcher-utils: ^26.6.2 - jest-message-util: ^26.6.2 - jest-runtime: ^26.6.3 - jest-snapshot: ^26.6.2 - jest-util: ^26.6.2 - pretty-format: ^26.6.2 - throat: ^5.0.0 - checksum: 41df0b993ae0cdeb2660fb3d8e88e2dcc83aec6b5c27d85eb233c2d507b546f8dce45fc54898ffbefa48ccc4633f225d0e023fd0979b8f7f2f1626074a69a9a3 + anymatch: ^3.0.3 + fb-watchman: ^2.0.0 + fsevents: ^2.3.2 + graceful-fs: ^4.2.9 + jest-regex-util: ^29.2.0 + jest-util: ^29.3.1 + jest-worker: ^29.3.1 + micromatch: ^4.0.4 + walker: ^1.0.8 + dependenciesMeta: + fsevents: + optional: true + checksum: 97ea26af0c28a2ba568c9c65d06211487bbcd501cb4944f9d55e07fd2b00ad96653ea2cc9033f3d5b7dc1feda33e47ae9cc56b400191ea4533be213c9f82e67c languageName: node linkType: hard @@ -6430,52 +7130,53 @@ __metadata: languageName: node linkType: hard -"jest-leak-detector@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-leak-detector@npm:26.6.2" +"jest-leak-detector@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-leak-detector@npm:29.3.1" dependencies: - jest-get-type: ^26.3.0 - pretty-format: ^26.6.2 - checksum: 364dd4d021347e26c66ba9c09da8a30477f14a3a8a208d2d7d64e4c396db81b85d8cb6b6834bcfc47a61b5938e274553957d11a7de2255f058c9d55d7f8fdfe7 + jest-get-type: ^29.2.0 + pretty-format: ^29.3.1 + checksum: 0dd8ed31ae0b5a3d14f13f567ca8567f2663dd2d540d1e55511d3b3fd7f80a1d075392179674ebe9fab9be0b73678bf4d2f8bbbc0f4bdd52b9815259194da559 languageName: node linkType: hard -"jest-matcher-utils@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-matcher-utils@npm:26.6.2" +"jest-matcher-utils@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-matcher-utils@npm:29.3.1" dependencies: chalk: ^4.0.0 - jest-diff: ^26.6.2 - jest-get-type: ^26.3.0 - pretty-format: ^26.6.2 - checksum: 74d2165c1ac7fe98fe27cd2b5407499478e6b2fe99dd54e26d8ee5c9f5f913bdd7bdc07c7221b9b04df0c15e9be0e866ff3455b03e38cc66c480d9996d6d5405 + jest-diff: ^29.3.1 + jest-get-type: ^29.2.0 + pretty-format: ^29.3.1 + checksum: 311e8d9f1e935216afc7dd8c6acf1fbda67a7415e1afb1bf72757213dfb025c1f2dc5e2c185c08064a35cdc1f2d8e40c57616666774ed1b03e57eb311c20ec77 languageName: node linkType: hard -"jest-message-util@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-message-util@npm:26.6.2" +"jest-message-util@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-message-util@npm:29.3.1" dependencies: - "@babel/code-frame": ^7.0.0 - "@jest/types": ^26.6.2 + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.3.1 "@types/stack-utils": ^2.0.0 chalk: ^4.0.0 - graceful-fs: ^4.2.4 - micromatch: ^4.0.2 - pretty-format: ^26.6.2 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.3.1 slash: ^3.0.0 - stack-utils: ^2.0.2 - checksum: ffe5a715591c41240b9ed4092faf10f3eaf9ddfdf25d257a0c9f903aaa8d9eed5baa7e38016d2ec4f610fd29225e0f5231a91153e087a043e62824972c83d015 + stack-utils: ^2.0.3 + checksum: 15d0a2fca3919eb4570bbf575734780c4b9e22de6aae903c4531b346699f7deba834c6c86fe6e9a83ad17fac0f7935511cf16dce4d71a93a71ebb25f18a6e07b languageName: node linkType: hard -"jest-mock@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-mock@npm:26.6.2" +"jest-mock@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-mock@npm:29.3.1" dependencies: - "@jest/types": ^26.6.2 + "@jest/types": ^29.3.1 "@types/node": "*" - checksum: 6c0fe028ff0cdc87b5d63b9ca749af04cae6c5577aaab234f602e546cae3f4b932adac9d77e6de2abb24955ee00978e1e5d5a861725654e2f9a42317d91fbc1f + jest-util: ^29.3.1 + checksum: 9098852cb2866db4a1a59f9f7581741dfc572f648e9e574a1b187fd69f5f2f6190ad387ede21e139a8b80a6a1343ecc3d6751cd2ae1ae11d7ea9fa1950390fb2 languageName: node linkType: hard @@ -6498,95 +7199,96 @@ __metadata: languageName: node linkType: hard -"jest-resolve-dependencies@npm:^26.6.3": - version: 26.6.3 - resolution: "jest-resolve-dependencies@npm:26.6.3" +"jest-regex-util@npm:^29.2.0": + version: 29.2.0 + resolution: "jest-regex-util@npm:29.2.0" + checksum: 7c533e51c51230dac20c0d7395b19b8366cb022f7c6e08e6bcf2921626840ff90424af4c9b4689f02f0addfc9b071c4cd5f8f7a989298a4c8e0f9c94418ca1c3 + languageName: node + linkType: hard + +"jest-resolve-dependencies@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-resolve-dependencies@npm:29.3.1" dependencies: - "@jest/types": ^26.6.2 - jest-regex-util: ^26.0.0 - jest-snapshot: ^26.6.2 - checksum: 533ea1e271426006ff02c03c9802b108fcd68f2144615b6110ae59f3a0a2cc4a7abb3f44c3c65299c76b3a725d5d8220aaed9c58b79c8c8c508c18699a96e3f7 + jest-regex-util: ^29.2.0 + jest-snapshot: ^29.3.1 + checksum: 6ec4727a87c6e7954e93de9949ab9967b340ee2f07626144c273355f05a2b65fa47eb8dece2d6e5f4fd99cdb893510a3540aa5e14ba443f70b3feb63f6f98982 languageName: node linkType: hard -"jest-resolve@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-resolve@npm:26.6.2" +"jest-resolve@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-resolve@npm:29.3.1" dependencies: - "@jest/types": ^26.6.2 chalk: ^4.0.0 - graceful-fs: ^4.2.4 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.3.1 jest-pnp-resolver: ^1.2.2 - jest-util: ^26.6.2 - read-pkg-up: ^7.0.1 - resolve: ^1.18.1 + jest-util: ^29.3.1 + jest-validate: ^29.3.1 + resolve: ^1.20.0 + resolve.exports: ^1.1.0 slash: ^3.0.0 - checksum: d6264d3f39b098753802a237c8c54f3109f5f3b3b7fa6f8d7aec7dca01b357ddf518ce1c33a68454357c15f48fb3c6026a92b9c4f5d72f07e24e80f04bcc8d58 + checksum: 0dea22ed625e07b8bfee52dea1391d3a4b453c1a0c627a0fa7c22e44bb48e1c289afe6f3c316def70753773f099c4e8f436c7a2cc12fcc6c7dd6da38cba2cd5f languageName: node linkType: hard -"jest-runner@npm:^26.6.3": - version: 26.6.3 - resolution: "jest-runner@npm:26.6.3" +"jest-runner@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-runner@npm:29.3.1" dependencies: - "@jest/console": ^26.6.2 - "@jest/environment": ^26.6.2 - "@jest/test-result": ^26.6.2 - "@jest/types": ^26.6.2 + "@jest/console": ^29.3.1 + "@jest/environment": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" chalk: ^4.0.0 - emittery: ^0.7.1 - exit: ^0.1.2 - graceful-fs: ^4.2.4 - jest-config: ^26.6.3 - jest-docblock: ^26.0.0 - jest-haste-map: ^26.6.2 - jest-leak-detector: ^26.6.2 - jest-message-util: ^26.6.2 - jest-resolve: ^26.6.2 - jest-runtime: ^26.6.3 - jest-util: ^26.6.2 - jest-worker: ^26.6.2 - source-map-support: ^0.5.6 - throat: ^5.0.0 - checksum: ccd69918baa49a5efa45985cf60cfa1fbb1686b32d7a86296b7b55f89684e36d1f08e62598c4b7be7e81f2cf2e245d1a65146ea7bdcaedfa6ed176d3e645d7e2 + emittery: ^0.13.1 + graceful-fs: ^4.2.9 + jest-docblock: ^29.2.0 + jest-environment-node: ^29.3.1 + jest-haste-map: ^29.3.1 + jest-leak-detector: ^29.3.1 + jest-message-util: ^29.3.1 + jest-resolve: ^29.3.1 + jest-runtime: ^29.3.1 + jest-util: ^29.3.1 + jest-watcher: ^29.3.1 + jest-worker: ^29.3.1 + p-limit: ^3.1.0 + source-map-support: 0.5.13 + checksum: 61ad445d8a5f29573332f27a21fc942fb0d2a82bf901a0ea1035bf3bd7f349d1e425f71f54c3a3f89b292a54872c3248d395a2829d987f26b6025b15530ea5d2 languageName: node linkType: hard -"jest-runtime@npm:^26.6.3": - version: 26.6.3 - resolution: "jest-runtime@npm:26.6.3" - dependencies: - "@jest/console": ^26.6.2 - "@jest/environment": ^26.6.2 - "@jest/fake-timers": ^26.6.2 - "@jest/globals": ^26.6.2 - "@jest/source-map": ^26.6.2 - "@jest/test-result": ^26.6.2 - "@jest/transform": ^26.6.2 - "@jest/types": ^26.6.2 - "@types/yargs": ^15.0.0 +"jest-runtime@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-runtime@npm:29.3.1" + dependencies: + "@jest/environment": ^29.3.1 + "@jest/fake-timers": ^29.3.1 + "@jest/globals": ^29.3.1 + "@jest/source-map": ^29.2.0 + "@jest/test-result": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 + "@types/node": "*" chalk: ^4.0.0 - cjs-module-lexer: ^0.6.0 + cjs-module-lexer: ^1.0.0 collect-v8-coverage: ^1.0.0 - exit: ^0.1.2 glob: ^7.1.3 - graceful-fs: ^4.2.4 - jest-config: ^26.6.3 - jest-haste-map: ^26.6.2 - jest-message-util: ^26.6.2 - jest-mock: ^26.6.2 - jest-regex-util: ^26.0.0 - jest-resolve: ^26.6.2 - jest-snapshot: ^26.6.2 - jest-util: ^26.6.2 - jest-validate: ^26.6.2 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.3.1 + jest-message-util: ^29.3.1 + jest-mock: ^29.3.1 + jest-regex-util: ^29.2.0 + jest-resolve: ^29.3.1 + jest-snapshot: ^29.3.1 + jest-util: ^29.3.1 slash: ^3.0.0 strip-bom: ^4.0.0 - yargs: ^15.4.1 - bin: - jest-runtime: bin/jest-runtime.js - checksum: 867922b49f9ab4cf2f5f1356ac3d9962c4477c7a2ff696cc841ea4c600ea389e7d6dfcbf945fec6849e606f81980addf31e4f34d63eaa3d3415f4901de2f605a + checksum: 82f27b48f000be074064a854e16e768f9453e9b791d8c5f9316606c37f871b5b10f70544c1b218ab9784f00bd972bb77f868c5ab6752c275be2cd219c351f5a7 languageName: node linkType: hard @@ -6600,27 +7302,35 @@ __metadata: languageName: node linkType: hard -"jest-snapshot@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-snapshot@npm:26.6.2" +"jest-snapshot@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-snapshot@npm:29.3.1" dependencies: - "@babel/types": ^7.0.0 - "@jest/types": ^26.6.2 - "@types/babel__traverse": ^7.0.4 - "@types/prettier": ^2.0.0 + "@babel/core": ^7.11.6 + "@babel/generator": ^7.7.2 + "@babel/plugin-syntax-jsx": ^7.7.2 + "@babel/plugin-syntax-typescript": ^7.7.2 + "@babel/traverse": ^7.7.2 + "@babel/types": ^7.3.3 + "@jest/expect-utils": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 + "@types/babel__traverse": ^7.0.6 + "@types/prettier": ^2.1.5 + babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^26.6.2 - graceful-fs: ^4.2.4 - jest-diff: ^26.6.2 - jest-get-type: ^26.3.0 - jest-haste-map: ^26.6.2 - jest-matcher-utils: ^26.6.2 - jest-message-util: ^26.6.2 - jest-resolve: ^26.6.2 + expect: ^29.3.1 + graceful-fs: ^4.2.9 + jest-diff: ^29.3.1 + jest-get-type: ^29.2.0 + jest-haste-map: ^29.3.1 + jest-matcher-utils: ^29.3.1 + jest-message-util: ^29.3.1 + jest-util: ^29.3.1 natural-compare: ^1.4.0 - pretty-format: ^26.6.2 - semver: ^7.3.2 - checksum: 53f1de055b1d3840bc6e851fd674d5991b844d4695dadbd07354c93bf191048d8767b8606999847e97c4214a485b9afb45c1d2411772befa1870414ac973b3e2 + pretty-format: ^29.3.1 + semver: ^7.3.5 + checksum: d7d0077935e78c353c828be78ccb092e12ba7622cb0577f21641fadd728ae63a7c1f4a0d8113bfb38db3453a64bfa232fb1cdeefe0e2b48c52ef4065b0ab75ae languageName: node linkType: hard @@ -6647,32 +7357,47 @@ __metadata: languageName: node linkType: hard -"jest-validate@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-validate@npm:26.6.2" +"jest-util@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-util@npm:29.3.1" dependencies: - "@jest/types": ^26.6.2 - camelcase: ^6.0.0 + "@jest/types": ^29.3.1 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: f67c60f062b94d21cb60e84b3b812d64b7bfa81fe980151de5c17a74eb666042d0134e2e756d099b7606a1fcf1d633824d2e58197d01d76dde1e2dc00dfcd413 + languageName: node + linkType: hard + +"jest-validate@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-validate@npm:29.3.1" + dependencies: + "@jest/types": ^29.3.1 + camelcase: ^6.2.0 chalk: ^4.0.0 - jest-get-type: ^26.3.0 + jest-get-type: ^29.2.0 leven: ^3.1.0 - pretty-format: ^26.6.2 - checksum: bac11d6586d9b8885328a4a66eec45b692e45ac23034a5c09eb0ee32de324f2d3d52b073e0c34e9c222b3642b083d1152a736cf24c52109e4957537d731ca62b + pretty-format: ^29.3.1 + checksum: 92584f0b8ac284235f12b3b812ccbc43ef6dea080a3b98b1aa81adbe009e962d0aa6131f21c8157b30ac3d58f335961694238a93d553d1d1e02ab264c923778c languageName: node linkType: hard -"jest-watcher@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-watcher@npm:26.6.2" +"jest-watcher@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-watcher@npm:29.3.1" dependencies: - "@jest/test-result": ^26.6.2 - "@jest/types": ^26.6.2 + "@jest/test-result": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 - jest-util: ^26.6.2 + emittery: ^0.13.1 + jest-util: ^29.3.1 string-length: ^4.0.1 - checksum: 401137f1a73bf23cdf390019ebffb3f6f89c53ca49d48252d1dd6daf17a68787fef75cc55a623de28b63d87d0e8f13d8972d7dd06740f2f64f7b2a0409d119d2 + checksum: 60d189473486c73e9d540406a30189da5a3c67bfb0fb4ad4a83991c189135ef76d929ec99284ca5a505fe4ee9349ae3c99b54d2e00363e72837b46e77dec9642 languageName: node linkType: hard @@ -6698,16 +7423,34 @@ __metadata: languageName: node linkType: hard -"jest@npm:^26.1.0": - version: 26.6.3 - resolution: "jest@npm:26.6.3" +"jest-worker@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-worker@npm:29.3.1" + dependencies: + "@types/node": "*" + jest-util: ^29.3.1 + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 38687fcbdc2b7ddc70bbb5dfc703ae095b46b3c7f206d62ecdf5f4d16e336178e217302138f3b906125576bb1cfe4cfe8d43681276fa5899d138ed9422099fb3 + languageName: node + linkType: hard + +"jest@npm:^29.3.1": + version: 29.3.1 + resolution: "jest@npm:29.3.1" dependencies: - "@jest/core": ^26.6.3 + "@jest/core": ^29.3.1 + "@jest/types": ^29.3.1 import-local: ^3.0.2 - jest-cli: ^26.6.3 + jest-cli: ^29.3.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true bin: jest: bin/jest.js - checksum: 3a9b4c70e9bd5391e7367a0036045c1d3545c2a39e1439a71fb4b59b1748bc34e2ccb324faa1046b99bffc8dc2ed7b3c59016c462255b2646f5fa9300351f914 + checksum: 613f4ec657b14dd84c0056b2fef1468502927fd551bef0b19d4a91576a609678fb316c6a5b5fc6120dd30dd4ff4569070ffef3cb507db9bb0260b28ddaa18d7a languageName: node linkType: hard @@ -6730,43 +7473,42 @@ __metadata: languageName: node linkType: hard -"jsdom@npm:^16.4.0": - version: 16.7.0 - resolution: "jsdom@npm:16.7.0" +"jsdom@npm:^20.0.0": + version: 20.0.3 + resolution: "jsdom@npm:20.0.3" dependencies: - abab: ^2.0.5 - acorn: ^8.2.4 - acorn-globals: ^6.0.0 - cssom: ^0.4.4 + abab: ^2.0.6 + acorn: ^8.8.1 + acorn-globals: ^7.0.0 + cssom: ^0.5.0 cssstyle: ^2.3.0 - data-urls: ^2.0.0 - decimal.js: ^10.2.1 - domexception: ^2.0.1 + data-urls: ^3.0.2 + decimal.js: ^10.4.2 + domexception: ^4.0.0 escodegen: ^2.0.0 - form-data: ^3.0.0 - html-encoding-sniffer: ^2.0.1 - http-proxy-agent: ^4.0.1 - https-proxy-agent: ^5.0.0 + form-data: ^4.0.0 + html-encoding-sniffer: ^3.0.0 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.1 is-potential-custom-element-name: ^1.0.1 - nwsapi: ^2.2.0 - parse5: 6.0.1 - saxes: ^5.0.1 + nwsapi: ^2.2.2 + parse5: ^7.1.1 + saxes: ^6.0.0 symbol-tree: ^3.2.4 - tough-cookie: ^4.0.0 - w3c-hr-time: ^1.0.2 - w3c-xmlserializer: ^2.0.0 - webidl-conversions: ^6.1.0 - whatwg-encoding: ^1.0.5 - whatwg-mimetype: ^2.3.0 - whatwg-url: ^8.5.0 - ws: ^7.4.6 - xml-name-validator: ^3.0.0 + tough-cookie: ^4.1.2 + w3c-xmlserializer: ^4.0.0 + webidl-conversions: ^7.0.0 + whatwg-encoding: ^2.0.0 + whatwg-mimetype: ^3.0.0 + whatwg-url: ^11.0.0 + ws: ^8.11.0 + xml-name-validator: ^4.0.0 peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: canvas: optional: true - checksum: 454b83371857000763ed31130a049acd1b113e3b927e6dcd75c67ddc30cdd242d7ebcac5c2294b7a1a6428155cb1398709c573b3c6d809218692ea68edd93370 + checksum: 6e2ae21db397133a061b270c26d2dbc0b9051733ea3b896a7ece78d79f475ff0974f766a413c1198a79c793159119169f2335ddb23150348fbfdcfa6f3105536 languageName: node linkType: hard @@ -6836,6 +7578,15 @@ __metadata: languageName: node linkType: hard +"json5@npm:^2.2.2": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + "jsonfile@npm:^6.0.1": version: 6.1.0 resolution: "jsonfile@npm:6.1.0" @@ -6969,7 +7720,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.7.0": +"lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -6991,8 +7742,17 @@ __metadata: version: 2.0.2 resolution: "lower-case@npm:2.0.2" dependencies: - tslib: ^2.0.3 - checksum: 83a0a5f159ad7614bee8bf976b96275f3954335a84fad2696927f609ddae902802c4f3312d86668722e668bef41400254807e1d3a7f2e8c3eede79691aa1f010 + tslib: ^2.0.3 + checksum: 83a0a5f159ad7614bee8bf976b96275f3954335a84fad2696927f609ddae902802c4f3312d86668722e668bef41400254807e1d3a7f2e8c3eede79691aa1f010 + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb languageName: node linkType: hard @@ -7053,6 +7813,15 @@ __metadata: languageName: node linkType: hard +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: 1.0.5 + checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 + languageName: node + linkType: hard + "makeerror@npm:1.0.x": version: 1.0.11 resolution: "makeerror@npm:1.0.11" @@ -7160,7 +7929,23 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24": +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24": version: 2.1.33 resolution: "mime-types@npm:2.1.33" dependencies: @@ -7483,20 +8268,6 @@ __metadata: languageName: node linkType: hard -"node-notifier@npm:^8.0.0": - version: 8.0.2 - resolution: "node-notifier@npm:8.0.2" - dependencies: - growly: ^1.3.0 - is-wsl: ^2.2.0 - semver: ^7.3.2 - shellwords: ^0.1.1 - uuid: ^8.3.0 - which: ^2.0.2 - checksum: 7db1683003f6aaa4324959dfa663cd56e301ccc0165977a9e7737989ffe3b4763297f9fc85f44d0662b63a4fd85516eda43411b492a4d2fae207afb23773f912 - languageName: node - linkType: hard - "node-releases@npm:^1.1.77": version: 1.1.77 resolution: "node-releases@npm:1.1.77" @@ -7511,6 +8282,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.6": + version: 2.0.8 + resolution: "node-releases@npm:2.0.8" + checksum: b1ab02c0d5d8e081bf9537232777a7a787dc8fef07f70feabe70a344599b220fe16462f746ac30f3eed5a58549445ad69368964d12a1f8b3b764f6caab7ba34a + languageName: node + linkType: hard + "nopt@npm:^5.0.0": version: 5.0.0 resolution: "nopt@npm:5.0.0" @@ -7522,18 +8300,6 @@ __metadata: languageName: node linkType: hard -"normalize-package-data@npm:^2.5.0": - version: 2.5.0 - resolution: "normalize-package-data@npm:2.5.0" - dependencies: - hosted-git-info: ^2.1.4 - resolve: ^1.10.0 - semver: 2 || 3 || 4 || 5 - validate-npm-package-license: ^3.0.1 - checksum: 7999112efc35a6259bc22db460540cae06564aa65d0271e3bdfa86876d08b0e578b7b5b0028ee61b23f1cae9fc0e7847e4edc0948d3068a39a2a82853efc8499 - languageName: node - linkType: hard - "normalize-path@npm:^2.1.1": version: 2.1.1 resolution: "normalize-path@npm:2.1.1" @@ -7559,7 +8325,7 @@ __metadata: languageName: node linkType: hard -"npm-run-path@npm:^4.0.0, npm-run-path@npm:^4.0.1": +"npm-run-path@npm:^4.0.1": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" dependencies: @@ -7596,10 +8362,10 @@ __metadata: languageName: node linkType: hard -"nwsapi@npm:^2.2.0": - version: 2.2.0 - resolution: "nwsapi@npm:2.2.0" - checksum: 5ef4a9bc0c1a5b7f2e014aa6a4b359a257503b796618ed1ef0eb852098f77e772305bb0e92856e4bbfa3e6c75da48c0113505c76f144555ff38867229c2400a7 +"nwsapi@npm:^2.2.2": + version: 2.2.2 + resolution: "nwsapi@npm:2.2.2" + checksum: 43769106292bc95f776756ca2f3513dab7b4d506a97c67baec32406447841a35f65f29c1f95ab5d42785210fd41668beed33ca16fa058780be43b101ad73e205 languageName: node linkType: hard @@ -7780,7 +8546,7 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^5.1.0, onetime@npm:^5.1.2": +"onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" dependencies: @@ -7855,10 +8621,12 @@ __metadata: "@babel/core": 7.13.16 "@babel/plugin-transform-modules-commonjs": 7.13.8 "@babel/plugin-transform-react-jsx": 7.13.12 + "@babel/plugin-transform-typescript": ^7.20.7 + "@babel/preset-react": ^7.18.6 "@babel/preset-typescript": 7.13.0 - "@jest/core": 26.6.3 - "@testing-library/dom": 7.30.4 - "@testing-library/jest-dom": 5.12.0 + "@jest/core": ^29.3.1 + "@testing-library/dom": ^8.19.0 + "@testing-library/jest-dom": ^5.16.5 "@types/fs-extra": ^9.0.12 "@types/glob": ^7 "@types/prettier": ^2 @@ -7877,7 +8645,9 @@ __metadata: eslint-plugin-require-in-package: ^1.0.3 fs-extra: ^10.0.0 glob: ^7.1.7 - jest: ^26.1.0 + jest: ^29.3.1 + jest-cli: ^29.3.1 + jest-environment-jsdom: ^29.3.1 jest-junit-reporter: ^1.1.0 jest-sonar-reporter: 2.0.0 prettier: ^2.3.2 @@ -7885,13 +8655,6 @@ __metadata: languageName: unknown linkType: soft -"p-each-series@npm:^2.1.0": - version: 2.2.0 - resolution: "p-each-series@npm:2.2.0" - checksum: 5fbe2f1f1966f55833bd401fe36f7afe410707d5e9fb6032c6dde8aa716d50521c3bb201fdb584130569b5941d5e84993e09e0b3f76a474288e0ede8f632983c - languageName: node - linkType: hard - "p-event@npm:^4.2.0": version: 4.2.0 resolution: "p-event@npm:4.2.0" @@ -7989,7 +8752,7 @@ __metadata: languageName: node linkType: hard -"parse-json@npm:^5.0.0": +"parse-json@npm:^5.2.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" dependencies: @@ -8001,10 +8764,12 @@ __metadata: languageName: node linkType: hard -"parse5@npm:6.0.1": - version: 6.0.1 - resolution: "parse5@npm:6.0.1" - checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd +"parse5@npm:^7.0.0, parse5@npm:^7.1.1": + version: 7.1.2 + resolution: "parse5@npm:7.1.2" + dependencies: + entities: ^4.4.0 + checksum: 59465dd05eb4c5ec87b76173d1c596e152a10e290b7abcda1aecf0f33be49646ea74840c69af975d7887543ea45564801736356c568d6b5e71792fd0f4055713 languageName: node linkType: hard @@ -8118,6 +8883,13 @@ __metadata: languageName: node linkType: hard +"pirates@npm:^4.0.4": + version: 4.0.5 + resolution: "pirates@npm:4.0.5" + checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 + languageName: node + linkType: hard + "pkg-dir@npm:4.2.0, pkg-dir@npm:^4.2.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" @@ -8211,18 +8983,6 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^26.6.2": - version: 26.6.2 - resolution: "pretty-format@npm:26.6.2" - dependencies: - "@jest/types": ^26.6.2 - ansi-regex: ^5.0.0 - ansi-styles: ^4.0.0 - react-is: ^17.0.1 - checksum: e3b808404d7e1519f0df1aa1f25cee0054ab475775c6b2b8c5568ff23194a92d54bf93274139b6f584ca70fd773be4eaa754b0e03f12bb0a8d1426b07f079976 - languageName: node - linkType: hard - "pretty-format@npm:^27.0.0, pretty-format@npm:^27.0.2, pretty-format@npm:^27.2.5": version: 27.2.5 resolution: "pretty-format@npm:27.2.5" @@ -8235,6 +8995,17 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^29.3.1": + version: 29.3.1 + resolution: "pretty-format@npm:29.3.1" + dependencies: + "@jest/schemas": ^29.0.0 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 9917a0bb859cd7a24a343363f70d5222402c86d10eb45bcc2f77b23a4e67586257390e959061aec22762a782fe6bafb59bf34eb94527bc2e5d211afdb287eb4e + languageName: node + linkType: hard + "process-nextick-args@npm:~2.0.0": version: 2.0.1 resolution: "process-nextick-args@npm:2.0.1" @@ -8283,17 +9054,6 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.6.2": - version: 15.8.1 - resolution: "prop-types@npm:15.8.1" - dependencies: - loose-envify: ^1.4.0 - object-assign: ^4.1.1 - react-is: ^16.13.1 - checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 - languageName: node - linkType: hard - "prop-types@npm:^15.7.2": version: 15.7.2 resolution: "prop-types@npm:15.7.2" @@ -8323,9 +9083,9 @@ __metadata: linkType: hard "psl@npm:^1.1.33": - version: 1.8.0 - resolution: "psl@npm:1.8.0" - checksum: 6150048ed2da3f919478bee8a82f3828303bc0fc730fb015a48f83c9977682c7b28c60ab01425a72d82a2891a1681627aa530a991d50c086b48a3be27744bde7 + version: 1.9.0 + resolution: "psl@npm:1.9.0" + checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d languageName: node linkType: hard @@ -8346,13 +9106,20 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.0, punycode@npm:^2.1.1": +"punycode@npm:^2.1.0": version: 2.1.1 resolution: "punycode@npm:2.1.1" checksum: 823bf443c6dd14f669984dea25757b37993f67e8d94698996064035edd43bed8a5a17a9f12e439c2b35df1078c6bec05a6c86e336209eb1061e8025c481168e8 languageName: node linkType: hard +"punycode@npm:^2.1.1": + version: 2.2.0 + resolution: "punycode@npm:2.2.0" + checksum: 32f291c1b1e8bef8a7d351a369579565bc17530ee5224d2f2b5c37b2647aa0ec7f1972294e2de1b632812f90c8080a7c0c5645c14758aadc0f27b35dd4906d89 + languageName: node + linkType: hard + "puppeteer@npm:^10.4.0": version: 10.4.0 resolution: "puppeteer@npm:10.4.0" @@ -8396,6 +9163,13 @@ __metadata: languageName: node linkType: hard +"querystringify@npm:^2.1.1": + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -8450,7 +9224,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.12.0, react-is@npm:^16.13.1, react-is@npm:^16.8.1, react-is@npm:^16.8.4": +"react-is@npm:^16.12.0, react-is@npm:^16.8.1, react-is@npm:^16.8.4": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f @@ -8464,6 +9238,13 @@ __metadata: languageName: node linkType: hard +"react-is@npm:^18.0.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e + languageName: node + linkType: hard + "react-reconciler@npm:^0.28.0": version: 0.28.0 resolution: "react-reconciler@npm:0.28.0" @@ -8476,18 +9257,7 @@ __metadata: languageName: node linkType: hard -"react@npm:^16.9.0": - version: 16.14.0 - resolution: "react@npm:16.14.0" - dependencies: - loose-envify: ^1.1.0 - object-assign: ^4.1.1 - prop-types: ^15.6.2 - checksum: 8484f3ecb13414526f2a7412190575fc134da785c02695eb92bb6028c930bfe1c238d7be2a125088fec663cc7cda0a3623373c46807cf2c281f49c34b79881ac - languageName: node - linkType: hard - -"react@npm:^18.1.0": +"react@npm:18.1.0": version: 18.1.0 resolution: "react@npm:18.1.0" dependencies: @@ -8496,29 +9266,6 @@ __metadata: languageName: node linkType: hard -"read-pkg-up@npm:^7.0.1": - version: 7.0.1 - resolution: "read-pkg-up@npm:7.0.1" - dependencies: - find-up: ^4.1.0 - read-pkg: ^5.2.0 - type-fest: ^0.8.1 - checksum: e4e93ce70e5905b490ca8f883eb9e48b5d3cebc6cd4527c25a0d8f3ae2903bd4121c5ab9c5a3e217ada0141098eeb661313c86fa008524b089b8ed0b7f165e44 - languageName: node - linkType: hard - -"read-pkg@npm:^5.2.0": - version: 5.2.0 - resolution: "read-pkg@npm:5.2.0" - dependencies: - "@types/normalize-package-data": ^2.4.0 - normalize-package-data: ^2.5.0 - parse-json: ^5.0.0 - type-fest: ^0.6.0 - checksum: eb696e60528b29aebe10e499ba93f44991908c57d70f2d26f369e46b8b9afc208ef11b4ba64f67630f31df8b6872129e0a8933c8c53b7b4daf0eace536901222 - languageName: node - linkType: hard - "readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.6": version: 2.3.7 resolution: "readable-stream@npm:2.3.7" @@ -8673,13 +9420,6 @@ __metadata: languageName: node linkType: hard -"require-main-filename@npm:^2.0.0": - version: 2.0.0 - resolution: "require-main-filename@npm:2.0.0" - checksum: e9e294695fea08b076457e9ddff854e81bffbe248ed34c1eec348b7abbd22a0d02e8d75506559e2265e96978f3c4720bd77a6dad84755de8162b357eb6c778c7 - languageName: node - linkType: hard - "requires-port@npm:^1.0.0": version: 1.0.0 resolution: "requires-port@npm:1.0.0" @@ -8717,7 +9457,14 @@ __metadata: languageName: node linkType: hard -"resolve@^1.10.0, resolve@^1.18.1, resolve@^1.9.0": +"resolve.exports@npm:^1.1.0": + version: 1.1.1 + resolution: "resolve.exports@npm:1.1.1" + checksum: 485aa10082eb388a569d696e17ad7b16f4186efc97dd34eadd029d95b811f21ffee13b1b733198bb4584dbb3cb296aa6f141835221fb7613b9606b84f1386655 + languageName: node + linkType: hard + +resolve@^1.9.0: version: 1.20.0 resolution: "resolve@npm:1.20.0" dependencies: @@ -8750,16 +9497,6 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.18.1#~builtin, resolve@patch:resolve@^1.9.0#~builtin": - version: 1.20.0 - resolution: "resolve@patch:resolve@npm%3A1.20.0#~builtin::version=1.20.0&hash=07638b" - dependencies: - is-core-module: ^2.2.0 - path-parse: ^1.0.6 - checksum: a0dd7d16a8e47af23afa9386df2dff10e3e0debb2c7299a42e581d9d9b04d7ad5d2c53f24f1e043f7b3c250cbdc71150063e53d0b6559683d37f790b7c8c3cd5 - languageName: node - linkType: hard - "resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin": version: 1.22.1 resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" @@ -8773,6 +9510,16 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard +"resolve@patch:resolve@^1.9.0#~builtin": + version: 1.20.0 + resolution: "resolve@patch:resolve@npm%3A1.20.0#~builtin::version=1.20.0&hash=07638b" + dependencies: + is-core-module: ^2.2.0 + path-parse: ^1.0.6 + checksum: a0dd7d16a8e47af23afa9386df2dff10e3e0debb2c7299a42e581d9d9b04d7ad5d2c53f24f1e043f7b3c250cbdc71150063e53d0b6559683d37f790b7c8c3cd5 + languageName: node + linkType: hard + "resolve@patch:resolve@^2.0.0-next.3#~builtin": version: 2.0.0-next.3 resolution: "resolve@patch:resolve@npm%3A2.0.0-next.3#~builtin::version=2.0.0-next.3&hash=07638b" @@ -8811,7 +9558,7 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"rimraf@npm:3.0.2, rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": +"rimraf@npm:3.0.2, rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" dependencies: @@ -8898,12 +9645,12 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"saxes@npm:^5.0.1": - version: 5.0.1 - resolution: "saxes@npm:5.0.1" +"saxes@npm:^6.0.0": + version: 6.0.0 + resolution: "saxes@npm:6.0.0" dependencies: xmlchars: ^2.2.0 - checksum: 5636b55cf15f7cf0baa73f2797bf992bdcf75d1b39d82c0aa4608555c774368f6ac321cb641fd5f3d3ceb87805122cd47540da6a7b5960fe0dbdb8f8c263f000 + checksum: d3fa3e2aaf6c65ed52ee993aff1891fc47d5e47d515164b5449cbf5da2cbdc396137e55590472e64c5c436c14ae64a8a03c29b9e7389fc6f14035cf4e982ef3b languageName: node linkType: hard @@ -8950,7 +9697,7 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.5.0": +"semver@npm:^5.5.0": version: 5.7.1 resolution: "semver@npm:5.7.1" bin: @@ -8968,7 +9715,7 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5": +"semver@npm:^7.2.1, semver@npm:^7.3.4, semver@npm:^7.3.5": version: 7.3.5 resolution: "semver@npm:7.3.5" dependencies: @@ -9047,7 +9794,7 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"set-blocking@npm:^2.0.0, set-blocking@npm:~2.0.0": +"set-blocking@npm:~2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 @@ -9121,13 +9868,6 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"shellwords@npm:^0.1.1": - version: 0.1.1 - resolution: "shellwords@npm:0.1.1" - checksum: 8d73a5e9861f5e5f1068e2cfc39bc0002400fe58558ab5e5fa75630d2c3adf44ca1fac81957609c8320d5533e093802fcafc72904bf1a32b95de3c19a0b1c0d4 - languageName: node - linkType: hard - "side-channel@npm:^1.0.4": version: 1.0.4 resolution: "side-channel@npm:1.0.4" @@ -9146,6 +9886,13 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard +"signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + "sisteransi@npm:^1.0.5": version: 1.0.5 resolution: "sisteransi@npm:1.0.5" @@ -9266,17 +10013,17 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"source-map-resolve@npm:^0.6.0": - version: 0.6.0 - resolution: "source-map-resolve@npm:0.6.0" +"source-map-support@npm:0.5.13": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" dependencies: - atob: ^2.1.2 - decode-uri-component: ^0.2.0 - checksum: fe503b9e5dac1c54be835282fcfec10879434e7b3ee08a9774f230299c724a8d403484d9531276d1670c87390e0e4d1d3f92b14cca6e4a2445ea3016b786ecd4 + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 languageName: node linkType: hard -"source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.20": +"source-map-support@npm:~0.5.20": version: 0.5.20 resolution: "source-map-support@npm:0.5.20" dependencies: @@ -9307,47 +10054,13 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"source-map@npm:^0.7.3, source-map@npm:~0.7.2": +"source-map@npm:~0.7.2": version: 0.7.3 resolution: "source-map@npm:0.7.3" checksum: cd24efb3b8fa69b64bf28e3c1b1a500de77e84260c5b7f2b873f88284df17974157cc88d386ee9b6d081f08fdd8242f3fc05c953685a6ad81aad94c7393dedea languageName: node linkType: hard -"spdx-correct@npm:^3.0.0": - version: 3.1.1 - resolution: "spdx-correct@npm:3.1.1" - dependencies: - spdx-expression-parse: ^3.0.0 - spdx-license-ids: ^3.0.0 - checksum: 77ce438344a34f9930feffa61be0eddcda5b55fc592906ef75621d4b52c07400a97084d8701557b13f7d2aae0cb64f808431f469e566ef3fe0a3a131dcb775a6 - languageName: node - linkType: hard - -"spdx-exceptions@npm:^2.1.0": - version: 2.3.0 - resolution: "spdx-exceptions@npm:2.3.0" - checksum: cb69a26fa3b46305637123cd37c85f75610e8c477b6476fa7354eb67c08128d159f1d36715f19be6f9daf4b680337deb8c65acdcae7f2608ba51931540687ac0 - languageName: node - linkType: hard - -"spdx-expression-parse@npm:^3.0.0": - version: 3.0.1 - resolution: "spdx-expression-parse@npm:3.0.1" - dependencies: - spdx-exceptions: ^2.1.0 - spdx-license-ids: ^3.0.0 - checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde - languageName: node - linkType: hard - -"spdx-license-ids@npm:^3.0.0": - version: 3.0.10 - resolution: "spdx-license-ids@npm:3.0.10" - checksum: 94fde6f558941f82c737433000e20678eccad448fe5e87cbb98ba1d811a120ddf7fbc4a7a3ebfcd2f49c8c4541ba6537af07750ca5cb54900a064d53f68b888d - languageName: node - linkType: hard - "spdy-transport@npm:^3.0.0": version: 3.0.0 resolution: "spdy-transport@npm:3.0.0" @@ -9400,12 +10113,12 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"stack-utils@npm:^2.0.2": - version: 2.0.5 - resolution: "stack-utils@npm:2.0.5" +"stack-utils@npm:^2.0.3": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" dependencies: escape-string-regexp: ^2.0.0 - checksum: 76b69da0f5b48a34a0f93c98ee2a96544d2c4ca2557f7eef5ddb961d3bdc33870b46f498a84a7c4f4ffb781df639840e7ebf6639164ed4da5e1aeb659615b9c7 + checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 languageName: node linkType: hard @@ -9651,16 +10364,6 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"supports-hyperlinks@npm:^2.0.0": - version: 2.2.0 - resolution: "supports-hyperlinks@npm:2.2.0" - dependencies: - has-flag: ^4.0.0 - supports-color: ^7.0.0 - checksum: aef04fb41f4a67f1bc128f7c3e88a81b6cf2794c800fccf137006efe5bafde281da3e42e72bf9206c2fcf42e6438f37e3a820a389214d0a88613ca1f2d36076a - languageName: node - linkType: hard - "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -9745,16 +10448,6 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"terminal-link@npm:^2.0.0": - version: 2.1.1 - resolution: "terminal-link@npm:2.1.1" - dependencies: - ansi-escapes: ^4.2.1 - supports-hyperlinks: ^2.0.0 - checksum: ce3d2cd3a438c4a9453947aa664581519173ea40e77e2534d08c088ee6dda449eabdbe0a76d2a516b8b73c33262fedd10d5270ccf7576ae316e3db170ce6562f - languageName: node - linkType: hard - "terser-webpack-plugin@npm:^5.1.3": version: 5.2.4 resolution: "terser-webpack-plugin@npm:5.2.4" @@ -9809,13 +10502,6 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"throat@npm:^5.0.0": - version: 5.0.0 - resolution: "throat@npm:5.0.0" - checksum: 031ff7f4431618036c1dedd99c8aa82f5c33077320a8358ed829e84b320783781d1869fe58e8f76e948306803de966f5f7573766a437562c9f5c033297ad2fe2 - languageName: node - linkType: hard - "through@npm:^2.3.8": version: 2.3.8 resolution: "through@npm:2.3.8" @@ -9840,7 +10526,7 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"tmpl@npm:1.0.x": +"tmpl@npm:1.0.5, tmpl@npm:1.0.x": version: 1.0.5 resolution: "tmpl@npm:1.0.5" checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 @@ -9901,23 +10587,24 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"tough-cookie@npm:^4.0.0": - version: 4.0.0 - resolution: "tough-cookie@npm:4.0.0" +"tough-cookie@npm:^4.1.2": + version: 4.1.2 + resolution: "tough-cookie@npm:4.1.2" dependencies: psl: ^1.1.33 punycode: ^2.1.1 - universalify: ^0.1.2 - checksum: 0891b37eb7d17faa3479d47f0dce2e3007f2583094ad272f2670d120fbcc3df3b0b0a631ba96ecad49f9e2297d93ff8995ce0d3292d08dd7eabe162f5b224d69 + universalify: ^0.2.0 + url-parse: ^1.5.3 + checksum: a7359e9a3e875121a84d6ba40cc184dec5784af84f67f3a56d1d2ae39b87c0e004e6ba7c7331f9622a7d2c88609032473488b28fe9f59a1fec115674589de39a languageName: node linkType: hard -"tr46@npm:^2.1.0": - version: 2.1.0 - resolution: "tr46@npm:2.1.0" +"tr46@npm:^3.0.0": + version: 3.0.0 + resolution: "tr46@npm:3.0.0" dependencies: punycode: ^2.1.1 - checksum: ffe6049b9dca3ae329b059aada7f515b0f0064c611b39b51ff6b53897e954650f6f63d9319c6c008d36ead477c7b55e5f64c9dc60588ddc91ff720d64eb710b3 + checksum: 44c3cc6767fb800490e6e9fd64fd49041aa4e49e1f6a012b34a75de739cc9ed3a6405296072c1df8b6389ae139c5e7c6496f659cfe13a04a4bff3a1422981270 languageName: node linkType: hard @@ -10102,20 +10789,6 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"type-fest@npm:^0.6.0": - version: 0.6.0 - resolution: "type-fest@npm:0.6.0" - checksum: b2188e6e4b21557f6e92960ec496d28a51d68658018cba8b597bd3ef757721d1db309f120ae987abeeda874511d14b776157ff809f23c6d1ce8f83b9b2b7d60f - languageName: node - linkType: hard - -"type-fest@npm:^0.8.1": - version: 0.8.1 - resolution: "type-fest@npm:0.8.1" - checksum: d61c4b2eba24009033ae4500d7d818a94fd6d1b481a8111612ee141400d5f1db46f199c014766b9fa9b31a6a7374d96fc748c6d688a78a3ce5a33123839becb7 - languageName: node - linkType: hard - "type-is@npm:~1.6.17, type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" @@ -10248,10 +10921,10 @@ typescript@^4.8.2: languageName: node linkType: hard -"universalify@npm:^0.1.2": - version: 0.1.2 - resolution: "universalify@npm:0.1.2" - checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff +"universalify@npm:^0.2.0": + version: 0.2.0 + resolution: "universalify@npm:0.2.0" + checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 languageName: node linkType: hard @@ -10279,6 +10952,20 @@ typescript@^4.8.2: languageName: node linkType: hard +"update-browserslist-db@npm:^1.0.9": + version: 1.0.10 + resolution: "update-browserslist-db@npm:1.0.10" + dependencies: + escalade: ^3.1.1 + picocolors: ^1.0.0 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + browserslist-lint: cli.js + checksum: 12db73b4f63029ac407b153732e7cd69a1ea8206c9100b482b7d12859cd3cd0bc59c602d7ae31e652706189f1acb90d42c53ab24a5ba563ed13aebdddc5561a0 + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -10302,6 +10989,16 @@ typescript@^4.8.2: languageName: node linkType: hard +"url-parse@npm:^1.5.3": + version: 1.5.10 + resolution: "url-parse@npm:1.5.10" + dependencies: + querystringify: ^2.1.1 + requires-port: ^1.0.0 + checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf + languageName: node + linkType: hard + "url@npm:^0.11.0": version: 0.11.0 resolution: "url@npm:0.11.0" @@ -10349,15 +11046,6 @@ typescript@^4.8.2: languageName: node linkType: hard -"uuid@npm:^8.3.0": - version: 8.3.2 - resolution: "uuid@npm:8.3.2" - bin: - uuid: dist/bin/uuid - checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df - languageName: node - linkType: hard - "v8-compile-cache-lib@npm:^3.0.1": version: 3.0.1 resolution: "v8-compile-cache-lib@npm:3.0.1" @@ -10372,24 +11060,14 @@ typescript@^4.8.2: languageName: node linkType: hard -"v8-to-istanbul@npm:^7.0.0": - version: 7.1.2 - resolution: "v8-to-istanbul@npm:7.1.2" +"v8-to-istanbul@npm:^9.0.1": + version: 9.0.1 + resolution: "v8-to-istanbul@npm:9.0.1" dependencies: + "@jridgewell/trace-mapping": ^0.3.12 "@types/istanbul-lib-coverage": ^2.0.1 convert-source-map: ^1.6.0 - source-map: ^0.7.3 - checksum: e52b48764f55aed62ff87f2b5f710c874f992cd1313eac8f438bf65aeeb0689153d85bb76e39514fd90ba3521d6ebea929a8ae1339b6d7b0cf18fb0ed13d8b40 - languageName: node - linkType: hard - -"validate-npm-package-license@npm:^3.0.1": - version: 3.0.4 - resolution: "validate-npm-package-license@npm:3.0.4" - dependencies: - spdx-correct: ^3.0.0 - spdx-expression-parse: ^3.0.0 - checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad + checksum: a49c34bf0a3af0c11041a3952a2600913904a983bd1bc87148b5c033bc5c1d02d5a13620fcdbfa2c60bc582a2e2970185780f0c844b4c3a220abf405f8af6311 languageName: node linkType: hard @@ -10400,21 +11078,12 @@ typescript@^4.8.2: languageName: node linkType: hard -"w3c-hr-time@npm:^1.0.2": - version: 1.0.2 - resolution: "w3c-hr-time@npm:1.0.2" - dependencies: - browser-process-hrtime: ^1.0.0 - checksum: ec3c2dacbf8050d917bbf89537a101a08c2e333b4c19155f7d3bedde43529d4339db6b3d049d9610789cb915f9515f8be037e0c54c079e9d4735c50b37ed52b9 - languageName: node - linkType: hard - -"w3c-xmlserializer@npm:^2.0.0": - version: 2.0.0 - resolution: "w3c-xmlserializer@npm:2.0.0" +"w3c-xmlserializer@npm:^4.0.0": + version: 4.0.0 + resolution: "w3c-xmlserializer@npm:4.0.0" dependencies: - xml-name-validator: ^3.0.0 - checksum: ae25c51cf71f1fb2516df1ab33a481f83461a117565b95e3d0927432522323f93b1b2846cbb60196d337970c421adb604fc2d0d180c6a47a839da01db5b9973b + xml-name-validator: ^4.0.0 + checksum: eba070e78deb408ae8defa4d36b429f084b2b47a4741c4a9be3f27a0a3d1845e277e3072b04391a138f7e43776842627d1334e448ff13ff90ad9fb1214ee7091 languageName: node linkType: hard @@ -10434,6 +11103,15 @@ typescript@^4.8.2: languageName: node linkType: hard +"walker@npm:^1.0.8": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: 1.0.12 + checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c + languageName: node + linkType: hard + "watchpack@npm:^2.2.0": version: 2.2.0 resolution: "watchpack@npm:2.2.0" @@ -10453,17 +11131,10 @@ typescript@^4.8.2: languageName: node linkType: hard -"webidl-conversions@npm:^5.0.0": - version: 5.0.0 - resolution: "webidl-conversions@npm:5.0.0" - checksum: ccf1ec2ca7c0b5671e5440ace4a66806ae09c49016ab821481bec0c05b1b82695082dc0a27d1fe9d804d475a408ba0c691e6803fd21be608e710955d4589cd69 - languageName: node - linkType: hard - -"webidl-conversions@npm:^6.1.0": - version: 6.1.0 - resolution: "webidl-conversions@npm:6.1.0" - checksum: 1f526507aa491f972a0c1409d07f8444e1d28778dfa269a9971f2e157182f3d496dc33296e4ed45b157fdb3bf535bb90c90bf10c50dcf1dd6caacb2a34cc84fb +"webidl-conversions@npm:^7.0.0": + version: 7.0.0 + resolution: "webidl-conversions@npm:7.0.0" + checksum: f05588567a2a76428515333eff87200fae6c83c3948a7482ebb109562971e77ef6dc49749afa58abb993391227c5697b3ecca52018793e0cb4620a48f10bd21b languageName: node linkType: hard @@ -10627,30 +11298,29 @@ typescript@^4.8.2: languageName: node linkType: hard -"whatwg-encoding@npm:^1.0.5": - version: 1.0.5 - resolution: "whatwg-encoding@npm:1.0.5" +"whatwg-encoding@npm:^2.0.0": + version: 2.0.0 + resolution: "whatwg-encoding@npm:2.0.0" dependencies: - iconv-lite: 0.4.24 - checksum: 5be4efe111dce29ddee3448d3915477fcc3b28f991d9cf1300b4e50d6d189010d47bca2f51140a844cf9b726e8f066f4aee72a04d687bfe4f2ee2767b2f5b1e6 + iconv-lite: 0.6.3 + checksum: 7087810c410aa9b689cbd6af8773341a53cdc1f3aae2a882c163bd5522ec8ca4cdfc269aef417a5792f411807d5d77d50df4c24e3abb00bb60192858a40cc675 languageName: node linkType: hard -"whatwg-mimetype@npm:^2.3.0": - version: 2.3.0 - resolution: "whatwg-mimetype@npm:2.3.0" - checksum: 23eb885940bcbcca4ff841c40a78e9cbb893ec42743993a42bf7aed16085b048b44b06f3402018931687153550f9a32d259dfa524e4f03577ab898b6965e5383 +"whatwg-mimetype@npm:^3.0.0": + version: 3.0.0 + resolution: "whatwg-mimetype@npm:3.0.0" + checksum: ce08bbb36b6aaf64f3a84da89707e3e6a31e5ab1c1a2379fd68df79ba712a4ab090904f0b50e6693b0dafc8e6343a6157e40bf18fdffd26e513cf95ee2a59824 languageName: node linkType: hard -"whatwg-url@npm:^8.0.0, whatwg-url@npm:^8.5.0": - version: 8.7.0 - resolution: "whatwg-url@npm:8.7.0" +"whatwg-url@npm:^11.0.0": + version: 11.0.0 + resolution: "whatwg-url@npm:11.0.0" dependencies: - lodash: ^4.7.0 - tr46: ^2.1.0 - webidl-conversions: ^6.1.0 - checksum: a87abcc6cefcece5311eb642858c8fdb234e51ec74196bfacf8def2edae1bfbffdf6acb251646ed6301f8cee44262642d8769c707256125a91387e33f405dd1e + tr46: ^3.0.0 + webidl-conversions: ^7.0.0 + checksum: ed4826aaa57e66bb3488a4b25c9cd476c46ba96052747388b5801f137dd740b73fde91ad207d96baf9f17fbcc80fc1a477ad65181b5eb5fa718d27c69501d7af languageName: node linkType: hard @@ -10667,13 +11337,6 @@ typescript@^4.8.2: languageName: node linkType: hard -"which-module@npm:^2.0.0": - version: 2.0.0 - resolution: "which-module@npm:2.0.0" - checksum: 809f7fd3dfcb2cdbe0180b60d68100c88785084f8f9492b0998c051d7a8efe56784492609d3f09ac161635b78ea29219eb1418a98c15ce87d085bce905705c9c - languageName: node - linkType: hard - "which@npm:^1.2.9": version: 1.3.1 resolution: "which@npm:1.3.1" @@ -10719,14 +11382,14 @@ typescript@^4.8.2: languageName: node linkType: hard -"wrap-ansi@npm:^6.2.0": - version: 6.2.0 - resolution: "wrap-ansi@npm:6.2.0" +"wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" dependencies: ansi-styles: ^4.0.0 string-width: ^4.1.0 strip-ansi: ^6.0.0 - checksum: 6cd96a410161ff617b63581a08376f0cb9162375adeb7956e10c8cd397821f7eb2a6de24eb22a0b28401300bf228c86e50617cd568209b5f6775b93c97d2fe3a + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b languageName: node linkType: hard @@ -10749,6 +11412,16 @@ typescript@^4.8.2: languageName: node linkType: hard +"write-file-atomic@npm:^4.0.1": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" + dependencies: + imurmurhash: ^0.1.4 + signal-exit: ^3.0.7 + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c + languageName: node + linkType: hard + "ws@npm:7.4.6": version: 7.4.6 resolution: "ws@npm:7.4.6" @@ -10764,9 +11437,9 @@ typescript@^4.8.2: languageName: node linkType: hard -"ws@npm:^7.4.6": - version: 7.5.5 - resolution: "ws@npm:7.5.5" +"ws@npm:^8.1.0": + version: 8.2.3 + resolution: "ws@npm:8.2.3" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -10775,29 +11448,29 @@ typescript@^4.8.2: optional: true utf-8-validate: optional: true - checksum: bd2b437256012af526c69c03d6670a132e7ab0fe5853f3b7092826acea4203fad4ee2a8d0d9bd44834b2b968e747bf34f753ab535f4a3edf40d262da4b1d0805 + checksum: c869296ccb45f218ac6d32f8f614cd85b50a21fd434caf11646008eef92173be53490810c5c23aea31bc527902261fbfd7b062197eea341b26128d4be56a85e4 languageName: node linkType: hard -"ws@npm:^8.1.0": - version: 8.2.3 - resolution: "ws@npm:8.2.3" +"ws@npm:^8.11.0": + version: 8.12.0 + resolution: "ws@npm:8.12.0" peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + utf-8-validate: ">=5.0.2" peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true - checksum: c869296ccb45f218ac6d32f8f614cd85b50a21fd434caf11646008eef92173be53490810c5c23aea31bc527902261fbfd7b062197eea341b26128d4be56a85e4 + checksum: 818ff3f8749c172a95a114cceb8b89cedd27e43a82d65c7ad0f7882b1e96a2ee6709e3746a903c3fa88beec0c8bae9a9fcd75f20858b32a166dfb7519316a5d7 languageName: node linkType: hard -"xml-name-validator@npm:^3.0.0": - version: 3.0.0 - resolution: "xml-name-validator@npm:3.0.0" - checksum: b3ac459afed783c285bb98e4960bd1f3ba12754fd4f2320efa0f9181ca28928c53cc75ca660d15d205e81f92304419afe94c531c7cfb3e0649aa6d140d53ecb0 +"xml-name-validator@npm:^4.0.0": + version: 4.0.0 + resolution: "xml-name-validator@npm:4.0.0" + checksum: af100b79c29804f05fa35aa3683e29a321db9b9685d5e5febda3fa1e40f13f85abc40f45a6b2bf7bee33f68a1dc5e8eaef4cec100a304a9db565e6061d4cb5ad languageName: node linkType: hard @@ -10815,10 +11488,17 @@ typescript@^4.8.2: languageName: node linkType: hard -"y18n@npm:^4.0.0": - version: 4.0.3 - resolution: "y18n@npm:4.0.3" - checksum: 014dfcd9b5f4105c3bb397c1c8c6429a9df004aa560964fb36732bfb999bfe83d45ae40aeda5b55d21b1ee53d8291580a32a756a443e064317953f08025b1aa4 +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d languageName: node linkType: hard @@ -10829,32 +11509,25 @@ typescript@^4.8.2: languageName: node linkType: hard -"yargs-parser@npm:^18.1.2": - version: 18.1.3 - resolution: "yargs-parser@npm:18.1.3" - dependencies: - camelcase: ^5.0.0 - decamelize: ^1.2.0 - checksum: 60e8c7d1b85814594d3719300ecad4e6ae3796748b0926137bfec1f3042581b8646d67e83c6fc80a692ef08b8390f21ddcacb9464476c39bbdf52e34961dd4d9 +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c languageName: node linkType: hard -"yargs@npm:^15.4.1": - version: 15.4.1 - resolution: "yargs@npm:15.4.1" +"yargs@npm:^17.3.1": + version: 17.6.2 + resolution: "yargs@npm:17.6.2" dependencies: - cliui: ^6.0.0 - decamelize: ^1.2.0 - find-up: ^4.1.0 - get-caller-file: ^2.0.1 + cliui: ^8.0.1 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 require-directory: ^2.1.1 - require-main-filename: ^2.0.0 - set-blocking: ^2.0.0 - string-width: ^4.2.0 - which-module: ^2.0.0 - y18n: ^4.0.0 - yargs-parser: ^18.1.2 - checksum: 40b974f508d8aed28598087720e086ecd32a5fd3e945e95ea4457da04ee9bdb8bdd17fd91acff36dc5b7f0595a735929c514c40c402416bbb87c03f6fb782373 + string-width: ^4.2.3 + y18n: ^5.0.5 + yargs-parser: ^21.1.1 + checksum: 47da1b0d854fa16d45a3ded57b716b013b2179022352a5f7467409da5a04a1eef5b3b3d97a2dfc13e8bbe5f2ffc0afe3bc6a4a72f8254e60f5a4bd7947138643 languageName: node linkType: hard From e0bb50dd0e53d8adb4f94449ef5c6ef9d9eeca34 Mon Sep 17 00:00:00 2001 From: james--nicholls Date: Tue, 7 Feb 2023 15:54:24 +0100 Subject: [PATCH 21/88] feat: synchronises with minecraft-ui branch --- CONTRIBUTING.md | 4 +- package.json | 2 +- .../@react-facet/deferred-mount/package.json | 2 +- .../{index.spec.tsx => index.spec.tsx.old} | 0 .../@react-facet/deferred-mount/src/index.tsx | 267 ++---------------- .../dom-fiber-testing-library/package.json | 3 +- .../dom-fiber/src/createFiberRoot.ts | 2 +- .../dom-fiber/src/setupHostConfig.ts | 74 ++--- tsconfig.json | 10 +- yarn.lock | 46 ++- 10 files changed, 113 insertions(+), 297 deletions(-) rename packages/@react-facet/deferred-mount/src/{index.spec.tsx => index.spec.tsx.old} (100%) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0a70bf6e..191cae8c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,7 +2,7 @@ Currently the process of updating the version of the packages is mostly manual. Before you start, first you need to make sure you have the permissions to publish the packages. -- If there is a release branch (see __Release candidate__ below) that hasn't been merged to `main` yet now is the time to do so. +- If there is a release branch (see **Release candidate** below) that hasn't been merged to `main` yet now is the time to do so. - Make sure that you are logged in into your `npm` account. Use the command `yarn npm login` on the project folder to do this. - While on the `main` branch. - Perform a search an replace on all "package.json" files from the old version to the new. (ex `0.1.4` to `0.2.0`). @@ -25,4 +25,4 @@ Currently the process of updating the version of the packages is mostly manual. - Create an annotated git tag by running `git tag -a v0.4.0-rc.0` (replace with the version). The tag message can be the version again. - Push commit and the tag `git push --follow-tags`. - Publish the packages by running `yarn publish --tag rc` (it will also build the packages). -- We are currently not doing release notes for release candidates so you are all done! 🎉 \ No newline at end of file +- We are currently not doing release notes for release candidates so you are all done! 🎉 diff --git a/package.json b/package.json index 145c1c59..6b4a7971 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "7.13.0", "@jest/core": "^29.3.1", - "@testing-library/dom": "^8.19.0", + "@testing-library/dom": "^8.20.0", "@testing-library/jest-dom": "^5.16.5", "@types/fs-extra": "^9.0.12", "@types/glob": "^7", diff --git a/packages/@react-facet/deferred-mount/package.json b/packages/@react-facet/deferred-mount/package.json index 9dcd974d..022476cb 100644 --- a/packages/@react-facet/deferred-mount/package.json +++ b/packages/@react-facet/deferred-mount/package.json @@ -30,7 +30,7 @@ "bugs": "https://github.com/Mojang/ore-ui/issues", "license": "MIT", "version": "0.4.3", - "main": "src/index.tsx", + "main": "dist/index.js", "publishConfig": { "main": "dist/index.js", "types": "dist/index.d.ts" diff --git a/packages/@react-facet/deferred-mount/src/index.spec.tsx b/packages/@react-facet/deferred-mount/src/index.spec.tsx.old similarity index 100% rename from packages/@react-facet/deferred-mount/src/index.spec.tsx rename to packages/@react-facet/deferred-mount/src/index.spec.tsx.old diff --git a/packages/@react-facet/deferred-mount/src/index.tsx b/packages/@react-facet/deferred-mount/src/index.tsx index 74bddcbe..1484011c 100644 --- a/packages/@react-facet/deferred-mount/src/index.tsx +++ b/packages/@react-facet/deferred-mount/src/index.tsx @@ -1,194 +1,36 @@ -import React, { - createContext, - useState, - useContext, - ReactNode, - useCallback, - useRef, - useEffect, - ReactElement, -} from 'react' -import { createFacet, Facet, useFacetEffect, useFacetState } from '@react-facet/core' +import React, { createContext, useContext, FC, PropsWithChildren, useTransition, useState, useEffect } from 'react' +import { createFacet, Facet } from '@react-facet/core' -type Config = { - forceImmediateMount: boolean -} - -const DeferredMountConfig = createContext({ forceImmediateMount: false }) - -export function DeferredMountConfigProvider({ config, children }: { config: Config; children: React.ReactNode }) { - return {children} -} - -function useConfig() { - return useContext(DeferredMountConfig) -} - -/** - * Targeting around 60fps - */ -const DEFAULT_FRAME_TIME_BUDGET = 16 - -interface DeferredMountProviderProps { - children: ReactNode - - /** - * How many milliseconds we can spend mounting components. - */ - frameTimeBudget?: number -} - -export function InnerDeferredMountProvider({ - children, - frameTimeBudget = DEFAULT_FRAME_TIME_BUDGET, -}: DeferredMountProviderProps) { - const [isDeferring, setIsDeferring] = useFacetState(true) - const [requestingToRun, setRequestingToRun] = useFacetState(false) - const waitingForMountCallback = useRef(false) - - const deferredMountsRef = useRef([]) - - const pushDeferUpdateFunction = useCallback( - (updateFn: UpdateFn) => { - // Causes a re-render of this component that will kick-off the effect below - setRequestingToRun(true) - - deferredMountsRef.current.push(updateFn) - - /** - * Cleanup function that makes sure that we don't try to "mount" a deferred component - * if it has already been unmounted. - */ - return () => { - // It is most common that we will be cleaning up after all deferred mounting has been run - if (deferredMountsRef.current.length === 0 && !waitingForMountCallback.current) return - - const index = deferredMountsRef.current.indexOf(updateFn) - if (index !== -1) { - deferredMountsRef.current.splice(index, 1) - } - } - }, - [setRequestingToRun], - ) - - useFacetEffect( - (requestingToRun) => { - // Even if we are not considered to be running, we need to check if there is still - // work pending to be done. If there is... we still need to run this effect. - if (!requestingToRun && deferredMountsRef.current.length === 0 && !waitingForMountCallback.current) return - - const work = (startTimestamp: number) => { - const deferredMounts = deferredMountsRef.current - - // We need to request the new frame at the top - // otherwise, the state change at the bottom will trigger a new render - // before we have a chance to cancel - // Its not possible to detect this with unit testing, so verify on the browser - // after a change here that this function is not executing every frame unnecessarily - if (deferredMounts.length > 0 || waitingForMountCallback.current) { - frameId = window.requestAnimationFrame(work) - } else { - // Used to check if the requestAnimationFrame has stopped running - frameId = -1 - } - - let lastUpdateCost = 0 - let now = startTimestamp - - while ( - deferredMounts.length > 0 && - now - startTimestamp + lastUpdateCost < frameTimeBudget && - !waitingForMountCallback.current - ) { - const before = now - - const updateFn = deferredMounts.shift() as UpdateFn - const result = updateFn(false) - - const after = performance.now() - - lastUpdateCost = after - before - now = after - - // Can be a function that takes a callback if using DeferredMountWithCallback - const resultTakesCallback = typeof result === 'function' - - if (resultTakesCallback) { - waitingForMountCallback.current = true - - result(() => { - waitingForMountCallback.current = false - - // If the requestAnimationFrame stops running while waiting for the - // callback we need to restart it to process the rest of the queue. - if (frameId === -1) { - frameId = window.requestAnimationFrame(work) - } - }) - } - } - - if (deferredMounts.length === 0 && !waitingForMountCallback.current) { - setIsDeferring(false) - setRequestingToRun(false) - } - } +type BLANK = Record - let frameId = window.requestAnimationFrame(work) +const DeferredMountConfig = createContext({}) - return () => { - window.cancelAnimationFrame(frameId) - } - }, - [frameTimeBudget, setIsDeferring, setRequestingToRun], - [requestingToRun], - ) - - return ( - - {children} - - ) +export const DeferredMountConfigProvider: FC> = ({ children }) => { + return {children} } -/** - * Provider that must wrap a tree with nodes being deferred - */ -export function DeferredMountProvider(props: DeferredMountProviderProps) { - const config = useConfig() - if (config.forceImmediateMount) { - return <>{props.children} - } - - return +export const InnerDeferredMountProvider: FC> = ({ children }) => { + return <>{children} } -interface DeferredMountProps { - children: ReactElement +export const DeferredMountProvider: FC> = ({ children }) => { + return <>{children} } -/** - * Component that should wrap some mounting that must be deferred to a later frame - * @param children component to be mounted deferred - */ -export function DeferredMount({ children }: DeferredMountProps) { - const pushDeferUpdateFunction = useContext(pushDeferUpdateContext) - const [deferred, setDeferred] = useState(pushDeferUpdateFunction != null) +export const DeferredMount: FC void }>> = ({ children, isReady }) => { + const [pending, startTransition] = useTransition() useEffect(() => { - if (pushDeferUpdateFunction) pushDeferUpdateFunction(setDeferred) - }, [pushDeferUpdateFunction]) - - if (deferred) return null - return children -} + startTransition(() => { + isReady && isReady(pending) + }) + }, [startTransition]) -interface DeferredMountWithCallbackProps { - children: ReactElement + return <>{children} } const NotifyMountComplete = createContext(() => {}) + export const useNotifyMountComplete = () => useContext(NotifyMountComplete) /** @@ -196,48 +38,19 @@ export const useNotifyMountComplete = () => useContext(NotifyMountComplete) * This will wait for a callback from the child component before marking itself as rendered. * @param children component to be mounted deferred */ -export function DeferredMountWithCallback({ children }: DeferredMountWithCallbackProps) { - const pushDeferUpdateFunction = useContext(pushDeferUpdateContext) - const [deferred, setDeferred] = useState(pushDeferUpdateFunction != null) - const resolveMountComplete = useRef<(value: void | PromiseLike) => void>() - const mountCompleteBeforeInitialization = useRef(false) - - const onMountComplete = useCallback(() => { - if (resolveMountComplete.current != null) { - resolveMountComplete.current() - } else { - mountCompleteBeforeInitialization.current = true - } - }, []) - - useEffect(() => { - if (pushDeferUpdateFunction) - pushDeferUpdateFunction((isDeferred) => { - return (resolve) => { - setDeferred(isDeferred) - - if (mountCompleteBeforeInitialization.current) { - resolve() - } else { - resolveMountComplete.current = resolve - } - } - }) - }, [pushDeferUpdateFunction, onMountComplete]) - - if (deferred) return null - return {children} +export const DeferredMountWithCallback: FC> = ({ children }) => { + return <>{children} } -interface ImmediateMountProps { - children: ReactElement -} +const isDeferringContext = createContext>(createFacet({ initialValue: false })) + +const isPausedContext = createContext(false) /** * Hook that informs if any mounting is currently being deferred * Can be used to show some loading indicator */ -export function useIsDeferring() { +export const useIsDeferring = () => { return useContext(isDeferringContext) } @@ -245,43 +58,21 @@ export function useIsDeferring() { * Allow us to pause costly mounting (mounting) of components * So that transitions can occur */ -export function useIsPaused() { +export const useIsPaused = () => { return useContext(isPausedContext) } /** * API compatible component with DeferredMount, but renders immediately */ -export function ImmediateMount({ children }: ImmediateMountProps) { - return children -} - -interface UpdateFn { - (deferred: boolean): void | ((onMountComplete: () => void) => void) -} - -interface PushDeferUpdateFunction { - (updateFn: UpdateFn): void +export const ImmediateMount: FC> = ({ children }) => { + return <>{children} } -const pushDeferUpdateContext = createContext(undefined) - -const isDeferringContext = createContext>(createFacet({ initialValue: false })) - -const isPausedContext = createContext(false) - /** * This pauses the mounting of children components. * Given it affects mounting, it should only happen the first time! Asking to pause again in the future is not possible */ -export function PauseMountProvider({ paused, children }: { paused: boolean; children: ReactNode }) { - const wasEverResumed = useRef(!paused) - - useEffect(() => { - if (!paused) { - wasEverResumed.current = true - } - }, [paused]) - - return {children} +export const PauseMountProvider: FC> = ({ children }) => { + return <>{children} } diff --git a/packages/@react-facet/dom-fiber-testing-library/package.json b/packages/@react-facet/dom-fiber-testing-library/package.json index 02f35b89..1eac0c1f 100644 --- a/packages/@react-facet/dom-fiber-testing-library/package.json +++ b/packages/@react-facet/dom-fiber-testing-library/package.json @@ -41,7 +41,7 @@ "prepublish": "yarn build" }, "dependencies": { - "@testing-library/dom": "^8.19.0" + "@testing-library/dom": "^8.20.0" }, "peerDependencies": { "@react-facet/dom-fiber": "0.4.3", @@ -49,6 +49,7 @@ }, "devDependencies": { "@react-facet/dom-fiber": "0.4.3", + "@testing-library/react": "^13.4.0", "react": "18.1.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" diff --git a/packages/@react-facet/dom-fiber/src/createFiberRoot.ts b/packages/@react-facet/dom-fiber/src/createFiberRoot.ts index a174d8d6..512fe41a 100644 --- a/packages/@react-facet/dom-fiber/src/createFiberRoot.ts +++ b/packages/@react-facet/dom-fiber/src/createFiberRoot.ts @@ -16,7 +16,7 @@ export const createFiberRoot = }, ConcurrentRoot, null, - true, + false, true, '', (error) => console.error('[@react-facet/dom-fiber]', error), diff --git a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts index a1196951..ce52d450 100644 --- a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts +++ b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts @@ -57,14 +57,14 @@ export const setupHostConfig = (): HostConfig< supportsHydration: false, supportsMicrotask: true, - scheduleMicrotask: (callback) => Promise - .resolve(null) - .then(callback) - .catch((error) => { - setTimeout(() => { - throw error - }) - }), + scheduleMicrotask: (callback) => + Promise.resolve(null) + .then(callback) + .catch((error) => { + setTimeout(() => { + throw error + }) + }), getCurrentEventPriority: () => { return DefaultEventPriority @@ -74,11 +74,11 @@ export const setupHostConfig = (): HostConfig< return null }, - beforeActiveInstanceBlur: () => { }, - afterActiveInstanceBlur: () => { }, - prepareScopeUpdate: () => { }, + beforeActiveInstanceBlur: () => {}, + afterActiveInstanceBlur: () => {}, + prepareScopeUpdate: () => {}, getInstanceFromScope: () => null, - detachDeletedInstance: () => { }, + detachDeletedInstance: () => {}, clearContainer: () => false, @@ -100,27 +100,27 @@ export const setupHostConfig = (): HostConfig< noTimeout: noop, - preparePortalMount: function() { }, + preparePortalMount: function () {}, - getRootHostContext: function() { + getRootHostContext: function () { return EMPTY }, - getChildHostContext: function() { + getChildHostContext: function () { return EMPTY }, - shouldSetTextContent: function() { + shouldSetTextContent: function () { return false }, - createTextInstance: function(newText) { + createTextInstance: function (newText) { return { element: document.createTextNode(newText), } }, - createInstance: function(externalType, newProps) { + createInstance: function (externalType, newProps) { if (externalType === 'fast-text') { const element = document.createTextNode('') @@ -332,23 +332,23 @@ export const setupHostConfig = (): HostConfig< } }, - finalizeInitialChildren: function() { + finalizeInitialChildren: function () { return false }, - prepareForCommit: function() { + prepareForCommit: function () { return null }, - resetAfterCommit: function() { }, + resetAfterCommit: function () {}, - commitMount: function() { }, + commitMount: function () {}, - prepareUpdate: function() { + prepareUpdate: function () { return true }, - commitUpdate: function(instance, updatePayload, type, oldProps, newProps) { + commitUpdate: function (instance, updatePayload, type, oldProps, newProps) { const { element: uncastElement } = instance if (type === 'fast-text') { @@ -985,11 +985,11 @@ export const setupHostConfig = (): HostConfig< } }, - commitTextUpdate: function(textInstance, oldText, newText) { + commitTextUpdate: function (textInstance, oldText, newText) { textInstance.element.nodeValue = newText }, - appendInitialChild: function(parent, child) { + appendInitialChild: function (parent, child) { if (isElementContainer(child)) { parent.children.add(child) } @@ -997,7 +997,7 @@ export const setupHostConfig = (): HostConfig< parent.element.appendChild(child.element) }, - appendChildToContainer: function(parent, child) { + appendChildToContainer: function (parent, child) { if (isElementContainer(child)) { parent.children.add(child) } @@ -1005,7 +1005,7 @@ export const setupHostConfig = (): HostConfig< parent.element.appendChild(child.element) }, - appendChild: function(parentInstance, child) { + appendChild: function (parentInstance, child) { if (isElementContainer(child)) { parentInstance.children.add(child) } @@ -1013,11 +1013,11 @@ export const setupHostConfig = (): HostConfig< parentInstance.element.appendChild(child.element) }, - insertBefore: function(parentInstance, child, beforeChild) { + insertBefore: function (parentInstance, child, beforeChild) { parentInstance.element.insertBefore(child.element, beforeChild.element) }, - removeChild: function(parentInstance, child) { + removeChild: function (parentInstance, child) { if (isElementContainer(child)) { cleanupElementContainer(parentInstance, child) } @@ -1025,11 +1025,11 @@ export const setupHostConfig = (): HostConfig< parentInstance.element.removeChild(child.element) }, - insertInContainerBefore: function(container, child, beforeChild) { + insertInContainerBefore: function (container, child, beforeChild) { container.element.insertBefore(child.element, beforeChild.element) }, - removeChildFromContainer: function(container, child) { + removeChildFromContainer: function (container, child) { if (isElementContainer(child)) { cleanupElementContainer(container, child) } @@ -1037,15 +1037,15 @@ export const setupHostConfig = (): HostConfig< container.element.removeChild(child.element) }, - resetTextContent: function(instance) { + resetTextContent: function (instance) { instance.element.textContent = '' }, - getPublicInstance: function(instance) { + getPublicInstance: function (instance) { return instance.element }, hideInstance(instance) { - console.log("Hidden: ", instance) + console.log('Hidden: ', instance) // Detach while the instance is hidden // const { attach: type, parent } = instance.__r3f ?? {} // if (type && parent) detach(parent, instance, type) @@ -1053,7 +1053,7 @@ export const setupHostConfig = (): HostConfig< // invalidateInstance(instance) }, unhideInstance(instance, props) { - console.log("Unhidden: ", instance, props) + console.log('Unhidden: ', instance, props) // Re-attach when the instance is unhidden // const { attach: type, parent } = instance.__r3f ?? {} // if (type && parent) attach(parent, instance, type) @@ -1093,7 +1093,7 @@ const cleanupElementContainer = (parent: ElementContainer, instance: ElementCont instance.text?.() } -const noop = () => { } +const noop = () => {} const EMPTY = {} diff --git a/tsconfig.json b/tsconfig.json index a711293f..d4840c40 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,11 +1,11 @@ { "compilerOptions": { "baseUrl": ".", - "paths": { - "@react-facet/core": ["packages/@react-facet/core/*"], - "@react-facet/dom-fiber": ["packages/@react-facet/dom-fiber/*"], - "@react-facet/dom-fiber-testing-library": ["packages/@react-facet/dom-fiber-testing-library/*"] - }, + "paths": { + "@react-facet/core": ["packages/@react-facet/core/*"], + "@react-facet/dom-fiber": ["packages/@react-facet/dom-fiber/*"], + "@react-facet/dom-fiber-testing-library": ["packages/@react-facet/dom-fiber-testing-library/*"] + }, "outDir": "dist", "target": "es6", "moduleResolution": "node", diff --git a/yarn.lock b/yarn.lock index 59707311..99d643f0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1568,7 +1568,8 @@ __metadata: resolution: "@react-facet/dom-fiber-testing-library@workspace:packages/@react-facet/dom-fiber-testing-library" dependencies: "@react-facet/dom-fiber": 0.4.3 - "@testing-library/dom": ^8.19.0 + "@testing-library/dom": ^8.20.0 + "@testing-library/react": ^13.4.0 react: 18.1.0 rimraf: ^3.0.2 typescript: ^4.8.2 @@ -1693,19 +1694,19 @@ __metadata: languageName: node linkType: hard -"@testing-library/dom@npm:^8.19.0": - version: 8.19.0 - resolution: "@testing-library/dom@npm:8.19.0" +"@testing-library/dom@npm:^8.20.0, @testing-library/dom@npm:^8.5.0": + version: 8.20.0 + resolution: "@testing-library/dom@npm:8.20.0" dependencies: "@babel/code-frame": ^7.10.4 "@babel/runtime": ^7.12.5 - "@types/aria-query": ^4.2.0 + "@types/aria-query": ^5.0.1 aria-query: ^5.0.0 chalk: ^4.1.0 dom-accessibility-api: ^0.5.9 lz-string: ^1.4.4 pretty-format: ^27.0.2 - checksum: 6bb93fef96703b6c47cf1b7cc8f71d402a9576084a94ba4e9926f51bd7bb1287fbb4f6942d82bd03fc6f3d998ae97e60f6aea4618f3a1ce6139597d2a4ecb7b9 + checksum: 1e599129a2fe91959ce80900a0a4897232b89e2a8e22c1f5950c36d39c97629ea86b4986b60b173b5525a05de33fde1e35836ea597b03de78cc51b122835c6f0 languageName: node linkType: hard @@ -1726,6 +1727,20 @@ __metadata: languageName: node linkType: hard +"@testing-library/react@npm:^13.4.0": + version: 13.4.0 + resolution: "@testing-library/react@npm:13.4.0" + dependencies: + "@babel/runtime": ^7.12.5 + "@testing-library/dom": ^8.5.0 + "@types/react-dom": ^18.0.0 + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: 51ec548c1fdb1271089a5c63e0908f0166f2c7fcd9cacd3108ebbe0ce64cb4351812d885892020dc37608418cfb15698514856502b3cab0e5cc58d6cc1bd4a3e + languageName: node + linkType: hard + "@testing-library/react@npm:^9.4.1": version: 9.5.0 resolution: "@testing-library/react@npm:9.5.0" @@ -1782,10 +1797,10 @@ __metadata: languageName: node linkType: hard -"@types/aria-query@npm:^4.2.0": - version: 4.2.2 - resolution: "@types/aria-query@npm:4.2.2" - checksum: 6f2ce11d91e2d665f3873258db19da752d91d85d3679eb5efcdf9c711d14492287e1e4eb52613b28e60375841a9e428594e745b68436c963d8bad4bf72188df3 +"@types/aria-query@npm:^5.0.1": + version: 5.0.1 + resolution: "@types/aria-query@npm:5.0.1" + checksum: 69fd7cceb6113ed370591aef04b3fd0742e9a1b06dd045c43531448847b85de181495e4566f98e776b37c422a12fd71866e0a1dfd904c5ec3f84d271682901de languageName: node linkType: hard @@ -2055,6 +2070,15 @@ __metadata: languageName: node linkType: hard +"@types/react-dom@npm:^18.0.0": + version: 18.0.10 + resolution: "@types/react-dom@npm:18.0.10" + dependencies: + "@types/react": "*" + checksum: ff8282d5005a0b1cd95fb65bf79d3d8485e4cfe2aaf052129033a178684b940014a3f4536bc20d573f8a01cf4c6f4770c74988cef7c2b5cac3041d9f172647e3 + languageName: node + linkType: hard + "@types/react-dom@npm:^18.0.5": version: 18.0.5 resolution: "@types/react-dom@npm:18.0.5" @@ -8625,7 +8649,7 @@ __metadata: "@babel/preset-react": ^7.18.6 "@babel/preset-typescript": 7.13.0 "@jest/core": ^29.3.1 - "@testing-library/dom": ^8.19.0 + "@testing-library/dom": ^8.20.0 "@testing-library/jest-dom": ^5.16.5 "@types/fs-extra": ^9.0.12 "@types/glob": ^7 From a4a22f2e68a58b2336c250398bcc4eb409a1fdd2 Mon Sep 17 00:00:00 2001 From: james--nicholls Date: Wed, 8 Feb 2023 09:52:36 +0100 Subject: [PATCH 22/88] test: wraps test component with act --- packages/@react-facet/dom-fiber/src/setupHostConfig.spec.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/@react-facet/dom-fiber/src/setupHostConfig.spec.tsx b/packages/@react-facet/dom-fiber/src/setupHostConfig.spec.tsx index 36891691..e22c9daa 100644 --- a/packages/@react-facet/dom-fiber/src/setupHostConfig.spec.tsx +++ b/packages/@react-facet/dom-fiber/src/setupHostConfig.spec.tsx @@ -1655,7 +1655,9 @@ describe('update', () => { useEffect(() => { setTimeout(() => { - setSecond(true) + act(() => { + setSecond(true) + }) }, 1000) }, []) From 75004e2503edf2bbaa97e9f42017148d7b0362e7 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 5 Jun 2023 10:14:34 +0200 Subject: [PATCH 23/88] Remove unused dependencies and fix one Jest warning --- packages/@react-facet/core/jest.config.js | 1 - .../deferred-mount/jest.config.js | 1 - .../dom-components/jest.config.js | 1 - .../@react-facet/dom-components/package.json | 1 - .../dom-fiber-testing-library/jest.config.js | 1 - .../dom-fiber-testing-library/package.json | 1 - .../@react-facet/dom-fiber/jest.config.js | 1 - .../@react-facet/shared-facet/jest.config.js | 1 - packages/@react-facet/spring/jest.config.js | 1 - packages/@react-facet/spring/package.json | 1 - yarn.lock | 224 +----------------- 11 files changed, 5 insertions(+), 229 deletions(-) diff --git a/packages/@react-facet/core/jest.config.js b/packages/@react-facet/core/jest.config.js index ec033628..93714085 100644 --- a/packages/@react-facet/core/jest.config.js +++ b/packages/@react-facet/core/jest.config.js @@ -5,7 +5,6 @@ const projectName = require('./package.json').name module.exports = { ...baseConfig, - name: projectName, displayName: projectName, rootDir: './', } diff --git a/packages/@react-facet/deferred-mount/jest.config.js b/packages/@react-facet/deferred-mount/jest.config.js index ec033628..93714085 100644 --- a/packages/@react-facet/deferred-mount/jest.config.js +++ b/packages/@react-facet/deferred-mount/jest.config.js @@ -5,7 +5,6 @@ const projectName = require('./package.json').name module.exports = { ...baseConfig, - name: projectName, displayName: projectName, rootDir: './', } diff --git a/packages/@react-facet/dom-components/jest.config.js b/packages/@react-facet/dom-components/jest.config.js index ec033628..93714085 100644 --- a/packages/@react-facet/dom-components/jest.config.js +++ b/packages/@react-facet/dom-components/jest.config.js @@ -5,7 +5,6 @@ const projectName = require('./package.json').name module.exports = { ...baseConfig, - name: projectName, displayName: projectName, rootDir: './', } diff --git a/packages/@react-facet/dom-components/package.json b/packages/@react-facet/dom-components/package.json index d56ddfb7..ed0425ae 100644 --- a/packages/@react-facet/dom-components/package.json +++ b/packages/@react-facet/dom-components/package.json @@ -48,7 +48,6 @@ "@react-facet/core": "0.4.5", "@react-facet/dom-fiber-testing-library": "0.4.5", "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^9.4.1", "@types/react": "^18.0.8", "@types/rimraf": "^3", "cross-env": "^7.0.3", diff --git a/packages/@react-facet/dom-fiber-testing-library/jest.config.js b/packages/@react-facet/dom-fiber-testing-library/jest.config.js index ec033628..93714085 100644 --- a/packages/@react-facet/dom-fiber-testing-library/jest.config.js +++ b/packages/@react-facet/dom-fiber-testing-library/jest.config.js @@ -5,7 +5,6 @@ const projectName = require('./package.json').name module.exports = { ...baseConfig, - name: projectName, displayName: projectName, rootDir: './', } diff --git a/packages/@react-facet/dom-fiber-testing-library/package.json b/packages/@react-facet/dom-fiber-testing-library/package.json index fc6b1679..adb2fa61 100644 --- a/packages/@react-facet/dom-fiber-testing-library/package.json +++ b/packages/@react-facet/dom-fiber-testing-library/package.json @@ -49,7 +49,6 @@ }, "devDependencies": { "@react-facet/dom-fiber": "0.4.5", - "@testing-library/react": "^13.4.0", "react": "18.1.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" diff --git a/packages/@react-facet/dom-fiber/jest.config.js b/packages/@react-facet/dom-fiber/jest.config.js index ec033628..93714085 100644 --- a/packages/@react-facet/dom-fiber/jest.config.js +++ b/packages/@react-facet/dom-fiber/jest.config.js @@ -5,7 +5,6 @@ const projectName = require('./package.json').name module.exports = { ...baseConfig, - name: projectName, displayName: projectName, rootDir: './', } diff --git a/packages/@react-facet/shared-facet/jest.config.js b/packages/@react-facet/shared-facet/jest.config.js index ec033628..93714085 100644 --- a/packages/@react-facet/shared-facet/jest.config.js +++ b/packages/@react-facet/shared-facet/jest.config.js @@ -5,7 +5,6 @@ const projectName = require('./package.json').name module.exports = { ...baseConfig, - name: projectName, displayName: projectName, rootDir: './', } diff --git a/packages/@react-facet/spring/jest.config.js b/packages/@react-facet/spring/jest.config.js index ec033628..93714085 100644 --- a/packages/@react-facet/spring/jest.config.js +++ b/packages/@react-facet/spring/jest.config.js @@ -5,7 +5,6 @@ const projectName = require('./package.json').name module.exports = { ...baseConfig, - name: projectName, displayName: projectName, rootDir: './', } diff --git a/packages/@react-facet/spring/package.json b/packages/@react-facet/spring/package.json index 54f2a5fd..5f2dc22b 100644 --- a/packages/@react-facet/spring/package.json +++ b/packages/@react-facet/spring/package.json @@ -47,7 +47,6 @@ "devDependencies": { "@react-facet/core": "0.4.5", "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^9.4.1", "@types/react": "^18.0.8", "@types/rimraf": "^3", "cross-env": "^7.0.3", diff --git a/yarn.lock b/yarn.lock index 95ddcb66..581ceb29 100644 --- a/yarn.lock +++ b/yarn.lock @@ -878,17 +878,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime-corejs3@npm:^7.10.2": - version: 7.15.4 - resolution: "@babel/runtime-corejs3@npm:7.15.4" - dependencies: - core-js-pure: ^3.16.0 - regenerator-runtime: ^0.13.4 - checksum: ba3b7ed66a00e4d00b0ee1d7a9b9902007c1cd1db511a6153032f19ed964d3a22ef76d8f75ff7d14da9ff70f1b43edba6eccce55097a78e84d249c2991c9959e - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.9.2": version: 7.15.4 resolution: "@babel/runtime@npm:7.15.4" dependencies: @@ -1311,29 +1301,6 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^24.9.0": - version: 24.9.0 - resolution: "@jest/types@npm:24.9.0" - dependencies: - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^1.1.1 - "@types/yargs": ^13.0.0 - checksum: 603698f774cf22f9d16a0e0fac9e10e7db21052aebfa33db154c8a5940e0eb1fa9c079a8c91681041ad3aeee2adfa950608dd0c663130316ba034b8bca7b301c - languageName: node - linkType: hard - -"@jest/types@npm:^25.5.0": - version: 25.5.0 - resolution: "@jest/types@npm:25.5.0" - dependencies: - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^1.1.1 - "@types/yargs": ^15.0.0 - chalk: ^3.0.0 - checksum: 785b67521a2c54f290ad4b53f49fec6b14fa25828bf26a838f7bbe08dd42122f27f71a620ea9a33286346786e9b120dd370abf589e6ef8c5fde9dc56906880b1 - languageName: node - linkType: hard - "@jest/types@npm:^26.6.2": version: 26.6.2 resolution: "@jest/types@npm:26.6.2" @@ -1568,7 +1535,6 @@ __metadata: "@react-facet/core": 0.4.5 "@react-facet/dom-fiber-testing-library": 0.4.5 "@testing-library/jest-dom": ^5.16.5 - "@testing-library/react": ^9.4.1 "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 @@ -1588,7 +1554,6 @@ __metadata: dependencies: "@react-facet/dom-fiber": 0.4.5 "@testing-library/dom": ^8.20.0 - "@testing-library/react": ^13.4.0 react: 18.1.0 rimraf: ^3.0.2 typescript: ^4.8.2 @@ -1674,7 +1639,6 @@ __metadata: dependencies: "@react-facet/core": 0.4.5 "@testing-library/jest-dom": ^5.16.5 - "@testing-library/react": ^9.4.1 "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 @@ -1698,13 +1662,6 @@ __metadata: languageName: node linkType: hard -"@sheerun/mutationobserver-shim@npm:^0.3.2": - version: 0.3.3 - resolution: "@sheerun/mutationobserver-shim@npm:0.3.3" - checksum: 1bf2984b1ac69459ebd5adefd767439533c73c1fcba54678b73dd37f092b1471e322e6ac8937e899231315fc08c4e818d7e7cb2204babab8b32460872f2de868 - languageName: node - linkType: hard - "@sinclair/typebox@npm:^0.24.1": version: 0.24.51 resolution: "@sinclair/typebox@npm:0.24.51" @@ -1730,22 +1687,7 @@ __metadata: languageName: node linkType: hard -"@testing-library/dom@npm:^6.15.0": - version: 6.16.0 - resolution: "@testing-library/dom@npm:6.16.0" - dependencies: - "@babel/runtime": ^7.8.4 - "@sheerun/mutationobserver-shim": ^0.3.2 - "@types/testing-library__dom": ^6.12.1 - aria-query: ^4.0.2 - dom-accessibility-api: ^0.3.0 - pretty-format: ^25.1.0 - wait-for-expect: ^3.0.2 - checksum: bc6a8e073caf4d427777d1d43df581f5befd543ea396831fcf7421bd28dc168f85c03251932ea01593e6fc214022b14178e702aa7aa97137d0fba9baecd98f93 - languageName: node - linkType: hard - -"@testing-library/dom@npm:^8.20.0, @testing-library/dom@npm:^8.5.0": +"@testing-library/dom@npm:^8.20.0": version: 8.20.0 resolution: "@testing-library/dom@npm:8.20.0" dependencies: @@ -1778,34 +1720,6 @@ __metadata: languageName: node linkType: hard -"@testing-library/react@npm:^13.4.0": - version: 13.4.0 - resolution: "@testing-library/react@npm:13.4.0" - dependencies: - "@babel/runtime": ^7.12.5 - "@testing-library/dom": ^8.5.0 - "@types/react-dom": ^18.0.0 - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: 51ec548c1fdb1271089a5c63e0908f0166f2c7fcd9cacd3108ebbe0ce64cb4351812d885892020dc37608418cfb15698514856502b3cab0e5cc58d6cc1bd4a3e - languageName: node - linkType: hard - -"@testing-library/react@npm:^9.4.1": - version: 9.5.0 - resolution: "@testing-library/react@npm:9.5.0" - dependencies: - "@babel/runtime": ^7.8.4 - "@testing-library/dom": ^6.15.0 - "@types/testing-library__react": ^9.1.2 - peerDependencies: - react: "*" - react-dom: "*" - checksum: 41a7ba9f944774b180e907df7e8e0a309d68199e9ad1bcdc571fa062c2cf73c76b5b5291f14fd63633506a6cdcbb7b6f31733ff886303fc5e4d7616c78f0747b - languageName: node - linkType: hard - "@tootallnate/once@npm:1": version: 1.1.2 resolution: "@tootallnate/once@npm:1.1.2" @@ -2005,16 +1919,6 @@ __metadata: languageName: node linkType: hard -"@types/istanbul-reports@npm:^1.1.1": - version: 1.1.2 - resolution: "@types/istanbul-reports@npm:1.1.2" - dependencies: - "@types/istanbul-lib-coverage": "*" - "@types/istanbul-lib-report": "*" - checksum: 00866e815d1e68d0a590d691506937b79d8d65ad8eab5ed34dbfee66136c7c0f4ea65327d32046d5fe469f22abea2b294987591dc66365ebc3991f7e413b2d78 - languageName: node - linkType: hard - "@types/istanbul-reports@npm:^3.0.0": version: 3.0.1 resolution: "@types/istanbul-reports@npm:3.0.1" @@ -2112,24 +2016,6 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:*": - version: 17.0.9 - resolution: "@types/react-dom@npm:17.0.9" - dependencies: - "@types/react": "*" - checksum: b7e898e1a22643a371f58e801a3d1d8cf13a82d77063c24be73e840ef8d877ca1d04adc5db168d0dac3167dc050a26b1d70efc5fe8566a7f46a3c488a8322989 - languageName: node - linkType: hard - -"@types/react-dom@npm:^18.0.0": - version: 18.0.10 - resolution: "@types/react-dom@npm:18.0.10" - dependencies: - "@types/react": "*" - checksum: ff8282d5005a0b1cd95fb65bf79d3d8485e4cfe2aaf052129033a178684b940014a3f4536bc20d573f8a01cf4c6f4770c74988cef7c2b5cac3041d9f172647e3 - languageName: node - linkType: hard - "@types/react-dom@npm:^18.0.5": version: 18.0.5 resolution: "@types/react-dom@npm:18.0.5" @@ -2212,24 +2098,6 @@ __metadata: languageName: node linkType: hard -"@types/testing-library__dom@npm:*": - version: 7.0.2 - resolution: "@types/testing-library__dom@npm:7.0.2" - dependencies: - pretty-format: ^25.1.0 - checksum: cc192d6f16e3589e67b921b73ddd3140b7f8106e57f3fb19874f7b1c5f891049e2fe372f112331d49febc260b158df75b3da466499e0fd79c223cfe126d64f46 - languageName: node - linkType: hard - -"@types/testing-library__dom@npm:^6.12.1": - version: 6.14.0 - resolution: "@types/testing-library__dom@npm:6.14.0" - dependencies: - pretty-format: ^24.3.0 - checksum: 1563762a685bb15da02499e826e0dd217c209e8bcdde9f65d98090cc0d50fc74a22af0ecb8803edd48159f8cc2bb0d750acdea0f2a11d0c59e969e69ab2fc8b8 - languageName: node - linkType: hard - "@types/testing-library__jest-dom@npm:^5.9.1": version: 5.14.1 resolution: "@types/testing-library__jest-dom@npm:5.14.1" @@ -2239,17 +2107,6 @@ __metadata: languageName: node linkType: hard -"@types/testing-library__react@npm:^9.1.2": - version: 9.1.3 - resolution: "@types/testing-library__react@npm:9.1.3" - dependencies: - "@types/react-dom": "*" - "@types/testing-library__dom": "*" - pretty-format: ^25.1.0 - checksum: 2fc33f97d17fea35f1215cd1cd5899cbec4be897f2e21b13bf32cbac4234c88ca685517bdd142c1cebc8ee1ff74fa5ce5aff770f907f3bc116dc578e85972685 - languageName: node - linkType: hard - "@types/tough-cookie@npm:*": version: 4.0.2 resolution: "@types/tough-cookie@npm:4.0.2" @@ -2264,15 +2121,6 @@ __metadata: languageName: node linkType: hard -"@types/yargs@npm:^13.0.0": - version: 13.0.12 - resolution: "@types/yargs@npm:13.0.12" - dependencies: - "@types/yargs-parser": "*" - checksum: 4eb34d8c071892299646e5a3fb02a643f5a5ea8da8f4d1817001882ebbcfa4fbda235b8978732f8eb55fa16433296e2087907fe69678a69125f0dca627a91426 - languageName: node - linkType: hard - "@types/yargs@npm:^15.0.0": version: 15.0.14 resolution: "@types/yargs@npm:15.0.14" @@ -2840,14 +2688,7 @@ __metadata: languageName: node linkType: hard -"ansi-regex@npm:^4.0.0": - version: 4.1.0 - resolution: "ansi-regex@npm:4.1.0" - checksum: 97aa4659538d53e5e441f5ef2949a3cffcb838e57aeaad42c4194e9d7ddb37246a6526c4ca85d3940a9d1e19b11cc2e114530b54c9d700c8baf163c31779baf8 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.0, ansi-regex@npm:^5.0.1": +"ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b @@ -2861,7 +2702,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": +"ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" dependencies: @@ -2939,16 +2780,6 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^4.0.2": - version: 4.2.2 - resolution: "aria-query@npm:4.2.2" - dependencies: - "@babel/runtime": ^7.10.2 - "@babel/runtime-corejs3": ^7.10.2 - checksum: 38401a9a400f26f3dcc24b84997461a16b32869a9893d323602bed8da40a8bcc0243b8d2880e942249a1496cea7a7de769e93d21c0baa439f01e1ee936fed665 - languageName: node - linkType: hard - "aria-query@npm:^5.0.0": version: 5.0.0 resolution: "aria-query@npm:5.0.0" @@ -4007,13 +3838,6 @@ __metadata: languageName: node linkType: hard -"core-js-pure@npm:^3.16.0": - version: 3.18.2 - resolution: "core-js-pure@npm:3.18.2" - checksum: 1f8ddec0c4f3203ad185c0208b635ec4242fe004282d3cd0e6bb8386b4dcb21b43c702a4aa5254bbbfb3dc611301ddcf9af5b6714c926dce5563c380b7a314a5 - languageName: node - linkType: hard - "core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" @@ -4444,13 +4268,6 @@ __metadata: languageName: node linkType: hard -"dom-accessibility-api@npm:^0.3.0": - version: 0.3.0 - resolution: "dom-accessibility-api@npm:0.3.0" - checksum: d54996748e8c81d4fe095edde0a601c94133c2f4c7e0e245310272c4c04af2c4daf476e5150d27b94b22a6e11816ea97d16125ed135e2607a2a63477fcc7feb8 - languageName: node - linkType: hard - "dom-accessibility-api@npm:^0.5.6": version: 0.5.8 resolution: "dom-accessibility-api@npm:0.5.8" @@ -9034,30 +8851,6 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^24.3.0": - version: 24.9.0 - resolution: "pretty-format@npm:24.9.0" - dependencies: - "@jest/types": ^24.9.0 - ansi-regex: ^4.0.0 - ansi-styles: ^3.2.0 - react-is: ^16.8.4 - checksum: ba9291c8dafd50d2fea1fbad5d2863a6f94e0c8835cce9778ec03bc11bb0f52b9ed0e4ee56aaa331d022ccae2fe52b92f73465a0af58fd0edb59deb6391c6847 - languageName: node - linkType: hard - -"pretty-format@npm:^25.1.0": - version: 25.5.0 - resolution: "pretty-format@npm:25.5.0" - dependencies: - "@jest/types": ^25.5.0 - ansi-regex: ^5.0.0 - ansi-styles: ^4.0.0 - react-is: ^16.12.0 - checksum: 76f022d2c911d9733a961467545f5aef2cae892da289fff92ba6a6868a10df4d8ef79794ff791e353f67f0edfa85765240f1e7d552e27c94029ae6af1c95174b - languageName: node - linkType: hard - "pretty-format@npm:^27.0.0, pretty-format@npm:^27.0.2, pretty-format@npm:^27.2.5": version: 27.2.5 resolution: "pretty-format@npm:27.2.5" @@ -9310,7 +9103,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.12.0, react-is@npm:^16.13.1, react-is@npm:^16.8.1, react-is@npm:^16.8.4": +"react-is@npm:^16.13.1, react-is@npm:^16.8.1": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f @@ -11197,13 +10990,6 @@ typescript@^4.8.2: languageName: node linkType: hard -"wait-for-expect@npm:^3.0.2": - version: 3.0.2 - resolution: "wait-for-expect@npm:3.0.2" - checksum: 2ec1ebd78023fa10bdcf53d78bbd65feea68fdfa0de0b00f3a72f3df089118b91517839ff3926e5ef6cfd1ede65085326d85b0378d4db62c266cc9c859c2de56 - languageName: node - linkType: hard - "walker@npm:^1.0.7, walker@npm:~1.0.5": version: 1.0.7 resolution: "walker@npm:1.0.7" From c10d346610445780058262d294fb6cb60a15bca9 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 5 Jun 2023 10:17:42 +0200 Subject: [PATCH 24/88] Remove junit and sonar reporters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit They were warning after the recent jest upgrade, and we don’t really have a use-case for them at the momement. --- jest.base.config.js | 1 - jest.testResultsProcessor.js | 6 ------ package.json | 2 -- 3 files changed, 9 deletions(-) delete mode 100644 jest.testResultsProcessor.js diff --git a/jest.base.config.js b/jest.base.config.js index 109d2c71..37d108d3 100644 --- a/jest.base.config.js +++ b/jest.base.config.js @@ -5,7 +5,6 @@ module.exports = { testEnvironment: 'jsdom', testEnvironmentOptions: { url: 'http://localhost' }, watchPathIgnorePatterns: ['/dist/'], - testResultsProcessor: '/../../../jest.testResultsProcessor.js', moduleFileExtensions: ['tsx', 'js', 'ts'], testMatch: ['**/?(*.)+(spec|test).js?(x)', '**/?(*.)+(spec|test).ts?(x)'], setupFilesAfterEnv: ['/../../../jest.setupTestFrameworkScriptFile.js'], diff --git a/jest.testResultsProcessor.js b/jest.testResultsProcessor.js deleted file mode 100644 index 8ea8695a..00000000 --- a/jest.testResultsProcessor.js +++ /dev/null @@ -1,6 +0,0 @@ -/* eslint-env node */ - -const { compose } = require('ramda') - -// run both custom reports -module.exports = compose(require('jest-junit-reporter'), require('jest-sonar-reporter')) diff --git a/package.json b/package.json index 6b4a7971..da98a199 100644 --- a/package.json +++ b/package.json @@ -45,8 +45,6 @@ "jest": "^29.3.1", "jest-cli": "^29.3.1", "jest-environment-jsdom": "^29.3.1", - "jest-junit-reporter": "^1.1.0", - "jest-sonar-reporter": "2.0.0", "prettier": "^2.3.2", "ts-node": "^10.9.1" }, From 5b2a51d361cd894424a5a65b6d423a45edb1643c Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 5 Jun 2023 10:21:39 +0200 Subject: [PATCH 25/88] Fixes lint warings --- .../@react-facet/core/src/hooks/useFacetUnwrapTransition.ts | 3 +-- packages/@react-facet/deferred-mount/src/index.tsx | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/@react-facet/core/src/hooks/useFacetUnwrapTransition.ts b/packages/@react-facet/core/src/hooks/useFacetUnwrapTransition.ts index 7d6b013d..aae11f6f 100644 --- a/packages/@react-facet/core/src/hooks/useFacetUnwrapTransition.ts +++ b/packages/@react-facet/core/src/hooks/useFacetUnwrapTransition.ts @@ -1,6 +1,5 @@ import { useLayoutEffect, useState, useTransition } from 'react' -import { NoValue } from '..' -import { FacetProp, isFacet, Value } from '../types' +import { FacetProp, isFacet, Value, NoValue } from '../types' /** * Hook that allows consuming values from a Facet as plain React State values. diff --git a/packages/@react-facet/deferred-mount/src/index.tsx b/packages/@react-facet/deferred-mount/src/index.tsx index 1484011c..d8c481f9 100644 --- a/packages/@react-facet/deferred-mount/src/index.tsx +++ b/packages/@react-facet/deferred-mount/src/index.tsx @@ -1,4 +1,4 @@ -import React, { createContext, useContext, FC, PropsWithChildren, useTransition, useState, useEffect } from 'react' +import React, { createContext, useContext, FC, PropsWithChildren, useTransition, useEffect } from 'react' import { createFacet, Facet } from '@react-facet/core' type BLANK = Record @@ -24,7 +24,7 @@ export const DeferredMount: FC voi startTransition(() => { isReady && isReady(pending) }) - }, [startTransition]) + }, [isReady, startTransition]) return <>{children} } From 5acef06a7f169ee2d2c1460d9c5127775679ffd1 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 5 Jun 2023 10:56:27 +0200 Subject: [PATCH 26/88] New helper asPromise --- .../@react-facet/core/src/helpers/asPromise.ts | 15 +++++++++++++++ packages/@react-facet/core/src/helpers/index.ts | 1 + 2 files changed, 16 insertions(+) create mode 100644 packages/@react-facet/core/src/helpers/asPromise.ts diff --git a/packages/@react-facet/core/src/helpers/asPromise.ts b/packages/@react-facet/core/src/helpers/asPromise.ts new file mode 100644 index 00000000..54a6fc48 --- /dev/null +++ b/packages/@react-facet/core/src/helpers/asPromise.ts @@ -0,0 +1,15 @@ +import { Facet } from '../types' + +/** + * Takes a Facet as returns a Promise that will resolve with its first value + * + * @param facet + * @returns Promise + */ +export const asPromise = (facet: Facet) => + new Promise((resolve) => { + const cleanup = facet.observe((value: T) => { + resolve(value) + cleanup() + }) + }) diff --git a/packages/@react-facet/core/src/helpers/index.ts b/packages/@react-facet/core/src/helpers/index.ts index 572c360a..ca2fa518 100644 --- a/packages/@react-facet/core/src/helpers/index.ts +++ b/packages/@react-facet/core/src/helpers/index.ts @@ -1,3 +1,4 @@ export * from './areAllDefinedValues' export * from './hasDefinedValue' export * from './multiObserve' +export * from './asPromise' From 7ee4932c834b2dd23ded8766c1122372adfc2b72 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 5 Jun 2023 10:56:40 +0200 Subject: [PATCH 27/88] Hacking around unwrapping with store and suspense --- .../core/src/hooks/useFacetUnwrap.ts | 104 ++++++++++-------- 1 file changed, 57 insertions(+), 47 deletions(-) diff --git a/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts b/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts index 53c3ad68..63236c68 100644 --- a/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts +++ b/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts @@ -1,5 +1,7 @@ -import { useLayoutEffect, useState } from 'react' -import { FacetProp, isFacet, Value, NoValue } from '../types' +import { useLayoutEffect, useRef, useState, useSyncExternalStore } from 'react' +import { Facet, isFacet, Value, NoValue, Option } from '../types' +import { NO_VALUE } from '@react-facet/core' +import { asPromise } from '../helpers' /** * Hook that allows consuming values from a Facet @@ -7,49 +9,57 @@ import { FacetProp, isFacet, Value, NoValue } from '../types' * * @param facet */ -export function useFacetUnwrap(prop: FacetProp): T | NoValue { - const [state, setState] = useState<{ value: T | NoValue }>(() => { - if (!isFacet(prop)) return { value: prop } - - return { - value: prop.get(), - } - }) - - useLayoutEffect(() => { - if (isFacet(prop)) { - return prop.observe((value) => { - setState((previousState) => { - const { value: previousValue } = previousState - - const typeofValue = typeof previousValue - - /** - * Performs this equality check locally to prevent triggering two consecutive renderings - * for facets that have immutable values (unfortunately we can't handle mutable values). - * - * The two renderings might happen for the same state value if the Facet has a value on mount. - * - * The unwrap will get the value: - * - Once on initialization of the useState above - * - And another time on this observe initialization - */ - if ( - (typeofValue === 'number' || - typeofValue === 'string' || - typeofValue === 'boolean' || - value === undefined || - value === null) && - value === previousValue - ) { - return previousState - } - - return { value } - }) - }) - } - }, [prop]) - - return isFacet(prop) ? state.value : prop +export function useFacetUnwrap(prop: Facet): T { + // const [state, setState] = useState<{ value: T | NoValue }>(() => { + // if (!isFacet(prop)) return { value: prop } + + // return { + // value: prop.get(), + // } + // }) + + const value = useSyncExternalStore>(prop.observe, prop.get) + + if (value === NO_VALUE) { + throw asPromise(prop) + } + + return value + + // useLayoutEffect(() => { + // if (isFacet(prop)) { + // return prop.observe((value) => { + // setState((previousState) => { + // const { value: previousValue } = previousState + + // const typeofValue = typeof previousValue + + // /** + // * Performs this equality check locally to prevent triggering two consecutive renderings + // * for facets that have immutable values (unfortunately we can't handle mutable values). + // * + // * The two renderings might happen for the same state value if the Facet has a value on mount. + // * + // * The unwrap will get the value: + // * - Once on initialization of the useState above + // * - And another time on this observe initialization + // */ + // if ( + // (typeofValue === 'number' || + // typeofValue === 'string' || + // typeofValue === 'boolean' || + // value === undefined || + // value === null) && + // value === previousValue + // ) { + // return previousState + // } + + // return { value } + // }) + // }) + // } + // }, [prop]) + + // return isFacet(prop) ? state.value : prop } From 74fabe3ec0632b14c8734b2a621ea559d33dc124 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 5 Jun 2023 10:59:59 +0200 Subject: [PATCH 28/88] Cleaning useFacetUnwrap using Suspense --- .../core/src/hooks/useFacetUnwrap.ts | 95 ++++++++++--------- 1 file changed, 48 insertions(+), 47 deletions(-) diff --git a/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts b/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts index 63236c68..34fe5fc7 100644 --- a/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts +++ b/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts @@ -1,65 +1,66 @@ -import { useLayoutEffect, useRef, useState, useSyncExternalStore } from 'react' -import { Facet, isFacet, Value, NoValue, Option } from '../types' -import { NO_VALUE } from '@react-facet/core' +import { useLayoutEffect, useState } from 'react' +import { Facet, isFacet, Value, NO_VALUE, Option } from '../types' import { asPromise } from '../helpers' /** * Hook that allows consuming values from a Facet * It acts as a regular react state, triggering a re-render of the component * + * If the provided value is not a Facet, it will simply be forwarded untouched. + * * @param facet + * @returns value of the Facet */ export function useFacetUnwrap(prop: Facet): T { - // const [state, setState] = useState<{ value: T | NoValue }>(() => { - // if (!isFacet(prop)) return { value: prop } - - // return { - // value: prop.get(), - // } - // }) + const [state, setState] = useState<{ value: Option }>(() => { + if (!isFacet(prop)) return { value: prop } - const value = useSyncExternalStore>(prop.observe, prop.get) + return { + value: prop.get(), + } + }) - if (value === NO_VALUE) { - throw asPromise(prop) - } + useLayoutEffect(() => { + if (isFacet(prop)) { + return prop.observe((value) => { + setState((previousState) => { + const { value: previousValue } = previousState - return value + const typeofValue = typeof previousValue - // useLayoutEffect(() => { - // if (isFacet(prop)) { - // return prop.observe((value) => { - // setState((previousState) => { - // const { value: previousValue } = previousState + /** + * Performs this equality check locally to prevent triggering two consecutive renderings + * for facets that have immutable values (unfortunately we can't handle mutable values). + * + * The two renderings might happen for the same state value if the Facet has a value on mount. + * + * The unwrap will get the value: + * - Once on initialization of the useState above + * - And another time on this observe initialization + */ + if ( + (typeofValue === 'number' || + typeofValue === 'string' || + typeofValue === 'boolean' || + value === undefined || + value === null) && + value === previousValue + ) { + return previousState + } - // const typeofValue = typeof previousValue + return { value } + }) + }) + } + }, [prop]) - // /** - // * Performs this equality check locally to prevent triggering two consecutive renderings - // * for facets that have immutable values (unfortunately we can't handle mutable values). - // * - // * The two renderings might happen for the same state value if the Facet has a value on mount. - // * - // * The unwrap will get the value: - // * - Once on initialization of the useState above - // * - And another time on this observe initialization - // */ - // if ( - // (typeofValue === 'number' || - // typeofValue === 'string' || - // typeofValue === 'boolean' || - // value === undefined || - // value === null) && - // value === previousValue - // ) { - // return previousState - // } + if (!isFacet(prop)) return prop - // return { value } - // }) - // }) - // } - // }, [prop]) + // If we don't have a value for the Facet yet, we can throw a Promise to trigger React's Suspense. + if (state.value === NO_VALUE) { + throw asPromise(prop) + } - // return isFacet(prop) ? state.value : prop + return state.value } From 3e3484e11fe3d91999484b5a0f1e66e9f93d5708 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 5 Jun 2023 11:08:22 +0200 Subject: [PATCH 29/88] =?UTF-8?q?Let=E2=80=99s=20always=20defer=20while=20?= =?UTF-8?q?unwrapping=20on=20Map?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/@react-facet/core/src/components/Map.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/@react-facet/core/src/components/Map.tsx b/packages/@react-facet/core/src/components/Map.tsx index 0cebf049..f815c4e6 100644 --- a/packages/@react-facet/core/src/components/Map.tsx +++ b/packages/@react-facet/core/src/components/Map.tsx @@ -1,4 +1,4 @@ -import React, { ReactElement } from 'react' +import React, { ReactElement, useDeferredValue } from 'react' import { useFacetMemo } from '../hooks/useFacetMemo' import { useFacetUnwrap } from '../hooks/useFacetUnwrap' import { useFacetMap } from '../hooks/useFacetMap' @@ -11,7 +11,8 @@ export type MapProps = { } export const Map = ({ array, children, equalityCheck }: MapProps) => { - const countValue = useFacetUnwrap(useFacetMap((array) => array.length, [], [array])) ?? 0 + // When mounting lists, we always want to defer + const countValue = useDeferredValue(useFacetUnwrap(useFacetMap((array) => array.length, [], [array]))) return ( <> @@ -28,7 +29,7 @@ export const Map = ({ array, children, equalityCheck }: MapProps) => { ) : ( key={index} arrayFacet={array} index={index} children={children} /> ), - countValue !== NO_VALUE ? countValue : 0, + countValue, )} ) From c308026b70a2aa80ad79ba7e506806a026f93659 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 5 Jun 2023 11:08:36 +0200 Subject: [PATCH 30/88] Delete deferred-mount package, as it should no longer be needed --- examples/concurrent/src/listMountDeferred.tsx | 119 ------- packages/@react-facet/deferred-mount/LICENSE | 21 -- .../@react-facet/deferred-mount/README.md | 79 ---- .../deferred-mount/jest.config.js | 10 - .../@react-facet/deferred-mount/package.json | 53 --- .../deferred-mount/src/index.spec.tsx.old | 336 ------------------ .../@react-facet/deferred-mount/src/index.tsx | 78 ---- .../@react-facet/deferred-mount/tsconfig.json | 7 - yarn.lock | 41 --- 9 files changed, 744 deletions(-) delete mode 100644 examples/concurrent/src/listMountDeferred.tsx delete mode 100644 packages/@react-facet/deferred-mount/LICENSE delete mode 100644 packages/@react-facet/deferred-mount/README.md delete mode 100644 packages/@react-facet/deferred-mount/jest.config.js delete mode 100644 packages/@react-facet/deferred-mount/package.json delete mode 100644 packages/@react-facet/deferred-mount/src/index.spec.tsx.old delete mode 100644 packages/@react-facet/deferred-mount/src/index.tsx delete mode 100644 packages/@react-facet/deferred-mount/tsconfig.json diff --git a/examples/concurrent/src/listMountDeferred.tsx b/examples/concurrent/src/listMountDeferred.tsx deleted file mode 100644 index 16d75cab..00000000 --- a/examples/concurrent/src/listMountDeferred.tsx +++ /dev/null @@ -1,119 +0,0 @@ -import { createRoot } from 'react-dom/client' -import React, { useEffect, useState } from 'react' -import { useFacetUnwrap } from '@react-facet/core' -import { DeferredMount, DeferredMountProvider, useIsDeferring } from '@react-facet/deferred-mount' - -interface Data { - name: string - health: number -} - -const allData = Array.from({ length: 2000 }, (): Data => ({ name: 'player', health: 10 })) - -export const ListConcurrent = () => { - const [data, setData] = useState([]) - const isDeferring = useFacetUnwrap(useIsDeferring()) - - useEffect(() => { - const tick = () => { - setData(allData) - } - - setTimeout(tick, 2000) - }, []) - - return ( - <> - -
-
- {isDeferring != true ? 'done' : } - - - ) -} - -const List = ({ data }: { data: Data[] }) => { - return ( - <> - {data.map((item, index) => ( - - - - ))} - - ) -} - -const ListItem = () => { - return ( -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- ) -} - -const Spinner = () => { - return ( -
- ) -} - -document.body.innerHTML = ` - -
-` -const domElement = document.getElementById('root') - -if (domElement) { - const root = createRoot(domElement) - root.render( - - - , - ) -} diff --git a/packages/@react-facet/deferred-mount/LICENSE b/packages/@react-facet/deferred-mount/LICENSE deleted file mode 100644 index b2f52a2b..00000000 --- a/packages/@react-facet/deferred-mount/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) Microsoft Corporation. - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/@react-facet/deferred-mount/README.md b/packages/@react-facet/deferred-mount/README.md deleted file mode 100644 index 6956a644..00000000 --- a/packages/@react-facet/deferred-mount/README.md +++ /dev/null @@ -1,79 +0,0 @@ -# @react-facet/deferred-mount - -React Facet is a state management for performant game UIs. For more information on how to use this package check the official documentation available at https://react-facet.mojang.com/. - -This package allows you to defer the mounting of a component to the next frame. By wrapping components on a big list you can keep the frame time low while everything is mounted. - -When the `DeferredMountProvider` is used, it requires that there is at least one descendent as a `DeferredMount` or `DeferredMountWithCallback`, otherwise it will wait forever as `deferring`. - -### Example - -In the example below it will mount: - -- Mounting: nothing -- First Frame: `First` -- Second Frame: `First` and `Second` -- Third Frame: `First`, `Second` and `Third` - -The `useIsDeferring` hook allows to check what is the status of the deferred mounting (by returning a Facet) so we can, for example, show a spinner. - -```tsx -const SampleComponent = () => { - const isDeferringFacet = useIsDeferring() - - return ( - <> - (isDeferring ? 'deferring' : 'done'), [], [isDeferringFacet])} /> - -
First
-
- -
Second
-
- -
Third
-
- - ) -} - -render( - - - , - document.getElementById('root'), -) -``` - -The `frameTimeBudget` prop allows the tweaking of how much time the library has available to do work on a given frame (by default it targets 60fps). - -## Deferring Asynchronous Renders - -Some components may need to wait some time before they can be considered fully rendered (for example if they are fetching data). For these cases you should use `DeferredMountWithCallback` with the `useNotifyMountComplete` hook. - -### Example - -```tsx -const DelayedComponent = () => { - const notifyMountComplete = useNotifyMountComplete() - const [data, setData] = useState() - - useEffect(() => { - fetch('mock-api').then((data) => { - setData(data) - notifyMountComplete() - }) - }, [notifyMountComplete]) - - return
{data}
-} - -render( - - - - - , - document.getElementById('root'), -) -``` diff --git a/packages/@react-facet/deferred-mount/jest.config.js b/packages/@react-facet/deferred-mount/jest.config.js deleted file mode 100644 index 93714085..00000000 --- a/packages/@react-facet/deferred-mount/jest.config.js +++ /dev/null @@ -1,10 +0,0 @@ -/* eslint-env node */ - -const baseConfig = require('../../../jest.base.config') -const projectName = require('./package.json').name - -module.exports = { - ...baseConfig, - displayName: projectName, - rootDir: './', -} diff --git a/packages/@react-facet/deferred-mount/package.json b/packages/@react-facet/deferred-mount/package.json deleted file mode 100644 index 542392ee..00000000 --- a/packages/@react-facet/deferred-mount/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "@react-facet/deferred-mount", - "repository": { - "type": "git", - "url": "https://github.com/Mojang/ore-ui.git", - "directory": "packages/@react-facet/deferred-mount" - }, - "author": { - "name": "Paulo Ragonha", - "email": "paulo@ragonha.me" - }, - "contributors": [ - { - "name": "Danila Dergachev", - "email": "dderg@protonmail.com" - }, - { - "name": "Fernando Via Canel", - "email": "fernando.via@gmail.com" - }, - { - "name": "Marlon Huber-Smith", - "email": "marlonhubersmith@gmail.com" - } - ], - "files": [ - "dist/**/*" - ], - "homepage": "https://react-facet.mojang.com/", - "bugs": "https://github.com/Mojang/ore-ui/issues", - "license": "MIT", - "version": "0.4.5", - "main": "src/index.tsx", - "publishConfig": { - "main": "dist/index.js", - "types": "dist/index.d.ts" - }, - "sideEffects": false, - "scripts": { - "build": "rimraf dist && tsc", - "prepublish": "yarn build" - }, - "peerDependencies": { - "@react-facet/core": "0.4.5", - "react": "^18.1.0" - }, - "devDependencies": { - "@react-facet/dom-fiber-testing-library": "0.4.5", - "react": "18.1.0", - "rimraf": "^3.0.2", - "typescript": "^4.8.2" - } -} diff --git a/packages/@react-facet/deferred-mount/src/index.spec.tsx.old b/packages/@react-facet/deferred-mount/src/index.spec.tsx.old deleted file mode 100644 index 7e0dcf83..00000000 --- a/packages/@react-facet/deferred-mount/src/index.spec.tsx.old +++ /dev/null @@ -1,336 +0,0 @@ -import React, { useEffect } from 'react' -import { - DeferredMountProvider, - DeferredMount, - useIsDeferring, - DeferredMountWithCallback, - useNotifyMountComplete, -} from '.' -import { render, act } from '@react-facet/dom-fiber-testing-library' -import { useFacetEffect, useFacetMap } from '@react-facet/core' - -let idSeed = 1 - -interface Cb { - (time: number): void - frameId: number -} - -describe('DeferredMount', () => { - it('renders immediately if we dont have a provider', () => { - const { container } = render( - -
Should be rendered
-
, - ) - expect(container.firstChild).toContainHTML('
Should be rendered
') - }) -}) - -describe('DeferredMountWithCallback', () => { - it('renders immediately if we dont have a provider', () => { - const { container } = render( - -
Should be rendered
-
, - ) - expect(container.firstChild).toContainHTML('
Should be rendered
') - }) - - it('waits until previous deferred callback finishes', async () => { - jest.useFakeTimers() - - const frames: (() => void)[] = [] - const requestSpy = jest.spyOn(window, 'requestAnimationFrame').mockImplementation((frameRequest) => { - const id = idSeed++ - const cb = () => { - frameRequest(id) - } - frames.push(cb) - return id - }) - - const runRaf = () => { - const cb = frames.pop() - if (cb != null) act(() => cb()) - } - - const MOUNT_COMPLETION_DELAY = 1000 - - const MockDeferredComponent = ({ index }: { index: number }) => { - const triggerMountComplete = useNotifyMountComplete() - - useEffect(() => { - const id = setTimeout(triggerMountComplete, MOUNT_COMPLETION_DELAY) - - return () => { - clearTimeout(id) - } - }, [triggerMountComplete, index]) - - return
Callback{index}
- } - - const SampleComponent = () => { - const isDeferringFacet = useIsDeferring() - - return ( - <> - (isDeferring ? 'deferring' : 'done'), [], [isDeferringFacet])} - /> - - - - - - - - - - - ) - } - - const { container } = render( - - - , - ) - - // Wait a frame for deferred component to render - expect(container).toContainHTML('deferring') - expect(container).not.toContainHTML('Callback0') - expect(container).not.toContainHTML('Callback1') - expect(container).not.toContainHTML('Callback2') - - // Initial run, sets renders the first component - runRaf() - expect(container).toContainHTML('Callback0') - expect(container).not.toContainHTML('Callback1') - expect(container).not.toContainHTML('Callback2') - - // Wait for component to finish rendering, then advance to the next component render - jest.advanceTimersByTime(MOUNT_COMPLETION_DELAY) - runRaf() - expect(container).toContainHTML('Callback0') - expect(container).toContainHTML('Callback1') - expect(container).not.toContainHTML('Callback2') - - // Wait for component to finish rendering, then advance to the next component render - jest.advanceTimersByTime(MOUNT_COMPLETION_DELAY) - runRaf() - expect(container).toContainHTML('Callback0') - expect(container).toContainHTML('Callback1') - expect(container).toContainHTML('Callback2') - - // Wait for final deferred render and expect queue to be finished - jest.advanceTimersByTime(MOUNT_COMPLETION_DELAY) - runRaf() - expect(container).toContainHTML('done') - - jest.useRealTimers() - requestSpy.mockRestore() - }) -}) - -describe('cost is about half of the budget (should mount two per frame)', () => { - const COST = 5 - const BUDGET = 11 - - let frames: Cb[] = [] - let requestSpy: jest.SpyInstance - let cancelSpy: jest.SpyInstance - let nowSpy: jest.SpyInstance - let now: number - - beforeAll(() => { - now = 0 - frames = [] - - requestSpy = jest.spyOn(window, 'requestAnimationFrame').mockImplementation((frameRequest) => { - const cb = frameRequest as Cb - cb.frameId = idSeed++ - frames.push(cb) - return cb.frameId - }) - - cancelSpy = jest.spyOn(window, 'cancelAnimationFrame').mockImplementation((frameId) => { - frames = frames.filter((frame) => frame.frameId !== frameId) - }) - - // every time we ask about the time (to measure performance in the implementation) we advance the time by the COST - nowSpy = jest.spyOn(performance, 'now').mockImplementation(() => { - now = now + COST - return now - }) - }) - - afterAll(() => { - now = 0 - requestSpy.mockRestore() - cancelSpy.mockRestore() - nowSpy.mockRestore() - }) - - const isDeferringValues = jest.fn() - - const SampleComponent = () => { - const isDeferringFacet = useIsDeferring() - useFacetEffect((isDeferring) => isDeferringValues(isDeferring), [], [isDeferringFacet]) - - return ( - <> - (isDeferring ? 'deferring' : 'done'), [], [isDeferringFacet])} /> - -
First
-
- -
Second
-
- -
Third
-
- -
Fourth
-
- -
Fifth
-
- - ) - } - - let container: HTMLElement - - beforeEach(() => { - isDeferringValues.mockClear() - - container = render( - - - , - ).container - }) - - it('renders nothing immediately', () => { - expect(container).not.toContainHTML('First') - expect(container).not.toContainHTML('Second') - expect(container).not.toContainHTML('Third') - expect(container).not.toContainHTML('Fourth') - expect(container).not.toContainHTML('Fifth') - }) - - it('states that is deferring in the first frame', () => { - expect(isDeferringValues).toBeCalledTimes(1) - expect(isDeferringValues).toBeCalledWith(true) - expect(container).toContainHTML('deferring') - }) - - describe('first frame passed', () => { - beforeEach(() => { - const frame = frames.pop() - if (!frame) throw new Error('requestAnimationFrame not requested') - - act(() => { - frame(now) - }) - }) - - it('states that is deferring', () => { - expect(container).toContainHTML('deferring') - }) - - it('renders the first two deferred render', () => { - expect(container).toContainHTML('First') - expect(container).toContainHTML('Second') - expect(container).not.toContainHTML('Third') - expect(container).not.toContainHTML('Fourth') - expect(container).not.toContainHTML('Fifth') - }) - - describe('second frame passed', () => { - beforeEach(() => { - const frame = frames.pop() - if (!frame) throw new Error('requestAnimationFrame not requested') - - act(() => { - frame(now) - }) - }) - - it('states that is deferring', () => { - expect(container).toContainHTML('deferring') - }) - - it('renders the third and fourth deferred render', () => { - expect(container).toContainHTML('First') - expect(container).toContainHTML('Second') - expect(container).toContainHTML('Third') - expect(container).toContainHTML('Fourth') - expect(container).not.toContainHTML('Fifth') - }) - - describe('thrid frame passed', () => { - beforeEach(() => { - const frame = frames.pop() - if (!frame) throw new Error('requestAnimationFrame not requested') - - act(() => { - frame(now) - }) - }) - - it('does not request a new animation frame', () => { - expect(frames.length).toBe(0) - }) - - it('states that is done', () => { - expect(container).toContainHTML('done') - }) - - it('renders the remaining of deferred render', () => { - expect(container).toContainHTML('First') - expect(container).toContainHTML('Second') - expect(container).toContainHTML('Third') - expect(container).toContainHTML('Fourth') - expect(container).toContainHTML('Fifth') - }) - }) - }) - }) -}) - -describe('app with just the DeferredMountProvider', () => { - const isDeferringValues = jest.fn() - - const SampleComponent = () => { - const isDeferringFacet = useIsDeferring() - - useFacetEffect((isDeferring) => isDeferringValues(isDeferring), [], [isDeferringFacet]) - - return ( - <> - (isDeferring ? 'deferring' : 'done'), [], [isDeferringFacet])} /> - - ) - } - - let container: HTMLElement - - beforeEach(() => { - isDeferringValues.mockClear() - - container = render( - - - , - ).container - }) - - it('states that is deferring in the first frame', () => { - expect(isDeferringValues).toBeCalledTimes(1) - expect(isDeferringValues).toBeCalledWith(true) - expect(container).toContainHTML('deferring') - }) -}) diff --git a/packages/@react-facet/deferred-mount/src/index.tsx b/packages/@react-facet/deferred-mount/src/index.tsx deleted file mode 100644 index d8c481f9..00000000 --- a/packages/@react-facet/deferred-mount/src/index.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import React, { createContext, useContext, FC, PropsWithChildren, useTransition, useEffect } from 'react' -import { createFacet, Facet } from '@react-facet/core' - -type BLANK = Record - -const DeferredMountConfig = createContext({}) - -export const DeferredMountConfigProvider: FC> = ({ children }) => { - return {children} -} - -export const InnerDeferredMountProvider: FC> = ({ children }) => { - return <>{children} -} - -export const DeferredMountProvider: FC> = ({ children }) => { - return <>{children} -} - -export const DeferredMount: FC void }>> = ({ children, isReady }) => { - const [pending, startTransition] = useTransition() - - useEffect(() => { - startTransition(() => { - isReady && isReady(pending) - }) - }, [isReady, startTransition]) - - return <>{children} -} - -const NotifyMountComplete = createContext(() => {}) - -export const useNotifyMountComplete = () => useContext(NotifyMountComplete) - -/** - * Component that should wrap some mounting that must be deferred to a later frame. - * This will wait for a callback from the child component before marking itself as rendered. - * @param children component to be mounted deferred - */ -export const DeferredMountWithCallback: FC> = ({ children }) => { - return <>{children} -} - -const isDeferringContext = createContext>(createFacet({ initialValue: false })) - -const isPausedContext = createContext(false) - -/** - * Hook that informs if any mounting is currently being deferred - * Can be used to show some loading indicator - */ -export const useIsDeferring = () => { - return useContext(isDeferringContext) -} - -/** - * Allow us to pause costly mounting (mounting) of components - * So that transitions can occur - */ -export const useIsPaused = () => { - return useContext(isPausedContext) -} - -/** - * API compatible component with DeferredMount, but renders immediately - */ -export const ImmediateMount: FC> = ({ children }) => { - return <>{children} -} - -/** - * This pauses the mounting of children components. - * Given it affects mounting, it should only happen the first time! Asking to pause again in the future is not possible - */ -export const PauseMountProvider: FC> = ({ children }) => { - return <>{children} -} diff --git a/packages/@react-facet/deferred-mount/tsconfig.json b/packages/@react-facet/deferred-mount/tsconfig.json deleted file mode 100644 index 2eeba49e..00000000 --- a/packages/@react-facet/deferred-mount/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../../tsconfig.json", - "compilerOptions": { - "outDir": "dist", - "rootDir": "src" - } -} diff --git a/yarn.lock b/yarn.lock index 581ceb29..7553054e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1514,20 +1514,6 @@ __metadata: languageName: node linkType: hard -"@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount": - version: 0.0.0-use.local - resolution: "@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount" - dependencies: - "@react-facet/dom-fiber-testing-library": 0.4.5 - react: 18.1.0 - rimraf: ^3.0.2 - typescript: ^4.8.2 - peerDependencies: - "@react-facet/core": 0.4.5 - react: ^18.1.0 - languageName: unknown - linkType: soft - "@react-facet/dom-components@workspace:packages/@react-facet/dom-components": version: 0.0.0-use.local resolution: "@react-facet/dom-components@workspace:packages/@react-facet/dom-components" @@ -7013,15 +6999,6 @@ __metadata: languageName: node linkType: hard -"jest-junit-reporter@npm:^1.1.0": - version: 1.1.0 - resolution: "jest-junit-reporter@npm:1.1.0" - dependencies: - xml: ^1.0.1 - checksum: 265130d8179b5a6e51ca55547297d07f147ceeead5e3ea44d19db7b15df2259559e49ae3dceb008367ceb23282f36dfcb1a92df74bf359a3ef8f8a9ebcb5dbe2 - languageName: node - linkType: hard - "jest-leak-detector@npm:^29.3.1": version: 29.3.1 resolution: "jest-leak-detector@npm:29.3.1" @@ -7226,15 +7203,6 @@ __metadata: languageName: node linkType: hard -"jest-sonar-reporter@npm:2.0.0": - version: 2.0.0 - resolution: "jest-sonar-reporter@npm:2.0.0" - dependencies: - xml: ^1.0.1 - checksum: a79d87f0db6d83c9306b90b1fe44fa8ea19f1598c3bd11d3198b17617c54b9bd8e982ea3b5a857865acf2f6f96b830321e684e320f7961bcb7444935029be724 - languageName: node - linkType: hard - "jest-util@npm:^26.6.2": version: 26.6.2 resolution: "jest-util@npm:26.6.2" @@ -8540,8 +8508,6 @@ __metadata: jest: ^29.3.1 jest-cli: ^29.3.1 jest-environment-jsdom: ^29.3.1 - jest-junit-reporter: ^1.1.0 - jest-sonar-reporter: 2.0.0 prettier: ^2.3.2 ts-node: ^10.9.1 languageName: unknown @@ -11370,13 +11336,6 @@ typescript@^4.8.2: languageName: node linkType: hard -"xml@npm:^1.0.1": - version: 1.0.1 - resolution: "xml@npm:1.0.1" - checksum: 11b5545ef3f8fec3fa29ce251f50ad7b6c97c103ed4d851306ec23366f5fa4699dd6a942262df52313a0cd1840ab26256da253c023bad3309d8ce46fe6020ca0 - languageName: node - linkType: hard - "xmlchars@npm:^2.2.0": version: 2.2.0 resolution: "xmlchars@npm:2.2.0" From 61f7f37014a87070fece6e273caff36e19a4c3ad Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 5 Jun 2023 11:12:46 +0200 Subject: [PATCH 31/88] Fix wrong type in useFacetUnwrap --- packages/@react-facet/core/src/hooks/useFacetUnwrap.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts b/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts index 34fe5fc7..4c0f1ad6 100644 --- a/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts +++ b/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts @@ -1,5 +1,5 @@ import { useLayoutEffect, useState } from 'react' -import { Facet, isFacet, Value, NO_VALUE, Option } from '../types' +import { isFacet, Value, NO_VALUE, Option, FacetProp } from '../types' import { asPromise } from '../helpers' /** @@ -11,7 +11,7 @@ import { asPromise } from '../helpers' * @param facet * @returns value of the Facet */ -export function useFacetUnwrap(prop: Facet): T { +export function useFacetUnwrap(prop: FacetProp): T { const [state, setState] = useState<{ value: Option }>(() => { if (!isFacet(prop)) return { value: prop } From 3dbd852dae4e887ee4235cdd19f247979877d7f7 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 5 Jun 2023 11:13:02 +0200 Subject: [PATCH 32/88] Tweak tests of useFacetUnwrap as it no longer returns NO_VALUE --- .../core/src/hooks/useFacetUnwrap.spec.tsx | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx b/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx index 26134b36..7137eac0 100644 --- a/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx +++ b/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx @@ -13,7 +13,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() - return {adaptValue == NO_VALUE ? 'no-value' : adaptValue} + return {adaptValue} } render() @@ -28,7 +28,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() - return {adaptValue == NO_VALUE ? 'no-value' : adaptValue} + return {adaptValue} } render() @@ -43,7 +43,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() - return {adaptValue == NO_VALUE ? 'no-value' : adaptValue} + return {adaptValue} } render() @@ -58,7 +58,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() - return {adaptValue == NO_VALUE ? 'no-value' : adaptValue} + return {adaptValue} } render() @@ -73,7 +73,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() - return {adaptValue == NO_VALUE ? 'no-value' : adaptValue} + return {adaptValue} } render() @@ -89,7 +89,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() - return {adaptValue == NO_VALUE ? 'no-value' : adaptValue} + return {adaptValue} } render() @@ -103,7 +103,7 @@ it('triggers when there is a change in the facet', () => { const ComponentWithFacetEffect = () => { const adaptValue = useFacetUnwrap(demoFacet) - return {adaptValue == NO_VALUE ? 'no-value' : adaptValue} + return {adaptValue} } const scenario = @@ -116,7 +116,7 @@ it('triggers when there is a change in the facet', () => { it('returns static values when given static values', () => { const ComponentWithFacetEffect = () => { const adaptValue = useFacetUnwrap('static string') - return {adaptValue == NO_VALUE ? 'no-value' : adaptValue} + return {adaptValue} } const dom = render() @@ -132,7 +132,6 @@ it('re-renders when facet is mutated', () => { const ComponentWithFacetEffect = () => { const adaptValue = useFacetUnwrap(demoFacet) - if (adaptValue === NO_VALUE) return null return {adaptValue.foo} } @@ -169,7 +168,6 @@ it('re-renders when facet is mutated to undefined', () => { const ComponentWithFacetEffect = () => { const adaptValue = useFacetUnwrap(demoFacet) - if (adaptValue === NO_VALUE) return null return {adaptValue.foo} } @@ -203,7 +201,7 @@ it('does not trigger a re-render when changing a facet from undefined to undefin const adaptValue = useFacetUnwrap(demoFacet) renderedMock() - return {adaptValue == NO_VALUE ? 'no-value' : adaptValue} + return {adaptValue} } render() From 11e83034b29fd774f24b67d58da69b1b7a836ada Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 5 Jun 2023 12:16:44 +0200 Subject: [PATCH 33/88] Attempting to write tests for Suspense Not working yet --- .../core/src/hooks/useFacetUnwrap.spec.tsx | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx b/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx index 7137eac0..ec4bf4fd 100644 --- a/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx +++ b/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx @@ -1,4 +1,4 @@ -import React from 'react' +import React, { Suspense } from 'react' import { render, act } from '@react-facet/dom-fiber-testing-library' import { useFacetUnwrap } from './useFacetUnwrap' import { createFacet } from '../facet' @@ -215,3 +215,32 @@ it('does not trigger a re-render when changing a facet from undefined to undefin expect(renderedMock).toHaveBeenCalledTimes(0) }) + +describe('suspense', () => { + it('throws when a facet has NO_VALUE', async () => { + const demoFacet = createFacet({ initialValue: NO_VALUE }) + const renderedMock = jest.fn() + + const ComponentWithFacetEffect = () => { + const adaptValue = useFacetUnwrap(demoFacet) + renderedMock() + + return {adaptValue} + } + + render( + + + , + ) + + expect(renderedMock).toHaveBeenCalledTimes(0) + + await act(() => { + console.log('before setting, in act') + demoFacet.set('updated value') + }) + + // expect(renderedMock).toHaveBeenCalledTimes(1) + }) +}) From 5faaa6a8a4e27dcb8edfe9e06070d55495ab3e6d Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 5 Jun 2023 13:49:24 +0200 Subject: [PATCH 34/88] Setting the act environment We should set a reference to the `act` function. Reference: https://github.com/testing-library/react-testing-library/blob/c80809a956b0b9f3289c4a6fa8b5e8cc72d6ef6d/src/act-compat.js#L26 --- .../@react-facet/dom-fiber-testing-library/src/setupAct.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts b/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts index b1a58c6f..2c96a17d 100644 --- a/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts +++ b/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts @@ -26,10 +26,11 @@ function getGlobalThis(): any { * Reference implementation: https://github.com/testing-library/react-testing-library/blob/c80809a956b0b9f3289c4a6fa8b5e8cc72d6ef6d/src/act-compat.js#L5 */ export const setupAct = (): Act => { - getGlobalThis().IS_REACT_ACT_ENVIRONMENT = true - // eslint-disable-next-line @typescript-eslint/no-explicit-any const act = (React as any).unstable_act as Act + + getGlobalThis().IS_REACT_ACT_ENVIRONMENT = act + return act } From 43410a856f0c8ff207725fce266d4344d9fa054b Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 5 Jun 2023 13:52:31 +0200 Subject: [PATCH 35/88] Upgrade to React 18.2.0 --- examples/benchmarking/package.json | 4 +- examples/concurrent/package.json | 4 +- packages/@react-facet/core/package.json | 4 +- .../@react-facet/dom-components/package.json | 6 +- .../dom-fiber-testing-library/package.json | 4 +- packages/@react-facet/dom-fiber/package.json | 4 +- .../@react-facet/shared-facet/package.json | 4 +- packages/@react-facet/spring/package.json | 6 +- yarn.lock | 65 +++++++++++-------- 9 files changed, 55 insertions(+), 46 deletions(-) diff --git a/examples/benchmarking/package.json b/examples/benchmarking/package.json index 878d8119..0142bfe8 100644 --- a/examples/benchmarking/package.json +++ b/examples/benchmarking/package.json @@ -14,8 +14,8 @@ "@react-facet/shared-facet": "0.4.5", "@react-facet/spring": "0.4.5", "ramda": "^0.27.1", - "react": "18.1.0", - "react-dom": "^18.1.0" + "react": "18.2.0", + "react-dom": "^18.2.0" }, "devDependencies": { "@types/fs-extra": "^9.0.12", diff --git a/examples/concurrent/package.json b/examples/concurrent/package.json index 103ddb0c..9bf91012 100644 --- a/examples/concurrent/package.json +++ b/examples/concurrent/package.json @@ -13,8 +13,8 @@ "@react-facet/shared-facet": "0.4.3", "@react-facet/spring": "0.4.3", "ramda": "^0.27.1", - "react": "18.1.0", - "react-dom": "^18.1.0" + "react": "18.2.0", + "react-dom": "^18.2.0" }, "devDependencies": { "@types/fs-extra": "^9.0.12", diff --git a/packages/@react-facet/core/package.json b/packages/@react-facet/core/package.json index b1d44dcd..0b01f2fa 100644 --- a/packages/@react-facet/core/package.json +++ b/packages/@react-facet/core/package.json @@ -41,7 +41,7 @@ "prepublish": "yarn build" }, "peerDependencies": { - "react": "^18.1.0" + "react": "^18.2.0" }, "devDependencies": { "@react-facet/dom-fiber-testing-library": "0.4.5", @@ -49,7 +49,7 @@ "@types/react-reconciler": "^0.28.0", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "18.1.0", + "react": "18.2.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/packages/@react-facet/dom-components/package.json b/packages/@react-facet/dom-components/package.json index ed0425ae..381d8733 100644 --- a/packages/@react-facet/dom-components/package.json +++ b/packages/@react-facet/dom-components/package.json @@ -42,7 +42,7 @@ }, "peerDependencies": { "@react-facet/core": "0.4.5", - "react": "^18.1.0" + "react": "^18.2.0" }, "devDependencies": { "@react-facet/core": "0.4.5", @@ -51,8 +51,8 @@ "@types/react": "^18.0.8", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "18.1.0", - "react-dom": "^18.1.0", + "react": "18.2.0", + "react-dom": "^18.2.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/packages/@react-facet/dom-fiber-testing-library/package.json b/packages/@react-facet/dom-fiber-testing-library/package.json index adb2fa61..42fc7c72 100644 --- a/packages/@react-facet/dom-fiber-testing-library/package.json +++ b/packages/@react-facet/dom-fiber-testing-library/package.json @@ -45,11 +45,11 @@ }, "peerDependencies": { "@react-facet/dom-fiber": "0.4.5", - "react": "^18.1.0" + "react": "^18.2.0" }, "devDependencies": { "@react-facet/dom-fiber": "0.4.5", - "react": "18.1.0", + "react": "18.2.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/packages/@react-facet/dom-fiber/package.json b/packages/@react-facet/dom-fiber/package.json index 390cad7f..99d2db00 100644 --- a/packages/@react-facet/dom-fiber/package.json +++ b/packages/@react-facet/dom-fiber/package.json @@ -45,7 +45,7 @@ }, "peerDependencies": { "@react-facet/core": "0.4.5", - "react": "^18.1.0" + "react": "^18.2.0" }, "devDependencies": { "@react-facet/core": "0.4.5", @@ -54,7 +54,7 @@ "@types/react-reconciler": "^0.28.0", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "18.1.0", + "react": "18.2.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/packages/@react-facet/shared-facet/package.json b/packages/@react-facet/shared-facet/package.json index 9cf606d1..696142f8 100644 --- a/packages/@react-facet/shared-facet/package.json +++ b/packages/@react-facet/shared-facet/package.json @@ -42,7 +42,7 @@ }, "peerDependencies": { "@react-facet/core": "0.4.5", - "react": "^18.1.0" + "react": "^18.2.0" }, "devDependencies": { "@react-facet/core": "0.4.5", @@ -50,7 +50,7 @@ "@types/react": "^18.0.8", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "18.1.0", + "react": "18.2.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/packages/@react-facet/spring/package.json b/packages/@react-facet/spring/package.json index 5f2dc22b..13c3692b 100644 --- a/packages/@react-facet/spring/package.json +++ b/packages/@react-facet/spring/package.json @@ -42,7 +42,7 @@ }, "peerDependencies": { "@react-facet/core": "0.4.5", - "react": "^18.1.0" + "react": "^18.2.0" }, "devDependencies": { "@react-facet/core": "0.4.5", @@ -50,8 +50,8 @@ "@types/react": "^18.0.8", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "18.1.0", - "react-dom": "^18.1.0", + "react": "18.2.0", + "react-dom": "^18.2.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/yarn.lock b/yarn.lock index 7553054e..70815546 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1487,11 +1487,11 @@ __metadata: "@types/react-reconciler": ^0.28.0 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: 18.1.0 + react: 18.2.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: - react: ^18.1.0 + react: ^18.2.0 languageName: unknown linkType: soft @@ -1524,13 +1524,13 @@ __metadata: "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: 18.1.0 - react-dom: ^18.1.0 + react: 18.2.0 + react-dom: ^18.2.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: "@react-facet/core": 0.4.5 - react: ^18.1.0 + react: ^18.2.0 languageName: unknown linkType: soft @@ -1540,12 +1540,12 @@ __metadata: dependencies: "@react-facet/dom-fiber": 0.4.5 "@testing-library/dom": ^8.20.0 - react: 18.1.0 + react: 18.2.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: "@react-facet/dom-fiber": 0.4.5 - react: ^18.1.0 + react: ^18.2.0 languageName: unknown linkType: soft @@ -1559,13 +1559,13 @@ __metadata: "@types/react-reconciler": ^0.28.0 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: 18.1.0 + react: 18.2.0 react-reconciler: ^0.28.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: "@react-facet/core": 0.4.5 - react: ^18.1.0 + react: ^18.2.0 languageName: unknown linkType: soft @@ -1600,12 +1600,12 @@ __metadata: "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: 18.1.0 + react: 18.2.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: "@react-facet/core": 0.4.5 - react: ^18.1.0 + react: ^18.2.0 languageName: unknown linkType: soft @@ -1628,13 +1628,13 @@ __metadata: "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: 18.1.0 - react-dom: ^18.1.0 + react: 18.2.0 + react-dom: ^18.2.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: "@react-facet/core": 0.4.5 - react: ^18.1.0 + react: ^18.2.0 languageName: unknown linkType: soft @@ -3109,8 +3109,8 @@ __metadata: http-server: ^13.0.2 puppeteer: ^10.4.0 ramda: ^0.27.1 - react: 18.1.0 - react-dom: ^18.1.0 + react: 18.2.0 + react-dom: ^18.2.0 ts-loader: ^9.2.5 ts-node: ^10.3.1 typescript: ^4.8.2 @@ -3746,8 +3746,8 @@ __metadata: http-server: ^13.0.2 puppeteer: ^10.4.0 ramda: ^0.27.1 - react: 18.1.0 - react-dom: ^18.1.0 + react: 18.2.0 + react-dom: ^18.2.0 ts-loader: ^9.2.5 ts-node: ^10.3.1 typescript: ^4.3.5 @@ -9057,15 +9057,15 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^18.1.0": - version: 18.1.0 - resolution: "react-dom@npm:18.1.0" +"react-dom@npm:^18.2.0": + version: 18.2.0 + resolution: "react-dom@npm:18.2.0" dependencies: loose-envify: ^1.1.0 - scheduler: ^0.22.0 + scheduler: ^0.23.0 peerDependencies: - react: ^18.1.0 - checksum: bb0d48eeb0b297c79c2a03978baa29f5b3ff7ba3d070b21e34c9af1a6e7fdf0ca8b8d73e41f9214d91ad40eeb6d1f3559f884cbbc338713374a51320637c23df + react: ^18.2.0 + checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc languageName: node linkType: hard @@ -9116,12 +9116,12 @@ __metadata: languageName: node linkType: hard -"react@npm:18.1.0": - version: 18.1.0 - resolution: "react@npm:18.1.0" +"react@npm:18.2.0": + version: 18.2.0 + resolution: "react@npm:18.2.0" dependencies: loose-envify: ^1.1.0 - checksum: 5bb296b561b43ef2220395da4faac86c14a087c8c80e1a7598a5740f01ee605c11eaf249985c1e2000971c4cd32ccb46d40f00479bbd9fb6b1c7cf857393b7d4 + checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b languageName: node linkType: hard @@ -9532,6 +9532,15 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard +"scheduler@npm:^0.23.0": + version: 0.23.0 + resolution: "scheduler@npm:0.23.0" + dependencies: + loose-envify: ^1.1.0 + checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a + languageName: node + linkType: hard + "schema-utils@npm:^3.1.0, schema-utils@npm:^3.1.1": version: 3.1.1 resolution: "schema-utils@npm:3.1.1" From 039c3a9beab510ab90b154e85ab4309e5a5541a6 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 5 Jun 2023 13:56:48 +0200 Subject: [PATCH 36/88] Revert "Setting the act environment" This reverts commit 5faaa6a8a4e27dcb8edfe9e06070d55495ab3e6d. Actually, it only needs to be a boolean https://github.com/reactwg/react-18/discussions/102 --- .../@react-facet/dom-fiber-testing-library/src/setupAct.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts b/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts index 2c96a17d..b1a58c6f 100644 --- a/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts +++ b/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts @@ -26,11 +26,10 @@ function getGlobalThis(): any { * Reference implementation: https://github.com/testing-library/react-testing-library/blob/c80809a956b0b9f3289c4a6fa8b5e8cc72d6ef6d/src/act-compat.js#L5 */ export const setupAct = (): Act => { + getGlobalThis().IS_REACT_ACT_ENVIRONMENT = true + // eslint-disable-next-line @typescript-eslint/no-explicit-any const act = (React as any).unstable_act as Act - - getGlobalThis().IS_REACT_ACT_ENVIRONMENT = act - return act } From c39304cdcae32ad0e93c491e4972bc777ad3b57a Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 5 Jun 2023 14:37:49 +0200 Subject: [PATCH 37/88] Simple Suspense implementation at the renderer --- .../dom-fiber/src/setupAttributes.ts | 26 ++++++- .../dom-fiber/src/setupHostConfig.ts | 70 ++++++++++--------- 2 files changed, 61 insertions(+), 35 deletions(-) diff --git a/packages/@react-facet/dom-fiber/src/setupAttributes.ts b/packages/@react-facet/dom-fiber/src/setupAttributes.ts index 9fc3a292..fe90a7db 100644 --- a/packages/@react-facet/dom-fiber/src/setupAttributes.ts +++ b/packages/@react-facet/dom-fiber/src/setupAttributes.ts @@ -1,4 +1,28 @@ -import { FacetProp, isFacet } from '@react-facet/core' +import { FacetProp, isFacet, Unsubscribe } from '@react-facet/core' +import { Style } from './types' + +export const setupStyleUpdate = ( + styleProp: Style, + style: CSSStyleDeclaration, + styleUnsubscribers: Map, +) => { + for (const key in styleProp) { + const value = styleProp[key] + + if (value != null) { + if (isFacet(value)) { + styleUnsubscribers.set( + key, + value.observe((value) => { + style[key] = value + }), + ) + } else { + style[key] = value + } + } + } +} export const setupClassUpdate = (className: FacetProp, element: HTMLElement | SVGElement) => { const htmlElement = element as HTMLElement diff --git a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts index ce52d450..6046c8d3 100644 --- a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts +++ b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts @@ -28,6 +28,7 @@ import { setupValueUpdate, setupViewBoxUpdate, setupAttributeUpdate, + setupStyleUpdate, } from './setupAttributes' /** @@ -145,28 +146,7 @@ export const setupHostConfig = (): HostConfig< style = element.style styleUnsubscribers = new Map() - // We know for sure here that style will never be null (we created it above) - const notNullStyle = style as unknown as Record - const notNullStyleUnsubscribers = styleUnsubscribers as unknown as Map - - const styleProp = newProps.style - - for (const key in styleProp) { - const value = styleProp[key] - - if (value != null) { - if (isFacet(value)) { - notNullStyleUnsubscribers.set( - key, - value.observe((value) => { - notNullStyle[key] = value - }), - ) - } else { - notNullStyle[key] = value - } - } - } + setupStyleUpdate(newProps.style, style, styleUnsubscribers) } if (newProps.dangerouslySetInnerHTML != null) { @@ -1045,23 +1025,45 @@ export const setupHostConfig = (): HostConfig< return instance.element }, hideInstance(instance) { - console.log('Hidden: ', instance) - // Detach while the instance is hidden - // const { attach: type, parent } = instance.__r3f ?? {} - // if (type && parent) detach(parent, instance, type) - // if (instance.isObject3D) instance.visible = false - // invalidateInstance(instance) + if (isTextElement(instance.element)) { + // Stop listening for updates + if (instance.text) { + instance.text() + } + + instance.element.nodeValue = '' + return + } + + // Stop listening for style changes + instance.styleUnsubscribers?.forEach((unsubscribe) => unsubscribe()) + instance.styleUnsubscribers?.clear() + + // Hide + instance.element.style.display = 'none' }, unhideInstance(instance, props) { - console.log('Unhidden: ', instance, props) - // Re-attach when the instance is unhidden - // const { attach: type, parent } = instance.__r3f ?? {} - // if (type && parent) attach(parent, instance, type) - // if ((instance.isObject3D && props.visible == null) || props.visible) instance.visible = true - // invalidateInstance(instance) + if (isTextElement(instance.element)) { + instance.text = setupTextUpdate(props.text, instance.element) + return + } + + if (props.style != null) { + setupStyleUpdate( + props.style, + instance.style ?? instance.element.style, + instance.styleUnsubscribers as Map, + ) + } else { + instance.element.style.display = '' + } }, }) +export const isTextElement = (value: HTMLElement | SVGElement | Text): value is Text => { + return (value as HTMLElement).style == null +} + const cleanupElementContainer = (parent: ElementContainer, instance: ElementContainer) => { parent.children.delete(instance) From 6057d3a35c6fb1166743644135c9d0592f27b7d9 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 5 Jun 2023 14:56:18 +0200 Subject: [PATCH 38/88] Make sure asPromise works when there are values immediately --- .../@react-facet/core/src/helpers/asPromise.spec.ts | 10 ++++++++++ packages/@react-facet/core/src/helpers/asPromise.ts | 8 +++++++- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 packages/@react-facet/core/src/helpers/asPromise.spec.ts diff --git a/packages/@react-facet/core/src/helpers/asPromise.spec.ts b/packages/@react-facet/core/src/helpers/asPromise.spec.ts new file mode 100644 index 00000000..1cb59236 --- /dev/null +++ b/packages/@react-facet/core/src/helpers/asPromise.spec.ts @@ -0,0 +1,10 @@ +import { createFacet } from '../facet' +import { asPromise } from './asPromise' + +it('resolves facets with their values if available', async () => { + const facet = createFacet({ initialValue: 'testing' }) + const value = await asPromise(facet) + expect(value).toEqual('testing') +}) + +it.todo('waits for the facet to have a value, making sure to not hold subscriptions') diff --git a/packages/@react-facet/core/src/helpers/asPromise.ts b/packages/@react-facet/core/src/helpers/asPromise.ts index 54a6fc48..cba6ea9b 100644 --- a/packages/@react-facet/core/src/helpers/asPromise.ts +++ b/packages/@react-facet/core/src/helpers/asPromise.ts @@ -1,4 +1,4 @@ -import { Facet } from '../types' +import { Facet, NO_VALUE } from '../types' /** * Takes a Facet as returns a Promise that will resolve with its first value @@ -8,6 +8,12 @@ import { Facet } from '../types' */ export const asPromise = (facet: Facet) => new Promise((resolve) => { + const value = facet.get() + if (value != NO_VALUE) { + resolve(value) + return + } + const cleanup = facet.observe((value: T) => { resolve(value) cleanup() From 0df0f487b37c001d9b62ce364fd41a9a9a84bdd3 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 5 Jun 2023 14:56:54 +0200 Subject: [PATCH 39/88] Make mount be deferred by default --- packages/@react-facet/core/src/components/Mount.spec.tsx | 9 ++++++--- packages/@react-facet/core/src/components/Mount.tsx | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/@react-facet/core/src/components/Mount.spec.tsx b/packages/@react-facet/core/src/components/Mount.spec.tsx index ed1b52d0..b450e46f 100644 --- a/packages/@react-facet/core/src/components/Mount.spec.tsx +++ b/packages/@react-facet/core/src/components/Mount.spec.tsx @@ -4,6 +4,7 @@ import { Mount } from '.' import { createFacet } from '../facet' import { mapFacetsLightweight } from '../mapFacets' import { NO_VALUE } from '../types' +import { asPromise } from '..' it('renders when true', () => { const display = createFacet({ initialValue: true }) @@ -54,7 +55,7 @@ it('does not render when false', () => { expect(rendered).not.toHaveBeenCalled() }) -it('can perform conditional rendering', () => { +it('can perform conditional rendering', async () => { const itemsFacet = createFacet>({ initialValue: NO_VALUE }) const hasItemsFacet = mapFacetsLightweight([itemsFacet], (x) => Boolean((x as Array).length)) @@ -77,15 +78,17 @@ it('can perform conditional rendering', () => { expect(screen.queryByText(componentText)).not.toBeInTheDocument() expect(Component).not.toHaveBeenCalled() - act(() => { + await act(async () => { itemsFacet.set([]) + await asPromise(itemsFacet) }) expect(screen.queryByText(componentText)).toBeInTheDocument() expect(Component).toHaveBeenCalledTimes(1) - act(() => { + await act(async () => { itemsFacet.set(['Lorem ipsum']) + await asPromise(itemsFacet) }) expect(screen.queryByText(componentText)).not.toBeInTheDocument() diff --git a/packages/@react-facet/core/src/components/Mount.tsx b/packages/@react-facet/core/src/components/Mount.tsx index ffcbab87..8b9f25bb 100644 --- a/packages/@react-facet/core/src/components/Mount.tsx +++ b/packages/@react-facet/core/src/components/Mount.tsx @@ -1,4 +1,4 @@ -import { ReactElement } from 'react' +import { ReactElement, useDeferredValue } from 'react' import { useFacetUnwrap } from '../hooks/useFacetUnwrap' import { Facet } from '../types' @@ -9,6 +9,6 @@ type MountProps = { } export const Mount = ({ when, children, condition = true }: MountProps) => { - const whenValue = useFacetUnwrap(when) + const whenValue = useDeferredValue(useFacetUnwrap(when)) return whenValue === condition ? children : null } From 9d8aded6cce6fa43fadcfdd7c3d19b08da6162b9 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Mon, 5 Jun 2023 14:57:13 +0200 Subject: [PATCH 40/88] Fix unwrap tests --- .../@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx b/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx index ec4bf4fd..74f3d98d 100644 --- a/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx +++ b/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx @@ -2,7 +2,8 @@ import React, { Suspense } from 'react' import { render, act } from '@react-facet/dom-fiber-testing-library' import { useFacetUnwrap } from './useFacetUnwrap' import { createFacet } from '../facet' -import { NO_VALUE } from '..' +import { asPromise } from '../helpers' +import { NO_VALUE } from '../types' describe('when mounting facets with values', () => { it('renders only once for Immutable value of type string', () => { @@ -236,11 +237,11 @@ describe('suspense', () => { expect(renderedMock).toHaveBeenCalledTimes(0) - await act(() => { - console.log('before setting, in act') + await act(async () => { demoFacet.set('updated value') + await asPromise(demoFacet) }) - // expect(renderedMock).toHaveBeenCalledTimes(1) + expect(renderedMock).toHaveBeenCalledTimes(1) }) }) From 36ee96b6907954132696dd6406b1d7fd62955c06 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Fri, 16 Jun 2023 15:09:45 +0200 Subject: [PATCH 41/88] Deprecate useFacetRef A combination of useFacetCallback and useFacetEffect is more recommended. --- packages/@react-facet/core/src/hooks/index.ts | 1 - .../core/src/hooks/useFacetRef.spec.tsx | 69 ------------------- .../core/src/hooks/useFacetRef.ts | 23 ------- packages/@react-facet/core/src/index.spec.tsx | 1 - 4 files changed, 94 deletions(-) delete mode 100644 packages/@react-facet/core/src/hooks/useFacetRef.spec.tsx delete mode 100644 packages/@react-facet/core/src/hooks/useFacetRef.ts diff --git a/packages/@react-facet/core/src/hooks/index.ts b/packages/@react-facet/core/src/hooks/index.ts index d2789a92..444fb048 100644 --- a/packages/@react-facet/core/src/hooks/index.ts +++ b/packages/@react-facet/core/src/hooks/index.ts @@ -4,7 +4,6 @@ export * from './useFacetLayoutEffect' export * from './useFacetMap' export * from './useFacetMemo' export * from './useFacetPropSetter' -export * from './useFacetRef' export * from './useFacetReducer' export * from './useFacetState' export * from './useFacetUnwrap' diff --git a/packages/@react-facet/core/src/hooks/useFacetRef.spec.tsx b/packages/@react-facet/core/src/hooks/useFacetRef.spec.tsx deleted file mode 100644 index c4e68626..00000000 --- a/packages/@react-facet/core/src/hooks/useFacetRef.spec.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import React, { createRef } from 'react' -import { render } from '@react-facet/dom-fiber-testing-library' -import { useFacetRef } from './useFacetRef' -import { createFacet } from '../facet' -import { NoValue, NO_VALUE } from '..' - -it('passes a value into the ref', () => { - const mockFacet = createFacet({ initialValue: 'value' }) - let ref: React.RefObject = createRef() - - const ComponentWithFacetEffect: React.FC = () => { - ref = useFacetRef(mockFacet) - expect(ref.current).toBe('value') - return - } - - render() - expect(ref.current).toBe('value') - mockFacet.set('changed') - expect(ref.current).toBe('changed') -}) - -it('should default to no NO_VALUE', () => { - const mockFacet = createFacet({ initialValue: NO_VALUE }) - let ref: React.RefObject = createRef() - - const ComponentWithFacetEffect: React.FC = () => { - ref = useFacetRef(mockFacet) - expect(ref.current).toBe(NO_VALUE) - return - } - - render() - expect(ref.current).toBe(NO_VALUE) - mockFacet.set('value') - expect(ref.current).toBe('value') -}) - -it('should be able to set a default value', () => { - const mockFacet = createFacet({ initialValue: NO_VALUE }) - let ref: React.RefObject = createRef() - - const ComponentWithFacetEffect: React.FC = () => { - ref = useFacetRef(mockFacet, 'fallback') - expect(ref.current).toBe('fallback') - return - } - - render() - expect(ref.current).toBe('fallback') - mockFacet.set('value') - expect(ref.current).toBe('value') -}) - -it('should ignore the default state if the facet has a value', () => { - const mockFacet = createFacet({ initialValue: 'initialValue' }) - let ref: React.RefObject = createRef() - - const ComponentWithFacetEffect: React.FC = () => { - ref = useFacetRef(mockFacet, 'fallback') - expect(ref.current).toBe('initialValue') - return - } - - render() - expect(ref.current).toBe('initialValue') - mockFacet.set('value') - expect(ref.current).toBe('value') -}) diff --git a/packages/@react-facet/core/src/hooks/useFacetRef.ts b/packages/@react-facet/core/src/hooks/useFacetRef.ts deleted file mode 100644 index 5cc4d411..00000000 --- a/packages/@react-facet/core/src/hooks/useFacetRef.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { useRef, MutableRefObject } from 'react' -import { useFacetEffect } from './useFacetEffect' -import { NO_VALUE, Option, Facet } from '../types' - -export function useFacetRef(facet: Facet): MutableRefObject> -export function useFacetRef(facet: Facet, defaultValue: T): MutableRefObject -export function useFacetRef(facet: Facet, defaultValue?: T): MutableRefObject { - let value = facet.get() - if (value === NO_VALUE && defaultValue != undefined) { - value = defaultValue - } - - const ref = useRef>(value) - useFacetEffect( - (value) => { - ref.current = value - }, - [], - [facet], - ) - - return ref as MutableRefObject -} diff --git a/packages/@react-facet/core/src/index.spec.tsx b/packages/@react-facet/core/src/index.spec.tsx index aaf882fc..1b15c1c2 100644 --- a/packages/@react-facet/core/src/index.spec.tsx +++ b/packages/@react-facet/core/src/index.spec.tsx @@ -91,7 +91,6 @@ describe('regression testing preventing accidental removal of APIs', () => { expect(facet.useFacetMemo).toBeDefined() expect(facet.useFacetPropSetter).toBeDefined() expect(facet.useFacetReducer).toBeDefined() - expect(facet.useFacetRef).toBeDefined() expect(facet.useFacetState).toBeDefined() expect(facet.useFacetUnwrap).toBeDefined() expect(facet.useFacetWrap).toBeDefined() From 345ce20809541e3bea00a145656d811560e9419f Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Fri, 16 Jun 2023 15:10:01 +0200 Subject: [PATCH 42/88] Fixing type errors --- packages/@react-facet/dom-fiber/src/setupAttributes.ts | 2 +- packages/@react-facet/dom-fiber/src/setupHostConfig.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/@react-facet/dom-fiber/src/setupAttributes.ts b/packages/@react-facet/dom-fiber/src/setupAttributes.ts index fe90a7db..bede8f45 100644 --- a/packages/@react-facet/dom-fiber/src/setupAttributes.ts +++ b/packages/@react-facet/dom-fiber/src/setupAttributes.ts @@ -3,7 +3,7 @@ import { Style } from './types' export const setupStyleUpdate = ( styleProp: Style, - style: CSSStyleDeclaration, + style: Record, styleUnsubscribers: Map, ) => { for (const key in styleProp) { diff --git a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts index 6046c8d3..8379a0b3 100644 --- a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts +++ b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts @@ -146,7 +146,7 @@ export const setupHostConfig = (): HostConfig< style = element.style styleUnsubscribers = new Map() - setupStyleUpdate(newProps.style, style, styleUnsubscribers) + setupStyleUpdate(newProps.style, style as unknown as Record, styleUnsubscribers) } if (newProps.dangerouslySetInnerHTML != null) { @@ -1051,7 +1051,7 @@ export const setupHostConfig = (): HostConfig< if (props.style != null) { setupStyleUpdate( props.style, - instance.style ?? instance.element.style, + (instance.style ?? instance.element.style) as unknown as Record, instance.styleUnsubscribers as Map, ) } else { From 358e7da2fbdead0d4558597fc2256a32d1c92a71 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Fri, 27 Oct 2023 13:15:00 +0200 Subject: [PATCH 43/88] Revert "Deprecate useFacetRef" This reverts commit 36ee96b6907954132696dd6406b1d7fd62955c06. --- packages/@react-facet/core/src/hooks/index.ts | 1 + .../core/src/hooks/useFacetRef.spec.tsx | 69 +++++++++++++++++++ .../core/src/hooks/useFacetRef.ts | 23 +++++++ packages/@react-facet/core/src/index.spec.tsx | 1 + 4 files changed, 94 insertions(+) create mode 100644 packages/@react-facet/core/src/hooks/useFacetRef.spec.tsx create mode 100644 packages/@react-facet/core/src/hooks/useFacetRef.ts diff --git a/packages/@react-facet/core/src/hooks/index.ts b/packages/@react-facet/core/src/hooks/index.ts index 444fb048..d2789a92 100644 --- a/packages/@react-facet/core/src/hooks/index.ts +++ b/packages/@react-facet/core/src/hooks/index.ts @@ -4,6 +4,7 @@ export * from './useFacetLayoutEffect' export * from './useFacetMap' export * from './useFacetMemo' export * from './useFacetPropSetter' +export * from './useFacetRef' export * from './useFacetReducer' export * from './useFacetState' export * from './useFacetUnwrap' diff --git a/packages/@react-facet/core/src/hooks/useFacetRef.spec.tsx b/packages/@react-facet/core/src/hooks/useFacetRef.spec.tsx new file mode 100644 index 00000000..c4e68626 --- /dev/null +++ b/packages/@react-facet/core/src/hooks/useFacetRef.spec.tsx @@ -0,0 +1,69 @@ +import React, { createRef } from 'react' +import { render } from '@react-facet/dom-fiber-testing-library' +import { useFacetRef } from './useFacetRef' +import { createFacet } from '../facet' +import { NoValue, NO_VALUE } from '..' + +it('passes a value into the ref', () => { + const mockFacet = createFacet({ initialValue: 'value' }) + let ref: React.RefObject = createRef() + + const ComponentWithFacetEffect: React.FC = () => { + ref = useFacetRef(mockFacet) + expect(ref.current).toBe('value') + return + } + + render() + expect(ref.current).toBe('value') + mockFacet.set('changed') + expect(ref.current).toBe('changed') +}) + +it('should default to no NO_VALUE', () => { + const mockFacet = createFacet({ initialValue: NO_VALUE }) + let ref: React.RefObject = createRef() + + const ComponentWithFacetEffect: React.FC = () => { + ref = useFacetRef(mockFacet) + expect(ref.current).toBe(NO_VALUE) + return + } + + render() + expect(ref.current).toBe(NO_VALUE) + mockFacet.set('value') + expect(ref.current).toBe('value') +}) + +it('should be able to set a default value', () => { + const mockFacet = createFacet({ initialValue: NO_VALUE }) + let ref: React.RefObject = createRef() + + const ComponentWithFacetEffect: React.FC = () => { + ref = useFacetRef(mockFacet, 'fallback') + expect(ref.current).toBe('fallback') + return + } + + render() + expect(ref.current).toBe('fallback') + mockFacet.set('value') + expect(ref.current).toBe('value') +}) + +it('should ignore the default state if the facet has a value', () => { + const mockFacet = createFacet({ initialValue: 'initialValue' }) + let ref: React.RefObject = createRef() + + const ComponentWithFacetEffect: React.FC = () => { + ref = useFacetRef(mockFacet, 'fallback') + expect(ref.current).toBe('initialValue') + return + } + + render() + expect(ref.current).toBe('initialValue') + mockFacet.set('value') + expect(ref.current).toBe('value') +}) diff --git a/packages/@react-facet/core/src/hooks/useFacetRef.ts b/packages/@react-facet/core/src/hooks/useFacetRef.ts new file mode 100644 index 00000000..5cc4d411 --- /dev/null +++ b/packages/@react-facet/core/src/hooks/useFacetRef.ts @@ -0,0 +1,23 @@ +import { useRef, MutableRefObject } from 'react' +import { useFacetEffect } from './useFacetEffect' +import { NO_VALUE, Option, Facet } from '../types' + +export function useFacetRef(facet: Facet): MutableRefObject> +export function useFacetRef(facet: Facet, defaultValue: T): MutableRefObject +export function useFacetRef(facet: Facet, defaultValue?: T): MutableRefObject { + let value = facet.get() + if (value === NO_VALUE && defaultValue != undefined) { + value = defaultValue + } + + const ref = useRef>(value) + useFacetEffect( + (value) => { + ref.current = value + }, + [], + [facet], + ) + + return ref as MutableRefObject +} diff --git a/packages/@react-facet/core/src/index.spec.tsx b/packages/@react-facet/core/src/index.spec.tsx index 1b15c1c2..aaf882fc 100644 --- a/packages/@react-facet/core/src/index.spec.tsx +++ b/packages/@react-facet/core/src/index.spec.tsx @@ -91,6 +91,7 @@ describe('regression testing preventing accidental removal of APIs', () => { expect(facet.useFacetMemo).toBeDefined() expect(facet.useFacetPropSetter).toBeDefined() expect(facet.useFacetReducer).toBeDefined() + expect(facet.useFacetRef).toBeDefined() expect(facet.useFacetState).toBeDefined() expect(facet.useFacetUnwrap).toBeDefined() expect(facet.useFacetWrap).toBeDefined() From 939711d395ee6bc38099dfa0441fe39d9c50860f Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 14 Nov 2023 15:01:13 +0100 Subject: [PATCH 44/88] Restore deferred-mount and undo Suspense --- packages/@react-facet/core/src/hooks/index.ts | 1 - .../core/src/hooks/useFacetUnwrap.spec.tsx | 36 +- .../core/src/hooks/useFacetUnwrap.ts | 19 +- .../src/hooks/useFacetUnwrapTransition.ts | 61 ---- packages/@react-facet/deferred-mount/LICENSE | 21 ++ .../@react-facet/deferred-mount/README.md | 79 ++++ .../deferred-mount/jest.config.js | 11 + .../@react-facet/deferred-mount/package.json | 53 +++ .../deferred-mount/src/index.spec.tsx | 336 ++++++++++++++++++ .../@react-facet/deferred-mount/src/index.tsx | 287 +++++++++++++++ .../@react-facet/deferred-mount/tsconfig.json | 7 + yarn.lock | 25 ++ 12 files changed, 827 insertions(+), 109 deletions(-) delete mode 100644 packages/@react-facet/core/src/hooks/useFacetUnwrapTransition.ts create mode 100644 packages/@react-facet/deferred-mount/LICENSE create mode 100644 packages/@react-facet/deferred-mount/README.md create mode 100644 packages/@react-facet/deferred-mount/jest.config.js create mode 100644 packages/@react-facet/deferred-mount/package.json create mode 100644 packages/@react-facet/deferred-mount/src/index.spec.tsx create mode 100644 packages/@react-facet/deferred-mount/src/index.tsx create mode 100644 packages/@react-facet/deferred-mount/tsconfig.json diff --git a/packages/@react-facet/core/src/hooks/index.ts b/packages/@react-facet/core/src/hooks/index.ts index d2789a92..6dfd13a0 100644 --- a/packages/@react-facet/core/src/hooks/index.ts +++ b/packages/@react-facet/core/src/hooks/index.ts @@ -8,5 +8,4 @@ export * from './useFacetRef' export * from './useFacetReducer' export * from './useFacetState' export * from './useFacetUnwrap' -export * from './useFacetUnwrapTransition' export * from './useFacetWrap' diff --git a/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx b/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx index 9a3d8d55..ec734aa2 100644 --- a/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx +++ b/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx @@ -1,9 +1,8 @@ -import React, { Suspense } from 'react' +import React from 'react' import { render, act } from '@react-facet/dom-fiber-testing-library' import { useFacetUnwrap } from './useFacetUnwrap' import { createFacet } from '../facet' -import { asPromise } from '../helpers' -import { NO_VALUE } from '../types' +import { NO_VALUE } from '..' describe('when mounting facets with values', () => { it('renders only once for Immutable value of type string', () => { @@ -133,6 +132,7 @@ it('re-renders when facet is mutated', () => { const ComponentWithFacetEffect = () => { const adaptValue = useFacetUnwrap(demoFacet) + if (adaptValue === NO_VALUE) return null return {adaptValue.foo} } @@ -169,6 +169,7 @@ it('re-renders when facet is mutated to undefined', () => { const ComponentWithFacetEffect = () => { const adaptValue = useFacetUnwrap(demoFacet) + if (adaptValue === NO_VALUE) return null return {adaptValue.foo} } @@ -217,35 +218,6 @@ it('does not trigger a re-render when changing a facet from undefined to undefin expect(renderedMock).toHaveBeenCalledTimes(0) }) -describe('suspense', () => { - it('throws when a facet has NO_VALUE', async () => { - const demoFacet = createFacet({ initialValue: NO_VALUE }) - const renderedMock = jest.fn() - - const ComponentWithFacetEffect = () => { - const adaptValue = useFacetUnwrap(demoFacet) - renderedMock() - - return {adaptValue} - } - - render( - - - , - ) - - expect(renderedMock).toHaveBeenCalledTimes(0) - - await act(async () => { - demoFacet.set('updated value') - await asPromise(demoFacet) - }) - - expect(renderedMock).toHaveBeenCalledTimes(1) - }) -}) - it('supports custom equality checks', () => { const value = {} const demoFacet = createFacet({ initialValue: value }) diff --git a/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts b/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts index 3579fdc6..c2bba377 100644 --- a/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts +++ b/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts @@ -1,22 +1,18 @@ import { useLayoutEffect, useState } from 'react' -import { isFacet, Value, NO_VALUE, Option, FacetProp, EqualityCheck } from '../types' -import { asPromise } from '../helpers' +import { FacetProp, isFacet, Value, NoValue, EqualityCheck, NO_VALUE } from '../types' import { defaultEqualityCheck } from '../equalityChecks' /** * Hook that allows consuming values from a Facet * It acts as a regular react state, triggering a re-render of the component * - * If the provided value is not a Facet, it will simply be forwarded untouched. - * * @param facet - * @returns value of the Facet */ export function useFacetUnwrap( prop: FacetProp, equalityCheck: EqualityCheck = defaultEqualityCheck, -): T { - const [state, setState] = useState<{ value: Option }>(() => { +): T | NoValue { + const [state, setState] = useState<{ value: T | NoValue }>(() => { if (!isFacet(prop)) return { value: prop } return { @@ -74,12 +70,5 @@ export function useFacetUnwrap( } }, [prop, equalityCheck]) - if (!isFacet(prop)) return prop - - // If we don't have a value for the Facet yet, we can throw a Promise to trigger React's Suspense. - if (state.value === NO_VALUE) { - throw asPromise(prop) - } - - return state.value + return isFacet(prop) ? state.value : prop } diff --git a/packages/@react-facet/core/src/hooks/useFacetUnwrapTransition.ts b/packages/@react-facet/core/src/hooks/useFacetUnwrapTransition.ts deleted file mode 100644 index aae11f6f..00000000 --- a/packages/@react-facet/core/src/hooks/useFacetUnwrapTransition.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { useLayoutEffect, useState, useTransition } from 'react' -import { FacetProp, isFacet, Value, NoValue } from '../types' - -/** - * Hook that allows consuming values from a Facet as plain React State values. - * - * Unwraps as a transition (useTransition), yielding to more urgent updates such as clicks. - * - * @param facet - * @return a boolean indicating if the transition is pending, plus the unwrapped value. - */ -export function useFacetUnwrapTransition(prop: FacetProp): [boolean, T | NoValue] { - const [state, setState] = useState<{ value: T | NoValue }>(() => { - if (!isFacet(prop)) return { value: prop } - - return { - value: prop.get(), - } - }) - - const [isPending, startTransition] = useTransition() - - useLayoutEffect(() => { - if (isFacet(prop)) { - return prop.observe((value: T) => { - startTransition(() => { - setState((previousState) => { - const { value: previousValue } = previousState - - const typeofValue = typeof previousValue - - /** - * Performs this equality check locally to prevent triggering two consecutive renderings - * for facets that have immutable values (unfortunately we can't handle mutable values). - * - * The two renderings might happen for the same state value if the Facet has a value on mount. - * - * The unwrap will get the value: - * - Once on initialization of the useState above - * - And another time on this observe initialization - */ - if ( - (typeofValue === 'number' || - typeofValue === 'string' || - typeofValue === 'boolean' || - value === undefined || - value === null) && - value === previousValue - ) { - return previousState - } - - return { value } - }) - }) - }) - } - }, [prop, startTransition]) - - return [isPending, isFacet(prop) ? state.value : prop] -} diff --git a/packages/@react-facet/deferred-mount/LICENSE b/packages/@react-facet/deferred-mount/LICENSE new file mode 100644 index 00000000..b2f52a2b --- /dev/null +++ b/packages/@react-facet/deferred-mount/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) Microsoft Corporation. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/@react-facet/deferred-mount/README.md b/packages/@react-facet/deferred-mount/README.md new file mode 100644 index 00000000..6956a644 --- /dev/null +++ b/packages/@react-facet/deferred-mount/README.md @@ -0,0 +1,79 @@ +# @react-facet/deferred-mount + +React Facet is a state management for performant game UIs. For more information on how to use this package check the official documentation available at https://react-facet.mojang.com/. + +This package allows you to defer the mounting of a component to the next frame. By wrapping components on a big list you can keep the frame time low while everything is mounted. + +When the `DeferredMountProvider` is used, it requires that there is at least one descendent as a `DeferredMount` or `DeferredMountWithCallback`, otherwise it will wait forever as `deferring`. + +### Example + +In the example below it will mount: + +- Mounting: nothing +- First Frame: `First` +- Second Frame: `First` and `Second` +- Third Frame: `First`, `Second` and `Third` + +The `useIsDeferring` hook allows to check what is the status of the deferred mounting (by returning a Facet) so we can, for example, show a spinner. + +```tsx +const SampleComponent = () => { + const isDeferringFacet = useIsDeferring() + + return ( + <> + (isDeferring ? 'deferring' : 'done'), [], [isDeferringFacet])} /> + +
First
+
+ +
Second
+
+ +
Third
+
+ + ) +} + +render( + + + , + document.getElementById('root'), +) +``` + +The `frameTimeBudget` prop allows the tweaking of how much time the library has available to do work on a given frame (by default it targets 60fps). + +## Deferring Asynchronous Renders + +Some components may need to wait some time before they can be considered fully rendered (for example if they are fetching data). For these cases you should use `DeferredMountWithCallback` with the `useNotifyMountComplete` hook. + +### Example + +```tsx +const DelayedComponent = () => { + const notifyMountComplete = useNotifyMountComplete() + const [data, setData] = useState() + + useEffect(() => { + fetch('mock-api').then((data) => { + setData(data) + notifyMountComplete() + }) + }, [notifyMountComplete]) + + return
{data}
+} + +render( + + + + + , + document.getElementById('root'), +) +``` diff --git a/packages/@react-facet/deferred-mount/jest.config.js b/packages/@react-facet/deferred-mount/jest.config.js new file mode 100644 index 00000000..ec033628 --- /dev/null +++ b/packages/@react-facet/deferred-mount/jest.config.js @@ -0,0 +1,11 @@ +/* eslint-env node */ + +const baseConfig = require('../../../jest.base.config') +const projectName = require('./package.json').name + +module.exports = { + ...baseConfig, + name: projectName, + displayName: projectName, + rootDir: './', +} diff --git a/packages/@react-facet/deferred-mount/package.json b/packages/@react-facet/deferred-mount/package.json new file mode 100644 index 00000000..ac706630 --- /dev/null +++ b/packages/@react-facet/deferred-mount/package.json @@ -0,0 +1,53 @@ +{ + "name": "@react-facet/deferred-mount", + "repository": { + "type": "git", + "url": "https://github.com/Mojang/ore-ui.git", + "directory": "packages/@react-facet/deferred-mount" + }, + "author": { + "name": "Paulo Ragonha", + "email": "paulo@ragonha.me" + }, + "contributors": [ + { + "name": "Danila Dergachev", + "email": "dderg@protonmail.com" + }, + { + "name": "Fernando Via Canel", + "email": "fernando.via@gmail.com" + }, + { + "name": "Marlon Huber-Smith", + "email": "marlonhubersmith@gmail.com" + } + ], + "files": [ + "dist/**/*" + ], + "homepage": "https://react-facet.mojang.com/", + "bugs": "https://github.com/Mojang/ore-ui/issues", + "license": "MIT", + "version": "0.5.3", + "main": "src/index.tsx", + "publishConfig": { + "main": "dist/index.js", + "types": "dist/index.d.ts" + }, + "sideEffects": false, + "scripts": { + "build": "rimraf dist && tsc", + "prepublish": "yarn build" + }, + "peerDependencies": { + "@react-facet/core": "0.5.3", + "react": "^16.9.0" + }, + "devDependencies": { + "@react-facet/dom-fiber-testing-library": "0.5.3", + "react": "^16.9.0", + "rimraf": "^3.0.2", + "typescript": "^4.8.2" + } +} diff --git a/packages/@react-facet/deferred-mount/src/index.spec.tsx b/packages/@react-facet/deferred-mount/src/index.spec.tsx new file mode 100644 index 00000000..0b0c1f58 --- /dev/null +++ b/packages/@react-facet/deferred-mount/src/index.spec.tsx @@ -0,0 +1,336 @@ +import React, { useEffect } from 'react' +import { + DeferredMountProvider, + DeferredMount, + useIsDeferring, + DeferredMountWithCallback, + useNotifyMountComplete, +} from '.' +import { render, act } from '@react-facet/dom-fiber-testing-library' +import { useFacetEffect, useFacetMap } from '@react-facet/core' + +let idSeed = 1 + +interface Cb { + (time: number): void + frameId: number +} + +describe('DeferredMount', () => { + it('renders immediately if we dont have a provider', () => { + const { container } = render( + +
Should be rendered
+
, + ) + expect(container.firstChild).toContainHTML('
Should be rendered
') + }) +}) + +describe('DeferredMountWithCallback', () => { + it('renders immediately if we dont have a provider', () => { + const { container } = render( + +
Should be rendered
+
, + ) + expect(container.firstChild).toContainHTML('
Should be rendered
') + }) + + it('waits until previous deferred callback finishes', async () => { + jest.useFakeTimers() + + const frames: (() => void)[] = [] + const requestSpy = jest.spyOn(window, 'requestAnimationFrame').mockImplementation((frameRequest) => { + const id = idSeed++ + const cb = () => { + frameRequest(id) + } + frames.push(cb) + return id + }) + + const runRaf = () => { + const cb = frames.pop() + if (cb !== undefined) act(() => cb()) + } + + const MOUNT_COMPLETION_DELAY = 1000 + + const MockDeferredComponent = ({ index }: { index: number }) => { + const triggerMountComplete = useNotifyMountComplete() + + useEffect(() => { + const id = setTimeout(triggerMountComplete, MOUNT_COMPLETION_DELAY) + + return () => { + clearTimeout(id) + } + }, [triggerMountComplete, index]) + + return
Callback{index}
+ } + + const SampleComponent = () => { + const isDeferringFacet = useIsDeferring() + + return ( + <> + (isDeferring ? 'deferring' : 'done'), [], [isDeferringFacet])} + /> + + + + + + + + + + + ) + } + + const { container } = render( + + + , + ) + + // Wait a frame for deferred component to render + expect(container).toContainHTML('deferring') + expect(container).not.toContainHTML('Callback0') + expect(container).not.toContainHTML('Callback1') + expect(container).not.toContainHTML('Callback2') + + // Initial run, sets renders the first component + runRaf() + expect(container).toContainHTML('Callback0') + expect(container).not.toContainHTML('Callback1') + expect(container).not.toContainHTML('Callback2') + + // Wait for component to finish rendering, then advance to the next component render + jest.advanceTimersByTime(MOUNT_COMPLETION_DELAY) + runRaf() + expect(container).toContainHTML('Callback0') + expect(container).toContainHTML('Callback1') + expect(container).not.toContainHTML('Callback2') + + // Wait for component to finish rendering, then advance to the next component render + jest.advanceTimersByTime(MOUNT_COMPLETION_DELAY) + runRaf() + expect(container).toContainHTML('Callback0') + expect(container).toContainHTML('Callback1') + expect(container).toContainHTML('Callback2') + + // Wait for final deferred render and expect queue to be finished + jest.advanceTimersByTime(MOUNT_COMPLETION_DELAY) + runRaf() + expect(container).toContainHTML('done') + + jest.useRealTimers() + requestSpy.mockRestore() + }) +}) + +describe('cost is about half of the budget (should mount two per frame)', () => { + const COST = 5 + const BUDGET = 11 + + let frames: Cb[] = [] + let requestSpy: jest.SpyInstance + let cancelSpy: jest.SpyInstance + let nowSpy: jest.SpyInstance + let now: number + + beforeAll(() => { + now = 0 + frames = [] + + requestSpy = jest.spyOn(window, 'requestAnimationFrame').mockImplementation((frameRequest) => { + const cb = frameRequest as Cb + cb.frameId = idSeed++ + frames.push(cb) + return cb.frameId + }) + + cancelSpy = jest.spyOn(window, 'cancelAnimationFrame').mockImplementation((frameId) => { + frames = frames.filter((frame) => frame.frameId !== frameId) + }) + + // every time we ask about the time (to measure performance in the implementation) we advance the time by the COST + nowSpy = jest.spyOn(performance, 'now').mockImplementation(() => { + now = now + COST + return now + }) + }) + + afterAll(() => { + now = 0 + requestSpy.mockRestore() + cancelSpy.mockRestore() + nowSpy.mockRestore() + }) + + const isDeferringValues = jest.fn() + + const SampleComponent = () => { + const isDeferringFacet = useIsDeferring() + useFacetEffect((isDeferring) => isDeferringValues(isDeferring), [], [isDeferringFacet]) + + return ( + <> + (isDeferring ? 'deferring' : 'done'), [], [isDeferringFacet])} /> + +
First
+
+ +
Second
+
+ +
Third
+
+ +
Fourth
+
+ +
Fifth
+
+ + ) + } + + let container: HTMLElement + + beforeEach(() => { + isDeferringValues.mockClear() + + container = render( + + + , + ).container + }) + + it('renders nothing immediately', () => { + expect(container).not.toContainHTML('First') + expect(container).not.toContainHTML('Second') + expect(container).not.toContainHTML('Third') + expect(container).not.toContainHTML('Fourth') + expect(container).not.toContainHTML('Fifth') + }) + + it('states that is deferring in the first frame', () => { + expect(isDeferringValues).toBeCalledTimes(1) + expect(isDeferringValues).toBeCalledWith(true) + expect(container).toContainHTML('deferring') + }) + + describe('first frame passed', () => { + beforeEach(() => { + const frame = frames.pop() + if (!frame) throw new Error('requestAnimationFrame not requested') + + act(() => { + frame(now) + }) + }) + + it('states that is deferring', () => { + expect(container).toContainHTML('deferring') + }) + + it('renders the first two deferred render', () => { + expect(container).toContainHTML('First') + expect(container).toContainHTML('Second') + expect(container).not.toContainHTML('Third') + expect(container).not.toContainHTML('Fourth') + expect(container).not.toContainHTML('Fifth') + }) + + describe('second frame passed', () => { + beforeEach(() => { + const frame = frames.pop() + if (!frame) throw new Error('requestAnimationFrame not requested') + + act(() => { + frame(now) + }) + }) + + it('states that is deferring', () => { + expect(container).toContainHTML('deferring') + }) + + it('renders the third and fourth deferred render', () => { + expect(container).toContainHTML('First') + expect(container).toContainHTML('Second') + expect(container).toContainHTML('Third') + expect(container).toContainHTML('Fourth') + expect(container).not.toContainHTML('Fifth') + }) + + describe('thrid frame passed', () => { + beforeEach(() => { + const frame = frames.pop() + if (!frame) throw new Error('requestAnimationFrame not requested') + + act(() => { + frame(now) + }) + }) + + it('does not request a new animation frame', () => { + expect(frames.length).toBe(0) + }) + + it('states that is done', () => { + expect(container).toContainHTML('done') + }) + + it('renders the remaining of deferred render', () => { + expect(container).toContainHTML('First') + expect(container).toContainHTML('Second') + expect(container).toContainHTML('Third') + expect(container).toContainHTML('Fourth') + expect(container).toContainHTML('Fifth') + }) + }) + }) + }) +}) + +describe('app with just the DeferredMountProvider', () => { + const isDeferringValues = jest.fn() + + const SampleComponent = () => { + const isDeferringFacet = useIsDeferring() + + useFacetEffect((isDeferring) => isDeferringValues(isDeferring), [], [isDeferringFacet]) + + return ( + <> + (isDeferring ? 'deferring' : 'done'), [], [isDeferringFacet])} /> + + ) + } + + let container: HTMLElement + + beforeEach(() => { + isDeferringValues.mockClear() + + container = render( + + + , + ).container + }) + + it('states that is deferring in the first frame', () => { + expect(isDeferringValues).toBeCalledTimes(1) + expect(isDeferringValues).toBeCalledWith(true) + expect(container).toContainHTML('deferring') + }) +}) diff --git a/packages/@react-facet/deferred-mount/src/index.tsx b/packages/@react-facet/deferred-mount/src/index.tsx new file mode 100644 index 00000000..9fbee5be --- /dev/null +++ b/packages/@react-facet/deferred-mount/src/index.tsx @@ -0,0 +1,287 @@ +import React, { + createContext, + useState, + useContext, + ReactNode, + useCallback, + useRef, + useEffect, + ReactElement, +} from 'react' +import { createFacet, Facet, useFacetEffect, useFacetState } from '@react-facet/core' + +type Config = { + forceImmediateMount: boolean +} + +const DeferredMountConfig = createContext({ forceImmediateMount: false }) + +export function DeferredMountConfigProvider({ config, children }: { config: Config; children: React.ReactNode }) { + return {children} +} + +function useConfig() { + return useContext(DeferredMountConfig) +} + +/** + * Targeting around 60fps + */ +const DEFAULT_FRAME_TIME_BUDGET = 16 + +interface DeferredMountProviderProps { + children: ReactNode + + /** + * How many milliseconds we can spend mounting components. + */ + frameTimeBudget?: number +} + +export function InnerDeferredMountProvider({ + children, + frameTimeBudget = DEFAULT_FRAME_TIME_BUDGET, +}: DeferredMountProviderProps) { + const [isDeferring, setIsDeferring] = useFacetState(true) + const [requestingToRun, setRequestingToRun] = useFacetState(false) + const waitingForMountCallback = useRef(false) + + const deferredMountsRef = useRef([]) + + const pushDeferUpdateFunction = useCallback( + (updateFn: UpdateFn) => { + // Causes a re-render of this component that will kick-off the effect below + setRequestingToRun(true) + + deferredMountsRef.current.push(updateFn) + + /** + * Cleanup function that makes sure that we don't try to "mount" a deferred component + * if it has already been unmounted. + */ + return () => { + // It is most common that we will be cleaning up after all deferred mounting has been run + if (deferredMountsRef.current.length === 0 && !waitingForMountCallback.current) return + + const index = deferredMountsRef.current.indexOf(updateFn) + if (index !== -1) { + deferredMountsRef.current.splice(index, 1) + } + } + }, + [setRequestingToRun], + ) + + useFacetEffect( + (requestingToRun) => { + // Even if we are not considered to be running, we need to check if there is still + // work pending to be done. If there is... we still need to run this effect. + if (!requestingToRun && deferredMountsRef.current.length === 0 && !waitingForMountCallback.current) return + + const work = (startTimestamp: number) => { + const deferredMounts = deferredMountsRef.current + + // We need to request the new frame at the top + // otherwise, the state change at the bottom will trigger a new render + // before we have a chance to cancel + // Its not possible to detect this with unit testing, so verify on the browser + // after a change here that this function is not executing every frame unnecessarily + if (deferredMounts.length > 0 || waitingForMountCallback.current) { + frameId = window.requestAnimationFrame(work) + } else { + // Used to check if the requestAnimationFrame has stopped running + frameId = -1 + } + + let lastUpdateCost = 0 + let now = startTimestamp + + while ( + deferredMounts.length > 0 && + now - startTimestamp + lastUpdateCost < frameTimeBudget && + !waitingForMountCallback.current + ) { + const before = now + + const updateFn = deferredMounts.shift() as UpdateFn + const result = updateFn(false) + + const after = performance.now() + + lastUpdateCost = after - before + now = after + + // Can be a function that takes a callback if using DeferredMountWithCallback + const resultTakesCallback = typeof result === 'function' + + if (resultTakesCallback) { + waitingForMountCallback.current = true + + result(() => { + waitingForMountCallback.current = false + + // If the requestAnimationFrame stops running while waiting for the + // callback we need to restart it to process the rest of the queue. + if (frameId === -1) { + frameId = window.requestAnimationFrame(work) + } + }) + } + } + + if (deferredMounts.length === 0 && !waitingForMountCallback.current) { + setIsDeferring(false) + setRequestingToRun(false) + } + } + + let frameId = window.requestAnimationFrame(work) + + return () => { + window.cancelAnimationFrame(frameId) + } + }, + [frameTimeBudget, setIsDeferring, setRequestingToRun], + [requestingToRun], + ) + + return ( + + {children} + + ) +} + +/** + * Provider that must wrap a tree with nodes being deferred + */ +export function DeferredMountProvider(props: DeferredMountProviderProps) { + const config = useConfig() + if (config.forceImmediateMount) { + return <>{props.children} + } + + return +} + +interface DeferredMountProps { + children: ReactElement +} + +/** + * Component that should wrap some mounting that must be deferred to a later frame + * @param children component to be mounted deferred + */ +export function DeferredMount({ children }: DeferredMountProps) { + const pushDeferUpdateFunction = useContext(pushDeferUpdateContext) + const [deferred, setDeferred] = useState(pushDeferUpdateFunction !== undefined) + + useEffect(() => { + if (pushDeferUpdateFunction) pushDeferUpdateFunction(setDeferred) + }, [pushDeferUpdateFunction]) + + if (deferred) return null + return children +} + +interface DeferredMountWithCallbackProps { + children: ReactElement +} + +const NotifyMountComplete = createContext(() => {}) +export const useNotifyMountComplete = () => useContext(NotifyMountComplete) + +/** + * Component that should wrap some mounting that must be deferred to a later frame. + * This will wait for a callback from the child component before marking itself as rendered. + * @param children component to be mounted deferred + */ +export function DeferredMountWithCallback({ children }: DeferredMountWithCallbackProps) { + const pushDeferUpdateFunction = useContext(pushDeferUpdateContext) + const [deferred, setDeferred] = useState(pushDeferUpdateFunction !== undefined) + const resolveMountComplete = useRef<(value: void | PromiseLike) => void>() + const mountCompleteBeforeInitialization = useRef(false) + + const onMountComplete = useCallback(() => { + if (resolveMountComplete.current !== undefined) { + resolveMountComplete.current() + } else { + mountCompleteBeforeInitialization.current = true + } + }, []) + + useEffect(() => { + if (pushDeferUpdateFunction) + pushDeferUpdateFunction((isDeferred) => { + return (resolve) => { + setDeferred(isDeferred) + + if (mountCompleteBeforeInitialization.current) { + resolve() + } else { + resolveMountComplete.current = resolve + } + } + }) + }, [pushDeferUpdateFunction, onMountComplete]) + + if (deferred) return null + return {children} +} + +interface ImmediateMountProps { + children: ReactElement +} + +/** + * Hook that informs if any mounting is currently being deferred + * Can be used to show some loading indicator + */ +export function useIsDeferring() { + return useContext(isDeferringContext) +} + +/** + * Allow us to pause costly mounting (mounting) of components + * So that transitions can occur + */ +export function useIsPaused() { + return useContext(isPausedContext) +} + +/** + * API compatible component with DeferredMount, but renders immediately + */ +export function ImmediateMount({ children }: ImmediateMountProps) { + return children +} + +interface UpdateFn { + (deferred: boolean): void | ((onMountComplete: () => void) => void) +} + +interface PushDeferUpdateFunction { + (updateFn: UpdateFn): void +} + +const pushDeferUpdateContext = createContext(undefined) + +const isDeferringContext = createContext>(createFacet({ initialValue: false })) + +const isPausedContext = createContext(false) + +/** + * This pauses the mounting of children components. + * Given it affects mounting, it should only happen the first time! Asking to pause again in the future is not possible + */ +export function PauseMountProvider({ paused, children }: { paused: boolean; children: ReactNode }) { + const wasEverResumed = useRef(!paused) + + useEffect(() => { + if (!paused) { + wasEverResumed.current = true + } + }, [paused]) + + return {children} +} diff --git a/packages/@react-facet/deferred-mount/tsconfig.json b/packages/@react-facet/deferred-mount/tsconfig.json new file mode 100644 index 00000000..2eeba49e --- /dev/null +++ b/packages/@react-facet/deferred-mount/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + } +} diff --git a/yarn.lock b/yarn.lock index 421c7487..5dbecf13 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1514,6 +1514,20 @@ __metadata: languageName: node linkType: hard +"@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount": + version: 0.0.0-use.local + resolution: "@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount" + dependencies: + "@react-facet/dom-fiber-testing-library": 0.5.3 + react: ^16.9.0 + rimraf: ^3.0.2 + typescript: ^4.8.2 + peerDependencies: + "@react-facet/core": 0.5.3 + react: ^16.9.0 + languageName: unknown + linkType: soft + "@react-facet/dom-components@workspace:packages/@react-facet/dom-components": version: 0.0.0-use.local resolution: "@react-facet/dom-components@workspace:packages/@react-facet/dom-components" @@ -9125,6 +9139,17 @@ __metadata: languageName: node linkType: hard +"react@npm:^16.9.0": + version: 16.14.0 + resolution: "react@npm:16.14.0" + dependencies: + loose-envify: ^1.1.0 + object-assign: ^4.1.1 + prop-types: ^15.6.2 + checksum: 8484f3ecb13414526f2a7412190575fc134da785c02695eb92bb6028c930bfe1c238d7be2a125088fec663cc7cda0a3623373c46807cf2c281f49c34b79881ac + languageName: node + linkType: hard + "readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.6": version: 2.3.7 resolution: "readable-stream@npm:2.3.7" From 501fa19ee60f1ec16d41e56d5ff15c99b6af09c0 Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 14 Nov 2023 15:04:34 +0100 Subject: [PATCH 45/88] Fix type error after revert --- packages/@react-facet/core/src/components/Map.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@react-facet/core/src/components/Map.tsx b/packages/@react-facet/core/src/components/Map.tsx index 29112478..412b017c 100644 --- a/packages/@react-facet/core/src/components/Map.tsx +++ b/packages/@react-facet/core/src/components/Map.tsx @@ -29,7 +29,7 @@ export const Map = ({ array, children, equalityCheck }: MapProps) => { ) : ( key={index} arrayFacet={array} index={index} children={children} /> ), - countValue, + countValue !== NO_VALUE ? countValue : 0, )} ) From 7e1d88c898046184026769898d0e31b42814ac54 Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 14 Nov 2023 15:08:28 +0100 Subject: [PATCH 46/88] Update React version of deferred-mount --- .../@react-facet/deferred-mount/jest.config.js | 1 - packages/@react-facet/deferred-mount/package.json | 4 ++-- yarn.lock | 15 ++------------- 3 files changed, 4 insertions(+), 16 deletions(-) diff --git a/packages/@react-facet/deferred-mount/jest.config.js b/packages/@react-facet/deferred-mount/jest.config.js index ec033628..93714085 100644 --- a/packages/@react-facet/deferred-mount/jest.config.js +++ b/packages/@react-facet/deferred-mount/jest.config.js @@ -5,7 +5,6 @@ const projectName = require('./package.json').name module.exports = { ...baseConfig, - name: projectName, displayName: projectName, rootDir: './', } diff --git a/packages/@react-facet/deferred-mount/package.json b/packages/@react-facet/deferred-mount/package.json index ac706630..ef4a4235 100644 --- a/packages/@react-facet/deferred-mount/package.json +++ b/packages/@react-facet/deferred-mount/package.json @@ -42,11 +42,11 @@ }, "peerDependencies": { "@react-facet/core": "0.5.3", - "react": "^16.9.0" + "react": "18.2.0" }, "devDependencies": { "@react-facet/dom-fiber-testing-library": "0.5.3", - "react": "^16.9.0", + "react": "18.2.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/yarn.lock b/yarn.lock index 5dbecf13..a5eef68f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1519,12 +1519,12 @@ __metadata: resolution: "@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount" dependencies: "@react-facet/dom-fiber-testing-library": 0.5.3 - react: ^16.9.0 + react: 18.2.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: "@react-facet/core": 0.5.3 - react: ^16.9.0 + react: 18.2.0 languageName: unknown linkType: soft @@ -9139,17 +9139,6 @@ __metadata: languageName: node linkType: hard -"react@npm:^16.9.0": - version: 16.14.0 - resolution: "react@npm:16.14.0" - dependencies: - loose-envify: ^1.1.0 - object-assign: ^4.1.1 - prop-types: ^15.6.2 - checksum: 8484f3ecb13414526f2a7412190575fc134da785c02695eb92bb6028c930bfe1c238d7be2a125088fec663cc7cda0a3623373c46807cf2c281f49c34b79881ac - languageName: node - linkType: hard - "readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.6": version: 2.3.7 resolution: "readable-stream@npm:2.3.7" From 8b542ed014fde97c99205ccdbb9daf1da925c56c Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 14 Nov 2023 15:12:47 +0100 Subject: [PATCH 47/88] Update unit test --- .../dom-fiber/src/setupHostConfig.spec.tsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/@react-facet/dom-fiber/src/setupHostConfig.spec.tsx b/packages/@react-facet/dom-fiber/src/setupHostConfig.spec.tsx index c4220c1a..496e34dd 100644 --- a/packages/@react-facet/dom-fiber/src/setupHostConfig.spec.tsx +++ b/packages/@react-facet/dom-fiber/src/setupHostConfig.spec.tsx @@ -1170,11 +1170,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('

') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('

') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('

') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('

') }) From d87e4ed88d694d2232645aae67d9c51620f555e8 Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 14 Nov 2023 15:22:55 +0100 Subject: [PATCH 48/88] Use createRoot on benchmarks --- examples/benchmarking/src/listMemoFacet.tsx | 8 ++++++-- examples/benchmarking/src/listMemoState.tsx | 8 ++++++-- examples/benchmarking/src/markerFacet.tsx | 8 ++++++-- examples/benchmarking/src/markerFacetNumber.tsx | 8 ++++++-- examples/benchmarking/src/markerState.tsx | 8 ++++++-- examples/benchmarking/src/mountFacetDomFiber.tsx | 8 ++++++-- examples/benchmarking/src/mountReactDom.tsx | 8 ++++++-- examples/benchmarking/src/overheadFacet.tsx | 10 +++++++--- examples/benchmarking/src/overheadState.tsx | 10 +++++++--- examples/benchmarking/src/progressBarFacet.tsx | 12 ++++++++---- examples/benchmarking/src/progressBarState.tsx | 12 ++++++++---- .../benchmarking/src/toggleRealisticClassFacet.tsx | 8 ++++++-- .../benchmarking/src/toggleRealisticClassState.tsx | 8 ++++++-- examples/benchmarking/src/toggleSimpleClassFacet.tsx | 8 ++++++-- examples/benchmarking/src/toggleSimpleClassState.tsx | 8 ++++++-- 15 files changed, 96 insertions(+), 36 deletions(-) diff --git a/examples/benchmarking/src/listMemoFacet.tsx b/examples/benchmarking/src/listMemoFacet.tsx index 4d89d930..bdbb922c 100644 --- a/examples/benchmarking/src/listMemoFacet.tsx +++ b/examples/benchmarking/src/listMemoFacet.tsx @@ -1,5 +1,5 @@ import { useFacetState, Facet, useFacetMap, useFacetEffect, NO_VALUE, Map } from '@react-facet/core' -import { render } from '@react-facet/dom-fiber' +import { createRoot } from '@react-facet/dom-fiber' import React, { useEffect } from 'react' interface Data { @@ -103,4 +103,8 @@ const dataEqualityCheck = () => { } document.body.innerHTML = '
' -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element != null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/listMemoState.tsx b/examples/benchmarking/src/listMemoState.tsx index 688ec099..dc6cf01a 100644 --- a/examples/benchmarking/src/listMemoState.tsx +++ b/examples/benchmarking/src/listMemoState.tsx @@ -1,4 +1,4 @@ -import { render } from 'react-dom' +import { createRoot } from 'react-dom/client' import React, { useEffect, useState, memo } from 'react' interface Data { @@ -65,4 +65,8 @@ const ListItem = memo(({ health, name }: Data) => { const randomWork = (name: string | number) => Math.random() document.body.innerHTML = '
' -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element != null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/markerFacet.tsx b/examples/benchmarking/src/markerFacet.tsx index 6c3688f9..9bfb859a 100644 --- a/examples/benchmarking/src/markerFacet.tsx +++ b/examples/benchmarking/src/markerFacet.tsx @@ -1,5 +1,5 @@ import React, { useEffect } from 'react' -import { render } from '@react-facet/dom-fiber' +import { createRoot } from '@react-facet/dom-fiber' import { useFacetState, Facet, useFacetMap, NO_VALUE, Map } from '@react-facet/core' import { times } from 'ramda' @@ -63,4 +63,8 @@ function Performance() { } document.body.innerHTML = '
' -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element != null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/markerFacetNumber.tsx b/examples/benchmarking/src/markerFacetNumber.tsx index 9d7ef6be..24fc6a85 100644 --- a/examples/benchmarking/src/markerFacetNumber.tsx +++ b/examples/benchmarking/src/markerFacetNumber.tsx @@ -1,5 +1,5 @@ import React, { useEffect } from 'react' -import { render } from '@react-facet/dom-fiber' +import { createRoot } from '@react-facet/dom-fiber' import { useFacetState, Facet, useFacetMap, NO_VALUE, Map } from '@react-facet/core' import { times } from 'ramda' @@ -63,4 +63,8 @@ function Performance() { } document.body.innerHTML = '
' -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element != null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/markerState.tsx b/examples/benchmarking/src/markerState.tsx index 0e0fb9b9..8c6bc1e1 100644 --- a/examples/benchmarking/src/markerState.tsx +++ b/examples/benchmarking/src/markerState.tsx @@ -1,4 +1,4 @@ -import { render } from 'react-dom' +import { createRoot } from 'react-dom/client' import React, { useEffect, useState } from 'react' import { times } from 'ramda' @@ -61,4 +61,8 @@ function Performance() { } document.body.innerHTML = '
' -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element != null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/mountFacetDomFiber.tsx b/examples/benchmarking/src/mountFacetDomFiber.tsx index 992949de..809db745 100644 --- a/examples/benchmarking/src/mountFacetDomFiber.tsx +++ b/examples/benchmarking/src/mountFacetDomFiber.tsx @@ -1,4 +1,4 @@ -import { render } from '@react-facet/dom-fiber' +import { createRoot } from '@react-facet/dom-fiber' import { times } from 'ramda' import React, { useEffect, useState } from 'react' @@ -54,4 +54,8 @@ const ComplexComponent = ({ value }: { value: number }) => { } document.body.innerHTML = '
' -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element != null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/mountReactDom.tsx b/examples/benchmarking/src/mountReactDom.tsx index 0190b1f9..5209bfe4 100644 --- a/examples/benchmarking/src/mountReactDom.tsx +++ b/examples/benchmarking/src/mountReactDom.tsx @@ -1,4 +1,4 @@ -import { render } from 'react-dom' +import { createRoot } from 'react-dom/client' import { times } from 'ramda' import React, { useEffect, useState } from 'react' @@ -54,4 +54,8 @@ const ComplexComponent = ({ value }: { value: number }) => { } document.body.innerHTML = '
' -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element != null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/overheadFacet.tsx b/examples/benchmarking/src/overheadFacet.tsx index fe91a0d0..decb22f9 100644 --- a/examples/benchmarking/src/overheadFacet.tsx +++ b/examples/benchmarking/src/overheadFacet.tsx @@ -1,4 +1,4 @@ -import { render } from '@react-facet/dom-fiber' +import { createRoot } from '@react-facet/dom-fiber' import { useFacetState, useFacetEffect } from '@react-facet/core' import React, { useEffect } from 'react' @@ -31,5 +31,9 @@ function Performance() { return null } -document.body.innerHTML = `
` -render(, document.getElementById('root')) +document.body.innerHTML = '
' +const element = document.getElementById('root') +if (element != null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/overheadState.tsx b/examples/benchmarking/src/overheadState.tsx index 42b563e4..28817967 100644 --- a/examples/benchmarking/src/overheadState.tsx +++ b/examples/benchmarking/src/overheadState.tsx @@ -1,4 +1,4 @@ -import { render } from 'react-dom' +import { createRoot } from 'react-dom/client' import React, { useEffect, useState } from 'react' function Performance() { @@ -26,5 +26,9 @@ function Performance() { return null } -document.body.innerHTML = `
` -render(, document.getElementById('root')) +document.body.innerHTML = '
' +const element = document.getElementById('root') +if (element != null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/progressBarFacet.tsx b/examples/benchmarking/src/progressBarFacet.tsx index 737a7e90..3ffab134 100644 --- a/examples/benchmarking/src/progressBarFacet.tsx +++ b/examples/benchmarking/src/progressBarFacet.tsx @@ -1,6 +1,6 @@ import React, { useEffect } from 'react' import { useFacetMap, Facet, useFacetState } from '@react-facet/core' -import { render } from '@react-facet/dom-fiber' +import { createRoot } from '@react-facet/dom-fiber' const ProgressBar = ({ progress }: { progress: Facet }) => { const width = useFacetMap((progress) => `${progress * 20}px`, [], [progress]) @@ -18,7 +18,7 @@ const ProgressBar = ({ progress }: { progress: Facet }) => { ) } -const App = () => { +const Performance = () => { const [progress, setProgress] = useFacetState(0) useEffect(() => { @@ -39,5 +39,9 @@ const App = () => { return } -document.body.innerHTML = `
` -render(, document.getElementById('root')) +document.body.innerHTML = '
' +const element = document.getElementById('root') +if (element != null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/progressBarState.tsx b/examples/benchmarking/src/progressBarState.tsx index 7c013652..86041792 100644 --- a/examples/benchmarking/src/progressBarState.tsx +++ b/examples/benchmarking/src/progressBarState.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useState } from 'react' -import { render } from 'react-dom' +import { createRoot } from 'react-dom/client' const ProgressBar = ({ progress }: { progress: number }) => { const width = `${progress * 20}px` @@ -17,7 +17,7 @@ const ProgressBar = ({ progress }: { progress: number }) => { ) } -const App = () => { +const Performance = () => { const [progress, setProgress] = useState(0) useEffect(() => { @@ -38,5 +38,9 @@ const App = () => { return } -document.body.innerHTML = `
` -render(, document.getElementById('root')) +document.body.innerHTML = '
' +const element = document.getElementById('root') +if (element != null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/toggleRealisticClassFacet.tsx b/examples/benchmarking/src/toggleRealisticClassFacet.tsx index a7885cc7..f7377d75 100644 --- a/examples/benchmarking/src/toggleRealisticClassFacet.tsx +++ b/examples/benchmarking/src/toggleRealisticClassFacet.tsx @@ -1,4 +1,4 @@ -import { render } from '@react-facet/dom-fiber' +import { createRoot } from '@react-facet/dom-fiber' import { useFacetState } from '@react-facet/core' import React, { useEffect } from 'react' @@ -59,4 +59,8 @@ document.body.innerHTML = ` ` -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element != null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/toggleRealisticClassState.tsx b/examples/benchmarking/src/toggleRealisticClassState.tsx index bbf1b3b1..802570d6 100644 --- a/examples/benchmarking/src/toggleRealisticClassState.tsx +++ b/examples/benchmarking/src/toggleRealisticClassState.tsx @@ -1,4 +1,4 @@ -import { render } from 'react-dom' +import { createRoot } from 'react-dom/client' import React, { useEffect, useState } from 'react' function Performance() { @@ -58,4 +58,8 @@ document.body.innerHTML = ` ` -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element != null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/toggleSimpleClassFacet.tsx b/examples/benchmarking/src/toggleSimpleClassFacet.tsx index 8cf03517..f9089778 100644 --- a/examples/benchmarking/src/toggleSimpleClassFacet.tsx +++ b/examples/benchmarking/src/toggleSimpleClassFacet.tsx @@ -1,4 +1,4 @@ -import { render } from '@react-facet/dom-fiber' +import { createRoot } from '@react-facet/dom-fiber' import { useFacetState } from '@react-facet/core' import React, { useEffect } from 'react' @@ -37,4 +37,8 @@ document.body.innerHTML = ` ` -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element != null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/toggleSimpleClassState.tsx b/examples/benchmarking/src/toggleSimpleClassState.tsx index e06ad15d..0f887450 100644 --- a/examples/benchmarking/src/toggleSimpleClassState.tsx +++ b/examples/benchmarking/src/toggleSimpleClassState.tsx @@ -1,4 +1,4 @@ -import { render } from 'react-dom' +import { createRoot } from 'react-dom/client' import React, { useEffect, useState } from 'react' function Performance() { @@ -36,4 +36,8 @@ document.body.innerHTML = ` ` -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element != null) { + const root = createRoot(element) + root.render() +} From f53d82a75361c0948d7fd33c8eabf73667e5f15a Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 14 Nov 2023 16:14:37 +0100 Subject: [PATCH 49/88] WIP: keeping the deferred-mount API, but using react-18 features --- .../core/src/hooks/useFacetUnwrap.spec.tsx | 9 + .../deferred-mount/src/index.spec.tsx | 337 +----------------- .../@react-facet/deferred-mount/src/index.tsx | 89 ++--- 3 files changed, 49 insertions(+), 386 deletions(-) diff --git a/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx b/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx index ec734aa2..fe180d78 100644 --- a/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx +++ b/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx @@ -13,6 +13,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() + if (adaptValue === NO_VALUE) return null return {adaptValue} } @@ -28,6 +29,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() + if (adaptValue === NO_VALUE) return null return {adaptValue} } @@ -43,6 +45,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() + if (adaptValue === NO_VALUE) return null return {adaptValue} } @@ -58,6 +61,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() + if (adaptValue === NO_VALUE) return null return {adaptValue} } @@ -73,6 +77,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() + if (adaptValue === NO_VALUE) return null return {adaptValue} } @@ -89,6 +94,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() + if (adaptValue === NO_VALUE) return null return {adaptValue} } @@ -103,6 +109,7 @@ it('triggers when there is a change in the facet', () => { const ComponentWithFacetEffect = () => { const adaptValue = useFacetUnwrap(demoFacet) + if (adaptValue === NO_VALUE) return null return {adaptValue} } @@ -116,6 +123,7 @@ it('triggers when there is a change in the facet', () => { it('returns static values when given static values', () => { const ComponentWithFacetEffect = () => { const adaptValue = useFacetUnwrap('static string') + if (adaptValue === NO_VALUE) return null return {adaptValue} } @@ -203,6 +211,7 @@ it('does not trigger a re-render when changing a facet from undefined to undefin const adaptValue = useFacetUnwrap(demoFacet) renderedMock() + if (adaptValue === NO_VALUE) return null return {adaptValue} } diff --git a/packages/@react-facet/deferred-mount/src/index.spec.tsx b/packages/@react-facet/deferred-mount/src/index.spec.tsx index 0b0c1f58..4b4020c8 100644 --- a/packages/@react-facet/deferred-mount/src/index.spec.tsx +++ b/packages/@react-facet/deferred-mount/src/index.spec.tsx @@ -1,336 +1 @@ -import React, { useEffect } from 'react' -import { - DeferredMountProvider, - DeferredMount, - useIsDeferring, - DeferredMountWithCallback, - useNotifyMountComplete, -} from '.' -import { render, act } from '@react-facet/dom-fiber-testing-library' -import { useFacetEffect, useFacetMap } from '@react-facet/core' - -let idSeed = 1 - -interface Cb { - (time: number): void - frameId: number -} - -describe('DeferredMount', () => { - it('renders immediately if we dont have a provider', () => { - const { container } = render( - -
Should be rendered
-
, - ) - expect(container.firstChild).toContainHTML('
Should be rendered
') - }) -}) - -describe('DeferredMountWithCallback', () => { - it('renders immediately if we dont have a provider', () => { - const { container } = render( - -
Should be rendered
-
, - ) - expect(container.firstChild).toContainHTML('
Should be rendered
') - }) - - it('waits until previous deferred callback finishes', async () => { - jest.useFakeTimers() - - const frames: (() => void)[] = [] - const requestSpy = jest.spyOn(window, 'requestAnimationFrame').mockImplementation((frameRequest) => { - const id = idSeed++ - const cb = () => { - frameRequest(id) - } - frames.push(cb) - return id - }) - - const runRaf = () => { - const cb = frames.pop() - if (cb !== undefined) act(() => cb()) - } - - const MOUNT_COMPLETION_DELAY = 1000 - - const MockDeferredComponent = ({ index }: { index: number }) => { - const triggerMountComplete = useNotifyMountComplete() - - useEffect(() => { - const id = setTimeout(triggerMountComplete, MOUNT_COMPLETION_DELAY) - - return () => { - clearTimeout(id) - } - }, [triggerMountComplete, index]) - - return
Callback{index}
- } - - const SampleComponent = () => { - const isDeferringFacet = useIsDeferring() - - return ( - <> - (isDeferring ? 'deferring' : 'done'), [], [isDeferringFacet])} - /> - - - - - - - - - - - ) - } - - const { container } = render( - - - , - ) - - // Wait a frame for deferred component to render - expect(container).toContainHTML('deferring') - expect(container).not.toContainHTML('Callback0') - expect(container).not.toContainHTML('Callback1') - expect(container).not.toContainHTML('Callback2') - - // Initial run, sets renders the first component - runRaf() - expect(container).toContainHTML('Callback0') - expect(container).not.toContainHTML('Callback1') - expect(container).not.toContainHTML('Callback2') - - // Wait for component to finish rendering, then advance to the next component render - jest.advanceTimersByTime(MOUNT_COMPLETION_DELAY) - runRaf() - expect(container).toContainHTML('Callback0') - expect(container).toContainHTML('Callback1') - expect(container).not.toContainHTML('Callback2') - - // Wait for component to finish rendering, then advance to the next component render - jest.advanceTimersByTime(MOUNT_COMPLETION_DELAY) - runRaf() - expect(container).toContainHTML('Callback0') - expect(container).toContainHTML('Callback1') - expect(container).toContainHTML('Callback2') - - // Wait for final deferred render and expect queue to be finished - jest.advanceTimersByTime(MOUNT_COMPLETION_DELAY) - runRaf() - expect(container).toContainHTML('done') - - jest.useRealTimers() - requestSpy.mockRestore() - }) -}) - -describe('cost is about half of the budget (should mount two per frame)', () => { - const COST = 5 - const BUDGET = 11 - - let frames: Cb[] = [] - let requestSpy: jest.SpyInstance - let cancelSpy: jest.SpyInstance - let nowSpy: jest.SpyInstance - let now: number - - beforeAll(() => { - now = 0 - frames = [] - - requestSpy = jest.spyOn(window, 'requestAnimationFrame').mockImplementation((frameRequest) => { - const cb = frameRequest as Cb - cb.frameId = idSeed++ - frames.push(cb) - return cb.frameId - }) - - cancelSpy = jest.spyOn(window, 'cancelAnimationFrame').mockImplementation((frameId) => { - frames = frames.filter((frame) => frame.frameId !== frameId) - }) - - // every time we ask about the time (to measure performance in the implementation) we advance the time by the COST - nowSpy = jest.spyOn(performance, 'now').mockImplementation(() => { - now = now + COST - return now - }) - }) - - afterAll(() => { - now = 0 - requestSpy.mockRestore() - cancelSpy.mockRestore() - nowSpy.mockRestore() - }) - - const isDeferringValues = jest.fn() - - const SampleComponent = () => { - const isDeferringFacet = useIsDeferring() - useFacetEffect((isDeferring) => isDeferringValues(isDeferring), [], [isDeferringFacet]) - - return ( - <> - (isDeferring ? 'deferring' : 'done'), [], [isDeferringFacet])} /> - -
First
-
- -
Second
-
- -
Third
-
- -
Fourth
-
- -
Fifth
-
- - ) - } - - let container: HTMLElement - - beforeEach(() => { - isDeferringValues.mockClear() - - container = render( - - - , - ).container - }) - - it('renders nothing immediately', () => { - expect(container).not.toContainHTML('First') - expect(container).not.toContainHTML('Second') - expect(container).not.toContainHTML('Third') - expect(container).not.toContainHTML('Fourth') - expect(container).not.toContainHTML('Fifth') - }) - - it('states that is deferring in the first frame', () => { - expect(isDeferringValues).toBeCalledTimes(1) - expect(isDeferringValues).toBeCalledWith(true) - expect(container).toContainHTML('deferring') - }) - - describe('first frame passed', () => { - beforeEach(() => { - const frame = frames.pop() - if (!frame) throw new Error('requestAnimationFrame not requested') - - act(() => { - frame(now) - }) - }) - - it('states that is deferring', () => { - expect(container).toContainHTML('deferring') - }) - - it('renders the first two deferred render', () => { - expect(container).toContainHTML('First') - expect(container).toContainHTML('Second') - expect(container).not.toContainHTML('Third') - expect(container).not.toContainHTML('Fourth') - expect(container).not.toContainHTML('Fifth') - }) - - describe('second frame passed', () => { - beforeEach(() => { - const frame = frames.pop() - if (!frame) throw new Error('requestAnimationFrame not requested') - - act(() => { - frame(now) - }) - }) - - it('states that is deferring', () => { - expect(container).toContainHTML('deferring') - }) - - it('renders the third and fourth deferred render', () => { - expect(container).toContainHTML('First') - expect(container).toContainHTML('Second') - expect(container).toContainHTML('Third') - expect(container).toContainHTML('Fourth') - expect(container).not.toContainHTML('Fifth') - }) - - describe('thrid frame passed', () => { - beforeEach(() => { - const frame = frames.pop() - if (!frame) throw new Error('requestAnimationFrame not requested') - - act(() => { - frame(now) - }) - }) - - it('does not request a new animation frame', () => { - expect(frames.length).toBe(0) - }) - - it('states that is done', () => { - expect(container).toContainHTML('done') - }) - - it('renders the remaining of deferred render', () => { - expect(container).toContainHTML('First') - expect(container).toContainHTML('Second') - expect(container).toContainHTML('Third') - expect(container).toContainHTML('Fourth') - expect(container).toContainHTML('Fifth') - }) - }) - }) - }) -}) - -describe('app with just the DeferredMountProvider', () => { - const isDeferringValues = jest.fn() - - const SampleComponent = () => { - const isDeferringFacet = useIsDeferring() - - useFacetEffect((isDeferring) => isDeferringValues(isDeferring), [], [isDeferringFacet]) - - return ( - <> - (isDeferring ? 'deferring' : 'done'), [], [isDeferringFacet])} /> - - ) - } - - let container: HTMLElement - - beforeEach(() => { - isDeferringValues.mockClear() - - container = render( - - - , - ).container - }) - - it('states that is deferring in the first frame', () => { - expect(isDeferringValues).toBeCalledTimes(1) - expect(isDeferringValues).toBeCalledWith(true) - expect(container).toContainHTML('deferring') - }) -}) +it.todo('test deprecated implementation of deferred mount using useTransition') diff --git a/packages/@react-facet/deferred-mount/src/index.tsx b/packages/@react-facet/deferred-mount/src/index.tsx index 9fbee5be..fe21d273 100644 --- a/packages/@react-facet/deferred-mount/src/index.tsx +++ b/packages/@react-facet/deferred-mount/src/index.tsx @@ -7,8 +7,9 @@ import React, { useRef, useEffect, ReactElement, + useTransition, } from 'react' -import { createFacet, Facet, useFacetEffect, useFacetState } from '@react-facet/core' +import { createFacet, Facet, useFacetEffect, useFacetState, useFacetWrap } from '@react-facet/core' type Config = { forceImmediateMount: boolean @@ -16,6 +17,9 @@ type Config = { const DeferredMountConfig = createContext({ forceImmediateMount: false }) +/** + * @deprecated + */ export function DeferredMountConfigProvider({ config, children }: { config: Config; children: React.ReactNode }) { return {children} } @@ -24,25 +28,16 @@ function useConfig() { return useContext(DeferredMountConfig) } -/** - * Targeting around 60fps - */ -const DEFAULT_FRAME_TIME_BUDGET = 16 - interface DeferredMountProviderProps { children: ReactNode - - /** - * How many milliseconds we can spend mounting components. - */ - frameTimeBudget?: number } -export function InnerDeferredMountProvider({ - children, - frameTimeBudget = DEFAULT_FRAME_TIME_BUDGET, -}: DeferredMountProviderProps) { - const [isDeferring, setIsDeferring] = useFacetState(true) +/** + * @deprecated + */ +export function InnerDeferredMountProvider({ children }: DeferredMountProviderProps) { + const [isDeferring, startTransition] = useTransition() + // const [isDeferring, setIsDeferring] = useFacetState(true) const [requestingToRun, setRequestingToRun] = useFacetState(false) const waitingForMountCallback = useRef(false) @@ -78,7 +73,7 @@ export function InnerDeferredMountProvider({ // work pending to be done. If there is... we still need to run this effect. if (!requestingToRun && deferredMountsRef.current.length === 0 && !waitingForMountCallback.current) return - const work = (startTimestamp: number) => { + const work = () => { const deferredMounts = deferredMountsRef.current // We need to request the new frame at the top @@ -93,44 +88,31 @@ export function InnerDeferredMountProvider({ frameId = -1 } - let lastUpdateCost = 0 - let now = startTimestamp - - while ( - deferredMounts.length > 0 && - now - startTimestamp + lastUpdateCost < frameTimeBudget && - !waitingForMountCallback.current - ) { - const before = now - - const updateFn = deferredMounts.shift() as UpdateFn - const result = updateFn(false) + startTransition(() => { + while (deferredMounts.length > 0 && !waitingForMountCallback.current) { + const updateFn = deferredMounts.shift() as UpdateFn + const result = updateFn(false) - const after = performance.now() + // Can be a function that takes a callback if using DeferredMountWithCallback + const resultTakesCallback = typeof result === 'function' - lastUpdateCost = after - before - now = after + if (resultTakesCallback) { + waitingForMountCallback.current = true - // Can be a function that takes a callback if using DeferredMountWithCallback - const resultTakesCallback = typeof result === 'function' + result(() => { + waitingForMountCallback.current = false - if (resultTakesCallback) { - waitingForMountCallback.current = true - - result(() => { - waitingForMountCallback.current = false - - // If the requestAnimationFrame stops running while waiting for the - // callback we need to restart it to process the rest of the queue. - if (frameId === -1) { - frameId = window.requestAnimationFrame(work) - } - }) + // If the requestAnimationFrame stops running while waiting for the + // callback we need to restart it to process the rest of the queue. + if (frameId === -1) { + frameId = window.requestAnimationFrame(work) + } + }) + } } - } + }) if (deferredMounts.length === 0 && !waitingForMountCallback.current) { - setIsDeferring(false) setRequestingToRun(false) } } @@ -141,12 +123,12 @@ export function InnerDeferredMountProvider({ window.cancelAnimationFrame(frameId) } }, - [frameTimeBudget, setIsDeferring, setRequestingToRun], + [setRequestingToRun, startTransition], [requestingToRun], ) return ( - + {children} ) @@ -154,6 +136,7 @@ export function InnerDeferredMountProvider({ /** * Provider that must wrap a tree with nodes being deferred + * @deprecated */ export function DeferredMountProvider(props: DeferredMountProviderProps) { const config = useConfig() @@ -171,6 +154,7 @@ interface DeferredMountProps { /** * Component that should wrap some mounting that must be deferred to a later frame * @param children component to be mounted deferred + * @deprecated */ export function DeferredMount({ children }: DeferredMountProps) { const pushDeferUpdateFunction = useContext(pushDeferUpdateContext) @@ -195,6 +179,7 @@ export const useNotifyMountComplete = () => useContext(NotifyMountComplete) * Component that should wrap some mounting that must be deferred to a later frame. * This will wait for a callback from the child component before marking itself as rendered. * @param children component to be mounted deferred + * @deprecated */ export function DeferredMountWithCallback({ children }: DeferredMountWithCallbackProps) { const pushDeferUpdateFunction = useContext(pushDeferUpdateContext) @@ -236,6 +221,7 @@ interface ImmediateMountProps { /** * Hook that informs if any mounting is currently being deferred * Can be used to show some loading indicator + * @deprecated */ export function useIsDeferring() { return useContext(isDeferringContext) @@ -244,6 +230,7 @@ export function useIsDeferring() { /** * Allow us to pause costly mounting (mounting) of components * So that transitions can occur + * @deprecated */ export function useIsPaused() { return useContext(isPausedContext) @@ -251,6 +238,7 @@ export function useIsPaused() { /** * API compatible component with DeferredMount, but renders immediately + * @deprecated */ export function ImmediateMount({ children }: ImmediateMountProps) { return children @@ -273,6 +261,7 @@ const isPausedContext = createContext(false) /** * This pauses the mounting of children components. * Given it affects mounting, it should only happen the first time! Asking to pause again in the future is not possible + * @deprecated */ export function PauseMountProvider({ paused, children }: { paused: boolean; children: ReactNode }) { const wasEverResumed = useRef(!paused) From f505c56206a19c6c49b579957a6a5b1f6699b12f Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 14 Nov 2023 16:16:45 +0100 Subject: [PATCH 50/88] Ops, fixing TypeScript issue --- packages/@react-facet/deferred-mount/src/index.spec.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/@react-facet/deferred-mount/src/index.spec.tsx b/packages/@react-facet/deferred-mount/src/index.spec.tsx index 4b4020c8..7a555bcc 100644 --- a/packages/@react-facet/deferred-mount/src/index.spec.tsx +++ b/packages/@react-facet/deferred-mount/src/index.spec.tsx @@ -1 +1,5 @@ it.todo('test deprecated implementation of deferred mount using useTransition') + +// Make TypeScript happy --isolatedModules +// Can be removed once tests are written, and are imports on this file +export default {} From 5b03b6f8b7110afe780918b2f9fd9a8c8d6d6e59 Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 14 Nov 2023 16:21:08 +0100 Subject: [PATCH 51/88] Fixing lint errors Although I believe we should review these rules in a follow-up PR --- examples/benchmarking/src/listMemoFacet.tsx | 2 +- examples/benchmarking/src/listMemoState.tsx | 2 +- examples/benchmarking/src/markerFacet.tsx | 2 +- examples/benchmarking/src/markerFacetNumber.tsx | 2 +- examples/benchmarking/src/markerState.tsx | 2 +- examples/benchmarking/src/mountFacetDomFiber.tsx | 2 +- examples/benchmarking/src/mountReactDom.tsx | 2 +- examples/benchmarking/src/overheadFacet.tsx | 2 +- examples/benchmarking/src/overheadState.tsx | 2 +- examples/benchmarking/src/progressBarFacet.tsx | 2 +- examples/benchmarking/src/progressBarState.tsx | 2 +- examples/benchmarking/src/toggleRealisticClassFacet.tsx | 2 +- examples/benchmarking/src/toggleRealisticClassState.tsx | 2 +- examples/benchmarking/src/toggleSimpleClassFacet.tsx | 2 +- examples/benchmarking/src/toggleSimpleClassState.tsx | 2 +- packages/@react-facet/core/src/helpers/asPromise.ts | 2 +- packages/@react-facet/dom-fiber/src/index.ts | 4 ++-- packages/@react-facet/dom-fiber/src/setupHostConfig.ts | 4 ++-- 18 files changed, 20 insertions(+), 20 deletions(-) diff --git a/examples/benchmarking/src/listMemoFacet.tsx b/examples/benchmarking/src/listMemoFacet.tsx index bdbb922c..a8e893b6 100644 --- a/examples/benchmarking/src/listMemoFacet.tsx +++ b/examples/benchmarking/src/listMemoFacet.tsx @@ -104,7 +104,7 @@ const dataEqualityCheck = () => { document.body.innerHTML = '
' const element = document.getElementById('root') -if (element != null) { +if (element !== null) { const root = createRoot(element) root.render() } diff --git a/examples/benchmarking/src/listMemoState.tsx b/examples/benchmarking/src/listMemoState.tsx index dc6cf01a..9011abda 100644 --- a/examples/benchmarking/src/listMemoState.tsx +++ b/examples/benchmarking/src/listMemoState.tsx @@ -66,7 +66,7 @@ const randomWork = (name: string | number) => Math.random() document.body.innerHTML = '
' const element = document.getElementById('root') -if (element != null) { +if (element !== null) { const root = createRoot(element) root.render() } diff --git a/examples/benchmarking/src/markerFacet.tsx b/examples/benchmarking/src/markerFacet.tsx index 9bfb859a..bcd69d61 100644 --- a/examples/benchmarking/src/markerFacet.tsx +++ b/examples/benchmarking/src/markerFacet.tsx @@ -64,7 +64,7 @@ function Performance() { document.body.innerHTML = '
' const element = document.getElementById('root') -if (element != null) { +if (element !== null) { const root = createRoot(element) root.render() } diff --git a/examples/benchmarking/src/markerFacetNumber.tsx b/examples/benchmarking/src/markerFacetNumber.tsx index 24fc6a85..1fe01820 100644 --- a/examples/benchmarking/src/markerFacetNumber.tsx +++ b/examples/benchmarking/src/markerFacetNumber.tsx @@ -64,7 +64,7 @@ function Performance() { document.body.innerHTML = '
' const element = document.getElementById('root') -if (element != null) { +if (element !== null) { const root = createRoot(element) root.render() } diff --git a/examples/benchmarking/src/markerState.tsx b/examples/benchmarking/src/markerState.tsx index 8c6bc1e1..ae9c36eb 100644 --- a/examples/benchmarking/src/markerState.tsx +++ b/examples/benchmarking/src/markerState.tsx @@ -62,7 +62,7 @@ function Performance() { document.body.innerHTML = '
' const element = document.getElementById('root') -if (element != null) { +if (element !== null) { const root = createRoot(element) root.render() } diff --git a/examples/benchmarking/src/mountFacetDomFiber.tsx b/examples/benchmarking/src/mountFacetDomFiber.tsx index 809db745..452151df 100644 --- a/examples/benchmarking/src/mountFacetDomFiber.tsx +++ b/examples/benchmarking/src/mountFacetDomFiber.tsx @@ -55,7 +55,7 @@ const ComplexComponent = ({ value }: { value: number }) => { document.body.innerHTML = '
' const element = document.getElementById('root') -if (element != null) { +if (element !== null) { const root = createRoot(element) root.render() } diff --git a/examples/benchmarking/src/mountReactDom.tsx b/examples/benchmarking/src/mountReactDom.tsx index 5209bfe4..b79f7970 100644 --- a/examples/benchmarking/src/mountReactDom.tsx +++ b/examples/benchmarking/src/mountReactDom.tsx @@ -55,7 +55,7 @@ const ComplexComponent = ({ value }: { value: number }) => { document.body.innerHTML = '
' const element = document.getElementById('root') -if (element != null) { +if (element !== null) { const root = createRoot(element) root.render() } diff --git a/examples/benchmarking/src/overheadFacet.tsx b/examples/benchmarking/src/overheadFacet.tsx index decb22f9..1fd3925d 100644 --- a/examples/benchmarking/src/overheadFacet.tsx +++ b/examples/benchmarking/src/overheadFacet.tsx @@ -33,7 +33,7 @@ function Performance() { document.body.innerHTML = '
' const element = document.getElementById('root') -if (element != null) { +if (element !== null) { const root = createRoot(element) root.render() } diff --git a/examples/benchmarking/src/overheadState.tsx b/examples/benchmarking/src/overheadState.tsx index 28817967..726d4da4 100644 --- a/examples/benchmarking/src/overheadState.tsx +++ b/examples/benchmarking/src/overheadState.tsx @@ -28,7 +28,7 @@ function Performance() { document.body.innerHTML = '
' const element = document.getElementById('root') -if (element != null) { +if (element !== null) { const root = createRoot(element) root.render() } diff --git a/examples/benchmarking/src/progressBarFacet.tsx b/examples/benchmarking/src/progressBarFacet.tsx index 3ffab134..8aefbf11 100644 --- a/examples/benchmarking/src/progressBarFacet.tsx +++ b/examples/benchmarking/src/progressBarFacet.tsx @@ -41,7 +41,7 @@ const Performance = () => { document.body.innerHTML = '
' const element = document.getElementById('root') -if (element != null) { +if (element !== null) { const root = createRoot(element) root.render() } diff --git a/examples/benchmarking/src/progressBarState.tsx b/examples/benchmarking/src/progressBarState.tsx index 86041792..c500d72a 100644 --- a/examples/benchmarking/src/progressBarState.tsx +++ b/examples/benchmarking/src/progressBarState.tsx @@ -40,7 +40,7 @@ const Performance = () => { document.body.innerHTML = '
' const element = document.getElementById('root') -if (element != null) { +if (element !== null) { const root = createRoot(element) root.render() } diff --git a/examples/benchmarking/src/toggleRealisticClassFacet.tsx b/examples/benchmarking/src/toggleRealisticClassFacet.tsx index f7377d75..e8bda5f5 100644 --- a/examples/benchmarking/src/toggleRealisticClassFacet.tsx +++ b/examples/benchmarking/src/toggleRealisticClassFacet.tsx @@ -60,7 +60,7 @@ document.body.innerHTML = ` ` const element = document.getElementById('root') -if (element != null) { +if (element !== null) { const root = createRoot(element) root.render() } diff --git a/examples/benchmarking/src/toggleRealisticClassState.tsx b/examples/benchmarking/src/toggleRealisticClassState.tsx index 802570d6..707f1bf5 100644 --- a/examples/benchmarking/src/toggleRealisticClassState.tsx +++ b/examples/benchmarking/src/toggleRealisticClassState.tsx @@ -59,7 +59,7 @@ document.body.innerHTML = ` ` const element = document.getElementById('root') -if (element != null) { +if (element !== null) { const root = createRoot(element) root.render() } diff --git a/examples/benchmarking/src/toggleSimpleClassFacet.tsx b/examples/benchmarking/src/toggleSimpleClassFacet.tsx index f9089778..e916568a 100644 --- a/examples/benchmarking/src/toggleSimpleClassFacet.tsx +++ b/examples/benchmarking/src/toggleSimpleClassFacet.tsx @@ -38,7 +38,7 @@ document.body.innerHTML = ` ` const element = document.getElementById('root') -if (element != null) { +if (element !== null) { const root = createRoot(element) root.render() } diff --git a/examples/benchmarking/src/toggleSimpleClassState.tsx b/examples/benchmarking/src/toggleSimpleClassState.tsx index 0f887450..102ad098 100644 --- a/examples/benchmarking/src/toggleSimpleClassState.tsx +++ b/examples/benchmarking/src/toggleSimpleClassState.tsx @@ -37,7 +37,7 @@ document.body.innerHTML = ` ` const element = document.getElementById('root') -if (element != null) { +if (element !== null) { const root = createRoot(element) root.render() } diff --git a/packages/@react-facet/core/src/helpers/asPromise.ts b/packages/@react-facet/core/src/helpers/asPromise.ts index cba6ea9b..3554348a 100644 --- a/packages/@react-facet/core/src/helpers/asPromise.ts +++ b/packages/@react-facet/core/src/helpers/asPromise.ts @@ -9,7 +9,7 @@ import { Facet, NO_VALUE } from '../types' export const asPromise = (facet: Facet) => new Promise((resolve) => { const value = facet.get() - if (value != NO_VALUE) { + if (value !== NO_VALUE) { resolve(value) return } diff --git a/packages/@react-facet/dom-fiber/src/index.ts b/packages/@react-facet/dom-fiber/src/index.ts index bbd6bad5..29f4da4d 100644 --- a/packages/@react-facet/dom-fiber/src/index.ts +++ b/packages/@react-facet/dom-fiber/src/index.ts @@ -12,7 +12,7 @@ export type RootType = { } export function createRoot(container: HTMLElement | null): RootType { - if (container == null) throw new Error('HTML container cannot be null.') + if (container === null) throw new Error('HTML container cannot be null.') const reconcilerInstance = createReconciler() @@ -41,7 +41,7 @@ export function createRoot(container: HTMLElement | null): RootType { * @deprecated use createRoot instead */ export function render(element: ReactElement, container: HTMLElement | null) { - if (container == null) return () => {} + if (container === null) return () => {} const root = createRoot(container) root.render(element) diff --git a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts index b992f8c1..d2d18858 100644 --- a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts +++ b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts @@ -1072,7 +1072,7 @@ export const setupHostConfig = (): HostConfig< return } - if (props.style != null) { + if (props.style !== undefined) { setupStyleUpdate( props.style, (instance.style ?? instance.element.style) as unknown as Record, @@ -1085,7 +1085,7 @@ export const setupHostConfig = (): HostConfig< }) export const isTextElement = (value: HTMLElement | SVGElement | Text): value is Text => { - return (value as HTMLElement).style == null + return (value as HTMLElement).style === null } const cleanupElementContainer = (parent: ElementContainer, instance: ElementContainer) => { From 54841da200ae5314454e9162a9f0e449061212dd Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 14 Nov 2023 16:42:19 +0100 Subject: [PATCH 52/88] Fixes how we measure the benchmarks React 18 will no longer have its work happening under the `FireAnimationFrame` So instead we track all the `FunctionCall`, which is then valid for both implementations --- examples/benchmarking/compare.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/examples/benchmarking/compare.ts b/examples/benchmarking/compare.ts index ec9a3899..d4cc9dfa 100644 --- a/examples/benchmarking/compare.ts +++ b/examples/benchmarking/compare.ts @@ -46,9 +46,7 @@ const compare = async (optionA: string, optionB: string, targetRelativePerforman const { traceEvents } = require(traceFile) - const events = traceEvents.filter( - (event: TraceEvent) => event.name === 'FireAnimationFrame' || event.name === 'MinorGC', - ) + const events = traceEvents.filter((event: TraceEvent) => event.name === 'MinorGC' || event.name === 'FunctionCall') const sampledEvents = events.slice(OFFSET_FRAMES, SAMPLE_SIZE + OFFSET_FRAMES) const totalTime = sampledEvents.reduce((total: number, event: TraceEvent) => total + event.dur, 0) From 99b76d6c9140acef4042a1a40b1e1d92820bfe97 Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 14 Nov 2023 17:35:24 +0100 Subject: [PATCH 53/88] When comparing we can't expect the same number of events React 18 does do multiple "FunctionCall" events on a single frame, making it impossible to compare when sampling the same amount. So, we rely solely on time to compare both implementations. We've also increased the time before starting collecting data --- examples/benchmarking/compare.ts | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/examples/benchmarking/compare.ts b/examples/benchmarking/compare.ts index d4cc9dfa..40417b2d 100644 --- a/examples/benchmarking/compare.ts +++ b/examples/benchmarking/compare.ts @@ -5,8 +5,7 @@ import { mkdirpSync } from 'fs-extra' const ERROR = 10 const ITERATIONS = 10 -const SAMPLE_SIZE = 500 -const OFFSET_FRAMES = 2 +const MINIMUM_SAMPLE_SIZE = 100 mkdirpSync('./tmp') @@ -36,7 +35,7 @@ const compare = async (optionA: string, optionB: string, targetRelativePerforman const filename = path.join(__dirname, './dist', `${example}.html`) await page.goto(`file://${filename}`) - await timeout(100) + await timeout(1000) await page.tracing.start({ path: traceFile }) @@ -46,13 +45,11 @@ const compare = async (optionA: string, optionB: string, targetRelativePerforman const { traceEvents } = require(traceFile) - const events = traceEvents.filter((event: TraceEvent) => event.name === 'MinorGC' || event.name === 'FunctionCall') - const sampledEvents = events.slice(OFFSET_FRAMES, SAMPLE_SIZE + OFFSET_FRAMES) + const events = traceEvents.filter((event: TraceEvent) => event.name === 'FunctionCall') + const totalTime = events.reduce((total: number, event: TraceEvent) => total + (event.dur ?? 0), 0) - const totalTime = sampledEvents.reduce((total: number, event: TraceEvent) => total + event.dur, 0) - - if (sampledEvents.length !== SAMPLE_SIZE) { - console.log(`Not enough samples. Measured "${events.length}" of target "${SAMPLE_SIZE}".`) + if (events.length < MINIMUM_SAMPLE_SIZE) { + console.log(`Not enough samples. Measured "${events.length}" of target "${MINIMUM_SAMPLE_SIZE}".`) process.exit(1) } From 4921f5ce97a5b1f0f1a1eb2278bf669480e4e061 Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 14 Nov 2023 17:47:13 +0100 Subject: [PATCH 54/88] Remove concurrent example --- examples/concurrent/.gitignore | 1 - examples/concurrent/README.md | 3 - examples/concurrent/package.json | 36 ----- examples/concurrent/src/listMountState.tsx | 110 ------------- .../concurrent/src/listMountTransition.tsx | 112 ------------- examples/concurrent/src/spinner.gif | Bin 47343 -> 0 bytes examples/concurrent/tsconfig.json | 7 - examples/concurrent/webpack.config.js | 65 -------- yarn.lock | 147 +----------------- 9 files changed, 1 insertion(+), 480 deletions(-) delete mode 100644 examples/concurrent/.gitignore delete mode 100644 examples/concurrent/README.md delete mode 100644 examples/concurrent/package.json delete mode 100644 examples/concurrent/src/listMountState.tsx delete mode 100644 examples/concurrent/src/listMountTransition.tsx delete mode 100644 examples/concurrent/src/spinner.gif delete mode 100644 examples/concurrent/tsconfig.json delete mode 100644 examples/concurrent/webpack.config.js diff --git a/examples/concurrent/.gitignore b/examples/concurrent/.gitignore deleted file mode 100644 index a9a5aecf..00000000 --- a/examples/concurrent/.gitignore +++ /dev/null @@ -1 +0,0 @@ -tmp diff --git a/examples/concurrent/README.md b/examples/concurrent/README.md deleted file mode 100644 index 7b645023..00000000 --- a/examples/concurrent/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Concurrent Mode - -Examples to see how concurrent mode works when used with Facets. diff --git a/examples/concurrent/package.json b/examples/concurrent/package.json deleted file mode 100644 index 9bf91012..00000000 --- a/examples/concurrent/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "concurrent", - "version": "0.0.0", - "private": true, - "scripts": { - "build": "NODE_ENV=production webpack", - "start": "webpack serve --port 8081" - }, - "dependencies": { - "@react-facet/core": "0.4.3", - "@react-facet/deferred-mount": "0.4.3", - "@react-facet/dom-fiber": "0.4.3", - "@react-facet/shared-facet": "0.4.3", - "@react-facet/spring": "0.4.3", - "ramda": "^0.27.1", - "react": "18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@types/fs-extra": "^9.0.12", - "@types/puppeteer": "^5.4.4", - "@types/ramda": "^0", - "@types/react": "^18.0.8", - "@types/react-dom": "^18.0.5", - "fs-extra": "^10.0.0", - "html-webpack-plugin": "^5.3.2", - "http-server": "^13.0.2", - "puppeteer": "^10.4.0", - "ts-loader": "^9.2.5", - "ts-node": "^10.3.1", - "typescript": "^4.3.5", - "webpack": "^5.51.1", - "webpack-cli": "^4.8.0", - "webpack-dev-server": "^4.0.0" - } -} diff --git a/examples/concurrent/src/listMountState.tsx b/examples/concurrent/src/listMountState.tsx deleted file mode 100644 index 7e95b2e8..00000000 --- a/examples/concurrent/src/listMountState.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import { createRoot } from 'react-dom/client' -import React, { useEffect, useState } from 'react' - -interface Data { - name: string - health: number -} - -const allData = Array.from({ length: 2000 }, (): Data => ({ name: 'player', health: 10 })) - -export const ListConcurrent = () => { - const [data, setData] = useState([]) - - useEffect(() => { - const tick = () => { - setData(allData) - } - - setTimeout(tick, 2000) - }, []) - - return ( - <> - -
-
- {data.length === 0 ? : 'done'} - - - ) -} - -const List = ({ data }: { data: Data[] }) => { - return ( - <> - {data.map((item, index) => ( - - ))} - - ) -} - -const ListItem = () => { - return ( -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- ) -} - -const Spinner = () => { - return ( -
- ) -} - -document.body.innerHTML = ` - -
-` -const domElement = document.getElementById('root') - -if (domElement) { - const root = createRoot(domElement) - root.render() -} diff --git a/examples/concurrent/src/listMountTransition.tsx b/examples/concurrent/src/listMountTransition.tsx deleted file mode 100644 index 6e28c4aa..00000000 --- a/examples/concurrent/src/listMountTransition.tsx +++ /dev/null @@ -1,112 +0,0 @@ -import { createRoot } from 'react-dom/client' -import React, { useEffect, useState, useTransition } from 'react' - -interface Data { - name: string - health: number -} - -const allData = Array.from({ length: 2000 }, (): Data => ({ name: 'player', health: 10 })) - -export const ListConcurrent = () => { - const [isPending, startTransition] = useTransition() - const [data, setData] = useState([]) - - useEffect(() => { - const tick = () => { - startTransition(() => { - setData(allData) - }) - } - - setTimeout(tick, 2000) - }, [startTransition]) - - return ( - <> - -
- {isPending ? : 'done'} - - - ) -} - -const List = ({ data }: { data: Data[] }) => { - return ( - <> - {data.map((item, index) => ( - - ))} - - ) -} - -const ListItem = () => { - return ( -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- ) -} - -const Spinner = () => { - return ( -
- ) -} - -document.body.innerHTML = ` - -
-` -const domElement = document.getElementById('root') - -if (domElement) { - const root = createRoot(domElement) - root.render() -} diff --git a/examples/concurrent/src/spinner.gif b/examples/concurrent/src/spinner.gif deleted file mode 100644 index 09e286c30b4b7bf694b6990c3933795b8bcb8e7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47343 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

`j`_+r2kYUk0!qBR56 z@aZ5gW-yT4E!l;ieJVwQhTVYjknl6l`F7BT`{`SX9FVem3;d}vY14Ml= z;%(m2maPxG!?VIemXL5o`zxsbXdjpd_ioxNA02~l$nPhC6%1w@af9l_t)JYNy?j6* z91z;Yo=A)O(YzoD0S}nG=a>0DOnn(D6NaPm2u!K2KWaR;b`xrr{-c)y(7p7?^`zC6 zga~RIxil+2fne9(7&3rLQa|iIyGfeRdrgoD`1t`Jih`X~Xy!mV0gp}0AXfsLk*u{M zW%?f1Cq3%DbMZ7Z*kd&50`tMc{fjj336ZAu+=K#I2+8h>`^@v#IBbdOa*tfWq$d*J z(tHW-(kj;fFkGu@j7|$rm*JgP7;RNI^$hYqzzd-1w<{(lokF#tH(PS=fmW<*er)1MEqM&k9Fg9VopYCMiqU&RY?InMvDn zPCoLyWmody`}>Ffe$T~37~UQAMUW|e?=N%7#-=ESksk^N^^$&zoHetM*FW&KH0F~< z!;QYGqI-dMTV#&tCw_AG=^JLM@Gh~;X#Fx&D3WcR4Q0f@7K4Mo4<3*OHouO7GW>tI z(lNvFUEp^Ij&Q@)nQ&eG9-apKxIj8-d*(kR_kU{n|G-KAbMFX;`;VlOa}Wa;g2f!< z{*hETJX=!X|B+M{?lmo7cZ5V0R`3Hs#fg4PAp=nsGH0DZ%LI6WlO4oRT;VfLWTo1RgXz! zODY^&Qms-?TiLNC)$sV3tfEa2TT<=*EvZhcMHylElKzrZY?AwbNGf>?nJipdqXe7e zj{i$i1(qO=g*&iGZr+r8c%#_k|B_U78vjTt+TW5Y#NA5zFG)51x1^HEPOtn&QknfN zsZvFx|B+NF+aA%=FX`{C|B_Um0mG{?3flXo04w+Z5I(>dz2y|5&`YQi9;xB2Pvd)0@6B?3>4}%pmGV?1qUL#Bc@grAEyCHX ze8-|>5S`_GNscot7Y}Mk1zn)6`_GEd1Qz`i-5Eq$n7aa{mxFxfsWsB@WVTgtQo9pK z_KEv@3|1~4w}dSuM5|P5u_YBa*A4LTp4+kNTYgKABBXpndCbde`>^cNTdP8cbsc+% z+3i|6L_y>p4cQH-pZUl+1RYXX8z|;TKF-nfAbxAcp8dpUYiIbxJ>@K-R6jvW9a1n3 zr&&KZ4>;5>N+SGPUWLei5i$YXw#W$_710tAPd8h+j~k1+!fArrmxucQx*eibTW^hg zC-fBv)gr4Yl?$CUP;b=d&Wh?VQyPM+JG^QC?5lLd^jt+5gBda965`1Y>~4uBwv-@=(X+L`={q+C z)`Lz@gmRFYT!}A6l2ML%&OI{@jgmK@kx$S~Y8IHaZD@b}t!)mH!RZ76%f|<1AvQWB z11)Lfy~uDw;_DD(g3c0nks)?f_-)0mP&5Bf;BE1hzCVr^j>)mL>!Tl8jI#^1+_Vb- z;ad8huLXVGm$&bT(qAO^UxD3He?la-iPX3IH_5&0O`|9AAM_1{Bdh)}@w|T>X8ESNptI#Vczg_xarEa>teDNL88txr7k8493YD3gZ4yP0MbP0DO33A2<(FkgK^ z2OPTtNG2y(DTLYlLK6T1Ze42m%>DFi-!~ldyB0qek7QTc-&JvC2X+m~;L~I#!huXB z+M+llzO$)fJcvgrOkFyxTP?-N{+1vIti%3{w$awZU?zsEFXO%1E=-I|>1#p9I{>N# zMAavLy(M#6O8<#b$#q8n;*Gr`U#-4?)M`ZGyPz|ghL~qjbJq*J>J?0OZ78Ssz%Wc* z1^%o%n?Q@aBQ#U4<-;0D;M6U2Dt<>$+yh2uQ$U(wl@=>UMR@GDOGWa@Cd%DF@4(4o z)mV8V;iH`!nNh4L8DLxU(3zflT>yt;r*s~j1^06xoXve4+U-X(VPQ&!TOVw#;t)|n z=S%xPS2`d3Xl&KTs^ZyKCtDqP`@HIMR810D+2!#CU|qxwh?i-=ab7K#i_e?TNVGYS zvo1MG?=;*Z41)YFSKGAN$QOL0T)YXI2pV3jqaE%Q8xBMO`e1A$;2sk9~00(y;2-cOUVXWro{y^gaT7nq}#HhewxR{4$NwrwO=!p;I z`ju-p$*#YZn~D^=^OJDvG2!W`qr|b!uI9>fm)hH`m>7iOy$x&$?#(j0_6T4lP=sqq zPo+vazh?&R>m2DAM=|pFtimeAuiC;z){B|XOd*MfI$0K$hV4ROTi7tig-dDEXxGCl z@V0X_J+fh65~lvDW+#*XXLQ+hf&1F0Iz(_}X1M4|~m?hsuYcWkmvJMP3U=225m;bgsGeg8=w~OV3h4Nf7TXk_wyM|}iA?}rmmX14I?~>kS*PoJ z^rWfyLF3Nk@4AWH1TQC@>v3|i+ulR#XOFi|y__q&9S{8N%Uk2oO=C1%OO4MqJUEx; z_ebxV!7g>pOn9aDT8KF|=TQ(rZf-n7Dy<&)$T09o$Lx>rgxa-qc&Osru3Uu{9ly+v zXH_qD_LzMxCNu_XeVST$>;-8T+*t3K{5fDvqCOPl4gIwvuDK7>YPeMN$!Z%v$#IGc z24G_=k8dgG-jDX~TX?6t?K&=es_*P>?PhRa`_Ma~3xnSt`DY#(7=vC-l!HB|Q8dLS z^t;JY@7F%xd~ouee(M+ETg;QDmSTLm!m*u-7ft!Xe$}N3hK`Fa&V1=%E|1Fs!B@>v zs}4~(OquPf{Df7T7Z=wDlr9#(xVqz`+qp66crj;|C&nkfee;!)?(3KJOCO-1f5A)8 z|K0e9{{{lryx;q^pcU(A=B8jyKA95P~X`tS!ED8YbMTdd9|C zFjMI>?83N@foS3x_(PfB8C;@&O~W>8 z(y!GDFPcRTyiT38JXT{ZP^Gk1a{Z)J-0wK0TDJtX{W|^QmYCqD%|Tp4v9BgPv5mB3 z-=-ChXebU8X`N0_rC*zeRc>9-t z^RC=R3QfoLx?bGlcyz%OJ+@8|3-TvqiSvF^81ua&_0B3*sIVWQ$MPJ|EPg{tdXgDJ zv=)8siyW&aM$`Egk0K*Ax3gM{Lk0T~(((?zN6_z8g6@JFJd*&24X{_>grp z!U|%pflUl36)gdnJn5`o#NVe$0jzdwr2&&Oj96Anuc*5r5OH`Mw@LpjG9o0PE_7myr?d-LhW1B zEvQ9u7-r?scZZTsy`@6g=HSrIG4g&(FPdpC;8f?RSjwL7M%+e~9$+$4zA=Lacasee zS@IR>UtCRRo_%R!nDYe>kALLwfE&Cy5hAaX)7{wA-2k;1UDC(gmD9G5)4i)94bz^e zv^M4xl{*sb`|^Tkre3bEi5(}0UhHqZ0JV%FKX}JLL&8{~#bTrvz9ZNiZ1beVa{AD% z5h0F{>sgT++S_qW;tyxzzrs9JdkJY;Pw4Cdqbl#NuK2oIWQZwEHR{boAHeV~<*4=d zHeb1qbfm}kK%pf>xu$@b(* z8G+l+P3FnYe9WicJ4bS~$onvXW1%#tvLn-6SgYx;BXzA0AY70#asyH?o_(b5&9i_m zq!*11FNqwSM!ZG*vLk`+IGTNQCtreOV1ON@B4ed3%FjmgZ#kH59-dJy3IhN;^xbsI zQWGj=@BK^7k*rPMN@CrTf*dFIw#@^RafMRcF(Qe40)P};5bLWNvsdyDnkKg`vu)^T zDfSeQ%03v!e=EO7(VREYJW7hUYPB0Qzm>*0DI+YuY9UO?x^jfRC?YE&%zHchiUL)N zbJ`FuB*dhIZr_GgJs}wPpxA2ME7%2G2ey%x57-h7|^Qz=>z$Cb*uQhH>T6 zM~VP9Ns*EVSGTQNOtgA^c5-1$BK z-l<*LF+Q&QYC8!ifKD3)lFxv+gOz~u?wn%V*(GpwZof11v5fa$1dkdj5r4D)bC!)| z+}}V1tFeS@_jSt{7nJSA#ctV_kxC5iuG)VcPb|ufD$T|CJE|6lXNxr#-}LPR<)*Rk z0bW-J?q5M)I-EBn<0t;^d#5Uil_k@V9)|@nkC;-t{ar@NI z#_%sYtxXc9RIiaZgaSqvFs*LMvC1SZi-9;K>2+!Rqrl%nZ+k}XO~}OI+!GW?0!P(X zc-gYZAZMnJ%IZ!_DFjG$iVSo-3YR0*d7O=SDGU5wQ!G-PEPYW3l|%++xvo2mV;?rX z%&`Oo+S`|PVWC|4ATIMl8o+I~aYP-!(_-Q)%(e5Z{F1g@8~`llhUtB^wR!6RSCP!< zh5p$7#Gk5&hHNVIxpLWnVj&|-HUaA`q&b;NY#HlqN1#T%Ak_$lrC(RDuMCzXd5Lj1U=N2GMpSVO55|p3J<~?BO2^ zws-xdBpw@8_Uci1KBI_j90TOV7lDo=fzjtus`c}Np- z%pX$e$<7bASxc42`pP^dpSFGN8EsGQSn!ka^%TGGX*~aD@fuI8oF{&Xa3tlb%_}kM z$=v#%F&}6|heL9rwkE4?Rp5R$r{oL&Ky1W|rd(xnN___-ap_q4`s zHk~-`9K2%7!s%vZm%8bg_*8F1v6~%jX+TH$|!?4jzy}Y@9cgIWk!L3j`MR zxr0%AS7CAT7mzt{r5WKik7-}d^Pr&Tw(cO3>w1s*Q{nVCfG+vimsiRNeUp~dFcQm6 zKq$NWN)qo|i0e;Yiuq-OrU2T7?pYZ6D3BAInDEJ{lsy$3)-AFx=l)Ar4!{|f=LClZ#_0nTx2R@2Zi#@b#aEH8gZHctG>LgN_g0Xl{+Syz;_dMRJ@f;oeX` z$WkYN=>3I>nd{u9hrez((rdjj^t#J#Q!J5Xy01rh)zPUj@(y9NtR?5?|u zdU^DVW-K69Q|VEL`EO%R27rUe1c{9b=mH2rL0b@G!>t7N-4pOGDN!{jL=5Sjz~=~{ z^2BW=V%ACE93~Wrf5ERkNP)Nxnj_jV7l-ITE^}h9STdb!T^!22Guk7y6NW0ZNQN2) z^kV1GP{m;?SNx!*kQqUg8&@K5j;P=qTb$~a!|2aQNKlT`q9(6Vxf_TB2y7zll>O3# z8E=YqF0bg>3|VwMp3@*#i`H95mRPE^IFQXQF2pjWCh{$9N14~$A@4LHMnp}aY(82a zRw}9ZiM2zPKyXGGYB9h@c07Dv;Pj*~*KXK=gOF2JVOxokdt1Lx)L4!l^0Z=Z+f%ri zmMDnq2e)9K>Ya+9Tvr=FpZ`FRyKQdpI9^7_7Y*`x>nNz(mcSw6X3hDL1?xU$4Kolq z1f-8rIgk~GPi&q?@X#R|v_#2u28S@6ETYZC!}FOCO)|fNNL{z_?!y;K@I=@)G64T6 z74>oJD`QPfTvGrunmm3KXhKgxbdg8XT(X4WVU^Z5wj2WM@F+pG$yC-Vj3ZTI=S?1xR*&b|I(iZrm0rurZs9Uh^`PcJ!;L_X$JOaA z?ShpDX_f4gEH5A0HkY>1yFH&grQFH|m0d3SXwGr*xYszAGgYsem*~MI^(&`d@BByA zQL)*yIdX&iZ{V4mw&~BiqV7>yK%Tf!u*B+10m(`lD8Nyr<7!LsUA+y$J>~(zHVMvT zuZe}>IHke>;Bni{CNC}-&H1U~##M62ZWYHBF)ZM*;QeSYAWcRI|B!VY&jTeSJ~PV` zqHU;2$l+(#16@0YU$P|~*Xu1Tg@e=ZL$IVOS5fp1h^zD%QKs(e7X!f=PD zMmH&1K=%>YbC5DI3I|kUOCc8j2AUWHPs0PaaOd0{p9}I#{XU+Ius3;W zWK+Ro#xwaj`fAa<0yufLJ2*Uzv9KIJMxHy!Wab0Eo;@Q?dF9o$1!LaxZx9iC1v4{f z&y1%XJ$hi=_j7YCuU2T>q4c?-ohJ=`rtdEci}Gp%c2Tjvk+CQPUf8})4pVX~3Mn!9 zJU8Ys{}?z)r%-gytf@uMEYxZ+f37+?wO5!o+-i%oFe%l_TvU$)G@ay?1nfS!9v-f? zbP;W!$k`loHRCqN!}t0I->Xx2@?#SBR`9NSg;%+KnAG@wQCG{+E6_-j3JF<VM-+Nlhk=gqwR8CJ_3t>#~}?B{QZYIj(wZmpbumBhY7vAB>3y$<-W zIkh_@-o1RG^(T5@`2b?h;Wl84wRx=$|9C9kPt@^s;lu}n1;T!+$BT>GWuG9Zz0B{E zF+JO(){oYVc*z5=3c&eyOqF997o1NpzP0aKqSQz~jZd(?b_+vMhohC-(PdUUcoWzWBX)asMX^b#NE__dPoHOcUyVA2UJy*U(BbGWxfnl?CB()i2a{ z<$?SY?iuN^4K2NY3@uzhO^bd2?(cBVp|#cFuW--kU*R6tP%GDe!#xQRojj?T8mT;8 z9r%2ggr4lCEEKPugI%f?%`r7|#s0?P*}PPC!g3LN$C+uv=B4}B; zUJ7F&GlEOgv2(snul}2tD&amB9x{`9evCcSB>2}%)Bob7lG)+js%*%tCG4+oFOQz_ zNR(^XPR_syl|}jOq!wSP%i1n5OgJ!-)y;4QXE;!t04YX^+!DWwARq>g?_Ds*!l zHu;|TWb`NHpj;{WJUY3hZQiF6xUG79THN+*QJvwnWwg0PjNXToLFkmb6%D3w))9^# zeMur=OS4+?F{81%BN)>t|3YKVK1Mgn^RPDg{0z4_*{&GbBN@&(JPzbWl1Ou^2ZO?y zR}X|Z^~g!I3BQVq0#Lz@?9n1bc^`A>#sQDdiE?khP0`|Kg6cCc zA8gD)aHn#_a%f2odHEJckW&d(n`vDj17Y{_;Oczl^MD`9i_Tmvl}ym8T)R=zMGJQH1;)(B|9Noq!5x+W8XDIcG=0+ zkS&R^?^&{^8bT_BHbwbP@Aq|G-_JSM&)2{3I_GuH{oJ3o$L+3PD7C4lQi&7wPW#kI z7o2E4p7ivW#bL1(Z)74EAFSd8WGP#%C@VK;)1>CqW`rw;znmZVY!Qp6rN|UecI)W1!Y0rh(zu1DE_tT%6-DtEhT@MCsr+n%_9GS0*9z^rzA5-e)9H z%FnNuf%K++N^j-@Ocbsth#??=lTTlU&1%hl^$EBnhRK7|`*$ZsK!x%X~*`$Ei zcy^L~Q0lod`0AlHn3p)noeR96Kx{jCR%08_ZeTgr+hJ`Wk49(w@cDT)`=vu~g+wQ+zsUpyk`A90N0v~5I=EiF&pm-3$!aGSqAJNw)iBp>- z@_&_80)ptKha+qeP_A1YX`jf1WiOs^-;`|mIY~m$z^u<9dNRC3@K>eMbTZID$R2bh zG6TabaG9_eYN1QRK9nx6{9*3{=jX;&faFlj?voMBL)4ocLqI0{Zpy{0?3J$_kpMLk zsY2}}P?3H^;!gmB@w95&<9@1v5I2Z^%_nUVTy2||3lRLO4YTgAw&&Rew@v{noWCvE zzRv{|ISVsfcB-+zYXIjD$HJUFKB&0k=X->y^%?L;XRcAw^%9Op+|7*4D2D}z;Vip~ z$Clf+5geI;t;l~3vy@VwpJa}#)O3QRDA(Aa@R2Z5-KJdK6nNU26Lb0i01O#@#gd$W zzUfhCfAhh|GUT-64bwM|40Jjh~8U$maQSH?ehK13T@d97mk=pBh zR?@?mwjDPwA2^blnYUFw5ZJ3e2VswdZJhkv5Lx34YqDU~qRF4sp%C*(S)FD~8L0id zw@FehT|Oxb$D-~o5iFC`GL9VC$o?=ptu<2jh5#Egwqx$%gKJHE`T*r9!0LXO4H|(x zVg1vmbE%^3k*64h(O$zTQj-8v9FPuRQhv+#%Cc2srw-?dc0U%MCosIBc$R4>If-3yR<^jq34!mRC=i?!}^3MO~faQ)-0Y};*cGRxYsl~U9 zBP~k&{Y|-;3WZncBt~Zadq$EW$k2p%#8;DwWU2#>}T!u@;v((+>d-8E9W-l zIQP|^F6{TDA4yE74(L)YB3=9H`v+Q_PUco_fBeMjGBmi-UC5MoMPK$7=8X6E3rxhV zNdRrZeY~NGO<>xy^wjOooHAA{ObMHjKNpjWeEd0F{C?AIM*9_gsoh)e$UQ~0-8Dk) zpuVL=IQJNR3`fkLykYO#!FQqJU{DVT5REzj9|=B{tU|c)hB~fil7Wn#*w;MdqSyE? z2($B@{Qo(5qY4|B)qe{{P4ldCAt5>}q={IrCpxQi5ID!!)~m`uz<_#kanoR`;9<TrE-|arQ8{1Y`K1HrhROK=!pu# zO(i)gN=_i*#e>YN2g#RDNQ%hoS_Zl%1f@lmpZIb59OPuRc4|_PA|l~J*<4**dsx2& z_R6d->UbnoBdGCgXVIr!MmRuP4mZLVWO8m_&8J2H)5T)JoJ&7}duzB>y2SiPdp+h_pQ?Pke|jPr}2x?`XbahEbD38~3O- zbM2EFAre;oKYsso#ANk3N5a1lPect-`2D`1C#g&@zJA2Az?r@v`f zg(L!1!d*)eR3sx9nO@y~z=ta=5<%de=UD5DL%cEFsp>u_qNJGeCCd^_xc!H(*WC0v zcN`jRdt(@7w=21x%1$onBir6_jf!5psj`TBzgv=uYjkxj6ozlAuIEDBuM-~Ffd&o3 z;+}iMdEVZ314p{&ia!)qlx)~2!l3*|~s?}77jfqc#hI5$#Sk}~H)av~8AD30F0 zISfvW^?{bh8**L6Gc9^SyZ6DVb}9w*Zk@y%l@*lWL{ z`}G^uho~O6t@`$4$Z$jJ`{Bv@p+)PQ;RXqjPk<04WoxG;3+Hh>Fh@ z9eGj$*9i%jEcm1TX~2LbN7>axNp2m`pBs2}#)5$>YSvO7D0QNu+;sTUt16UBM7Mcr84!BHQR=(VX%TCsFQow%)vl$eQ zcKf&#hQM}?uKhf2%Ae_PaHp=ta(K9}Jl%_)bOEp-mx;aq#Uphnk$+Ko)$r~tShK>cKub_pzfo!~KccmPKfk{){5-pEGxQtamiinm><3uF2w}|tD zO%5RRL>RKq89XSd>3^mO1@vl)up!u~34c({uy08H~BW`X#4QWDJyUG!9#H z5quH7p%iS#=WOvM&op#Eu9@-N7I{B!)4f6=+Q=-BSLx)CZlwkn9_Zx$q+n@H+?^Xc zaVJs>FdyB2W-n)g7TW#rkM6qog3)Bi$NTs9HLW1&Xt*C~b;KxCt0G=7? znQT^$jD%gZ+bN{AtFV1}rU`u7%c2;+Y=kKFc1&b1-Sz3WxwLjLUOXtH&=0+B{x9 z(`VK7Q^vH6v*v;7RuIM)&W*-C+Z~q&dLKGXs@Y&JXTJC4!C8K_2f;r1)zO86Z$YiG z=x>^szbAg}k1-#(;iGtre!G zjkXWnle4S;HM4tvC@VkZv`=rHKIfvNK}V`od^cpx=G(eNmyw3pu^R9Z;F-Mo z)YNwH?Q4Fc*tlot*A*vI8B;hfUu${Ut=}q^FXtd8`AmhQ@aj_q%(bqn!v<97jq516 z`3ScB#pCr>XDvAm{^Y}&+|bVt7gONSsyx8gLKcbfI=I}+(-R3KAV|B=NJsVO#G&6! zd2jOO-BCxbU!6adoIBUEKk;*USM259-9g>I#=WjP4@I#T1#GbrfQa{|^yBS+P1$t5 z`af4h{)4ZM=I8(K3Wm(b<8761<;}zQFH^*?O|M|I|EXX~@BuX~RssK1FfpfETTjs| zm~#GqE0|=n;a0Q%sbKDFIU=%n7HW91ScFb5Ki9e>u_IxCZND$~u39cb2Z;v$24X+V z=eZ>{gQbC}bN)@lzVGwX#l2f2#CpNe&`%Z9wD;`kS7zuBgjhb_PCap9QQ{zdz=8 zIR9RwyLPBd*Sq*dj}rcT1H>Owc&Yadc~&`MImW7y*jy&sE-1C#~rB!Ht89Ox0*IE7B0x4-!OBKMV?4rdJIeXis_v>G+#m?*SNVi@o@{Gq!|=A8UMmoE~k` z)OLyeee^V=ffFN4Uqi0G$yto>t;5cr$%vuU=bZHL!||h&^?avpJz2Cak;_@~EzRj} zE!UudmII!&5MEza>%Jl@>puR2-`YgwB#p}*S1xPbQFroXh!h|cmhoje;)(sJ`7*cf zjj0f7fCiIxfHBdphc-*01x@uc;jYcza{x!Km3hkNtbg$&U)B>y-rM@{p}c+zR9X|& z{pOlJ4u>p6{Kd02G_p3-`JQt=>cp69y^o>Jm-XE^3snIY z8{19>z+N1Py96;>NfOzhfQ?Z&wgPS)N&Trvy)t3c{m_2IFJcluyBn8Os1E)r-o}yt z(vhRLK0HJ(1;+2ncNo{h-qUcKyKja6j3HHBng~GUm$K`|!M{nF-?_`L`+KL-fbGv? zB*?T(RN~(}^MaeMO|qU5h1FF`9pKKf5>C3{4s~W$PH>Jwu_=g-8*c8x;)VE)^;Tgj}Dp zz+BoIKw-WS=$EVH@oo(Yh^4QH%qgBK)u=rElx*t8{-j{L_Pxsksfp{kMIn@Uam~FP zvpmV-hriu*PF>s^k63+~Dd7s##`uibEWa#f*DE61MoPbTo!|#0?WID8+{r20}S(C4@BMIUy_zTzy_=Aw&gHe%UadRO<_xS6|#>Drsgr84)Nl1rD$0 zVAX*89pB;cjfZ^w(Z%f<5zM&!O8#pm1`nv!U_#M96_+Sm=XRh%@(L<0vG;k3ouAU7 zNx4}G!|Qbdh%+DltRlPN-YY^CzacMp;$(FBi7W6A zp7sO%-QAVfZ^fG*|7gtd>`mW}Tt6u@JNrkkFYS2Qxv(xQs0}6~9Ekp;_Ic;!A~NJL z!*Ox6>FBADnvJHasDgMLyZV`y%%+CSI`}umu(5|L-IY28@T)&Usjd&cd(D`7e`W1i zP6#DbqzG_?cr6Z$ReTqYr+SC6Sx(=J`EmKzwy%bcHZ8%W`{8T9tSglV;E(!{9-gS3 zZ;^*e)qfhgpeF)!L-_`t2#yqe`Lr2M7XluM`=g9IAK;eln$TIggHoMuiL3qooo@@(yf$Ms^j;`b?D0DfWa~dMFoU zYkm#S0d9_&Fekp*ivP-*RIXr$M~rw!&E)Y_+xJTcetM}V*;Rp(37NXkh(0!#U2Qk4 zGj8!?3nn2O?zQU%VTOmiTi^6_B!up7bFuB(>8c<_G!nU|UiEK?3nQ+?N4ckj%7}!; zKg~xBik-b(|6af8)$~S_;Hv4+C!erlC!tk_XX6`#G0V%btAroIS(NeYY^HEx@(MAK z*Fah9>D!CrV3eSs$FCCR+v!{iebuXMI`*+#s#^k>p*0|bN6k>mBx-Y8LCfe(201GI z9aH+CKiAsekVpA%vG^18Wsi8&2HyqdkMf)Pq|+lk8g$PFlki;N8mA>ZAK zi%^t(74ZDqP7 zVB#EMs@)88`7u`Ex5vxOGfcq+-l{T4MsM3X(YbiNhHnq-ckNB!XOqSU$1~T%L)f&r zKOng;C~Q~zO63XY)mEZK9=kxPpFjh4WAPi7FOYeD16u>O=^zjgm z)%j~(2XS0II)_I;-bQ>I&LjNTF`ynYu7tDfKLk~_wlAD6BB7fua=;>@p!WDMCS@Yz zlw{}D<@b?TE8-q(sGBvCfc}VF0j1gWaL(a)r8}^Igi}DS7ChiEX$9n^+QGCyiDn!s zX8t{>v+{E{j!)w)n!~nlVHTZ$(OqFZ9MqQN#Pdq!ul^z%Xv@rfjs{j0an5ITABFDS z5j>)Cp9p=K(80^m#Ur9aFK9UC!}u)CtV-&^MU z;pr3M3CaJJixd?&X;g?f0W`$;_!xX*lEB%Bj^U1{D5_4biQ7CKRb6WrJ{$uCHSRdtaK^Q zIVbB_&>Tua>bX=h#Q#fv{?}B=ejYPU{+H~ESaG$9pD+AH?-#7*M-F)6z`SGE3*mS( z)NaCrwEGwKS4ZzpV>Wrk&>2M)`FfzWN5mjSE9H)GNzFj7%tq>5y zpQFvQl`nzmn#!pKqzYr;M}fF@_J?uP(I`)~^W&xlFl?KY=8s44#Qmo1{pl1G5jzte zxLUQ0l0taVjpCEk`+djR00$I#CQW5F>wL^dxzm$5UQgVd@mjv18Xa^fl+c- zT~7kpjWs?6Bf z2>!CA{*(7dus{+M0b#go^T8I-FZq4V$H8=A!nFh}>Y^3bo8}<+r5U{rRV2;w0ff1} zcj^ZP+H>%em<)NSPZ=XJS4QmKMc9mbr?4SAk1j3=yNvnY{=BE3?CEeiZv6Np1WDUk zeRlyoF5RhAIB^S(-@Q3JprvGgU(NfgpxcoDi+~H+HS2qb_9^m;(q3+|XWz-($v7I| z;W?7W>ouf6Zz3C3LvUSr<$*^=q)r>+=|E5!OAkan)x1)vt9$;l4V! zSn}z%?ZuM`DbKIE_u4FS3aT_1Eq@BT%gfe%wV~`x;Kr^+&fNFTzLr-=*y%wtSf#$) zbBBW6TQ;Wz7a|3Iwp*JWv`z`X?St+5MWRuTkJ6p5mtN*uKwoTR zbH1uva;<*pyiopoz~R@?h&NBPKId;fA*oE4jVG^>`$oupVF6-Yilhxhv z?tk(P?Eh5VsH{v!qMfe>1T6*yTy>@+(aOSfBwCn`MB@Y3w}S%lA70q)?AYy(DgT2+ zTOKZ-+xu^IV;B_#7CXf-`n0%=grp#jO4A0MrS%W_Eic> zCD>hV=gF)fb7CH^Ys~9NF3jsY{$vyehBxu-^8=nP+UP~ZPYTP}{mVw-gF}JP0 z!d5Qqt|-HGP0#7ZgFva!Vw?%pfE%age*uTHTku*P!co{6tp%y>H~LW`j8oqG^w_ee#HXP@@=<(hs#rE7%8I|0TbO$$V7r}jQd_pQ zcAxkGr#2M3BwpJbQiJ1kZ`kRQoCJNQ>hL=lCPm&3P>|5f$XiH>+4b4(`t$&YKkf$e z$qs?xe_f3T3eN++YY5h!5_Ze*69c;zK5*3Vv?v4J)wqTy3c3+}Mx-Zt6bE>{#3MMY z4JrOonpOeb&@X7WkGP@M zkr*wki$daL9qMKlCx%qgw9wLq+N`kdyTe2P@XU}lOCl|z#E`(~W!RmL(P5Aqb7eTx zNfeyijXPkwfQJgQVQbV(aTfRi6!$mtC@GGhJ!&)W-K|f zwutQ>uwOgSKe2SzRai<=*9AS5CZOxaDv@xOj~RR%m#s@fnBug}HtyXUAi7F29caUi z$@e*_MGAeb#^?&ro&D0ctltLDTFHY+petp}Tnhw^_RrZvrWJ}=k2(eE(xbBnS_na! z$wg5Bl$DOWG?5}9C=a+&e1&TNhjABwt-MWL2?Xb`25<70f+=Nj`3&-lFrSwUFH2*g zc)-M+4J9r%`dvMPOX1}qEcCajH^O}p!Gj_cp);v(vZuh_;$KVl^Px!W$dum$HXaQc zUEL^s&e{D*DgT9@vr%b)JLy4XG6i}B^Q9@Ee*`zf?GGkQ9!U1djEYm)-U?x8vx3f< z`;BPo`MXQw&i>SLeK9GEOIj1<(?Nim<980`rD0Z1R2T?1+X|6JBk+;Dnc~YP$rRB(?1agZU}E0V%$YVlLlV zA>_L21-Fz}q*sa`j?2jE`q=u23qzMv6xec06NHj~bXvl-gjuNz1D+h5XK22N0R#y$ zbgI+XUrsm->wKhks+6rQ;@BmMFRAWh5SU#P;=?lLR4fV8wZ}4%b?bgx=kd=bK1LDh;r&< zoGSU9fP>wjq@*4BvqOwHn=tUH-Uo6(gH4QZ4w@~#F(bxdUFPEAgQ$i5+r{PajHa!H z(c>{FS?L#yqVs4y>n8zz8u4g4@$8Om!e-07-|$(Ph=E@_(@a}&MB#w^XLOq;zbboj&FRh??D0gnj_4GmIk9XyB`%CI>G&H=1kE7$Sd0$ zk%&loZRK|};8^*ROJ&O`UF`Qv%X4s~XkN=DeIb?%+7A*N?tBydr$CmJ-I|&jKQmQ^VpnLfy8vP{`aVvFJ$CJ$Wkw^5YC=`sP)rTl`@D3P!t8h*jrV#@RQrdZ29lT=r@(?JyBO% z)iGi=(H)Nqc7o!UUrJ9r6^6T9%^ZFA-bY16IJzFL==f?=^O~wic42&i1m8y*2}p^_ zx|Xe=4H$k=b=FqiJ5wd{qXa`B*-M`57IJCbNuf=|czN^gyV6DFiXYR@HNVOE;$HoX z01mAChU6O*Ibra`XV+`6-;2LmcMiq$t#C9r9wCa}Uq}NkT8=LDA&O|DQIIPUrjTdz zd3Q77TRIn+8O3r7bK>Yl=@-J5hzO!Y%J3Bz$Q%(Y>X1?+Z+;%A6{7O>{#rN zvHY*VCU`4=vWzsAlKg79AZ?@*Xe1mwxw}Rh1Y3w(=mt0Nm$3_+t+twSb+1le6Fg)1 z$U-cGUH*Lc%y&t`_(MVHnryRDo(L1+ej@+JN8T~|O7}tMhS)P+>hqL|_uGAYIjhIs zBwju_>uavB+5bn>q2=YgF6ej$aSRJvRN3*iE>Rp%2DbjZ0U+>Z2=|#S7!bhtza)7yh{+NJF(yFT9m~#`K@>`Ov2dk zU^=zv_ThH*fRmNE;ny{>S~i||e97HoINug1>K3FW3vi=SgXlnzh-ZH#!l%6QHv0F8 zv{4e&bI3tT*0$+9D-F}g!_Ft(1H8*#!R;o;=)Nfo5=&L=k6g;f7vS!Yd9~X106FeXdoPWS zpk42}2>Z?I`rrZSBnVYo&0B5@le8hvFUq$G{rEbt;)w$9;Yjtg^`kl&fyo5Fh_@|0 zeywbrSTBY7)Wbq~Y>`PZ#N*F&?X&g9$l4AOM>GwOkN+ea*>(kc4cNo`a;K)_TxjTzE!+-ZI{P(=E<>CHw!Fcwy(o>WY@zw--FW>^>Yaj5O; zEhL7l`0Qiss5W)G!@k*SrOM>f_{DLq1@_!A{2Ul;i2dM*2eh0dU;gXbwi)Vi z3?cxzT>xOoA`){W2x!htg6mQuC9zbo{QLAx&`@nBZkISiT{rf9B_?jNOFS{7cp$7h zTGT!uj){U(P<0_mhM6ZdJS*WAK}TK-B7vMuMW9>aHSqYo6fjLlNe$hrycCewCfUvR zW2je191LTjlw!SxkOKPw_e=pIGP0BXS_q4@!fYyzg(t$Q0hyA@@80acLT7<2jzNL$ z^9+hPM&bh{z{0O(EVuSZ`ssn>ifBC!%hSVf(Jjv2TVhg|ekR&Y2d0aY%EVt(nOGq1 zv%wEMq{XNv7hD>%bJw8KnWu-pkN1EkgVuO&c^LZaPXU_zJyf0_09EWqA#c{+9k`z` zQ*Rsq@xis=nv`LSzDdT-NAI!WIWJ_UOA5^U2+1z!NEr9mB9P?!4Q?!uLG^1fhiD(z zdh-0;5fBW(Aq?eRh+yUaS_(TSDyd3|jLV%V?$(F~w%eK8YbfQx;%PVygasKoED+9REs= zVNsD7N^r``oz)^z8F}Mt-3wfX8-LA~iI_l$mOK%c+(5uoc5e|EYIMK+ESf()(%nX8 zQL^Y;qq$ReE1EE+9X{aHPWD#sU9XQ4PVgD1m4RAnAE{v+?zFz=l1p$ zQNxnnL@L*qqU-%18ONvd&X=*0xnVv@eH^N@F`S{K2~k(Tr%2@t{>l1~O8D&OTq}cn z1S%vOZ5bXq`&{S@4|Gjtc_4_|DKT4l$s0j~1yw*G%vX;Y5jX(kYzC#!{7Mv)y|9H| zX!8LSz#w}xIra+*n|)15xbSUd78HUu#x{U^e0knnRjrNnKH$} z6uAyd8X3#|9cU+sU3&)e98KJmNzmD1<%aVN-bmd~mGylqc3d*PlOmSS(E#L$vctvi zY)5l7c! z;&+;rL_7=NXZYqPyC-+uMnf~spIV*H%A_XdWPxVd2Yz8XDw;3aOn$7UlAxv>QcWqZ z;pxV~K&s{d&)HmJL&@n8YfoJU?y$H13Z-Dj(&)J0@K0CoQ(p(W5;E>C_n4y=hAMY{ zh^x4{hqn^n%5Ah#q3}hxdiOF?C^TffW;;GB5)87X`fy=MJ`VZppMJLu8JO*-=N+v{ fo_{)G^J4$Ov!iwVy{BVdW?yn&<#R*;0P6n_GFqP^ diff --git a/examples/concurrent/tsconfig.json b/examples/concurrent/tsconfig.json deleted file mode 100644 index 93677788..00000000 --- a/examples/concurrent/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "dist", - "rootDir": "src" - } -} diff --git a/examples/concurrent/webpack.config.js b/examples/concurrent/webpack.config.js deleted file mode 100644 index 8059eaaa..00000000 --- a/examples/concurrent/webpack.config.js +++ /dev/null @@ -1,65 +0,0 @@ -/* eslint-env node */ - -const fs = require('fs') -const path = require('path') -const HtmlWebpackPlugin = require('html-webpack-plugin') - -const context = path.join(__dirname, 'src') - -/** - * Any file in the root of the src is considered a new HTML page and entry point. - */ -const examples = fs - .readdirSync(context) - .filter((source) => source.endsWith('.tsx')) - .map((fileName) => { - const chunkId = path.parse(fileName).name - - return { - entry: { - [chunkId]: `./${fileName}`, - }, - plugin: new HtmlWebpackPlugin({ - filename: `${chunkId}.html`, - title: 'Ore UI - Example', - chunks: [chunkId], - }), - } - }) - -module.exports = { - mode: process.env.NODE_ENV === 'production' ? 'production' : 'development', - - context, - - performance: { - hints: false, - }, - - entry: examples.map(({ entry }) => entry).reduce((acc, current) => ({ ...acc, ...current }), {}), - - module: { - rules: [ - { - test: /\.tsx?$/, - use: [ - { - loader: 'ts-loader', - options: { - transpileOnly: true, - }, - }, - ], - exclude: /node_modules/, - }, - ], - }, - - resolve: { - extensions: ['.tsx', '.ts', '.js'], - }, - - // devtool: process.env.NODE_ENV === 'development' ? 'inline-source-map' : undefined, - - plugins: examples.map(({ plugin }) => plugin), -} diff --git a/yarn.lock b/yarn.lock index a5eef68f..34ca66e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1495,25 +1495,6 @@ __metadata: languageName: unknown linkType: soft -"@react-facet/core@npm:0.4.3": - version: 0.4.3 - resolution: "@react-facet/core@npm:0.4.3" - peerDependencies: - react: ^16.9.0 - checksum: 2d90540baaf2ff646d9e1fd941dbb18db84c698cd51416668d141f4fa9705a9ec33c5df4816e30ac58e4766c6d31208e31efb2c5643a326ca0e98eb4c6b61ad5 - languageName: node - linkType: hard - -"@react-facet/deferred-mount@npm:0.4.3": - version: 0.4.3 - resolution: "@react-facet/deferred-mount@npm:0.4.3" - peerDependencies: - "@react-facet/core": 0.4.3 - react: ^16.9.0 - checksum: 9f2841b0f2b0c8a0cfcd2a0dd4ded3a2acfb910f77b46ae85dc5bf2d87aa12d879a6a56a7e77a499a6cbcc67b288eaee9882c82ddf97d7b301b30073355fc3fa - languageName: node - linkType: hard - "@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount": version: 0.0.0-use.local resolution: "@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount" @@ -1583,18 +1564,6 @@ __metadata: languageName: unknown linkType: soft -"@react-facet/dom-fiber@npm:0.4.3": - version: 0.4.3 - resolution: "@react-facet/dom-fiber@npm:0.4.3" - dependencies: - react-reconciler: ^0.24.0 - peerDependencies: - "@react-facet/core": 0.4.3 - react: ^16.9.0 - checksum: 4014173e4089e6a40b25878653ab82720f4498a895388a6c9dc336c1ba67d1db2cc661b8c0c7128ea366d90f0448458551675d00fd4dcbdaf1670de2c4844d21 - languageName: node - linkType: hard - "@react-facet/eslint-config@workspace:packages/@react-facet/eslint-config": version: 0.0.0-use.local resolution: "@react-facet/eslint-config@workspace:packages/@react-facet/eslint-config" @@ -1623,16 +1592,6 @@ __metadata: languageName: unknown linkType: soft -"@react-facet/shared-facet@npm:0.4.3": - version: 0.4.3 - resolution: "@react-facet/shared-facet@npm:0.4.3" - peerDependencies: - "@react-facet/core": 0.4.3 - react: ^16.9.0 - checksum: e321d19ba498fb5a455abace4b75233714136f9116c6ffc88967483b2530839c1f1bc9645901f84292b000442ddd0516520586b7508989ad0b110e1a811ee11e - languageName: node - linkType: hard - "@react-facet/spring@0.5.3, @react-facet/spring@workspace:packages/@react-facet/spring": version: 0.0.0-use.local resolution: "@react-facet/spring@workspace:packages/@react-facet/spring" @@ -1652,16 +1611,6 @@ __metadata: languageName: unknown linkType: soft -"@react-facet/spring@npm:0.4.3": - version: 0.4.3 - resolution: "@react-facet/spring@npm:0.4.3" - peerDependencies: - "@react-facet/core": 0.4.3 - react: ^16.9.0 - checksum: ce11750732996922f55de6f29088e7adc1fbd03c4caa366b28d6adbdfff7fb552c3ae6c79d270a6da99c56dd7ce4134f0ce07426fd41b31332ed4ecad449f987 - languageName: node - linkType: hard - "@sinclair/typebox@npm:^0.24.1": version: 0.24.51 resolution: "@sinclair/typebox@npm:0.24.51" @@ -2016,15 +1965,6 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:^18.0.5": - version: 18.0.5 - resolution: "@types/react-dom@npm:18.0.5" - dependencies: - "@types/react": "*" - checksum: cd48b81950f499b52a3f0c08261f00046f9b7c96699fa249c9664e257e820daf6ecac815cd1028cebc9d105094adc39d047d1efd79214394b8b2d515574c0787 - languageName: node - linkType: hard - "@types/react-reconciler@npm:^0.28.0": version: 0.28.0 resolution: "@types/react-reconciler@npm:0.28.0" @@ -3741,36 +3681,6 @@ __metadata: languageName: node linkType: hard -"concurrent@workspace:examples/concurrent": - version: 0.0.0-use.local - resolution: "concurrent@workspace:examples/concurrent" - dependencies: - "@react-facet/core": 0.4.3 - "@react-facet/deferred-mount": 0.4.3 - "@react-facet/dom-fiber": 0.4.3 - "@react-facet/shared-facet": 0.4.3 - "@react-facet/spring": 0.4.3 - "@types/fs-extra": ^9.0.12 - "@types/puppeteer": ^5.4.4 - "@types/ramda": ^0 - "@types/react": ^18.0.8 - "@types/react-dom": ^18.0.5 - fs-extra: ^10.0.0 - html-webpack-plugin: ^5.3.2 - http-server: ^13.0.2 - puppeteer: ^10.4.0 - ramda: ^0.27.1 - react: 18.2.0 - react-dom: ^18.2.0 - ts-loader: ^9.2.5 - ts-node: ^10.3.1 - typescript: ^4.3.5 - webpack: ^5.51.1 - webpack-cli: ^4.8.0 - webpack-dev-server: ^4.0.0 - languageName: unknown - linkType: soft - "connect-history-api-fallback@npm:^1.6.0": version: 1.6.0 resolution: "connect-history-api-fallback@npm:1.6.0" @@ -8902,17 +8812,6 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.6.2": - version: 15.8.1 - resolution: "prop-types@npm:15.8.1" - dependencies: - loose-envify: ^1.4.0 - object-assign: ^4.1.1 - react-is: ^16.13.1 - checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 - languageName: node - linkType: hard - "prop-types@npm:^15.7.2": version: 15.7.2 resolution: "prop-types@npm:15.7.2" @@ -9083,7 +8982,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.13.1, react-is@npm:^16.8.1": +"react-is@npm:^16.8.1": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f @@ -9104,20 +9003,6 @@ __metadata: languageName: node linkType: hard -"react-reconciler@npm:^0.24.0": - version: 0.24.0 - resolution: "react-reconciler@npm:0.24.0" - dependencies: - loose-envify: ^1.1.0 - object-assign: ^4.1.1 - prop-types: ^15.6.2 - scheduler: ^0.18.0 - peerDependencies: - react: ^16.0.0 - checksum: c9c74208325a940ca36e031b71499f6d8e62e96ee673d69e35cc9e6a661aa746a2b0750f2ffcd1bae0a29eaf3d127dc8197ab7e801e6a3a2ab7d45a71b464630 - languageName: node - linkType: hard - "react-reconciler@npm:^0.28.0": version: 0.28.0 resolution: "react-reconciler@npm:0.28.0" @@ -9527,16 +9412,6 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"scheduler@npm:^0.18.0": - version: 0.18.0 - resolution: "scheduler@npm:0.18.0" - dependencies: - loose-envify: ^1.1.0 - object-assign: ^4.1.1 - checksum: b6e0b9e0086b200b114f1ef7f9fcac966ad5d84cd3b1867174be0549d3ff713d1fd22d5574cb024b7d3eadf3307f2afc1cb5bfbf28b0d3bc34b200183800fcae - languageName: node - linkType: hard - "scheduler@npm:^0.22.0": version: 0.22.0 resolution: "scheduler@npm:0.22.0" @@ -10710,26 +10585,6 @@ typescript@^4.8.2: languageName: node linkType: hard -"typescript@npm:^4.3.5": - version: 4.9.3 - resolution: "typescript@npm:4.9.3" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 17b8f816050b412403e38d48eef0e893deb6be522d6dc7caf105e54a72e34daf6835c447735fd2b28b66784e72bfbf87f627abb4818a8e43d1fa8106396128dc - languageName: node - linkType: hard - -"typescript@patch:typescript@^4.3.5#~builtin": - version: 4.9.3 - resolution: "typescript@patch:typescript@npm%3A4.9.3#~builtin::version=4.9.3&hash=701156" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: ef65c22622d864497d0a0c5db693523329b3284c15fe632e93ad9aa059e8dc38ef3bd767d6f26b1e5ecf9446f49bd0f6c4e5714a2eeaf352805dc002479843d1 - languageName: node - linkType: hard - "typescript@patch:typescript@^4.8.2#~builtin": version: 4.8.3 resolution: "typescript@patch:typescript@npm%3A4.8.3#~builtin::version=4.8.3&hash=701156" From cc05c4e68d43d89e5b4d19a2e28a90eecf78b418 Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 14 Nov 2023 17:48:07 +0100 Subject: [PATCH 55/88] Undo changes to the CONTRIBUTING file --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 191cae8c..0a70bf6e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,7 +2,7 @@ Currently the process of updating the version of the packages is mostly manual. Before you start, first you need to make sure you have the permissions to publish the packages. -- If there is a release branch (see **Release candidate** below) that hasn't been merged to `main` yet now is the time to do so. +- If there is a release branch (see __Release candidate__ below) that hasn't been merged to `main` yet now is the time to do so. - Make sure that you are logged in into your `npm` account. Use the command `yarn npm login` on the project folder to do this. - While on the `main` branch. - Perform a search an replace on all "package.json" files from the old version to the new. (ex `0.1.4` to `0.2.0`). @@ -25,4 +25,4 @@ Currently the process of updating the version of the packages is mostly manual. - Create an annotated git tag by running `git tag -a v0.4.0-rc.0` (replace with the version). The tag message can be the version again. - Push commit and the tag `git push --follow-tags`. - Publish the packages by running `yarn publish --tag rc` (it will also build the packages). -- We are currently not doing release notes for release candidates so you are all done! 🎉 +- We are currently not doing release notes for release candidates so you are all done! 🎉 \ No newline at end of file From ba8b23682226bcbe14d86d653aeca7d6d904c163 Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 15 Nov 2023 12:29:38 +0100 Subject: [PATCH 56/88] With React 18 we can't trigger a render from the body of another component So, we need to ensure that when wrapping a facet, we do its updates within an effect. --- .../core/src/hooks/useFacetWrap.spec.tsx | 14 +++++--------- .../@react-facet/core/src/hooks/useFacetWrap.ts | 9 +++++++-- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/packages/@react-facet/core/src/hooks/useFacetWrap.spec.tsx b/packages/@react-facet/core/src/hooks/useFacetWrap.spec.tsx index c2f1739f..9654ad22 100644 --- a/packages/@react-facet/core/src/hooks/useFacetWrap.spec.tsx +++ b/packages/@react-facet/core/src/hooks/useFacetWrap.spec.tsx @@ -145,7 +145,7 @@ const testEffectUpdatesOnStaticValue = (value: FacetProp, expectUpdates: } } -describe('does not trigger effect updates on re-renders when the unchanged wrapped value is', () => { +describe('does not trigger effect updates on re-renders for the same value', () => { it('string', () => { testEffectUpdatesOnStaticValue('', false) testEffectUpdatesOnStaticValue('test', false) @@ -158,26 +158,22 @@ describe('does not trigger effect updates on re-renders when the unchanged wrapp testEffectUpdatesOnStaticValue(0, false) testEffectUpdatesOnStaticValue(1, false) }) - it('undefined', () => { testEffectUpdatesOnStaticValue(undefined, false) }) it('null', () => { testEffectUpdatesOnStaticValue(null, false) }) -}) - -describe('triggers effect updates on re-renders when the unchanged wrapped value is', () => { it('empty array', () => { - testEffectUpdatesOnStaticValue([], true) + testEffectUpdatesOnStaticValue([], false) }) it('filled array', () => { - testEffectUpdatesOnStaticValue(['string', 1], true) + testEffectUpdatesOnStaticValue(['string', 1], false) }) it('empty object', () => { - testEffectUpdatesOnStaticValue({}, true) + testEffectUpdatesOnStaticValue({}, false) }) it('filled object', () => { - testEffectUpdatesOnStaticValue({ key: 'value' }, true) + testEffectUpdatesOnStaticValue({ key: 'value' }, false) }) }) diff --git a/packages/@react-facet/core/src/hooks/useFacetWrap.ts b/packages/@react-facet/core/src/hooks/useFacetWrap.ts index bb70e869..83dd54b4 100644 --- a/packages/@react-facet/core/src/hooks/useFacetWrap.ts +++ b/packages/@react-facet/core/src/hooks/useFacetWrap.ts @@ -1,4 +1,4 @@ -import { useMemo } from 'react' +import { useEffect, useMemo } from 'react' import { defaultEqualityCheck } from '../equalityChecks' import { createFacet } from '../facet' import { Facet, FacetProp, isFacet, Value, EqualityCheck } from '../types' @@ -25,10 +25,15 @@ export function useFacetWrap( [is], ) + useEffect(() => { + if (inlineFacet !== undefined) { + inlineFacet.set(prop as T) + } + }, [prop, inlineFacet]) + if (inlineFacet === undefined) { return prop as Facet } else { - inlineFacet.set(prop as T) return inlineFacet } } From b45cc8410316b4523721f815ea4bcea43a98ef37 Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 15 Nov 2023 12:34:41 +0100 Subject: [PATCH 57/88] Delete deferred-mount again Given its deprecated, we will handle it internally where needed. --- packages/@react-facet/deferred-mount/LICENSE | 21 -- .../@react-facet/deferred-mount/README.md | 79 ----- .../deferred-mount/jest.config.js | 10 - .../@react-facet/deferred-mount/package.json | 53 ---- .../deferred-mount/src/index.spec.tsx | 5 - .../@react-facet/deferred-mount/src/index.tsx | 276 ------------------ .../@react-facet/deferred-mount/tsconfig.json | 7 - yarn.lock | 14 - 8 files changed, 465 deletions(-) delete mode 100644 packages/@react-facet/deferred-mount/LICENSE delete mode 100644 packages/@react-facet/deferred-mount/README.md delete mode 100644 packages/@react-facet/deferred-mount/jest.config.js delete mode 100644 packages/@react-facet/deferred-mount/package.json delete mode 100644 packages/@react-facet/deferred-mount/src/index.spec.tsx delete mode 100644 packages/@react-facet/deferred-mount/src/index.tsx delete mode 100644 packages/@react-facet/deferred-mount/tsconfig.json diff --git a/packages/@react-facet/deferred-mount/LICENSE b/packages/@react-facet/deferred-mount/LICENSE deleted file mode 100644 index b2f52a2b..00000000 --- a/packages/@react-facet/deferred-mount/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) Microsoft Corporation. - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/@react-facet/deferred-mount/README.md b/packages/@react-facet/deferred-mount/README.md deleted file mode 100644 index 6956a644..00000000 --- a/packages/@react-facet/deferred-mount/README.md +++ /dev/null @@ -1,79 +0,0 @@ -# @react-facet/deferred-mount - -React Facet is a state management for performant game UIs. For more information on how to use this package check the official documentation available at https://react-facet.mojang.com/. - -This package allows you to defer the mounting of a component to the next frame. By wrapping components on a big list you can keep the frame time low while everything is mounted. - -When the `DeferredMountProvider` is used, it requires that there is at least one descendent as a `DeferredMount` or `DeferredMountWithCallback`, otherwise it will wait forever as `deferring`. - -### Example - -In the example below it will mount: - -- Mounting: nothing -- First Frame: `First` -- Second Frame: `First` and `Second` -- Third Frame: `First`, `Second` and `Third` - -The `useIsDeferring` hook allows to check what is the status of the deferred mounting (by returning a Facet) so we can, for example, show a spinner. - -```tsx -const SampleComponent = () => { - const isDeferringFacet = useIsDeferring() - - return ( - <> - (isDeferring ? 'deferring' : 'done'), [], [isDeferringFacet])} /> - -

First
- - -
Second
-
- -
Third
-
- - ) -} - -render( - - - , - document.getElementById('root'), -) -``` - -The `frameTimeBudget` prop allows the tweaking of how much time the library has available to do work on a given frame (by default it targets 60fps). - -## Deferring Asynchronous Renders - -Some components may need to wait some time before they can be considered fully rendered (for example if they are fetching data). For these cases you should use `DeferredMountWithCallback` with the `useNotifyMountComplete` hook. - -### Example - -```tsx -const DelayedComponent = () => { - const notifyMountComplete = useNotifyMountComplete() - const [data, setData] = useState() - - useEffect(() => { - fetch('mock-api').then((data) => { - setData(data) - notifyMountComplete() - }) - }, [notifyMountComplete]) - - return
{data}
-} - -render( - - - - - , - document.getElementById('root'), -) -``` diff --git a/packages/@react-facet/deferred-mount/jest.config.js b/packages/@react-facet/deferred-mount/jest.config.js deleted file mode 100644 index 93714085..00000000 --- a/packages/@react-facet/deferred-mount/jest.config.js +++ /dev/null @@ -1,10 +0,0 @@ -/* eslint-env node */ - -const baseConfig = require('../../../jest.base.config') -const projectName = require('./package.json').name - -module.exports = { - ...baseConfig, - displayName: projectName, - rootDir: './', -} diff --git a/packages/@react-facet/deferred-mount/package.json b/packages/@react-facet/deferred-mount/package.json deleted file mode 100644 index ef4a4235..00000000 --- a/packages/@react-facet/deferred-mount/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "@react-facet/deferred-mount", - "repository": { - "type": "git", - "url": "https://github.com/Mojang/ore-ui.git", - "directory": "packages/@react-facet/deferred-mount" - }, - "author": { - "name": "Paulo Ragonha", - "email": "paulo@ragonha.me" - }, - "contributors": [ - { - "name": "Danila Dergachev", - "email": "dderg@protonmail.com" - }, - { - "name": "Fernando Via Canel", - "email": "fernando.via@gmail.com" - }, - { - "name": "Marlon Huber-Smith", - "email": "marlonhubersmith@gmail.com" - } - ], - "files": [ - "dist/**/*" - ], - "homepage": "https://react-facet.mojang.com/", - "bugs": "https://github.com/Mojang/ore-ui/issues", - "license": "MIT", - "version": "0.5.3", - "main": "src/index.tsx", - "publishConfig": { - "main": "dist/index.js", - "types": "dist/index.d.ts" - }, - "sideEffects": false, - "scripts": { - "build": "rimraf dist && tsc", - "prepublish": "yarn build" - }, - "peerDependencies": { - "@react-facet/core": "0.5.3", - "react": "18.2.0" - }, - "devDependencies": { - "@react-facet/dom-fiber-testing-library": "0.5.3", - "react": "18.2.0", - "rimraf": "^3.0.2", - "typescript": "^4.8.2" - } -} diff --git a/packages/@react-facet/deferred-mount/src/index.spec.tsx b/packages/@react-facet/deferred-mount/src/index.spec.tsx deleted file mode 100644 index 7a555bcc..00000000 --- a/packages/@react-facet/deferred-mount/src/index.spec.tsx +++ /dev/null @@ -1,5 +0,0 @@ -it.todo('test deprecated implementation of deferred mount using useTransition') - -// Make TypeScript happy --isolatedModules -// Can be removed once tests are written, and are imports on this file -export default {} diff --git a/packages/@react-facet/deferred-mount/src/index.tsx b/packages/@react-facet/deferred-mount/src/index.tsx deleted file mode 100644 index fe21d273..00000000 --- a/packages/@react-facet/deferred-mount/src/index.tsx +++ /dev/null @@ -1,276 +0,0 @@ -import React, { - createContext, - useState, - useContext, - ReactNode, - useCallback, - useRef, - useEffect, - ReactElement, - useTransition, -} from 'react' -import { createFacet, Facet, useFacetEffect, useFacetState, useFacetWrap } from '@react-facet/core' - -type Config = { - forceImmediateMount: boolean -} - -const DeferredMountConfig = createContext({ forceImmediateMount: false }) - -/** - * @deprecated - */ -export function DeferredMountConfigProvider({ config, children }: { config: Config; children: React.ReactNode }) { - return {children} -} - -function useConfig() { - return useContext(DeferredMountConfig) -} - -interface DeferredMountProviderProps { - children: ReactNode -} - -/** - * @deprecated - */ -export function InnerDeferredMountProvider({ children }: DeferredMountProviderProps) { - const [isDeferring, startTransition] = useTransition() - // const [isDeferring, setIsDeferring] = useFacetState(true) - const [requestingToRun, setRequestingToRun] = useFacetState(false) - const waitingForMountCallback = useRef(false) - - const deferredMountsRef = useRef([]) - - const pushDeferUpdateFunction = useCallback( - (updateFn: UpdateFn) => { - // Causes a re-render of this component that will kick-off the effect below - setRequestingToRun(true) - - deferredMountsRef.current.push(updateFn) - - /** - * Cleanup function that makes sure that we don't try to "mount" a deferred component - * if it has already been unmounted. - */ - return () => { - // It is most common that we will be cleaning up after all deferred mounting has been run - if (deferredMountsRef.current.length === 0 && !waitingForMountCallback.current) return - - const index = deferredMountsRef.current.indexOf(updateFn) - if (index !== -1) { - deferredMountsRef.current.splice(index, 1) - } - } - }, - [setRequestingToRun], - ) - - useFacetEffect( - (requestingToRun) => { - // Even if we are not considered to be running, we need to check if there is still - // work pending to be done. If there is... we still need to run this effect. - if (!requestingToRun && deferredMountsRef.current.length === 0 && !waitingForMountCallback.current) return - - const work = () => { - const deferredMounts = deferredMountsRef.current - - // We need to request the new frame at the top - // otherwise, the state change at the bottom will trigger a new render - // before we have a chance to cancel - // Its not possible to detect this with unit testing, so verify on the browser - // after a change here that this function is not executing every frame unnecessarily - if (deferredMounts.length > 0 || waitingForMountCallback.current) { - frameId = window.requestAnimationFrame(work) - } else { - // Used to check if the requestAnimationFrame has stopped running - frameId = -1 - } - - startTransition(() => { - while (deferredMounts.length > 0 && !waitingForMountCallback.current) { - const updateFn = deferredMounts.shift() as UpdateFn - const result = updateFn(false) - - // Can be a function that takes a callback if using DeferredMountWithCallback - const resultTakesCallback = typeof result === 'function' - - if (resultTakesCallback) { - waitingForMountCallback.current = true - - result(() => { - waitingForMountCallback.current = false - - // If the requestAnimationFrame stops running while waiting for the - // callback we need to restart it to process the rest of the queue. - if (frameId === -1) { - frameId = window.requestAnimationFrame(work) - } - }) - } - } - }) - - if (deferredMounts.length === 0 && !waitingForMountCallback.current) { - setRequestingToRun(false) - } - } - - let frameId = window.requestAnimationFrame(work) - - return () => { - window.cancelAnimationFrame(frameId) - } - }, - [setRequestingToRun, startTransition], - [requestingToRun], - ) - - return ( - - {children} - - ) -} - -/** - * Provider that must wrap a tree with nodes being deferred - * @deprecated - */ -export function DeferredMountProvider(props: DeferredMountProviderProps) { - const config = useConfig() - if (config.forceImmediateMount) { - return <>{props.children} - } - - return -} - -interface DeferredMountProps { - children: ReactElement -} - -/** - * Component that should wrap some mounting that must be deferred to a later frame - * @param children component to be mounted deferred - * @deprecated - */ -export function DeferredMount({ children }: DeferredMountProps) { - const pushDeferUpdateFunction = useContext(pushDeferUpdateContext) - const [deferred, setDeferred] = useState(pushDeferUpdateFunction !== undefined) - - useEffect(() => { - if (pushDeferUpdateFunction) pushDeferUpdateFunction(setDeferred) - }, [pushDeferUpdateFunction]) - - if (deferred) return null - return children -} - -interface DeferredMountWithCallbackProps { - children: ReactElement -} - -const NotifyMountComplete = createContext(() => {}) -export const useNotifyMountComplete = () => useContext(NotifyMountComplete) - -/** - * Component that should wrap some mounting that must be deferred to a later frame. - * This will wait for a callback from the child component before marking itself as rendered. - * @param children component to be mounted deferred - * @deprecated - */ -export function DeferredMountWithCallback({ children }: DeferredMountWithCallbackProps) { - const pushDeferUpdateFunction = useContext(pushDeferUpdateContext) - const [deferred, setDeferred] = useState(pushDeferUpdateFunction !== undefined) - const resolveMountComplete = useRef<(value: void | PromiseLike) => void>() - const mountCompleteBeforeInitialization = useRef(false) - - const onMountComplete = useCallback(() => { - if (resolveMountComplete.current !== undefined) { - resolveMountComplete.current() - } else { - mountCompleteBeforeInitialization.current = true - } - }, []) - - useEffect(() => { - if (pushDeferUpdateFunction) - pushDeferUpdateFunction((isDeferred) => { - return (resolve) => { - setDeferred(isDeferred) - - if (mountCompleteBeforeInitialization.current) { - resolve() - } else { - resolveMountComplete.current = resolve - } - } - }) - }, [pushDeferUpdateFunction, onMountComplete]) - - if (deferred) return null - return {children} -} - -interface ImmediateMountProps { - children: ReactElement -} - -/** - * Hook that informs if any mounting is currently being deferred - * Can be used to show some loading indicator - * @deprecated - */ -export function useIsDeferring() { - return useContext(isDeferringContext) -} - -/** - * Allow us to pause costly mounting (mounting) of components - * So that transitions can occur - * @deprecated - */ -export function useIsPaused() { - return useContext(isPausedContext) -} - -/** - * API compatible component with DeferredMount, but renders immediately - * @deprecated - */ -export function ImmediateMount({ children }: ImmediateMountProps) { - return children -} - -interface UpdateFn { - (deferred: boolean): void | ((onMountComplete: () => void) => void) -} - -interface PushDeferUpdateFunction { - (updateFn: UpdateFn): void -} - -const pushDeferUpdateContext = createContext(undefined) - -const isDeferringContext = createContext>(createFacet({ initialValue: false })) - -const isPausedContext = createContext(false) - -/** - * This pauses the mounting of children components. - * Given it affects mounting, it should only happen the first time! Asking to pause again in the future is not possible - * @deprecated - */ -export function PauseMountProvider({ paused, children }: { paused: boolean; children: ReactNode }) { - const wasEverResumed = useRef(!paused) - - useEffect(() => { - if (!paused) { - wasEverResumed.current = true - } - }, [paused]) - - return {children} -} diff --git a/packages/@react-facet/deferred-mount/tsconfig.json b/packages/@react-facet/deferred-mount/tsconfig.json deleted file mode 100644 index 2eeba49e..00000000 --- a/packages/@react-facet/deferred-mount/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../../tsconfig.json", - "compilerOptions": { - "outDir": "dist", - "rootDir": "src" - } -} diff --git a/yarn.lock b/yarn.lock index 34ca66e1..7e7637eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1495,20 +1495,6 @@ __metadata: languageName: unknown linkType: soft -"@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount": - version: 0.0.0-use.local - resolution: "@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount" - dependencies: - "@react-facet/dom-fiber-testing-library": 0.5.3 - react: 18.2.0 - rimraf: ^3.0.2 - typescript: ^4.8.2 - peerDependencies: - "@react-facet/core": 0.5.3 - react: 18.2.0 - languageName: unknown - linkType: soft - "@react-facet/dom-components@workspace:packages/@react-facet/dom-components": version: 0.0.0-use.local resolution: "@react-facet/dom-components@workspace:packages/@react-facet/dom-components" From 57dc1923378602927e80f7ad45dc6bedd69bb71e Mon Sep 17 00:00:00 2001 From: Paulo Date: Wed, 15 Nov 2023 18:26:44 +0100 Subject: [PATCH 58/88] Update StrictReactNode type --- packages/@react-facet/dom-fiber/src/types.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/@react-facet/dom-fiber/src/types.ts b/packages/@react-facet/dom-fiber/src/types.ts index 533d63e4..f4a9b57d 100644 --- a/packages/@react-facet/dom-fiber/src/types.ts +++ b/packages/@react-facet/dom-fiber/src/types.ts @@ -1,6 +1,6 @@ import { FacetProp, Unsubscribe } from '@react-facet/core' -import { FiberRoot, Reconciler } from 'react-reconciler' -import { Key, MutableRefObject, ReactText } from 'react' +import { FiberRoot, ReactPortal, Reconciler } from 'react-reconciler' +import { Key, MutableRefObject, ReactText, ReactFragment } from 'react' export type FacetFiberRoot = FiberRoot @@ -110,7 +110,7 @@ interface StrictReactElement

{ * * It prevents passing a function as a Node. This allow us to catch accidental passing of facets as children. */ -export type StrictReactNode = StrictReactElement | ReactText | Array | boolean | null | undefined +export type StrictReactNode = StrictReactElement | ReactText | ReactFragment | ReactPortal | boolean | null | undefined export type ElementProps = PointerEvents & FocusEvents & From c98cc2a633f1dd85ee8f8ec8117afa602fbccf8a Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 12 Dec 2023 16:19:39 +0100 Subject: [PATCH 59/88] Small refactor to early bail --- .../core/src/hooks/useFacetUnwrap.ts | 76 +++++++++---------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts b/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts index c2bba377..8587f57b 100644 --- a/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts +++ b/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts @@ -21,53 +21,53 @@ export function useFacetUnwrap( }) useLayoutEffect(() => { - if (isFacet(prop)) { - // Initialize the equalityCheck - const isEqual = equalityCheck() - const startValue = prop.get() - if (startValue !== NO_VALUE) { - isEqual(startValue) - } + if (!isFacet(prop)) return - return prop.observe((value) => { - setState((previousState) => { - const { value: previousValue } = previousState - - /** - * Performs this equality check locally to prevent triggering two consecutive renderings - * for facets that have immutable values (unfortunately we can't handle mutable values). - * - * The two renderings might happen for the same state value if the Facet has a value on mount. - * - * The unwrap will get the value: - * - Once on initialization of the useState above - * - And another time on this observe initialization - */ - if (equalityCheck === defaultEqualityCheck) { - const typeofValue = typeof previousValue + // Initialize the equalityCheck + const isEqual = equalityCheck() + const startValue = prop.get() + if (startValue !== NO_VALUE) { + isEqual(startValue) + } - if ( - (typeofValue === 'number' || - typeofValue === 'string' || - typeofValue === 'boolean' || - value === undefined || - value === null) && - value === previousValue - ) { - return previousState - } + return prop.observe((value) => { + setState((previousState) => { + const { value: previousValue } = previousState - return { value } - } + /** + * Performs this equality check locally to prevent triggering two consecutive renderings + * for facets that have immutable values (unfortunately we can't handle mutable values). + * + * The two renderings might happen for the same state value if the Facet has a value on mount. + * + * The unwrap will get the value: + * - Once on initialization of the useState above + * - And another time on this observe initialization + */ + if (equalityCheck === defaultEqualityCheck) { + const typeofValue = typeof previousValue - if (previousValue !== NO_VALUE && isEqual(previousValue)) { + if ( + (typeofValue === 'number' || + typeofValue === 'string' || + typeofValue === 'boolean' || + value === undefined || + value === null) && + value === previousValue + ) { return previousState } return { value } - }) + } + + if (previousValue !== NO_VALUE && isEqual(previousValue)) { + return previousState + } + + return { value } }) - } + }) }, [prop, equalityCheck]) return isFacet(prop) ? state.value : prop From 2b348937ac9856d5e3550c1d79b5f7c019bcdcca Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 12 Dec 2023 16:32:54 +0100 Subject: [PATCH 60/88] Addressing performance issue with useFacetWrap This hook is used extensively in our internal codebase at Mojang. So, introducing an effect resulted in a very expensive performance cost. The new implementation has a disadvantage that it will re-create a facet when the wrapping value changes. But from our measurements it is a valid tradeoff. --- .../core/src/hooks/useFacetWrap.spec.tsx | 69 +------------------ .../core/src/hooks/useFacetWrap.ts | 38 ++-------- 2 files changed, 7 insertions(+), 100 deletions(-) diff --git a/packages/@react-facet/core/src/hooks/useFacetWrap.spec.tsx b/packages/@react-facet/core/src/hooks/useFacetWrap.spec.tsx index 9654ad22..6213fb69 100644 --- a/packages/@react-facet/core/src/hooks/useFacetWrap.spec.tsx +++ b/packages/@react-facet/core/src/hooks/useFacetWrap.spec.tsx @@ -4,9 +4,8 @@ import { useFacetWrap } from './useFacetWrap' import { useFacetEffect } from './useFacetEffect' import { useFacetMap } from './useFacetMap' import { createFacet } from '../facet' -import { FacetProp, Value } from '..' -it('wraps a value, updating the facet when it changes', () => { +it('wraps a value, creating a new facet when it changes', () => { const mock = jest.fn() const ComponentWithFacetEffect: React.FC<{ value: string }> = ({ value }) => { @@ -30,7 +29,7 @@ it('wraps a value, updating the facet when it changes', () => { expect(mock).toHaveBeenCalledWith('changed') }) -it('wraps a value, with the default equality check (preventing unnecessary updates)', () => { +it('wraps a value using memoization', () => { const mock = jest.fn() const ComponentWithFacetEffect: React.FC<{ value: string }> = ({ value }) => { @@ -113,67 +112,3 @@ describe('regressions', () => { expect(mock).toHaveBeenCalledTimes(0) }) }) - -const testEffectUpdatesOnStaticValue = (value: FacetProp, expectUpdates: boolean) => { - const mock = jest.fn() - - const TestingComponent = () => { - const undefinedFacet = useFacetWrap(value) - useFacetEffect( - () => { - mock() - }, - [], - [undefinedFacet], - ) - return null - } - const { rerender } = render() - expect(mock).toHaveBeenCalledTimes(1) - - rerender() - if (expectUpdates) { - expect(mock).toHaveBeenCalledTimes(2) - } else { - expect(mock).toHaveBeenCalledTimes(1) - } - rerender() - if (expectUpdates) { - expect(mock).toHaveBeenCalledTimes(3) - } else { - expect(mock).toHaveBeenCalledTimes(1) - } -} - -describe('does not trigger effect updates on re-renders for the same value', () => { - it('string', () => { - testEffectUpdatesOnStaticValue('', false) - testEffectUpdatesOnStaticValue('test', false) - }) - it('boolean', () => { - testEffectUpdatesOnStaticValue(false, false) - testEffectUpdatesOnStaticValue(true, false) - }) - it('number', () => { - testEffectUpdatesOnStaticValue(0, false) - testEffectUpdatesOnStaticValue(1, false) - }) - it('undefined', () => { - testEffectUpdatesOnStaticValue(undefined, false) - }) - it('null', () => { - testEffectUpdatesOnStaticValue(null, false) - }) - it('empty array', () => { - testEffectUpdatesOnStaticValue([], false) - }) - it('filled array', () => { - testEffectUpdatesOnStaticValue(['string', 1], false) - }) - it('empty object', () => { - testEffectUpdatesOnStaticValue({}, false) - }) - it('filled object', () => { - testEffectUpdatesOnStaticValue({ key: 'value' }, false) - }) -}) diff --git a/packages/@react-facet/core/src/hooks/useFacetWrap.ts b/packages/@react-facet/core/src/hooks/useFacetWrap.ts index 83dd54b4..bd9207f3 100644 --- a/packages/@react-facet/core/src/hooks/useFacetWrap.ts +++ b/packages/@react-facet/core/src/hooks/useFacetWrap.ts @@ -1,39 +1,11 @@ -import { useEffect, useMemo } from 'react' -import { defaultEqualityCheck } from '../equalityChecks' -import { createFacet } from '../facet' -import { Facet, FacetProp, isFacet, Value, EqualityCheck } from '../types' +import { useMemo } from 'react' +import { createStaticFacet } from '../facet' +import { Facet, FacetProp, isFacet, Value } from '../types' /** * Wraps a FacetProp as a Facet * @param value */ -export function useFacetWrap( - prop: FacetProp, - equalityCheck: EqualityCheck = defaultEqualityCheck, -): Facet { - const is = isFacet(prop) - - /** - * Inline facet that only created if the provided prop is not a facet. - * - * We ignore the dependency change of `prop` since we want to update the inline - * facet value via the setter below. - */ - const inlineFacet = useMemo( - () => (is ? undefined : createFacet({ initialValue: prop as T, equalityCheck })), - // eslint-disable-next-line react-hooks/exhaustive-deps - [is], - ) - - useEffect(() => { - if (inlineFacet !== undefined) { - inlineFacet.set(prop as T) - } - }, [prop, inlineFacet]) - - if (inlineFacet === undefined) { - return prop as Facet - } else { - return inlineFacet - } +export function useFacetWrap(prop: FacetProp): Facet { + return useMemo(() => (isFacet(prop) ? prop : createStaticFacet(prop)), [prop]) } From 20644569da87ef88f02f6d04737b2beda851b91b Mon Sep 17 00:00:00 2001 From: Paulo Date: Mon, 18 Dec 2023 17:02:15 +0100 Subject: [PATCH 61/88] Uses queueMicroTask when available Its been implemented in Gameface as of version 1.45: https://docs.coherent-labs.com/cpp-gameface/changelog/ --- .../dom-fiber/src/setupHostConfig.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts index d2d18858..1b9faf8d 100644 --- a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts +++ b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts @@ -58,14 +58,17 @@ export const setupHostConfig = (): HostConfig< supportsHydration: false, supportsMicrotask: true, - scheduleMicrotask: (callback) => - Promise.resolve(null) - .then(callback) - .catch((error) => { - setTimeout(() => { - throw error - }) - }), + scheduleMicrotask: + typeof queueMicrotask === 'function' + ? queueMicrotask + : (callback) => + Promise.resolve(null) + .then(callback) + .catch((error) => { + setTimeout(() => { + throw error + }) + }), getCurrentEventPriority: () => { return DefaultEventPriority From 46bc7908624e7b77e2543b71e855d0d498210c1c Mon Sep 17 00:00:00 2001 From: Paulo Date: Mon, 8 Jan 2024 15:12:43 +0100 Subject: [PATCH 62/88] Update version of eslint-plugin-react-hooks --- package.json | 2 +- packages/@react-facet/eslint-config/package.json | 2 +- yarn.lock | 14 +++++++------- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index da98a199..a92df278 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "eslint-plugin-import": "^2.26.0", "eslint-plugin-prettier": "^3.1.4", "eslint-plugin-react": "^7.23.2", - "eslint-plugin-react-hooks": "^4.1.1", + "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-require-in-package": "^1.0.3", "fs-extra": "^10.0.0", "glob": "^7.1.7", diff --git a/packages/@react-facet/eslint-config/package.json b/packages/@react-facet/eslint-config/package.json index 34a384d2..5fa5a88b 100644 --- a/packages/@react-facet/eslint-config/package.json +++ b/packages/@react-facet/eslint-config/package.json @@ -36,6 +36,6 @@ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" }, "dependencies": { - "eslint-plugin-react-hooks": "^4.2.0" + "eslint-plugin-react-hooks": "^4.6.0" } } diff --git a/yarn.lock b/yarn.lock index 7e7637eb..289a10db 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1554,7 +1554,7 @@ __metadata: version: 0.0.0-use.local resolution: "@react-facet/eslint-config@workspace:packages/@react-facet/eslint-config" dependencies: - eslint-plugin-react-hooks: ^4.2.0 + eslint-plugin-react-hooks: ^4.6.0 peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 languageName: unknown @@ -4618,12 +4618,12 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react-hooks@npm:^4.1.1, eslint-plugin-react-hooks@npm:^4.2.0": - version: 4.2.0 - resolution: "eslint-plugin-react-hooks@npm:4.2.0" +"eslint-plugin-react-hooks@npm:^4.6.0": + version: 4.6.0 + resolution: "eslint-plugin-react-hooks@npm:4.6.0" peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - checksum: ead5c5be3ded82a0cf295b064376adb1998a43e2262b605eecc0efc88283dec4e159ca39307fafb3d8e661dd08e5a4c8cdfed97eea78f923954f72bad6e20397 + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + checksum: 23001801f14c1d16bf0a837ca7970d9dd94e7b560384b41db378b49b6e32dc43d6e2790de1bd737a652a86f81a08d6a91f402525061b47719328f586a57e86c3 languageName: node linkType: hard @@ -8411,7 +8411,7 @@ __metadata: eslint-plugin-import: ^2.26.0 eslint-plugin-prettier: ^3.1.4 eslint-plugin-react: ^7.23.2 - eslint-plugin-react-hooks: ^4.1.1 + eslint-plugin-react-hooks: ^4.6.0 eslint-plugin-require-in-package: ^1.0.3 fs-extra: ^10.0.0 glob: ^7.1.7 From 039ee4ec671dc7c3ebc32ec9a74b0b98597c0605 Mon Sep 17 00:00:00 2001 From: Paulo Date: Mon, 8 Jan 2024 15:13:26 +0100 Subject: [PATCH 63/88] New hook useFacetWrapMemo --- packages/@react-facet/core/src/hooks/index.ts | 1 + .../core/src/hooks/useFacetWrapMemo.spec.tsx | 179 ++++++++++++++++++ .../core/src/hooks/useFacetWrapMemo.ts | 36 ++++ 3 files changed, 216 insertions(+) create mode 100644 packages/@react-facet/core/src/hooks/useFacetWrapMemo.spec.tsx create mode 100644 packages/@react-facet/core/src/hooks/useFacetWrapMemo.ts diff --git a/packages/@react-facet/core/src/hooks/index.ts b/packages/@react-facet/core/src/hooks/index.ts index 6dfd13a0..841e9b04 100644 --- a/packages/@react-facet/core/src/hooks/index.ts +++ b/packages/@react-facet/core/src/hooks/index.ts @@ -9,3 +9,4 @@ export * from './useFacetReducer' export * from './useFacetState' export * from './useFacetUnwrap' export * from './useFacetWrap' +export * from './useFacetWrapMemo' diff --git a/packages/@react-facet/core/src/hooks/useFacetWrapMemo.spec.tsx b/packages/@react-facet/core/src/hooks/useFacetWrapMemo.spec.tsx new file mode 100644 index 00000000..b780e9f9 --- /dev/null +++ b/packages/@react-facet/core/src/hooks/useFacetWrapMemo.spec.tsx @@ -0,0 +1,179 @@ +import React from 'react' +import { render } from '@react-facet/dom-fiber-testing-library' +import { useFacetWrapMemo } from './useFacetWrapMemo' +import { useFacetEffect } from './useFacetEffect' +import { useFacetMap } from './useFacetMap' +import { createFacet } from '../facet' +import { FacetProp, Value } from '..' + +it('wraps a value, updating the facet when it changes', () => { + const mock = jest.fn() + + const ComponentWithFacetEffect: React.FC<{ value: string }> = ({ value }) => { + const facetifiedValue = useFacetWrapMemo(value) + useFacetEffect( + (value) => { + mock(value) + }, + [], + [facetifiedValue], + ) + return + } + + const dom = render() + expect(mock).toHaveBeenCalledTimes(1) + expect(mock).toHaveBeenCalledWith('value') + mock.mockClear() + dom.rerender() + expect(mock).toHaveBeenCalledTimes(1) + expect(mock).toHaveBeenCalledWith('changed') +}) + +it('wraps a value, with the default equality check (preventing unnecessary updates)', () => { + const mock = jest.fn() + + const ComponentWithFacetEffect: React.FC<{ value: string }> = ({ value }) => { + const facetifiedValue = useFacetWrapMemo(value) + useFacetEffect( + (value) => { + mock(value) + }, + [], + [facetifiedValue], + ) + return + } + + const dom = render() + expect(mock).toHaveBeenCalledTimes(1) + expect(mock).toHaveBeenCalledWith('value') + mock.mockClear() + dom.rerender() + expect(mock).toHaveBeenCalledTimes(0) +}) + +it('forwards a facet', () => { + const demoFacet = createFacet({ initialValue: 'value' }) + const mock = jest.fn() + + const ComponentWithFacetEffect: React.FC = () => { + const facetifiedValue = useFacetWrapMemo(demoFacet) + useFacetEffect( + (value) => { + mock(value) + }, + [], + [facetifiedValue], + ) + return + } + + render() + expect(mock).toHaveBeenCalledTimes(1) + expect(mock).toHaveBeenCalledWith('value') + mock.mockClear() + demoFacet.set('changed') + expect(mock).toHaveBeenCalledTimes(1) + expect(mock).toHaveBeenCalledWith('changed') +}) + +it('updates correctly if the facet instance change (ex: via a useFacetMap)', () => { + const demoFacet = createFacet({ initialValue: 'value' }) + + const TestingComponent: React.FC<{ concat: string }> = ({ concat }) => { + // When a dependency of useFacetMap change (concat) a new facet is created + // And when we pass that to the useFacetWrapMemo we need to make sure that it gets propagated + return ( + + `${value} ${concat}`, [concat], [demoFacet]))} /> + + ) + } + + const { container, rerender } = render() + expect(container).toHaveTextContent('value 123') + + rerender() + expect(container).toHaveTextContent('value 456') +}) + +describe('regressions', () => { + it('should not immediately call a function when wrapped', () => { + const mock = jest.fn() + + const TestingComponent = () => { + const handlerFacet = useFacetWrapMemo(mock) + useFacetEffect(() => undefined, [], [handlerFacet]) + return null + } + + render() + + expect(mock).toHaveBeenCalledTimes(0) + }) +}) + +const testEffectUpdatesOnStaticValue = (value: FacetProp, expectUpdates: boolean) => { + const mock = jest.fn() + + const TestingComponent = () => { + const undefinedFacet = useFacetWrapMemo(value) + useFacetEffect( + () => { + mock() + }, + [], + [undefinedFacet], + ) + return null + } + const { rerender } = render() + expect(mock).toHaveBeenCalledTimes(1) + + rerender() + if (expectUpdates) { + expect(mock).toHaveBeenCalledTimes(2) + } else { + expect(mock).toHaveBeenCalledTimes(1) + } + rerender() + if (expectUpdates) { + expect(mock).toHaveBeenCalledTimes(3) + } else { + expect(mock).toHaveBeenCalledTimes(1) + } +} + +describe('does not trigger effect updates on re-renders for the same value', () => { + it('string', () => { + testEffectUpdatesOnStaticValue('', false) + testEffectUpdatesOnStaticValue('test', false) + }) + it('boolean', () => { + testEffectUpdatesOnStaticValue(false, false) + testEffectUpdatesOnStaticValue(true, false) + }) + it('number', () => { + testEffectUpdatesOnStaticValue(0, false) + testEffectUpdatesOnStaticValue(1, false) + }) + it('undefined', () => { + testEffectUpdatesOnStaticValue(undefined, false) + }) + it('null', () => { + testEffectUpdatesOnStaticValue(null, false) + }) + it('empty array', () => { + testEffectUpdatesOnStaticValue([], false) + }) + it('filled array', () => { + testEffectUpdatesOnStaticValue(['string', 1], false) + }) + it('empty object', () => { + testEffectUpdatesOnStaticValue({}, false) + }) + it('filled object', () => { + testEffectUpdatesOnStaticValue({ key: 'value' }, false) + }) +}) diff --git a/packages/@react-facet/core/src/hooks/useFacetWrapMemo.ts b/packages/@react-facet/core/src/hooks/useFacetWrapMemo.ts new file mode 100644 index 00000000..5a6e75d2 --- /dev/null +++ b/packages/@react-facet/core/src/hooks/useFacetWrapMemo.ts @@ -0,0 +1,36 @@ +import { useEffect, useMemo } from 'react' +import { defaultEqualityCheck } from '../equalityChecks' +import { createFacet } from '../facet' +import { Facet, FacetProp, isFacet, Value, EqualityCheck } from '../types' + +/** + * Wraps a FacetProp as a Facet, ensuring the resulting Facet is memoized (even if the wrapped value changes) + * @param value + */ +export function useFacetWrapMemo( + prop: FacetProp, + equalityCheck: EqualityCheck = defaultEqualityCheck, +): Facet { + /** + * Inline facet that only created if the provided prop is not a facet. + * + * We ignore the dependency change of `prop` since we want to update the inline + * facet value via the setter below. + */ + const inlineFacet = useMemo( + () => createFacet({ initialValue: prop as T, equalityCheck }), + // eslint-disable-next-line react-hooks/exhaustive-deps + [], + ) + + useEffect(() => { + const is = isFacet(prop) + if (is) { + return prop.observe(inlineFacet.set) + } + + inlineFacet.set(prop as T) + }, [prop, inlineFacet]) + + return inlineFacet +} From 9cae8c23532a55ba34a16e104f8917f1c9194c38 Mon Sep 17 00:00:00 2001 From: Paulo Date: Mon, 8 Jan 2024 15:17:03 +0100 Subject: [PATCH 64/88] Use useEffect instead of useLayoutEffect The former would "block the browser from painting", which is unnecessary for these hooks. More info: https://react.dev/reference/react/useLayoutEffect#examples --- packages/@react-facet/core/src/hooks/useFacetCallback.ts | 4 ++-- packages/@react-facet/core/src/hooks/useFacetUnwrap.ts | 4 ++-- packages/@react-facet/dom-components/src/useSetProp.ts | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/@react-facet/core/src/hooks/useFacetCallback.ts b/packages/@react-facet/core/src/hooks/useFacetCallback.ts index 9b1d2a6a..e797bd40 100644 --- a/packages/@react-facet/core/src/hooks/useFacetCallback.ts +++ b/packages/@react-facet/core/src/hooks/useFacetCallback.ts @@ -1,4 +1,4 @@ -import { useCallback, useLayoutEffect, useRef } from 'react' +import { useCallback, useEffect, useRef } from 'react' import { Facet, NO_VALUE, ExtractFacetValues, NoValue } from '../types' /** @@ -43,7 +43,7 @@ export function useFacetCallback[], T extends [...Y] facets: T, defaultReturnValue?: M, ): (...args: K) => M | NoValue { - useLayoutEffect(() => { + useEffect(() => { // Make sure to start subscriptions, even though we are getting the values directly from them // We read the values using `.get` to make sure they are always up-to-date const unsubscribes = facets.map((facet) => facet.observe(() => {})) diff --git a/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts b/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts index 8587f57b..9e7faba9 100644 --- a/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts +++ b/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts @@ -1,4 +1,4 @@ -import { useLayoutEffect, useState } from 'react' +import { useEffect, useState } from 'react' import { FacetProp, isFacet, Value, NoValue, EqualityCheck, NO_VALUE } from '../types' import { defaultEqualityCheck } from '../equalityChecks' @@ -20,7 +20,7 @@ export function useFacetUnwrap( } }) - useLayoutEffect(() => { + useEffect(() => { if (!isFacet(prop)) return // Initialize the equalityCheck diff --git a/packages/@react-facet/dom-components/src/useSetProp.ts b/packages/@react-facet/dom-components/src/useSetProp.ts index c93779f1..d6b5c2d6 100644 --- a/packages/@react-facet/dom-components/src/useSetProp.ts +++ b/packages/@react-facet/dom-components/src/useSetProp.ts @@ -1,10 +1,10 @@ -import { useLayoutEffect } from 'react' +import { useEffect } from 'react' import { FacetProp, isFacet } from '@react-facet/core' type Scalar = string | number | boolean | undefined export function useSetProp(prop: FacetProp | undefined, update: (value: T | undefined) => void) { - useLayoutEffect(() => { + useEffect(() => { if (isFacet(prop)) { return prop.observe(update) } else { From 110857834f6d3d7b0e970fb3ab0f69162c6d7bc2 Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 9 Jan 2024 15:45:47 +0100 Subject: [PATCH 65/88] Fix for memo wrapping a facet with NO_VALUE --- .../core/src/hooks/useFacetWrapMemo.spec.tsx | 28 ++++++++++++++++++- .../core/src/hooks/useFacetWrapMemo.ts | 2 +- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/packages/@react-facet/core/src/hooks/useFacetWrapMemo.spec.tsx b/packages/@react-facet/core/src/hooks/useFacetWrapMemo.spec.tsx index b780e9f9..8325bda3 100644 --- a/packages/@react-facet/core/src/hooks/useFacetWrapMemo.spec.tsx +++ b/packages/@react-facet/core/src/hooks/useFacetWrapMemo.spec.tsx @@ -4,7 +4,7 @@ import { useFacetWrapMemo } from './useFacetWrapMemo' import { useFacetEffect } from './useFacetEffect' import { useFacetMap } from './useFacetMap' import { createFacet } from '../facet' -import { FacetProp, Value } from '..' +import { FacetProp, NO_VALUE, Value } from '../types' it('wraps a value, updating the facet when it changes', () => { const mock = jest.fn() @@ -78,6 +78,32 @@ it('forwards a facet', () => { expect(mock).toHaveBeenCalledWith('changed') }) +it('forwards a facet with NO_VAUE', () => { + const demoFacet = createFacet({ initialValue: NO_VALUE }) + const mock = jest.fn() + + const ComponentWithFacetEffect: React.FC = () => { + const facetifiedValue = useFacetWrapMemo(demoFacet) + useFacetEffect( + (value) => { + mock(value) + }, + [], + [facetifiedValue], + ) + return + } + + // On first render, it should not call the effect, as the wrapped facet has no value + render() + expect(mock).not.toHaveBeenCalled() + + mock.mockClear() + demoFacet.set('changed') + expect(mock).toHaveBeenCalledTimes(1) + expect(mock).toHaveBeenCalledWith('changed') +}) + it('updates correctly if the facet instance change (ex: via a useFacetMap)', () => { const demoFacet = createFacet({ initialValue: 'value' }) diff --git a/packages/@react-facet/core/src/hooks/useFacetWrapMemo.ts b/packages/@react-facet/core/src/hooks/useFacetWrapMemo.ts index 5a6e75d2..544efcda 100644 --- a/packages/@react-facet/core/src/hooks/useFacetWrapMemo.ts +++ b/packages/@react-facet/core/src/hooks/useFacetWrapMemo.ts @@ -18,7 +18,7 @@ export function useFacetWrapMemo( * facet value via the setter below. */ const inlineFacet = useMemo( - () => createFacet({ initialValue: prop as T, equalityCheck }), + () => createFacet({ initialValue: isFacet(prop) ? prop.get() : prop, equalityCheck }), // eslint-disable-next-line react-hooks/exhaustive-deps [], ) From 5904ab8301080adf461fc4c992e8fd83f54fb8b4 Mon Sep 17 00:00:00 2001 From: Marlon Huber-Smith Date: Thu, 11 Jan 2024 10:25:22 +0100 Subject: [PATCH 66/88] Fix incorrect initial values with useFacetMemo. --- packages/@react-facet/core/src/components/Map.tsx | 4 ++-- packages/@react-facet/core/src/components/Mount.tsx | 4 ++-- .../@react-facet/core/src/mapFacets/mapFacetArrayCached.ts | 4 +++- .../@react-facet/core/src/mapFacets/mapFacetSingleCached.ts | 3 ++- packages/@react-facet/dom-fiber/package.json | 3 ++- packages/@react-facet/dom-fiber/src/index.ts | 3 +++ 6 files changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/@react-facet/core/src/components/Map.tsx b/packages/@react-facet/core/src/components/Map.tsx index 412b017c..91808881 100644 --- a/packages/@react-facet/core/src/components/Map.tsx +++ b/packages/@react-facet/core/src/components/Map.tsx @@ -1,4 +1,4 @@ -import React, { ReactElement, useDeferredValue } from 'react' +import React, { ReactElement } from 'react' import { useFacetMemo } from '../hooks/useFacetMemo' import { useFacetUnwrap } from '../hooks/useFacetUnwrap' import { useFacetMap } from '../hooks/useFacetMap' @@ -12,7 +12,7 @@ export type MapProps = { export const Map = ({ array, children, equalityCheck }: MapProps) => { // When mounting lists, we always want to defer - const countValue = useDeferredValue(useFacetUnwrap(useFacetMap((array) => array.length, [], [array]))) + const countValue = useFacetUnwrap(useFacetMap((array) => array.length, [], [array])) return ( <> diff --git a/packages/@react-facet/core/src/components/Mount.tsx b/packages/@react-facet/core/src/components/Mount.tsx index 8b9f25bb..ffcbab87 100644 --- a/packages/@react-facet/core/src/components/Mount.tsx +++ b/packages/@react-facet/core/src/components/Mount.tsx @@ -1,4 +1,4 @@ -import { ReactElement, useDeferredValue } from 'react' +import { ReactElement } from 'react' import { useFacetUnwrap } from '../hooks/useFacetUnwrap' import { Facet } from '../types' @@ -9,6 +9,6 @@ type MountProps = { } export const Mount = ({ when, children, condition = true }: MountProps) => { - const whenValue = useDeferredValue(useFacetUnwrap(when)) + const whenValue = useFacetUnwrap(when) return whenValue === condition ? children : null } diff --git a/packages/@react-facet/core/src/mapFacets/mapFacetArrayCached.ts b/packages/@react-facet/core/src/mapFacets/mapFacetArrayCached.ts index 4ef8eaab..5f4662dd 100644 --- a/packages/@react-facet/core/src/mapFacets/mapFacetArrayCached.ts +++ b/packages/@react-facet/core/src/mapFacets/mapFacetArrayCached.ts @@ -7,9 +7,11 @@ export function mapFacetArrayCached( fn: (...value: unknown[]) => M | NoValue, equalityCheck?: EqualityCheck, ): Facet { + const initialValues = facets.map((facet) => facet.get()) + const hasAllValues = initialValues.reduce((prev, curr) => prev && curr !== NO_VALUE, true) return createFacet({ // pass the equalityCheck to the mapIntoObserveArray to prevent even triggering the observable startSubscription: mapIntoObserveArray(facets, fn, equalityCheck), - initialValue: NO_VALUE, + initialValue: hasAllValues ? fn(...initialValues) : NO_VALUE, }) } diff --git a/packages/@react-facet/core/src/mapFacets/mapFacetSingleCached.ts b/packages/@react-facet/core/src/mapFacets/mapFacetSingleCached.ts index 15bc8673..9d88cc15 100644 --- a/packages/@react-facet/core/src/mapFacets/mapFacetSingleCached.ts +++ b/packages/@react-facet/core/src/mapFacets/mapFacetSingleCached.ts @@ -7,9 +7,10 @@ export function mapFacetSingleCached( fn: (value: T) => M | NoValue, equalityCheck?: EqualityCheck, ): Facet { + const initialValue = facets.get() return createFacet({ // pass the equalityCheck to the mapIntoObserveSingle to prevent even triggering the observable startSubscription: mapIntoObserveSingle(facets, fn, equalityCheck), - initialValue: NO_VALUE, + initialValue: initialValue !== NO_VALUE ? fn(initialValue) : NO_VALUE, }) } diff --git a/packages/@react-facet/dom-fiber/package.json b/packages/@react-facet/dom-fiber/package.json index 9ee4ee27..596bac34 100644 --- a/packages/@react-facet/dom-fiber/package.json +++ b/packages/@react-facet/dom-fiber/package.json @@ -41,7 +41,8 @@ "prepublish": "yarn build" }, "dependencies": { - "react-reconciler": "^0.28.0" + "react-reconciler": "^0.28.0", + "scheduler": "^0.22.0" }, "peerDependencies": { "@react-facet/core": "0.5.3", diff --git a/packages/@react-facet/dom-fiber/src/index.ts b/packages/@react-facet/dom-fiber/src/index.ts index 29f4da4d..5d2a9646 100644 --- a/packages/@react-facet/dom-fiber/src/index.ts +++ b/packages/@react-facet/dom-fiber/src/index.ts @@ -5,6 +5,9 @@ export * from './types' export * from './createPortal' export * from './createFiberRoot' export * from './createReconciler' +import scheduler from 'scheduler' + +// scheduler.unstable_forceFrameRate(120) export type RootType = { render(children: ReactElement): void From 1ebf53565cff0dd2e840b985b82b2644e2df6449 Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 16 Jan 2024 10:38:03 +0100 Subject: [PATCH 67/88] Update unit tests for the mapFacets --- .../core/src/mapFacets/mapFacets.spec.ts | 81 ++++++++++++++++++- 1 file changed, 77 insertions(+), 4 deletions(-) diff --git a/packages/@react-facet/core/src/mapFacets/mapFacets.spec.ts b/packages/@react-facet/core/src/mapFacets/mapFacets.spec.ts index be78268e..e418da5b 100644 --- a/packages/@react-facet/core/src/mapFacets/mapFacets.spec.ts +++ b/packages/@react-facet/core/src/mapFacets/mapFacets.spec.ts @@ -2,49 +2,122 @@ import { createFacet } from '../facet' import { NO_VALUE } from '../types' import { mapFacetsCached, mapFacetsLightweight } from './mapFacets' -describe('mapFacetsCached', () => { +describe('mapFacetsCached WITHOUT an initial value', () => { it('caches calls to the mapFunction', () => { const mapFunction = jest.fn().mockReturnValue('dummy') - const sourceFacet = createFacet({ initialValue: 'initial value' }) + const sourceFacet = createFacet({ initialValue: NO_VALUE }) const mapFacet = mapFacetsCached([sourceFacet], mapFunction) // observe twice mapFacet.observe(() => {}) mapFacet.observe(() => {}) + sourceFacet.set('value') + // check that the map was called just once expect(mapFunction).toHaveBeenCalledTimes(1) }) it('caches calls to the mapFunction with equalityCheck', () => { const mapFunction = jest.fn().mockReturnValue('dummy') - const sourceFacet = createFacet({ initialValue: 'initial value' }) + const sourceFacet = createFacet({ initialValue: NO_VALUE }) const mapFacet = mapFacetsCached([sourceFacet], mapFunction, () => () => false) // observe twice mapFacet.observe(() => {}) mapFacet.observe(() => {}) + sourceFacet.set('value') + // check that the map was called just once expect(mapFunction).toHaveBeenCalledTimes(1) }) it('gets NO_VALUE as a value from a single source before any subscription', () => { const mapFunction = jest.fn().mockReturnValue('dummy') - const sourceFacet = createFacet({ initialValue: 'initial value' }) + const sourceFacet = createFacet({ initialValue: NO_VALUE }) const mapFacet = mapFacetsCached([sourceFacet], mapFunction, () => () => false) expect(mapFacet.get()).toBe(NO_VALUE) }) it('gets NO_VALUE as a value from multiple sources before any subscription', () => { + const mapFunction = jest.fn().mockReturnValue('dummy') + const sourceAFacet = createFacet({ initialValue: NO_VALUE }) + const sourceBFacet = createFacet({ initialValue: NO_VALUE }) + const mapFacet = mapFacetsCached([sourceAFacet, sourceBFacet], mapFunction, () => () => false) + + expect(mapFacet.get()).toBe(NO_VALUE) + }) +}) + +describe('mapFacetsCached WITH an initial value', () => { + it('calls the map function ahead of subscription to make sure we have the initial value', () => { + const mapFunction = jest.fn().mockReturnValue('dummy') + const sourceFacet = createFacet({ initialValue: 'initial value' }) + mapFacetsCached([sourceFacet], mapFunction) + + // check that the map was called just once (to map the readily available initial value) + expect(mapFunction).toHaveBeenCalledTimes(1) + }) + + it('gets the initial value mapped as a value from a single source before any subscription', () => { + const mapFunction = jest.fn().mockReturnValue('dummy') + const sourceFacet = createFacet({ initialValue: 'initial value' }) + const mapFacet = mapFacetsCached([sourceFacet], mapFunction, () => () => false) + + expect(mapFacet.get()).toBe('dummy') + }) + + it('gets the initial value mapped as a value from multiple sources before any subscription', () => { const mapFunction = jest.fn().mockReturnValue('dummy') const sourceAFacet = createFacet({ initialValue: 'initial value' }) const sourceBFacet = createFacet({ initialValue: 'initial value' }) const mapFacet = mapFacetsCached([sourceAFacet, sourceBFacet], mapFunction, () => () => false) + expect(mapFacet.get()).toBe('dummy') + }) + + it('gets NO_VALUE as the initial value of the map, if any of multiple sources has NO_VALUE', () => { + const mapFunction = jest.fn().mockReturnValue('dummy') + const sourceAFacet = createFacet({ initialValue: 'initial value' }) + const sourceBFacet = createFacet({ initialValue: NO_VALUE }) + const mapFacet = mapFacetsCached([sourceAFacet, sourceBFacet], mapFunction, () => () => false) + expect(mapFacet.get()).toBe(NO_VALUE) }) + + it('caches calls to the mapFunction', () => { + const mapFunction = jest.fn().mockReturnValue('dummy') + const sourceFacet = createFacet({ initialValue: 'initial value' }) + const mapFacet = mapFacetsCached([sourceFacet], mapFunction) + + // ignore the initial call (not triggered by observing) + mapFunction.mockClear() + + // observe twice + mapFacet.observe(() => {}) + mapFacet.observe(() => {}) + + // check that the map was called just once + expect(mapFunction).toHaveBeenCalledTimes(1) + }) + + it('caches calls to the mapFunction with equalityCheck', () => { + const mapFunction = jest.fn().mockReturnValue('dummy') + const sourceFacet = createFacet({ initialValue: 'initial value' }) + const mapFacet = mapFacetsCached([sourceFacet], mapFunction, () => () => false) + + // ignore the initial call (not triggered by observing) + mapFunction.mockClear() + + // observe twice + mapFacet.observe(() => {}) + mapFacet.observe(() => {}) + + // check that the map was called just once + expect(mapFunction).toHaveBeenCalledTimes(1) + }) }) describe('mapFacetsLightweight', () => { From 66bc36336322970c16f663eea0259dd53970621b Mon Sep 17 00:00:00 2001 From: Marlon Huber-Smith Date: Wed, 17 Jan 2024 10:34:20 +0100 Subject: [PATCH 68/88] Add skipped test for future improvement to createFacet. --- .../core/src/facet/createFacet.spec.ts | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/packages/@react-facet/core/src/facet/createFacet.spec.ts b/packages/@react-facet/core/src/facet/createFacet.spec.ts index 441da769..4f14db16 100644 --- a/packages/@react-facet/core/src/facet/createFacet.spec.ts +++ b/packages/@react-facet/core/src/facet/createFacet.spec.ts @@ -235,3 +235,24 @@ describe('setWithCallback', () => { expect(listenerMock).not.toHaveBeenCalled() }) }) + +describe('regressions', () => { + it.skip('only calls initial observer once for a facet with an initialValue and a startSubscription', () => { + const value = 'test-value' + const initialValue = 'initial-value' + const cleanup = jest.fn() + const startSubscription = jest.fn().mockImplementation((update) => { + update(value) + return cleanup + }) + + const mock = createFacet({ startSubscription, initialValue }) + + const listener = jest.fn() + + mock.observe(listener) + + expect(listener).toHaveBeenCalledTimes(1) + expect(listener).toHaveBeenLastCalledWith(value) + }) +}) From 0efae313376c10cb5369c939788f6896d1a3daf0 Mon Sep 17 00:00:00 2001 From: Marlon Huber-Smith Date: Wed, 17 Jan 2024 10:39:30 +0100 Subject: [PATCH 69/88] Improve and fix unit tests. --- packages/@react-facet/core/src/components/Map.spec.tsx | 4 +++- packages/@react-facet/core/src/hooks/useFacetMemo.spec.tsx | 7 ++++++- packages/@react-facet/core/src/mapFacets/mapFacets.spec.ts | 6 ++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/@react-facet/core/src/components/Map.spec.tsx b/packages/@react-facet/core/src/components/Map.spec.tsx index 81f410d6..dcc466a1 100644 --- a/packages/@react-facet/core/src/components/Map.spec.tsx +++ b/packages/@react-facet/core/src/components/Map.spec.tsx @@ -136,7 +136,9 @@ it('updates only items that have changed', () => { render(scenario) - expect(mock).toHaveBeenCalledTimes(5) + // This would ideally only be called 5 times. + // There is a future fix planned: https://github.com/Mojang/ore-ui/commit/66bc36336322970c16f663eea0259dd53970621b + expect(mock).toHaveBeenCalledTimes(10) mock.mockClear() diff --git a/packages/@react-facet/core/src/hooks/useFacetMemo.spec.tsx b/packages/@react-facet/core/src/hooks/useFacetMemo.spec.tsx index ec378acb..9427f632 100644 --- a/packages/@react-facet/core/src/hooks/useFacetMemo.spec.tsx +++ b/packages/@react-facet/core/src/hooks/useFacetMemo.spec.tsx @@ -17,13 +17,18 @@ it('can cache the map for multiple consumers', () => {

+ +
) } render() - expect(mapFn).toHaveBeenCalledTimes(1) + // Because valueFacet has a value, we expect this to be called twice: + // - To get the initial value on mount + // - On the first subscription + expect(mapFn).toHaveBeenCalledTimes(2) }) describe('multiple dependencies', () => { diff --git a/packages/@react-facet/core/src/mapFacets/mapFacets.spec.ts b/packages/@react-facet/core/src/mapFacets/mapFacets.spec.ts index e418da5b..2cf2ad84 100644 --- a/packages/@react-facet/core/src/mapFacets/mapFacets.spec.ts +++ b/packages/@react-facet/core/src/mapFacets/mapFacets.spec.ts @@ -8,6 +8,9 @@ describe('mapFacetsCached WITHOUT an initial value', () => { const sourceFacet = createFacet({ initialValue: NO_VALUE }) const mapFacet = mapFacetsCached([sourceFacet], mapFunction) + // sourceFacet has no value, so mapFunction can't be called on setup + expect(mapFunction).not.toHaveBeenCalled() + // observe twice mapFacet.observe(() => {}) mapFacet.observe(() => {}) @@ -23,6 +26,9 @@ describe('mapFacetsCached WITHOUT an initial value', () => { const sourceFacet = createFacet({ initialValue: NO_VALUE }) const mapFacet = mapFacetsCached([sourceFacet], mapFunction, () => () => false) + // sourceFacet has no value, so mapFunction can't be called on setup + expect(mapFunction).not.toHaveBeenCalled() + // observe twice mapFacet.observe(() => {}) mapFacet.observe(() => {}) From 1a98134b31ae0fe75eb01d95efedd1f71b246cd2 Mon Sep 17 00:00:00 2001 From: Marlon Huber-Smith Date: Wed, 17 Jan 2024 10:39:43 +0100 Subject: [PATCH 70/88] Remove scheduler from dom-fiber package. --- packages/@react-facet/dom-fiber/package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/@react-facet/dom-fiber/package.json b/packages/@react-facet/dom-fiber/package.json index 596bac34..9ee4ee27 100644 --- a/packages/@react-facet/dom-fiber/package.json +++ b/packages/@react-facet/dom-fiber/package.json @@ -41,8 +41,7 @@ "prepublish": "yarn build" }, "dependencies": { - "react-reconciler": "^0.28.0", - "scheduler": "^0.22.0" + "react-reconciler": "^0.28.0" }, "peerDependencies": { "@react-facet/core": "0.5.3", From 1069c89195feb01aa58c2ca201d03356ac4678b4 Mon Sep 17 00:00:00 2001 From: Marlon Huber-Smith Date: Wed, 17 Jan 2024 10:45:56 +0100 Subject: [PATCH 71/88] Remove reference to scheduler. --- packages/@react-facet/dom-fiber/src/index.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/@react-facet/dom-fiber/src/index.ts b/packages/@react-facet/dom-fiber/src/index.ts index 5d2a9646..29f4da4d 100644 --- a/packages/@react-facet/dom-fiber/src/index.ts +++ b/packages/@react-facet/dom-fiber/src/index.ts @@ -5,9 +5,6 @@ export * from './types' export * from './createPortal' export * from './createFiberRoot' export * from './createReconciler' -import scheduler from 'scheduler' - -// scheduler.unstable_forceFrameRate(120) export type RootType = { render(children: ReactElement): void From e22975dfad87b51110a3d4847bb988292e9d6313 Mon Sep 17 00:00:00 2001 From: Paulo Ragonha Date: Wed, 10 Apr 2024 12:41:39 -0300 Subject: [PATCH 72/88] Fix asPromise race condition --- .../core/src/helpers/asPromise.spec.ts | 24 ++++++++++-- .../core/src/helpers/asPromise.ts | 38 +++++++++++++------ 2 files changed, 48 insertions(+), 14 deletions(-) diff --git a/packages/@react-facet/core/src/helpers/asPromise.spec.ts b/packages/@react-facet/core/src/helpers/asPromise.spec.ts index 1cb59236..871df586 100644 --- a/packages/@react-facet/core/src/helpers/asPromise.spec.ts +++ b/packages/@react-facet/core/src/helpers/asPromise.spec.ts @@ -1,10 +1,28 @@ +import { NO_VALUE } from '..' import { createFacet } from '../facet' import { asPromise } from './asPromise' -it('resolves facets with their values if available', async () => { +it('immediately resolves facets with their values if available', async () => { const facet = createFacet({ initialValue: 'testing' }) - const value = await asPromise(facet) + const value = await asPromise(facet).promise expect(value).toEqual('testing') }) -it.todo('waits for the facet to have a value, making sure to not hold subscriptions') +it('waits for the facet to have a value, making sure to not hold subscriptions', async () => { + const cleanupSubscription = jest.fn() + const startSubscription = jest.fn().mockImplementation((update) => { + update('testing') + return cleanupSubscription + }) + + const facet = createFacet({ + initialValue: NO_VALUE, + startSubscription, + }) + + const value = await asPromise(facet).promise + expect(value).toEqual('testing') + + expect(startSubscription).toHaveBeenCalledTimes(1) + expect(cleanupSubscription).toHaveBeenCalledTimes(1) +}) diff --git a/packages/@react-facet/core/src/helpers/asPromise.ts b/packages/@react-facet/core/src/helpers/asPromise.ts index 3554348a..f8cf1850 100644 --- a/packages/@react-facet/core/src/helpers/asPromise.ts +++ b/packages/@react-facet/core/src/helpers/asPromise.ts @@ -1,21 +1,37 @@ import { Facet, NO_VALUE } from '../types' /** - * Takes a Facet as returns a Promise that will resolve with its first value + * Takes a Facet and returns a Promise that will resolve with its first value * * @param facet * @returns Promise */ -export const asPromise = (facet: Facet) => - new Promise((resolve) => { - const value = facet.get() - if (value !== NO_VALUE) { - resolve(value) - return +export const asPromise = (facet: Facet) => { + let resolve: (value: T | PromiseLike) => void = noop + + const promise = new Promise((_resolve) => { + resolve = _resolve + }) + + const value = facet.get() + if (value !== NO_VALUE) { + resolve(value) + + return { + promise, + cancel: noop, } + } - const cleanup = facet.observe((value: T) => { - resolve(value) + const cleanup = facet.observe(resolve) + + return { + promise: promise.then((value) => { cleanup() - }) - }) + return value + }), + cancel: cleanup, + } +} + +const noop = () => {} From d9cc6ee2fbf2d6e1a39add7a7647cc363f30d8a4 Mon Sep 17 00:00:00 2001 From: Marlon Huber-Smith Date: Thu, 5 Sep 2024 16:03:55 +0200 Subject: [PATCH 73/88] Transitions converted and working. --- examples/benchmarking/package.json | 1 + packages/@react-facet/core/package.json | 4 +- .../@react-facet/dom-components/package.json | 2 +- .../dom-fiber-testing-library/package.json | 2 +- packages/@react-facet/dom-fiber/package.json | 4 +- .../dom-fiber/src/setupHostConfig.ts | 3 +- packages/@react-facet/dom-fiber/src/types.ts | 20 +- .../@react-facet/shared-facet/package.json | 4 +- .../shared-facet/src/index.spec.tsx | 4 +- packages/@react-facet/spring/package.json | 4 +- tsconfig.json | 2 +- yarn.lock | 6744 ++++++++--------- 12 files changed, 3164 insertions(+), 3630 deletions(-) diff --git a/examples/benchmarking/package.json b/examples/benchmarking/package.json index b87c4a9b..57e8f167 100644 --- a/examples/benchmarking/package.json +++ b/examples/benchmarking/package.json @@ -21,6 +21,7 @@ "@types/fs-extra": "^9.0.12", "@types/puppeteer": "^5.4.4", "@types/ramda": "^0", + "@types/react-dom": "^18.2.0", "fs-extra": "^10.0.0", "html-webpack-plugin": "^5.3.2", "http-server": "^13.0.2", diff --git a/packages/@react-facet/core/package.json b/packages/@react-facet/core/package.json index 07c39d6e..cc7248c1 100644 --- a/packages/@react-facet/core/package.json +++ b/packages/@react-facet/core/package.json @@ -45,11 +45,11 @@ }, "devDependencies": { "@react-facet/dom-fiber-testing-library": "0.6.1", - "@types/react": "^18.0.8", + "@types/react": "^18.2.0", "@types/react-reconciler": "^0.28.0", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "18.2.0", + "react": "^18.2.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/packages/@react-facet/dom-components/package.json b/packages/@react-facet/dom-components/package.json index 80f07187..24792599 100644 --- a/packages/@react-facet/dom-components/package.json +++ b/packages/@react-facet/dom-components/package.json @@ -48,7 +48,7 @@ "@react-facet/core": "0.6.1", "@react-facet/dom-fiber-testing-library": "0.6.1", "@testing-library/jest-dom": "^5.16.5", - "@types/react": "^18.0.8", + "@types/react": "^18.2.0", "@types/rimraf": "^3", "cross-env": "^7.0.3", "react": "18.2.0", diff --git a/packages/@react-facet/dom-fiber-testing-library/package.json b/packages/@react-facet/dom-fiber-testing-library/package.json index 76463529..8ffda595 100644 --- a/packages/@react-facet/dom-fiber-testing-library/package.json +++ b/packages/@react-facet/dom-fiber-testing-library/package.json @@ -49,7 +49,7 @@ }, "devDependencies": { "@react-facet/dom-fiber": "0.6.1", - "react": "18.2.0", + "react": "^18.2.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/packages/@react-facet/dom-fiber/package.json b/packages/@react-facet/dom-fiber/package.json index 3962ab66..667c5b6f 100644 --- a/packages/@react-facet/dom-fiber/package.json +++ b/packages/@react-facet/dom-fiber/package.json @@ -50,11 +50,11 @@ "devDependencies": { "@react-facet/core": "0.6.1", "@react-facet/dom-fiber-testing-library": "workspace:^", - "@types/react": "^17.0.11", + "@types/react": "^18.2.0", "@types/react-reconciler": "^0.28.0", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "18.2.0", + "react": "^18.2.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts index 3607e33d..32e59f10 100644 --- a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts +++ b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts @@ -56,8 +56,7 @@ export const setupHostConfig = (): HostConfig< supportsMutation: true, supportsPersistence: false, supportsHydration: false, - - supportsMicrotask: true, + supportsMicrotasks: true, scheduleMicrotask: typeof queueMicrotask === 'function' ? queueMicrotask diff --git a/packages/@react-facet/dom-fiber/src/types.ts b/packages/@react-facet/dom-fiber/src/types.ts index af179c58..fc61d557 100644 --- a/packages/@react-facet/dom-fiber/src/types.ts +++ b/packages/@react-facet/dom-fiber/src/types.ts @@ -1,6 +1,6 @@ import { FacetProp, Unsubscribe } from '@react-facet/core' -import { FiberRoot, ReactPortal, Reconciler } from 'react-reconciler' -import { Key, MutableRefObject, ReactText, ReactFragment } from 'react' +import { FiberRoot, Reconciler } from 'react-reconciler' +import { MutableRefObject, ReactNode, ReactPortal } from 'react' export type FacetFiberRoot = FiberRoot @@ -104,7 +104,7 @@ export interface KeyboardEvents { interface StrictReactElement

{ type: T props: P - key: Key | null + key: string | null } /** @@ -112,7 +112,15 @@ interface StrictReactElement

{ * * It prevents passing a function as a Node. This allow us to catch accidental passing of facets as children. */ -export type StrictReactNode = StrictReactElement | ReactText | ReactFragment | ReactPortal | boolean | null | undefined +export type StrictReactNode = + | StrictReactElement + | string + | number + | Iterable + | ReactPortal + | boolean + | null + | undefined export type ElementProps = PointerEvents & FocusEvents & @@ -292,7 +300,7 @@ export type FastPathProps = ElementProps export type FastRectProps = ElementProps export type FastSpanProps = ElementProps export type FastSvgProps = ElementProps -export type FastForeignOBjectProps = ElementProps +export type FastForeignObjectProps = ElementProps export type FastTextProps = TextProps export type FastUseProps = ElementProps export type FastPolylineProps = ElementProps @@ -324,7 +332,7 @@ declare global { 'fast-span': FastSpanProps 'fast-text': FastTextProps 'fast-svg': FastSvgProps - 'fast-foreignObject': FastForeignOBjectProps + 'fast-foreignObject': FastForeignObjectProps 'fast-use': FastUseProps 'fast-polyline': FastPolylineProps 'fast-polygon': FastPolyGonProps diff --git a/packages/@react-facet/shared-facet/package.json b/packages/@react-facet/shared-facet/package.json index 7b9ad222..e50a7849 100644 --- a/packages/@react-facet/shared-facet/package.json +++ b/packages/@react-facet/shared-facet/package.json @@ -47,10 +47,10 @@ "devDependencies": { "@react-facet/core": "0.6.1", "@react-facet/dom-fiber-testing-library": "0.6.1", - "@types/react": "^18.0.8", + "@types/react": "^18.2.0", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "18.2.0", + "react": "^18.2.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/packages/@react-facet/shared-facet/src/index.spec.tsx b/packages/@react-facet/shared-facet/src/index.spec.tsx index 8eba1dd8..6eb88214 100644 --- a/packages/@react-facet/shared-facet/src/index.spec.tsx +++ b/packages/@react-facet/shared-facet/src/index.spec.tsx @@ -89,7 +89,7 @@ describe('rendering from facet', () => { describe('rendering from a selector', () => { const RenderingSelector = () => { const value = useFacetUnwrap(useSharedFacet(barSelector)) - return

{value}
+ return
{value !== NO_VALUE ? value : ''}
} it('constructs the root facet, and destructs it on unmount', () => { @@ -164,7 +164,7 @@ describe('rendering from a dynamic selector', () => { it('correctly renders using the selector parameter', () => { const RenderingSelector = ({ index }: { index: number }) => { const value = useFacetUnwrap(useSharedFacet(valueDynamicSelector(index))) - return
Item: {value}
+ return
Item: {value !== NO_VALUE ? value : ''}
} const { getByText, rerender } = render( diff --git a/packages/@react-facet/spring/package.json b/packages/@react-facet/spring/package.json index 26ef6b22..9e6151e2 100644 --- a/packages/@react-facet/spring/package.json +++ b/packages/@react-facet/spring/package.json @@ -47,10 +47,10 @@ "devDependencies": { "@react-facet/core": "0.6.1", "@testing-library/jest-dom": "^5.16.5", - "@types/react": "^18.0.8", + "@types/react": "^18.2.0", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "18.2.0", + "react": "^18.2.0", "react-dom": "^18.2.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" diff --git a/tsconfig.json b/tsconfig.json index d4840c40..b03ac3b7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,5 +19,5 @@ "sourceMap": true, "skipLibCheck": true }, - "exclude": ["node_modules"] + "exclude": ["node_modules", "**/dist/**"] } diff --git a/yarn.lock b/yarn.lock index ada9361c..9616d14b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6,19 +6,19 @@ __metadata: cacheKey: 8 "@adobe/css-tools@npm:^4.0.1": - version: 4.0.1 - resolution: "@adobe/css-tools@npm:4.0.1" - checksum: 80226e2229024c21da9ffa6b5cd4a34b931f071e06f45aba4777ade071d7a6c94605cf73b13718b0c4b34e8b124c65c607b82eaa53a326d3eb73d9682a04a593 + version: 4.4.0 + resolution: "@adobe/css-tools@npm:4.4.0" + checksum: 1f08fb49bf17fc7f2d1a86d3e739f29ca80063d28168307f1b0a962ef37501c5667271f6771966578897f2e94e43c4770fd802728a6e6495b812da54112d506a languageName: node linkType: hard -"@ampproject/remapping@npm:^2.1.0": - version: 2.2.0 - resolution: "@ampproject/remapping@npm:2.2.0" +"@ampproject/remapping@npm:^2.2.0": + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" dependencies: - "@jridgewell/gen-mapping": ^0.1.0 - "@jridgewell/trace-mapping": ^0.3.9 - checksum: d74d170d06468913921d72430259424b7e4c826b5a7d39ff839a29d547efb97dc577caa8ba3fb5cf023624e9af9d09651afc3d4112a45e2050328abc9b3a2292 + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.24 + checksum: d3ad7b89d973df059c4e8e6d7c972cbeb1bb2f18f002a3bd04ae0707da214cb06cc06929b65aa2313b9347463df2914772298bae8b1d7973f246bb3f2ab3e8f0 languageName: node linkType: hard @@ -31,35 +31,20 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.14.5, @babel/code-frame@npm:^7.15.8": - version: 7.15.8 - resolution: "@babel/code-frame@npm:7.15.8" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/code-frame@npm:7.24.7" dependencies: - "@babel/highlight": ^7.14.5 - checksum: d75950f0e0925b33ab5e870079134509c13bcdbf96c8bf4d0dea91606775bc044258c762104ab20882fda3b07cbff24176ed77dfb57af5a901bde33ddfe690bb - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/code-frame@npm:7.18.6" - dependencies: - "@babel/highlight": ^7.18.6 - checksum: 195e2be3172d7684bf95cff69ae3b7a15a9841ea9d27d3c843662d50cdd7d6470fd9c8e64be84d031117e4a4083486effba39f9aef6bbb2c89f7f21bcfba33ba - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.15.0": - version: 7.15.0 - resolution: "@babel/compat-data@npm:7.15.0" - checksum: 65088d87b14966dcdba397c799f312beb1e7a4dac178e7daa922a17ee9b65d8cfd9f35ff8352ccb6e20bb9a169df1171263ef5fd5967aa25d544ea3f62681993 + "@babel/highlight": ^7.24.7 + picocolors: ^1.0.0 + checksum: 830e62cd38775fdf84d612544251ce773d544a8e63df667728cc9e0126eeef14c6ebda79be0f0bc307e8318316b7f58c27ce86702e0a1f5c321d842eb38ffda4 languageName: node linkType: hard -"@babel/compat-data@npm:^7.20.5": - version: 7.20.10 - resolution: "@babel/compat-data@npm:7.20.10" - checksum: 6ed6c1bb6fc03c225d63b8611788cd976107d1692402b560ebffbf1fa53e63705f8625bb12e12d17ce7f7af34e61e1ca96c77858aac6f57010045271466200c0 +"@babel/compat-data@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/compat-data@npm:7.25.2" + checksum: b61bc9da7cfe249f19d08da00f4f0c20550cd9ad5bffcde787c2bf61a8a6fa5b66d92bbd89031f3a6e5495a799a2a2499f2947b6cc7964be41979377473ab132 languageName: node linkType: hard @@ -86,486 +71,214 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.1.0, @babel/core@npm:^7.7.5": - version: 7.15.8 - resolution: "@babel/core@npm:7.15.8" - dependencies: - "@babel/code-frame": ^7.15.8 - "@babel/generator": ^7.15.8 - "@babel/helper-compilation-targets": ^7.15.4 - "@babel/helper-module-transforms": ^7.15.8 - "@babel/helpers": ^7.15.4 - "@babel/parser": ^7.15.8 - "@babel/template": ^7.15.4 - "@babel/traverse": ^7.15.4 - "@babel/types": ^7.15.6 - convert-source-map: ^1.7.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.1.2 - semver: ^6.3.0 - source-map: ^0.5.0 - checksum: 61e5050580a2808344f23161c971e917fe711a546e3afa4d022be4ec5325f8bdf559cc9afd962e39ecc3643d9cdcbbac7abc7b8dd05330020475317564c8d290 - languageName: node - linkType: hard - -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": - version: 7.20.12 - resolution: "@babel/core@npm:7.20.12" +"@babel/core@npm:^7.1.0, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.23.9": + version: 7.25.2 + resolution: "@babel/core@npm:7.25.2" dependencies: - "@ampproject/remapping": ^2.1.0 - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.20.7 - "@babel/helper-compilation-targets": ^7.20.7 - "@babel/helper-module-transforms": ^7.20.11 - "@babel/helpers": ^7.20.7 - "@babel/parser": ^7.20.7 - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.20.12 - "@babel/types": ^7.20.7 - convert-source-map: ^1.7.0 + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.24.7 + "@babel/generator": ^7.25.0 + "@babel/helper-compilation-targets": ^7.25.2 + "@babel/helper-module-transforms": ^7.25.2 + "@babel/helpers": ^7.25.0 + "@babel/parser": ^7.25.0 + "@babel/template": ^7.25.0 + "@babel/traverse": ^7.25.2 + "@babel/types": ^7.25.2 + convert-source-map: ^2.0.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 - json5: ^2.2.2 - semver: ^6.3.0 - checksum: 62e6c3e2149a70b5c9729ef5f0d3e2e97e9dcde89fc039c8d8e3463d5d7ba9b29ee84d10faf79b61532ac1645aa62f2bd42338320617e6e3a8a4d8e2a27076e7 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: 9a1ef604a7eb62195f70f9370cec45472a08114e3934e3eaaedee8fd754edf0730e62347c7b4b5e67d743ce57b5bb8cf3b92459482ca94d06e06246ef021390a languageName: node linkType: hard -"@babel/generator@npm:^7.13.16, @babel/generator@npm:^7.15.4, @babel/generator@npm:^7.15.8": - version: 7.15.8 - resolution: "@babel/generator@npm:7.15.8" +"@babel/generator@npm:^7.13.16, @babel/generator@npm:^7.25.0, @babel/generator@npm:^7.7.2": + version: 7.25.0 + resolution: "@babel/generator@npm:7.25.0" dependencies: - "@babel/types": ^7.15.6 - jsesc: ^2.5.1 - source-map: ^0.5.0 - checksum: 3afc4d50280352125b6f1bca01fd1e4b272e1cf26248879fb38b74f8c67d7f9304c650e182623f9e7855d8154c6f05f66df81817a71de66e7dfe6670785eb344 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.20.7, @babel/generator@npm:^7.7.2": - version: 7.20.7 - resolution: "@babel/generator@npm:7.20.7" - dependencies: - "@babel/types": ^7.20.7 - "@jridgewell/gen-mapping": ^0.3.2 + "@babel/types": ^7.25.0 + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.25 jsesc: ^2.5.1 - checksum: 84b6983ffdb50c80c1c2e3f3c32617a7133d8effd1065f3e0f9bba188a7d54ab42a4dd5e42b61b843c65f9dd1aa870036ff0f848ebd42707aaa8a2b6d31d04f5 + checksum: bf25649dde4068bff8e387319bf820f2cb3b1af7b8c0cfba0bd90880656427c8bad96cd5cb6db7058d20cffe93149ee59da16567018ceaa21ecaefbf780a785c languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:^7.12.13, @babel/helper-annotate-as-pure@npm:^7.15.4": - version: 7.15.4 - resolution: "@babel/helper-annotate-as-pure@npm:7.15.4" +"@babel/helper-annotate-as-pure@npm:^7.12.13, @babel/helper-annotate-as-pure@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-annotate-as-pure@npm:7.24.7" dependencies: - "@babel/types": ^7.15.4 - checksum: 94e3b5714748cc4fe419c3e75656b1747f7e985d46a178dbd87e4a97f8f4d0ba94374c6768516cdc9c744d40202f1c2bb7930a7a153274c3d42edb196e945404 + "@babel/types": ^7.24.7 + checksum: 6178566099a6a0657db7a7fa601a54fb4731ca0b8614fbdccfd8e523c210c13963649bc8fdfd53ce7dd14d05e3dda2fb22dea5b30113c488b9eb1a906d60212e languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" +"@babel/helper-compilation-targets@npm:^7.13.16, @babel/helper-compilation-targets@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/helper-compilation-targets@npm:7.25.2" dependencies: - "@babel/types": ^7.18.6 - checksum: 88ccd15ced475ef2243fdd3b2916a29ea54c5db3cd0cfabf9d1d29ff6e63b7f7cd1c27264137d7a40ac2e978b9b9a542c332e78f40eb72abe737a7400788fc1b + "@babel/compat-data": ^7.25.2 + "@babel/helper-validator-option": ^7.24.8 + browserslist: ^4.23.1 + lru-cache: ^5.1.1 + semver: ^6.3.1 + checksum: aed33c5496cb9db4b5e2d44e26bf8bc474074cc7f7bb5ebe1d4a20fdeb362cb3ba9e1596ca18c7484bcd6e5c3a155ab975e420d520c0ae60df81f9de04d0fd16 languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.13.16, @babel/helper-compilation-targets@npm:^7.15.4": - version: 7.15.4 - resolution: "@babel/helper-compilation-targets@npm:7.15.4" +"@babel/helper-create-class-features-plugin@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/helper-create-class-features-plugin@npm:7.25.0" dependencies: - "@babel/compat-data": ^7.15.0 - "@babel/helper-validator-option": ^7.14.5 - browserslist: ^4.16.6 - semver: ^6.3.0 + "@babel/helper-annotate-as-pure": ^7.24.7 + "@babel/helper-member-expression-to-functions": ^7.24.8 + "@babel/helper-optimise-call-expression": ^7.24.7 + "@babel/helper-replace-supers": ^7.25.0 + "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 + "@babel/traverse": ^7.25.0 + semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: a2b9767d5658da90bd79170b4b0d2987930fb6708d48428619f9f4664c47e3f9409801b76c7603446404b453c67e54682cc86840cb1c29aa06c956533ebaf5ba + checksum: e986c1187e16837b71f12920bd77e672b4bc19ac6dfe30b9d9d515a311c5cc5a085a8e337ac8597b1cb7bd0efdbfcc66f69bf652786c9a022070f9b782deec0d languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/helper-compilation-targets@npm:7.20.7" +"@babel/helper-member-expression-to-functions@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/helper-member-expression-to-functions@npm:7.24.8" dependencies: - "@babel/compat-data": ^7.20.5 - "@babel/helper-validator-option": ^7.18.6 - browserslist: ^4.21.3 - lru-cache: ^5.1.1 - semver: ^6.3.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 8c32c873ba86e2e1805b30e0807abd07188acbe00ebb97576f0b09061cc65007f1312b589eccb4349c5a8c7f8bb9f2ab199d41da7030bf103d9f347dcd3a3cf4 + "@babel/traverse": ^7.24.8 + "@babel/types": ^7.24.8 + checksum: bf923d05d81b06857f4ca4fe9c528c9c447a58db5ea39595bb559eae2fce01a8266173db0fd6a2ec129d7bbbb9bb22f4e90008252f7c66b422c76630a878a4bc languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.15.4": - version: 7.15.4 - resolution: "@babel/helper-create-class-features-plugin@npm:7.15.4" +"@babel/helper-module-imports@npm:^7.13.12, @babel/helper-module-imports@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-module-imports@npm:7.24.7" dependencies: - "@babel/helper-annotate-as-pure": ^7.15.4 - "@babel/helper-function-name": ^7.15.4 - "@babel/helper-member-expression-to-functions": ^7.15.4 - "@babel/helper-optimise-call-expression": ^7.15.4 - "@babel/helper-replace-supers": ^7.15.4 - "@babel/helper-split-export-declaration": ^7.15.4 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 42fa8550125cd26ec5ff62f8d5383924b896a35326a31acced93a166661d1a1446199e5d2c8dc3685d70482127dc57cc6c22c5ffccadb58e72bfedf906fba817 + "@babel/traverse": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: 8ac15d96d262b8940bc469052a048e06430bba1296369be695fabdf6799f201dd0b00151762b56012a218464e706bc033f27c07f6cec20c6f8f5fd6543c67054 languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.20.7": - version: 7.20.12 - resolution: "@babel/helper-create-class-features-plugin@npm:7.20.12" +"@babel/helper-module-transforms@npm:^7.13.0, @babel/helper-module-transforms@npm:^7.13.14, @babel/helper-module-transforms@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/helper-module-transforms@npm:7.25.2" dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 - "@babel/helper-member-expression-to-functions": ^7.20.7 - "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/helper-replace-supers": ^7.20.7 - "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 - "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/helper-module-imports": ^7.24.7 + "@babel/helper-simple-access": ^7.24.7 + "@babel/helper-validator-identifier": ^7.24.7 + "@babel/traverse": ^7.25.2 peerDependencies: "@babel/core": ^7.0.0 - checksum: 1e9ed4243b75278fa24deb40dc62bf537b79307987223a2d2d2ae5abf7ba6dc8435d6e3bb55d52ceb30d3e1eba88e7eb6a1885a8bb519e5cfc3e9dedb97d43e6 - languageName: node - linkType: hard - -"@babel/helper-environment-visitor@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-environment-visitor@npm:7.18.9" - checksum: b25101f6162ddca2d12da73942c08ad203d7668e06663df685634a8fde54a98bc015f6f62938e8554457a592a024108d45b8f3e651fd6dcdb877275b73cc4420 + checksum: 282d4e3308df6746289e46e9c39a0870819630af5f84d632559171e4fae6045684d771a65f62df3d569e88ccf81dc2def78b8338a449ae3a94bb421aa14fc367 languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.15.4": - version: 7.15.4 - resolution: "@babel/helper-function-name@npm:7.15.4" +"@babel/helper-optimise-call-expression@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-optimise-call-expression@npm:7.24.7" dependencies: - "@babel/helper-get-function-arity": ^7.15.4 - "@babel/template": ^7.15.4 - "@babel/types": ^7.15.4 - checksum: 0500e8e40753fdc25252b30609b12df8ebb997a4e5b4c2145774855c026a4338c0510fc7b819035d5f9d76cf3bd63417c0b7b58f0836a10996300f2f925c4e0f + "@babel/types": ^7.24.7 + checksum: 280654eaf90e92bf383d7eed49019573fb35a98c9e992668f701ad099957246721044be2068cf6840cb2299e0ad393705a1981c88c23a1048096a8d59e5f79a3 languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/helper-function-name@npm:7.19.0" - dependencies: - "@babel/template": ^7.18.10 - "@babel/types": ^7.19.0 - checksum: eac1f5db428ba546270c2b8d750c24eb528b8fcfe50c81de2e0bdebf0e20f24bec688d4331533b782e4a907fad435244621ca2193cfcf80a86731299840e0f6e +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.13.0, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.24.8, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.24.8 + resolution: "@babel/helper-plugin-utils@npm:7.24.8" + checksum: 73b1a83ba8bcee21dc94de2eb7323207391715e4369fd55844bb15cf13e3df6f3d13a40786d990e6370bf0f571d94fc31f70dec96c1d1002058258c35ca3767a languageName: node linkType: hard -"@babel/helper-get-function-arity@npm:^7.15.4": - version: 7.15.4 - resolution: "@babel/helper-get-function-arity@npm:7.15.4" +"@babel/helper-replace-supers@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/helper-replace-supers@npm:7.25.0" dependencies: - "@babel/types": ^7.15.4 - checksum: 1a3dba8700ec69b5b120401769897a1a0ca2edcf6b546659d49946dcc8b0755c4c58dd8f15739f5cf851d4ca1db76f56759897c6f5b9f76f2fef989dc4f8fd54 - languageName: node - linkType: hard - -"@babel/helper-hoist-variables@npm:^7.15.4": - version: 7.15.4 - resolution: "@babel/helper-hoist-variables@npm:7.15.4" - dependencies: - "@babel/types": ^7.15.4 - checksum: 1a9ae0a27112b5f4e4ab91da2a1b40a8f91d8ce195e965d900ec3f13b583a1ab36834fb3edc2812523fa1d586ce21c3e6d8ce437d168e23a5d8e7e2e46b50f6f - languageName: node - linkType: hard - -"@babel/helper-hoist-variables@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-hoist-variables@npm:7.18.6" - dependencies: - "@babel/types": ^7.18.6 - checksum: fd9c35bb435fda802bf9ff7b6f2df06308a21277c6dec2120a35b09f9de68f68a33972e2c15505c1a1a04b36ec64c9ace97d4a9e26d6097b76b4396b7c5fa20f - languageName: node - linkType: hard - -"@babel/helper-member-expression-to-functions@npm:^7.15.4": - version: 7.15.4 - resolution: "@babel/helper-member-expression-to-functions@npm:7.15.4" - dependencies: - "@babel/types": ^7.15.4 - checksum: 30cf27e2afbaf1d58d189c5f36951a6af7d2bfccdfdb7d57e91749620d9c3c37d78324a1725079d3ab4a0e5c4e5f3d5f19a275d5dd269baa2aa8852835b05d6d - languageName: node - linkType: hard - -"@babel/helper-member-expression-to-functions@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/helper-member-expression-to-functions@npm:7.20.7" - dependencies: - "@babel/types": ^7.20.7 - checksum: cec17aab7e964830b0146e575bd141127032319f26ed864a65b35abd75ad618d264d3e11449b9b4e29cfd95bb1a7e774afddd4884fdcc29c36ac9cbd2b66359f - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.13.12, @babel/helper-module-imports@npm:^7.15.4": - version: 7.15.4 - resolution: "@babel/helper-module-imports@npm:7.15.4" - dependencies: - "@babel/types": ^7.15.4 - checksum: 519681cb9c27fcacd85ef13534020db3a2bac1d53a4d988fd9f3cf1ec223854311d4193c961cc2031c4d1df3b1a35a849b38237302752ae3d29eb00e5b9a904a - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-module-imports@npm:7.18.6" - dependencies: - "@babel/types": ^7.18.6 - checksum: f393f8a3b3304b1b7a288a38c10989de754f01d29caf62ce7c4e5835daf0a27b81f3ac687d9d2780d39685aae7b55267324b512150e7b2be967b0c493b6a1def - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.13.0, @babel/helper-module-transforms@npm:^7.13.14, @babel/helper-module-transforms@npm:^7.15.8": - version: 7.15.8 - resolution: "@babel/helper-module-transforms@npm:7.15.8" - dependencies: - "@babel/helper-module-imports": ^7.15.4 - "@babel/helper-replace-supers": ^7.15.4 - "@babel/helper-simple-access": ^7.15.4 - "@babel/helper-split-export-declaration": ^7.15.4 - "@babel/helper-validator-identifier": ^7.15.7 - "@babel/template": ^7.15.4 - "@babel/traverse": ^7.15.4 - "@babel/types": ^7.15.6 - checksum: 67aea0ba226e066ef04ba642325cf39b1c517945b7e7d5596755f4eef9b81865522553b75deec77b30edd3d5069c866b71c30f4f8aa8d93077eabc0e0c603da0 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.20.11": - version: 7.20.11 - resolution: "@babel/helper-module-transforms@npm:7.20.11" - dependencies: - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-simple-access": ^7.20.2 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/helper-validator-identifier": ^7.19.1 - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.20.10 - "@babel/types": ^7.20.7 - checksum: 29319ebafa693d48756c6ba0d871677bb0037e0da084fbe221a17c38d57093fc8aa38543c07d76e788266a937976e37ab4901971ca7f237c5ab45f524b9ecca0 - languageName: node - linkType: hard - -"@babel/helper-optimise-call-expression@npm:^7.15.4": - version: 7.15.4 - resolution: "@babel/helper-optimise-call-expression@npm:7.15.4" - dependencies: - "@babel/types": ^7.15.4 - checksum: 7c929d1a3dbed7ee776dd8a4502b92433bb14ce6217372581db117de294edcf7b8678b1f703b8309c769bb46f2e4f005cdb3958dec508a486b2b03a9a919b542 - languageName: node - linkType: hard - -"@babel/helper-optimise-call-expression@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-optimise-call-expression@npm:7.18.6" - dependencies: - "@babel/types": ^7.18.6 - checksum: e518fe8418571405e21644cfb39cf694f30b6c47b10b006609a92469ae8b8775cbff56f0b19732343e2ea910641091c5a2dc73b56ceba04e116a33b0f8bd2fbd - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.13.0, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.8.0": - version: 7.14.5 - resolution: "@babel/helper-plugin-utils@npm:7.14.5" - checksum: fe20e90a24d02770a60ebe80ab9f0dfd7258503cea8006c71709ac9af1aa3e47b0de569499673f11ea6c99597f8c0e4880ae1d505986e61101b69716820972fe - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2": - version: 7.20.2 - resolution: "@babel/helper-plugin-utils@npm:7.20.2" - checksum: f6cae53b7fdb1bf3abd50fa61b10b4470985b400cc794d92635da1e7077bb19729f626adc0741b69403d9b6e411cddddb9c0157a709cc7c4eeb41e663be5d74b - languageName: node - linkType: hard - -"@babel/helper-replace-supers@npm:^7.15.4": - version: 7.15.4 - resolution: "@babel/helper-replace-supers@npm:7.15.4" - dependencies: - "@babel/helper-member-expression-to-functions": ^7.15.4 - "@babel/helper-optimise-call-expression": ^7.15.4 - "@babel/traverse": ^7.15.4 - "@babel/types": ^7.15.4 - checksum: b08a23914a5f7f964aefa4518255006d3a58e4c0cf972527c1fe3c79ebff4d6d50c9f1d370b8d62e0085766a654910e39ba196fab522d794142d2219eea8430d - languageName: node - linkType: hard - -"@babel/helper-replace-supers@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/helper-replace-supers@npm:7.20.7" - dependencies: - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-member-expression-to-functions": ^7.20.7 - "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.20.7 - "@babel/types": ^7.20.7 - checksum: b8e0087c9b0c1446e3c6f3f72b73b7e03559c6b570e2cfbe62c738676d9ebd8c369a708cf1a564ef88113b4330750a50232ee1131d303d478b7a5e65e46fbc7c - languageName: node - linkType: hard - -"@babel/helper-simple-access@npm:^7.12.13, @babel/helper-simple-access@npm:^7.15.4": - version: 7.15.4 - resolution: "@babel/helper-simple-access@npm:7.15.4" - dependencies: - "@babel/types": ^7.15.4 - checksum: 8c3462264d6755c1e190a709fa90667c1691cb61cdca2d3f9119dd93adfd9fbcb292bcc48dbd7e065b8c27d9371f2793799a92aec124a3260288ed112e00c839 - languageName: node - linkType: hard - -"@babel/helper-simple-access@npm:^7.20.2": - version: 7.20.2 - resolution: "@babel/helper-simple-access@npm:7.20.2" - dependencies: - "@babel/types": ^7.20.2 - checksum: ad1e96ee2e5f654ffee2369a586e5e8d2722bf2d8b028a121b4c33ebae47253f64d420157b9f0a8927aea3a9e0f18c0103e74fdd531815cf3650a0a4adca11a1 - languageName: node - linkType: hard - -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0": - version: 7.20.0 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.20.0" - dependencies: - "@babel/types": ^7.20.0 - checksum: 34da8c832d1c8a546e45d5c1d59755459ffe43629436707079989599b91e8c19e50e73af7a4bd09c95402d389266731b0d9c5f69e372d8ebd3a709c05c80d7dd + "@babel/helper-member-expression-to-functions": ^7.24.8 + "@babel/helper-optimise-call-expression": ^7.24.7 + "@babel/traverse": ^7.25.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: f669fc2487c22d40b808f94b9c3ee41129484d5ef0ba689bdd70f216ff91e10b6b021d2f8cd37e7bdd700235a2a6ae6622526344f064528190383bf661ac65f8 languageName: node linkType: hard -"@babel/helper-split-export-declaration@npm:^7.15.4": - version: 7.15.4 - resolution: "@babel/helper-split-export-declaration@npm:7.15.4" +"@babel/helper-simple-access@npm:^7.12.13, @babel/helper-simple-access@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-simple-access@npm:7.24.7" dependencies: - "@babel/types": ^7.15.4 - checksum: 6baf45996e1323fdfc30666e9c0b3219d74c54dc71e9130acfa4d9d4c53faa95618ac383a1c82a156555908323384a416b4a29e88b337de98fdb476212134f99 + "@babel/traverse": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: ddbf55f9dea1900213f2a1a8500fabfd21c5a20f44dcfa957e4b0d8638c730f88751c77f678644f754f1a1dc73f4eb8b766c300deb45a9daad000e4247957819 languageName: node linkType: hard -"@babel/helper-split-export-declaration@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-split-export-declaration@npm:7.18.6" +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.24.7" dependencies: - "@babel/types": ^7.18.6 - checksum: c6d3dede53878f6be1d869e03e9ffbbb36f4897c7cc1527dc96c56d127d834ffe4520a6f7e467f5b6f3c2843ea0e81a7819d66ae02f707f6ac057f3d57943a2b - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.19.4": - version: 7.19.4 - resolution: "@babel/helper-string-parser@npm:7.19.4" - checksum: b2f8a3920b30dfac81ec282ac4ad9598ea170648f8254b10f475abe6d944808fb006aab325d3eb5a8ad3bea8dfa888cfa6ef471050dae5748497c110ec060943 - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.14.5, @babel/helper-validator-identifier@npm:^7.14.9, @babel/helper-validator-identifier@npm:^7.15.7": - version: 7.15.7 - resolution: "@babel/helper-validator-identifier@npm:7.15.7" - checksum: f041c28c531d1add5cc345b25d5df3c29c62bce3205b4d4a93dcd164ccf630350acba252d374fad8f5d8ea526995a215829f27183ba7ce7ce141843bf23068a6 - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1": - version: 7.19.1 - resolution: "@babel/helper-validator-identifier@npm:7.19.1" - checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.12.17, @babel/helper-validator-option@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/helper-validator-option@npm:7.14.5" - checksum: 1b25c34a5cb3d8602280f33b9ab687d2a77895e3616458d0f70ddc450ada9b05e342c44f322bc741d51b252e84cff6ec44ae93d622a3354828579a643556b523 + "@babel/traverse": ^7.24.7 + "@babel/types": ^7.24.7 + checksum: 11b28fe534ce2b1a67c4d8e51a7b5711a2a0a0cae802f74614eee54cca58c744d9a62f6f60103c41759e81c537d270bfd665bf368a6bea214c6052f2094f8407 languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-validator-option@npm:7.18.6" - checksum: f9cc6eb7cc5d759c5abf006402180f8d5e4251e9198197428a97e05d65eb2f8ae5a0ce73b1dfd2d35af41d0eb780627a64edf98a4e71f064eeeacef8de58f2cf +"@babel/helper-string-parser@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/helper-string-parser@npm:7.24.8" + checksum: 39b03c5119216883878655b149148dc4d2e284791e969b19467a9411fccaa33f7a713add98f4db5ed519535f70ad273cdadfd2eb54d47ebbdeac5083351328ce languageName: node linkType: hard -"@babel/helpers@npm:^7.13.16, @babel/helpers@npm:^7.15.4": - version: 7.15.4 - resolution: "@babel/helpers@npm:7.15.4" - dependencies: - "@babel/template": ^7.15.4 - "@babel/traverse": ^7.15.4 - "@babel/types": ^7.15.4 - checksum: e60738110086c183d0ce369ad56949d5dceeb7d73d8fdb892f36d5b8525192e6b97f4563eb77334f47ac27ac43a21f3c4cd53bff342c2a0d5f4008a2b0169c89 +"@babel/helper-validator-identifier@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-validator-identifier@npm:7.24.7" + checksum: 6799ab117cefc0ecd35cd0b40ead320c621a298ecac88686a14cffceaac89d80cdb3c178f969861bf5fa5e4f766648f9161ea0752ecfe080d8e89e3147270257 languageName: node linkType: hard -"@babel/helpers@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/helpers@npm:7.20.7" - dependencies: - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.20.7 - "@babel/types": ^7.20.7 - checksum: 3fb10df3510ba7116a180d5fd983d0f558f7a65c3d599385dba991bff66b74174c88881bc12c2b3cf7284294fcac5b301ded49a8b0098bdf2ef61d0cad8010db +"@babel/helper-validator-option@npm:^7.12.17, @babel/helper-validator-option@npm:^7.24.7, @babel/helper-validator-option@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/helper-validator-option@npm:7.24.8" + checksum: a52442dfa74be6719c0608fee3225bd0493c4057459f3014681ea1a4643cd38b68ff477fe867c4b356da7330d085f247f0724d300582fa4ab9a02efaf34d107c languageName: node linkType: hard -"@babel/highlight@npm:^7.10.4": - version: 7.16.0 - resolution: "@babel/highlight@npm:7.16.0" +"@babel/helpers@npm:^7.13.16, @babel/helpers@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/helpers@npm:7.25.0" dependencies: - "@babel/helper-validator-identifier": ^7.15.7 - chalk: ^2.0.0 - js-tokens: ^4.0.0 - checksum: abf244c48fcff20ec87830e8b99c776f4dcdd9138e63decc195719a94148da35339639e0d8045eb9d1f3e67a39ab90a9c3f5ce2d579fb1a0368d911ddf29b4e5 + "@babel/template": ^7.25.0 + "@babel/types": ^7.25.0 + checksum: 739e3704ff41a30f5eaac469b553f4d3ab02be6ced083f5925851532dfbd9efc5c347728e77b754ed0b262a4e5e384e60932a62c192d338db7e4b7f3adf9f4a7 languageName: node linkType: hard -"@babel/highlight@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/highlight@npm:7.14.5" +"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/highlight@npm:7.24.7" dependencies: - "@babel/helper-validator-identifier": ^7.14.5 - chalk: ^2.0.0 + "@babel/helper-validator-identifier": ^7.24.7 + chalk: ^2.4.2 js-tokens: ^4.0.0 - checksum: 4e4b22fb886c939551d73307de16232c186fdb4d8ec8f514541b058feaecdba5234788a0740ca5bcd28777f4108596c39ac4b7463684c63b3812f6071e3fb88f + picocolors: ^1.0.0 + checksum: 5cd3a89f143671c4ac129960024ba678b669e6fc673ce078030f5175002d1d3d52bc10b22c5b916a6faf644b5028e9a4bd2bb264d053d9b05b6a98690f1d46f1 languageName: node linkType: hard -"@babel/highlight@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/highlight@npm:7.18.6" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.3": + version: 7.25.3 + resolution: "@babel/parser@npm:7.25.3" dependencies: - "@babel/helper-validator-identifier": ^7.18.6 - chalk: ^2.0.0 - js-tokens: ^4.0.0 - checksum: 92d8ee61549de5ff5120e945e774728e5ccd57fd3b2ed6eace020ec744823d4a98e242be1453d21764a30a14769ecd62170fba28539b211799bbaf232bbb2789 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.15.4, @babel/parser@npm:^7.15.8": - version: 7.15.8 - resolution: "@babel/parser@npm:7.15.8" - bin: - parser: ./bin/babel-parser.js - checksum: a26c91967655f3961bc0c2565f7b9ac870ee3db86c9a0f00b96a7fb65210687be023431c79b3ed2a13b9c945e6afa09c36542ee508741e7ce3039a5b0f18c4b2 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/parser@npm:7.20.7" + "@babel/types": ^7.25.2 bin: parser: ./bin/babel-parser.js - checksum: 25b5266e3bd4be837092685f6b7ef886f1308ff72659a24342eb646ae5014f61ed1771ce8fc20636c890fcae19304fc72c069564ca6075207b7fbf3f75367275 + checksum: b55aba64214fa1d66ccd0d29f476d2e55a48586920d280f88c546f81cbbececc0e01c9d05a78d6bf206e8438b9c426caa344942c1a581eecc4d365beaab8a20e languageName: node linkType: hard @@ -591,7 +304,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-properties@npm:^7.8.3": +"@babel/plugin-syntax-class-properties@npm:^7.12.13": version: 7.12.13 resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" dependencies: @@ -602,7 +315,29 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-meta@npm:^7.8.3": +"@babel/plugin-syntax-class-static-block@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3e80814b5b6d4fe17826093918680a351c2d34398a914ce6e55d8083d72a9bdde4fbaf6a2dcea0e23a03de26dc2917ae3efd603d27099e2b98380345703bf948 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-attributes@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 590dbb5d1a15264f74670b427b8d18527672c3d6c91d7bae7e65f80fd810edbc83d90e68065088644cbad3f2457ed265a54a9956fb789fcb9a5b521822b3a275 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-meta@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" dependencies: @@ -624,29 +359,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.12.13": - version: 7.14.5 - resolution: "@babel/plugin-syntax-jsx@npm:7.14.5" +"@babel/plugin-syntax-jsx@npm:^7.12.13, @babel/plugin-syntax-jsx@npm:^7.24.7, @babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.24.7 + resolution: "@babel/plugin-syntax-jsx@npm:7.24.7" dependencies: - "@babel/helper-plugin-utils": ^7.14.5 + "@babel/helper-plugin-utils": ^7.24.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3a2ba87534b0f9ee70eba0754d2ae544825c25afd98efb8e42b41399e02de4cc5b1f70fc5ce444fb7a7e5b09972c289eed2f00917be5b88d67407f4cbde8e960 + checksum: 7a5ca629d8ca1e1ee78705a78e58c12920d07ed8006d7e7232b31296a384ff5e41d7b649bde5561196041037bbb9f9715be1d1c20975df87ca204f34ad15b965 languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.18.6, @babel/plugin-syntax-jsx@npm:^7.7.2": - version: 7.18.6 - resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 6d37ea972970195f1ffe1a54745ce2ae456e0ac6145fae9aa1480f297248b262ea6ebb93010eddb86ebfacb94f57c05a1fc5d232b9a67325b09060299d515c67 - languageName: node - linkType: hard - -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" dependencies: @@ -668,7 +392,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-numeric-separator@npm:^7.8.3": +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" dependencies: @@ -712,36 +436,36 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-top-level-await@npm:^7.8.3": +"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": version: 7.14.5 - resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" dependencies: "@babel/helper-plugin-utils": ^7.14.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e + checksum: b317174783e6e96029b743ccff2a67d63d38756876e7e5d0ba53a322e38d9ca452c13354a57de1ad476b4c066dbae699e0ca157441da611117a47af88985ecda languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.14.5": +"@babel/plugin-syntax-top-level-await@npm:^7.14.5": version: 7.14.5 - resolution: "@babel/plugin-syntax-typescript@npm:7.14.5" + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" dependencies: "@babel/helper-plugin-utils": ^7.14.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 5447d13b31aeeeaa5c2b945e60a598642dedca480f11d3232b0927aeb6a6bb8201a0025f509bc23851da4bf126f69b0522790edbd58f4560f0a4984cabd0d126 + checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.20.0, @babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.20.0 - resolution: "@babel/plugin-syntax-typescript@npm:7.20.0" +"@babel/plugin-syntax-typescript@npm:^7.24.7, @babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.24.7 + resolution: "@babel/plugin-syntax-typescript@npm:7.24.7" dependencies: - "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-plugin-utils": ^7.24.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6189c0b5c32ba3c9a80a42338bd50719d783b20ef29b853d4f03929e971913d3cefd80184e924ae98ad6db09080be8fe6f1ffde9a6db8972523234f0274d36f7 + checksum: 56fe84f3044ecbf038977281648db6b63bd1301f2fff6595820dc10ee276c1d1586919d48d52a8d497ecae32c958be38f42c1c8d174dc58aad856c516dc5b35a languageName: node linkType: hard @@ -759,25 +483,25 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-display-name@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-react-display-name@npm:7.18.6" +"@babel/plugin-transform-react-display-name@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-react-display-name@npm:7.24.7" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.24.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 51c087ab9e41ef71a29335587da28417536c6f816c292e092ffc0e0985d2f032656801d4dd502213ce32481f4ba6c69402993ffa67f0818a07606ff811e4be49 + checksum: a05bf83bf5e7b31f7a3b56da1bf8e2eeec76ef52ae44435ceff66363a1717fcda45b7b4b931a2c115982175f481fc3f2d0fab23f0a43c44e6d983afc396858f0 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-development@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-react-jsx-development@npm:7.18.6" +"@babel/plugin-transform-react-jsx-development@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-react-jsx-development@npm:7.24.7" dependencies: - "@babel/plugin-transform-react-jsx": ^7.18.6 + "@babel/plugin-transform-react-jsx": ^7.24.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ec9fa65db66f938b75c45e99584367779ac3e0af8afc589187262e1337c7c4205ea312877813ae4df9fb93d766627b8968d74ac2ba702e4883b1dbbe4953ecee + checksum: 653d32ea5accb12d016e324ec5a584b60a8f39e60c6a5101194b73553fdefbfa3c3f06ec2410216ec2033fddae181a2f146a1d6ed59f075c488fc4570cad2e7b languageName: node linkType: hard @@ -796,72 +520,61 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.18.6": - version: 7.20.7 - resolution: "@babel/plugin-transform-react-jsx@npm:7.20.7" +"@babel/plugin-transform-react-jsx@npm:^7.24.7": + version: 7.25.2 + resolution: "@babel/plugin-transform-react-jsx@npm:7.25.2" dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-jsx": ^7.18.6 - "@babel/types": ^7.20.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 13ecbd1da582177f76ebd74d685947e703a3dcf8bd39cbc62784253201c6f7a667f3573932f6f20602dbcaf077451bf9dd3571892e3ccf4c7176add6358cd641 - languageName: node - linkType: hard - -"@babel/plugin-transform-react-pure-annotations@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.18.6" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-annotate-as-pure": ^7.24.7 + "@babel/helper-module-imports": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/plugin-syntax-jsx": ^7.24.7 + "@babel/types": ^7.25.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 97c4873d409088f437f9084d084615948198dd87fc6723ada0e7e29c5a03623c2f3e03df3f52e7e7d4d23be32a08ea00818bff302812e48713c706713bd06219 + checksum: 44fbde046385916de19a88d77fed9121c6cc6e25b9cdc38a43d8e514a9b18cf391ed3de25e7d6a8996d3fe4c298e395edf856ee20efffaab3b70f8ce225fffa4 languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.13.0": - version: 7.15.8 - resolution: "@babel/plugin-transform-typescript@npm:7.15.8" +"@babel/plugin-transform-react-pure-annotations@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.24.7" dependencies: - "@babel/helper-create-class-features-plugin": ^7.15.4 - "@babel/helper-plugin-utils": ^7.14.5 - "@babel/plugin-syntax-typescript": ^7.14.5 + "@babel/helper-annotate-as-pure": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3f5bbb0d38e9cd55212ee867c32e6e85cfd5443dfffe40de0229eeccd2bf75ebe9d8221efb0bdc9891bc3175fcca28c24cac0053e5272c88c71fc034d5e0eb88 + checksum: d859ada3cbeb829fa3d9978a29b2d36657fcc9dcc1e4c3c3af84ec5a044a8f8db26ada406baa309e5d4d512aca53d07c520d991b891ff943bec7d8f01aae0419 languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/plugin-transform-typescript@npm:7.20.7" +"@babel/plugin-transform-typescript@npm:^7.13.0, @babel/plugin-transform-typescript@npm:^7.20.7": + version: 7.25.2 + resolution: "@babel/plugin-transform-typescript@npm:7.25.2" dependencies: - "@babel/helper-create-class-features-plugin": ^7.20.7 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-typescript": ^7.20.0 + "@babel/helper-annotate-as-pure": ^7.24.7 + "@babel/helper-create-class-features-plugin": ^7.25.0 + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 + "@babel/plugin-syntax-typescript": ^7.24.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ca569a1b8001e7e8971874656091789c6b3209f155c91c56bce82b545e43d09d156b4fcf2f0dfcdf7911a2c546c7090c2aff167a5692443f6f0382b358c233e0 + checksum: b0267128d93560a4350919f7230a3b497e20fb8611d9f04bb3560d6b38877305ccad4c40903160263361c6930a84dbcb5b21b8ea923531bda51f67bffdc2dd0b languageName: node linkType: hard "@babel/preset-react@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/preset-react@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-validator-option": ^7.18.6 - "@babel/plugin-transform-react-display-name": ^7.18.6 - "@babel/plugin-transform-react-jsx": ^7.18.6 - "@babel/plugin-transform-react-jsx-development": ^7.18.6 - "@babel/plugin-transform-react-pure-annotations": ^7.18.6 + version: 7.24.7 + resolution: "@babel/preset-react@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/helper-validator-option": ^7.24.7 + "@babel/plugin-transform-react-display-name": ^7.24.7 + "@babel/plugin-transform-react-jsx": ^7.24.7 + "@babel/plugin-transform-react-jsx-development": ^7.24.7 + "@babel/plugin-transform-react-pure-annotations": ^7.24.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 540d9cf0a0cc0bb07e6879994e6fb7152f87dafbac880b56b65e2f528134c7ba33e0cd140b58700c77b2ebf4c81fa6468fed0ba391462d75efc7f8c1699bb4c3 + checksum: 76d0365b6bca808be65c4ccb3f3384c0792084add15eb537f16b3e44184216b82fa37f945339b732ceee6f06e09ba1f39f75c45e69b9811ddcc479f05555ea9c languageName: node linkType: hard @@ -879,89 +592,48 @@ __metadata: linkType: hard "@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.9.2": - version: 7.15.4 - resolution: "@babel/runtime@npm:7.15.4" + version: 7.25.0 + resolution: "@babel/runtime@npm:7.25.0" dependencies: - regenerator-runtime: ^0.13.4 - checksum: c40825430400e47c19b97e4142d5315d2910305b9714d44a711472587ee2fd4521fdba5f02ddd9df3902f5e988d9854fa83f4da1e0c091f70f6983fa52480606 + regenerator-runtime: ^0.14.0 + checksum: 4a2a374a58eb01aaa65c5762606e90b3a1f448e0c637d42278b6cc0b42a9f5399b5f381ba9f237ee087da2860d14dd2d1de7bddcbe18be6a3cafba97e44bed64 languageName: node linkType: hard -"@babel/template@npm:^7.12.13, @babel/template@npm:^7.15.4, @babel/template@npm:^7.3.3": - version: 7.15.4 - resolution: "@babel/template@npm:7.15.4" +"@babel/template@npm:^7.12.13, @babel/template@npm:^7.25.0, @babel/template@npm:^7.3.3": + version: 7.25.0 + resolution: "@babel/template@npm:7.25.0" dependencies: - "@babel/code-frame": ^7.14.5 - "@babel/parser": ^7.15.4 - "@babel/types": ^7.15.4 - checksum: 58ca51fdd40bbaaddf2e46513dd05d5823f214cb2877b3f353abf5541a033a1b6570c29c2c80e60f2b55966326e40bebbf53666b261646ccf410b3d984af42ce + "@babel/code-frame": ^7.24.7 + "@babel/parser": ^7.25.0 + "@babel/types": ^7.25.0 + checksum: 3f2db568718756d0daf2a16927b78f00c425046b654cd30b450006f2e84bdccaf0cbe6dc04994aa1f5f6a4398da2f11f3640a4d3ee31722e43539c4c919c817b languageName: node linkType: hard -"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/template@npm:7.20.7" +"@babel/traverse@npm:^7.13.15, @babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.2": + version: 7.25.3 + resolution: "@babel/traverse@npm:7.25.3" dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/parser": ^7.20.7 - "@babel/types": ^7.20.7 - checksum: 2eb1a0ab8d415078776bceb3473d07ab746e6bb4c2f6ca46ee70efb284d75c4a32bb0cd6f4f4946dec9711f9c0780e8e5d64b743208deac6f8e9858afadc349e - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.13.15, @babel/traverse@npm:^7.15.4": - version: 7.15.4 - resolution: "@babel/traverse@npm:7.15.4" - dependencies: - "@babel/code-frame": ^7.14.5 - "@babel/generator": ^7.15.4 - "@babel/helper-function-name": ^7.15.4 - "@babel/helper-hoist-variables": ^7.15.4 - "@babel/helper-split-export-declaration": ^7.15.4 - "@babel/parser": ^7.15.4 - "@babel/types": ^7.15.4 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: 831506a92c8ed76dc60504de37663bf5a553d7b1b009a94defc082cddb6c380c5487a1aa9438bcd7b9891a2a72758a63e4f878154aa70699d09b388b1445d774 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.20.10, @babel/traverse@npm:^7.20.12, @babel/traverse@npm:^7.20.7, @babel/traverse@npm:^7.7.2": - version: 7.20.12 - resolution: "@babel/traverse@npm:7.20.12" - dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.20.7 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.20.7 - "@babel/types": ^7.20.7 - debug: ^4.1.0 + "@babel/code-frame": ^7.24.7 + "@babel/generator": ^7.25.0 + "@babel/parser": ^7.25.3 + "@babel/template": ^7.25.0 + "@babel/types": ^7.25.2 + debug: ^4.3.1 globals: ^11.1.0 - checksum: d758b355ab4f1e87984524b67785fa23d74e8a45d2ceb8bcf4d5b2b0cd15ee160db5e68c7078808542805774ca3802e2eafb1b9638afa4cd7f9ecabd0ca7fd56 + checksum: 5661308b1357816f1d4e2813a5dd82c6053617acc08c5c95db051b8b6577d07c4446bc861c9a5e8bf294953ac8266ae13d7d9d856b6b889fc0d34c1f51abbd8c languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.13.12, @babel/types@npm:^7.13.16, @babel/types@npm:^7.15.4, @babel/types@npm:^7.15.6, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": - version: 7.15.6 - resolution: "@babel/types@npm:7.15.6" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.13.12, @babel/types@npm:^7.13.16, @babel/types@npm:^7.20.7, @babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.3.3": + version: 7.25.2 + resolution: "@babel/types@npm:7.25.2" dependencies: - "@babel/helper-validator-identifier": ^7.14.9 + "@babel/helper-string-parser": ^7.24.8 + "@babel/helper-validator-identifier": ^7.24.7 to-fast-properties: ^2.0.0 - checksum: 37f497dde10d238b5eb184efab83b415a86611e3d73dc0434de0cfb851b20ee606a3b7e1525e5b2d522fac1248d0345fea0468006f246262511b80cd3ed2419f - languageName: node - linkType: hard - -"@babel/types@npm:^7.18.6, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/types@npm:7.20.7" - dependencies: - "@babel/helper-string-parser": ^7.19.4 - "@babel/helper-validator-identifier": ^7.19.1 - to-fast-properties: ^2.0.0 - checksum: b39af241f0b72bba67fd6d0d23914f6faec8c0eba8015c181cbd5ea92e59fc91a52a1ab490d3520c7dbd19ddb9ebb76c476308f6388764f16d8201e37fae6811 + checksum: f73f66ba903c6f7e38f519a33d53a67d49c07e208e59ea65250362691dc546c6da7ab90ec66ee79651ef697329872f6f97eb19a6dfcacc026fd05e76a563c5d2 languageName: node linkType: hard @@ -994,9 +666,9 @@ __metadata: linkType: hard "@discoveryjs/json-ext@npm:^0.5.0": - version: 0.5.5 - resolution: "@discoveryjs/json-ext@npm:0.5.5" - checksum: 40844548d87689d742a098c3bfe342cc7f0d0500a814fce4592886de68f7e027937938324578311998d49a1f1e5d0394c578bb814fab04375b521637cb7a0dea + version: 0.5.7 + resolution: "@discoveryjs/json-ext@npm:0.5.7" + checksum: 2176d301cc258ea5c2324402997cf8134ebb212469c0d397591636cea8d3c02f2b3cf9fd58dcb748c7a0dade77ebdc1b10284fa63e608c033a1db52fddc69918 languageName: node linkType: hard @@ -1017,13 +689,6 @@ __metadata: languageName: node linkType: hard -"@gar/promisify@npm:^1.0.1": - version: 1.1.2 - resolution: "@gar/promisify@npm:1.1.2" - checksum: d05081e0887a49c178b75ee3067bd6ee086f73c154d121b854fb2e044e8a89cb1cbb6de3a0dd93a519b80f0531fda68b099dd7256205f7fbb3490324342f2217 - languageName: node - linkType: hard - "@humanwhocodes/config-array@npm:^0.5.0": version: 0.5.0 resolution: "@humanwhocodes/config-array@npm:0.5.0" @@ -1042,6 +707,20 @@ __metadata: languageName: node linkType: hard +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + "@istanbuljs/load-nyc-config@npm:^1.0.0": version: 1.1.0 resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" @@ -1055,57 +734,57 @@ __metadata: languageName: node linkType: hard -"@istanbuljs/schema@npm:^0.1.2": +"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": version: 0.1.3 resolution: "@istanbuljs/schema@npm:0.1.3" checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 languageName: node linkType: hard -"@jest/console@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/console@npm:29.3.1" +"@jest/console@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/console@npm:29.7.0" dependencies: - "@jest/types": ^29.3.1 + "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^29.3.1 - jest-util: ^29.3.1 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 slash: ^3.0.0 - checksum: 9eecbfb6df4f5b810374849b7566d321255e6fd6e804546236650384966be532ff75a3e445a3277eadefe67ddf4dc56cd38332abd72d6a450f1bea9866efc6d7 + checksum: 0e3624e32c5a8e7361e889db70b170876401b7d70f509a2538c31d5cd50deb0c1ae4b92dc63fe18a0902e0a48c590c21d53787a0df41a52b34fa7cab96c384d6 languageName: node linkType: hard -"@jest/core@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/core@npm:29.3.1" +"@jest/core@npm:^29.3.1, @jest/core@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/core@npm:29.7.0" dependencies: - "@jest/console": ^29.3.1 - "@jest/reporters": ^29.3.1 - "@jest/test-result": ^29.3.1 - "@jest/transform": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/console": ^29.7.0 + "@jest/reporters": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 ci-info: ^3.2.0 exit: ^0.1.2 graceful-fs: ^4.2.9 - jest-changed-files: ^29.2.0 - jest-config: ^29.3.1 - jest-haste-map: ^29.3.1 - jest-message-util: ^29.3.1 - jest-regex-util: ^29.2.0 - jest-resolve: ^29.3.1 - jest-resolve-dependencies: ^29.3.1 - jest-runner: ^29.3.1 - jest-runtime: ^29.3.1 - jest-snapshot: ^29.3.1 - jest-util: ^29.3.1 - jest-validate: ^29.3.1 - jest-watcher: ^29.3.1 + jest-changed-files: ^29.7.0 + jest-config: ^29.7.0 + jest-haste-map: ^29.7.0 + jest-message-util: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-resolve-dependencies: ^29.7.0 + jest-runner: ^29.7.0 + jest-runtime: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + jest-watcher: ^29.7.0 micromatch: ^4.0.4 - pretty-format: ^29.3.1 + pretty-format: ^29.7.0 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -1113,77 +792,77 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: e3ac9201e8a084ccd832b17877b56490402b919f227622bb24f9372931e77b869e60959d34144222ce20fb619d0a6a6be20b257adb077a6b0f430a4584a45b0f + checksum: af759c9781cfc914553320446ce4e47775ae42779e73621c438feb1e4231a5d4862f84b1d8565926f2d1aab29b3ec3dcfdc84db28608bdf5f29867124ebcfc0d languageName: node linkType: hard -"@jest/environment@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/environment@npm:29.3.1" +"@jest/environment@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/environment@npm:29.7.0" dependencies: - "@jest/fake-timers": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" - jest-mock: ^29.3.1 - checksum: 974102aba7cc80508f787bb5504dcc96e5392e0a7776a63dffbf54ddc2c77d52ef4a3c08ed2eedec91965befff873f70cd7c9ed56f62bb132dcdb821730e6076 + jest-mock: ^29.7.0 + checksum: 6fb398143b2543d4b9b8d1c6dbce83fa5247f84f550330604be744e24c2bd2178bb893657d62d1b97cf2f24baf85c450223f8237cccb71192c36a38ea2272934 languageName: node linkType: hard -"@jest/expect-utils@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/expect-utils@npm:29.3.1" +"@jest/expect-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect-utils@npm:29.7.0" dependencies: - jest-get-type: ^29.2.0 - checksum: 7f3b853eb1e4299988f66b9aa49c1aacb7b8da1cf5518dca4ccd966e865947eed8f1bde6c8f5207d8400e9af870112a44b57aa83515ad6ea5e4a04a971863adb + jest-get-type: ^29.6.3 + checksum: 75eb177f3d00b6331bcaa057e07c0ccb0733a1d0a1943e1d8db346779039cb7f103789f16e502f888a3096fb58c2300c38d1f3748b36a7fa762eb6f6d1b160ed languageName: node linkType: hard -"@jest/expect@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/expect@npm:29.3.1" +"@jest/expect@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect@npm:29.7.0" dependencies: - expect: ^29.3.1 - jest-snapshot: ^29.3.1 - checksum: 1d7b5cc735c8a99bfbed884d80fdb43b23b3456f4ec88c50fd86404b097bb77fba84f44e707fc9b49f106ca1154ae03f7c54dc34754b03f8a54eeb420196e5bf + expect: ^29.7.0 + jest-snapshot: ^29.7.0 + checksum: a01cb85fd9401bab3370618f4b9013b90c93536562222d920e702a0b575d239d74cecfe98010aaec7ad464f67cf534a353d92d181646a4b792acaa7e912ae55e languageName: node linkType: hard -"@jest/fake-timers@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/fake-timers@npm:29.3.1" +"@jest/fake-timers@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/fake-timers@npm:29.7.0" dependencies: - "@jest/types": ^29.3.1 - "@sinonjs/fake-timers": ^9.1.2 + "@jest/types": ^29.6.3 + "@sinonjs/fake-timers": ^10.0.2 "@types/node": "*" - jest-message-util: ^29.3.1 - jest-mock: ^29.3.1 - jest-util: ^29.3.1 - checksum: b1dafa8cdc439ef428cd772c775f0b22703677f52615513eda11a104bbfc352d7ec69b1225db95d4ef2e1b4ef0f23e1a7d96de5313aeb0950f672e6548ae069d + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: caf2bbd11f71c9241b458d1b5a66cbe95debc5a15d96442444b5d5c7ba774f523c76627c6931cca5e10e76f0d08761f6f1f01a608898f4751a0eee54fc3d8d00 languageName: node linkType: hard -"@jest/globals@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/globals@npm:29.3.1" +"@jest/globals@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/globals@npm:29.7.0" dependencies: - "@jest/environment": ^29.3.1 - "@jest/expect": ^29.3.1 - "@jest/types": ^29.3.1 - jest-mock: ^29.3.1 - checksum: 4d2b9458aabf7c28fd167e53984477498c897b64eec67a7f84b8fff465235cae1456ee0721cb0e7943f0cda443c7656adb9801f9f34e27495b8ebbd9f3033100 + "@jest/environment": ^29.7.0 + "@jest/expect": ^29.7.0 + "@jest/types": ^29.6.3 + jest-mock: ^29.7.0 + checksum: 97dbb9459135693ad3a422e65ca1c250f03d82b2a77f6207e7fa0edd2c9d2015fbe4346f3dc9ebff1678b9d8da74754d4d440b7837497f8927059c0642a22123 languageName: node linkType: hard -"@jest/reporters@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/reporters@npm:29.3.1" +"@jest/reporters@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/reporters@npm:29.7.0" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.3.1 - "@jest/test-result": ^29.3.1 - "@jest/transform": ^29.3.1 - "@jest/types": ^29.3.1 - "@jridgewell/trace-mapping": ^0.3.15 + "@jest/console": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@jridgewell/trace-mapping": ^0.3.18 "@types/node": "*" chalk: ^4.0.0 collect-v8-coverage: ^1.0.0 @@ -1191,13 +870,13 @@ __metadata: glob: ^7.1.3 graceful-fs: ^4.2.9 istanbul-lib-coverage: ^3.0.0 - istanbul-lib-instrument: ^5.1.0 + istanbul-lib-instrument: ^6.0.0 istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 istanbul-reports: ^3.1.3 - jest-message-util: ^29.3.1 - jest-util: ^29.3.1 - jest-worker: ^29.3.1 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 slash: ^3.0.0 string-length: ^4.0.1 strip-ansi: ^6.0.0 @@ -1207,51 +886,51 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 273e0c6953285f01151e9d84ac1e55744802a1ec79fb62dafeea16a49adfe7b24e7f35bef47a0214e5e057272dbfdacf594208286b7766046fd0f3cfa2043840 + checksum: 7eadabd62cc344f629024b8a268ecc8367dba756152b761bdcb7b7e570a3864fc51b2a9810cd310d85e0a0173ef002ba4528d5ea0329fbf66ee2a3ada9c40455 languageName: node linkType: hard -"@jest/schemas@npm:^29.0.0": - version: 29.0.0 - resolution: "@jest/schemas@npm:29.0.0" +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" dependencies: - "@sinclair/typebox": ^0.24.1 - checksum: 41355c78f09eb1097e57a3c5d0ca11c9099e235e01ea5fa4e3953562a79a6a9296c1d300f1ba50ca75236048829e056b00685cd2f1ff8285e56fd2ce01249acb + "@sinclair/typebox": ^0.27.8 + checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 languageName: node linkType: hard -"@jest/source-map@npm:^29.2.0": - version: 29.2.0 - resolution: "@jest/source-map@npm:29.2.0" +"@jest/source-map@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/source-map@npm:29.6.3" dependencies: - "@jridgewell/trace-mapping": ^0.3.15 + "@jridgewell/trace-mapping": ^0.3.18 callsites: ^3.0.0 graceful-fs: ^4.2.9 - checksum: 09f76ab63d15dcf44b3035a79412164f43be34ec189575930f1a00c87e36ea0211ebd6a4fbe2253c2516e19b49b131f348ddbb86223ca7b6bbac9a6bc76ec96e + checksum: bcc5a8697d471396c0003b0bfa09722c3cd879ad697eb9c431e6164e2ea7008238a01a07193dfe3cbb48b1d258eb7251f6efcea36f64e1ebc464ea3c03ae2deb languageName: node linkType: hard -"@jest/test-result@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/test-result@npm:29.3.1" +"@jest/test-result@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-result@npm:29.7.0" dependencies: - "@jest/console": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/console": ^29.7.0 + "@jest/types": ^29.6.3 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: b24ac283321189b624c372a6369c0674b0ee6d9e3902c213452c6334d037113718156b315364bee8cee0f03419c2bdff5e2c63967193fb422830e79cbb26866a + checksum: 67b6317d526e335212e5da0e768e3b8ab8a53df110361b80761353ad23b6aea4432b7c5665bdeb87658ea373b90fb1afe02ed3611ef6c858c7fba377505057fa languageName: node linkType: hard -"@jest/test-sequencer@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/test-sequencer@npm:29.3.1" +"@jest/test-sequencer@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-sequencer@npm:29.7.0" dependencies: - "@jest/test-result": ^29.3.1 + "@jest/test-result": ^29.7.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.3.1 + jest-haste-map: ^29.7.0 slash: ^3.0.0 - checksum: a8325b1ea0ce644486fb63bb67cedd3524d04e3d7b1e6c1e3562bf12ef477ecd0cf34044391b2a07d925e1c0c8b4e0f3285035ceca3a474a2c55980f1708caf3 + checksum: 73f43599017946be85c0b6357993b038f875b796e2f0950487a82f4ebcb115fa12131932dd9904026b4ad8be131fe6e28bd8d0aa93b1563705185f9804bff8bd languageName: node linkType: hard @@ -1278,26 +957,26 @@ __metadata: languageName: node linkType: hard -"@jest/transform@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/transform@npm:29.3.1" +"@jest/transform@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/transform@npm:29.7.0" dependencies: "@babel/core": ^7.11.6 - "@jest/types": ^29.3.1 - "@jridgewell/trace-mapping": ^0.3.15 + "@jest/types": ^29.6.3 + "@jridgewell/trace-mapping": ^0.3.18 babel-plugin-istanbul: ^6.1.1 chalk: ^4.0.0 convert-source-map: ^2.0.0 fast-json-stable-stringify: ^2.1.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.3.1 - jest-regex-util: ^29.2.0 - jest-util: ^29.3.1 + jest-haste-map: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 micromatch: ^4.0.4 pirates: ^4.0.4 slash: ^3.0.0 - write-file-atomic: ^4.0.1 - checksum: 673df5900ffc95bc811084e09d6e47948034dea6ab6cc4f81f80977e3a52468a6c2284d0ba9796daf25a62ae50d12f7e97fc9a3a0c587f11f2a479ff5493ca53 + write-file-atomic: ^4.0.2 + checksum: 0f8ac9f413903b3cb6d240102db848f2a354f63971ab885833799a9964999dd51c388162106a807f810071f864302cdd8e3f0c241c29ce02d85a36f18f3f40ab languageName: node linkType: hard @@ -1314,51 +993,17 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^27.2.5": - version: 27.2.5 - resolution: "@jest/types@npm:27.2.5" +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" dependencies: - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^16.0.0 - chalk: ^4.0.0 - checksum: 322603c24354a5333b5b7a670464422a46e0244a5a96a35552a7018eb4ac2e84c3b7657336b0ea6aa114963f9b6d0da8b8f6f963cb044fea9e7bc04d464b0ab1 - languageName: node - linkType: hard - -"@jest/types@npm:^29.3.1": - version: 29.3.1 - resolution: "@jest/types@npm:29.3.1" - dependencies: - "@jest/schemas": ^29.0.0 + "@jest/schemas": ^29.6.3 "@types/istanbul-lib-coverage": ^2.0.0 "@types/istanbul-reports": ^3.0.0 "@types/node": "*" "@types/yargs": ^17.0.8 chalk: ^4.0.0 - checksum: 6f9faf27507b845ff3839c1adc6dbd038d7046d03d37e84c9fc956f60718711a801a5094c7eeee6b39ccf42c0ab61347fdc0fa49ab493ae5a8efd2fd41228ee8 - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.1.0": - version: 0.1.1 - resolution: "@jridgewell/gen-mapping@npm:0.1.1" - dependencies: - "@jridgewell/set-array": ^1.0.0 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: 3bcc21fe786de6ffbf35c399a174faab05eb23ce6a03e8769569de28abbf4facc2db36a9ddb0150545ae23a8d35a7cf7237b2aa9e9356a7c626fb4698287d5cc - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.2": - version: 0.3.2 - resolution: "@jridgewell/gen-mapping@npm:0.3.2" - dependencies: - "@jridgewell/set-array": ^1.0.1 - "@jridgewell/sourcemap-codec": ^1.4.10 - "@jridgewell/trace-mapping": ^0.3.9 - checksum: 1832707a1c476afebe4d0fbbd4b9434fdb51a4c3e009ab1e9938648e21b7a97049fa6009393bdf05cab7504108413441df26d8a3c12193996e65493a4efb6882 + checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc languageName: node linkType: hard @@ -1373,34 +1018,13 @@ __metadata: languageName: node linkType: hard -"@jridgewell/resolve-uri@npm:3.1.0": - version: 3.1.0 - resolution: "@jridgewell/resolve-uri@npm:3.1.0" - checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:^3.0.3": - version: 3.0.7 - resolution: "@jridgewell/resolve-uri@npm:3.0.7" - checksum: 94f454f4cef8f0acaad85745fd3ca6cd0d62ef731cf9f952ecb89b8b2ce5e20998cd52be31311cedc5fa5b28b1708a15f3ad9df0fe1447ee4f42959b036c4b5b - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:^3.1.0": +"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": version: 3.1.2 resolution: "@jridgewell/resolve-uri@npm:3.1.2" checksum: 83b85f72c59d1c080b4cbec0fef84528963a1b5db34e4370fa4bd1e3ff64a0d80e0cee7369d11d73c704e0286fb2865b530acac7a871088fbe92b5edf1000870 languageName: node linkType: hard -"@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1": - version: 1.1.2 - resolution: "@jridgewell/set-array@npm:1.1.2" - checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e - languageName: node - linkType: hard - "@jridgewell/set-array@npm:^1.2.1": version: 1.2.1 resolution: "@jridgewell/set-array@npm:1.2.1" @@ -1418,21 +1042,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:1.4.14": - version: 1.4.14 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" - checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.10": - version: 1.4.13 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.13" - checksum: f14449096f60a5f921262322fef65ce0bbbfb778080b3b20212080bcefdeba621c43a58c27065bd536ecb4cc767b18eb9c45f15b6b98a4970139572b60603a1c - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.14": +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": version: 1.5.0 resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" checksum: 05df4f2538b3b0f998ea4c1cd34574d0feba216fa5d4ccaef0187d12abf82eafe6021cec8b49f9bb4d90f2ba4582ccc581e72986a5fcf4176ae0cfeb04cf52ec @@ -1449,17 +1059,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.17 - resolution: "@jridgewell/trace-mapping@npm:0.3.17" - dependencies: - "@jridgewell/resolve-uri": 3.1.0 - "@jridgewell/sourcemap-codec": 1.4.14 - checksum: 9d703b859cff5cd83b7308fd457a431387db5db96bd781a63bf48e183418dd9d3d44e76b9e4ae13237f6abeeb25d739ec9215c1d5bfdd08f66f750a50074a339 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.20, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.20, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": version: 0.3.25 resolution: "@jridgewell/trace-mapping@npm:0.3.25" dependencies: @@ -1469,6 +1069,13 @@ __metadata: languageName: node linkType: hard +"@leichtgewicht/ip-codec@npm:^2.0.1": + version: 2.0.5 + resolution: "@leichtgewicht/ip-codec@npm:2.0.5" + checksum: 4fcd025d0a923cb6b87b631a83436a693b255779c583158bbeacde6b4dd75b94cc1eba1c9c188de5fc36c218d160524ea08bfe4ef03a056b00ff14126d66f881 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -1496,37 +1103,32 @@ __metadata: languageName: node linkType: hard -"@npmcli/fs@npm:^1.0.0": - version: 1.0.0 - resolution: "@npmcli/fs@npm:1.0.0" +"@npmcli/agent@npm:^2.0.0": + version: 2.2.2 + resolution: "@npmcli/agent@npm:2.2.2" dependencies: - "@gar/promisify": ^1.0.1 - semver: ^7.3.5 - checksum: f2b4990107dd2a5b18794c89aaff6f62f3a67883d49a20602fdfc353cbc7f8c5fd50edeffdc769e454900e01b8b8e43d0b9eb524d00963d69f3c829be1a2e8ac + agent-base: ^7.1.0 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.1 + lru-cache: ^10.0.1 + socks-proxy-agent: ^8.0.3 + checksum: 67de7b88cc627a79743c88bab35e023e23daf13831a8aa4e15f998b92f5507b644d8ffc3788afc8e64423c612e0785a6a92b74782ce368f49a6746084b50d874 languageName: node linkType: hard -"@npmcli/move-file@npm:^1.0.1": - version: 1.1.2 - resolution: "@npmcli/move-file@npm:1.1.2" +"@npmcli/fs@npm:^3.1.0": + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" dependencies: - mkdirp: ^1.0.4 - rimraf: ^3.0.2 - checksum: c96381d4a37448ea280951e46233f7e541058cf57a57d4094dd4bdcaae43fa5872b5f2eb6bfb004591a68e29c5877abe3cdc210cb3588cbf20ab2877f31a7de7 + semver: ^7.3.5 + checksum: d960cab4b93adcb31ce223bfb75c5714edbd55747342efb67dcc2f25e023d930a7af6ece3e75f2f459b6f38fc14d031c766f116cd124fdc937fd33112579e820 languageName: node linkType: hard -"@pkgr/utils@npm:^2.3.1": - version: 2.3.1 - resolution: "@pkgr/utils@npm:2.3.1" - dependencies: - cross-spawn: ^7.0.3 - is-glob: ^4.0.3 - open: ^8.4.0 - picocolors: ^1.0.0 - tiny-glob: ^0.2.9 - tslib: ^2.4.0 - checksum: 118a1971120253740121a1db0a6658c21195b7da962acf9c124b507a3df707cfc97b0b84a16edcbd4352853b182e8337da9fc6e8e3d06c60d75ae4fb42321c75 +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f languageName: node linkType: hard @@ -1535,11 +1137,11 @@ __metadata: resolution: "@react-facet/core@workspace:packages/@react-facet/core" dependencies: "@react-facet/dom-fiber-testing-library": 0.6.1 - "@types/react": ^18.0.8 + "@types/react": ^18.2.0 "@types/react-reconciler": ^0.28.0 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: 18.2.0 + react: ^18.2.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: @@ -1554,7 +1156,7 @@ __metadata: "@react-facet/core": 0.6.1 "@react-facet/dom-fiber-testing-library": 0.6.1 "@testing-library/jest-dom": ^5.16.5 - "@types/react": ^18.0.8 + "@types/react": ^18.2.0 "@types/rimraf": ^3 cross-env: ^7.0.3 react: 18.2.0 @@ -1573,7 +1175,7 @@ __metadata: dependencies: "@react-facet/dom-fiber": 0.6.1 "@testing-library/dom": ^8.20.0 - react: 18.2.0 + react: ^18.2.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: @@ -1588,11 +1190,11 @@ __metadata: dependencies: "@react-facet/core": 0.6.1 "@react-facet/dom-fiber-testing-library": "workspace:^" - "@types/react": ^17.0.11 + "@types/react": ^18.2.0 "@types/react-reconciler": ^0.28.0 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: 18.2.0 + react: ^18.2.0 react-reconciler: ^0.28.0 rimraf: ^3.0.2 typescript: ^4.8.2 @@ -1618,10 +1220,10 @@ __metadata: dependencies: "@react-facet/core": 0.6.1 "@react-facet/dom-fiber-testing-library": 0.6.1 - "@types/react": ^18.0.8 + "@types/react": ^18.2.0 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: 18.2.0 + react: ^18.2.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: @@ -1636,10 +1238,10 @@ __metadata: dependencies: "@react-facet/core": 0.6.1 "@testing-library/jest-dom": ^5.16.5 - "@types/react": ^18.0.8 + "@types/react": ^18.2.0 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: 18.2.0 + react: ^18.2.0 react-dom: ^18.2.0 rimraf: ^3.0.2 typescript: ^4.8.2 @@ -1649,50 +1251,50 @@ __metadata: languageName: unknown linkType: soft -"@sinclair/typebox@npm:^0.24.1": - version: 0.24.51 - resolution: "@sinclair/typebox@npm:0.24.51" - checksum: fd0d855e748ef767eb19da1a60ed0ab928e91e0f358c1dd198d600762c0015440b15755e96d1176e2a0db7e09c6a64ed487828ee10dd0c3e22f61eb09c478cd0 +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 00bd7362a3439021aa1ea51b0e0d0a0e8ca1351a3d54c606b115fdcc49b51b16db6e5f43b4fe7a28c38688523e22a94d49dd31168868b655f0d4d50f032d07a1 languageName: node linkType: hard -"@sinonjs/commons@npm:^1.7.0": - version: 1.8.3 - resolution: "@sinonjs/commons@npm:1.8.3" +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.1 + resolution: "@sinonjs/commons@npm:3.0.1" dependencies: type-detect: 4.0.8 - checksum: 6159726db5ce6bf9f2297f8427f7ca5b3dff45b31e5cee23496f1fa6ef0bb4eab878b23fb2c5e6446381f6a66aba4968ef2fc255c1180d753d4b8c271636a2e5 + checksum: a7c3e7cc612352f4004873747d9d8b2d4d90b13a6d483f685598c945a70e734e255f1ca5dc49702515533c403b32725defff148177453b3f3915bcb60e9d4601 languageName: node linkType: hard -"@sinonjs/fake-timers@npm:^9.1.2": - version: 9.1.2 - resolution: "@sinonjs/fake-timers@npm:9.1.2" +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" dependencies: - "@sinonjs/commons": ^1.7.0 - checksum: 7d3aef54e17c1073101cb64d953157c19d62a40e261a30923fa1ee337b049c5f29cc47b1f0c477880f42b5659848ba9ab897607ac8ea4acd5c30ddcfac57fca6 + "@sinonjs/commons": ^3.0.0 + checksum: 614d30cb4d5201550c940945d44c9e0b6d64a888ff2cd5b357f95ad6721070d6b8839cd10e15b76bf5e14af0bcc1d8f9ec00d49a46318f1f669a4bec1d7f3148 languageName: node linkType: hard "@testing-library/dom@npm:^8.20.0": - version: 8.20.0 - resolution: "@testing-library/dom@npm:8.20.0" + version: 8.20.1 + resolution: "@testing-library/dom@npm:8.20.1" dependencies: "@babel/code-frame": ^7.10.4 "@babel/runtime": ^7.12.5 "@types/aria-query": ^5.0.1 - aria-query: ^5.0.0 + aria-query: 5.1.3 chalk: ^4.1.0 dom-accessibility-api: ^0.5.9 - lz-string: ^1.4.4 + lz-string: ^1.5.0 pretty-format: ^27.0.2 - checksum: 1e599129a2fe91959ce80900a0a4897232b89e2a8e22c1f5950c36d39c97629ea86b4986b60b173b5525a05de33fde1e35836ea597b03de78cc51b122835c6f0 + checksum: 06fc8dc67849aadb726cbbad0e7546afdf8923bd39acb64c576d706249bd7d0d05f08e08a31913fb621162e3b9c2bd0dce15964437f030f9fa4476326fdd3007 languageName: node linkType: hard "@testing-library/jest-dom@npm:^5.16.5": - version: 5.16.5 - resolution: "@testing-library/jest-dom@npm:5.16.5" + version: 5.17.0 + resolution: "@testing-library/jest-dom@npm:5.17.0" dependencies: "@adobe/css-tools": ^4.0.1 "@babel/runtime": ^7.9.2 @@ -1703,14 +1305,7 @@ __metadata: dom-accessibility-api: ^0.5.6 lodash: ^4.17.15 redent: ^3.0.0 - checksum: 94911f901a8031f3e489d04ac057cb5373621230f5d92bed80e514e24b069fb58a3166d1dd86963e55f078a1bd999da595e2ab96ed95f452d477e272937d792a - languageName: node - linkType: hard - -"@tootallnate/once@npm:1": - version: 1.1.2 - resolution: "@tootallnate/once@npm:1.1.2" - checksum: e1fb1bbbc12089a0cb9433dc290f97bddd062deadb6178ce9bcb93bb7c1aecde5e60184bc7065aec42fe1663622a213493c48bbd4972d931aae48315f18e1be9 + checksum: 9f28dbca8b50d7c306aae40c3aa8e06f0e115f740360004bd87d57f95acf7ab4b4f4122a7399a76dbf2bdaaafb15c99cc137fdcb0ae457a92e2de0f3fbf9b03b languageName: node linkType: hard @@ -1722,91 +1317,116 @@ __metadata: linkType: hard "@tsconfig/node10@npm:^1.0.7": - version: 1.0.8 - resolution: "@tsconfig/node10@npm:1.0.8" - checksum: b8d5fffbc6b17ef64ef74f7fdbccee02a809a063ade785c3648dae59406bc207f70ea2c4296f92749b33019fa36a5ae716e42e49cc7f1bbf0fd147be0d6b970a + version: 1.0.11 + resolution: "@tsconfig/node10@npm:1.0.11" + checksum: 51fe47d55fe1b80ec35e6e5ed30a13665fd3a531945350aa74a14a1e82875fb60b350c2f2a5e72a64831b1b6bc02acb6760c30b3738b54954ec2dea82db7a267 languageName: node linkType: hard "@tsconfig/node12@npm:^1.0.7": - version: 1.0.9 - resolution: "@tsconfig/node12@npm:1.0.9" - checksum: a01b2400ab3582b86b589c6d31dcd0c0656f333adecde85d6d7d4086adb059808b82692380bb169546d189bf771ae21d02544a75b57bd6da4a5dd95f8567bec9 + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a languageName: node linkType: hard "@tsconfig/node14@npm:^1.0.0": - version: 1.0.1 - resolution: "@tsconfig/node14@npm:1.0.1" - checksum: 976345e896c0f059867f94f8d0f6ddb8b1844fb62bf36b727de8a9a68f024857e5db97ed51d3325e23e0616a5e48c034ff51a8d595b3fe7e955f3587540489be + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d languageName: node linkType: hard "@tsconfig/node16@npm:^1.0.2": - version: 1.0.2 - resolution: "@tsconfig/node16@npm:1.0.2" - checksum: ca94d3639714672bbfd55f03521d3f56bb6a25479bd425da81faf21f13e1e9d15f40f97377dedbbf477a5841c5b0c8f4cd1b391f33553d750b9202c54c2c07aa + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff languageName: node linkType: hard "@types/aria-query@npm:^5.0.1": - version: 5.0.1 - resolution: "@types/aria-query@npm:5.0.1" - checksum: 69fd7cceb6113ed370591aef04b3fd0742e9a1b06dd045c43531448847b85de181495e4566f98e776b37c422a12fd71866e0a1dfd904c5ec3f84d271682901de - languageName: node - linkType: hard - -"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.7": - version: 7.1.16 - resolution: "@types/babel__core@npm:7.1.16" - dependencies: - "@babel/parser": ^7.1.0 - "@babel/types": ^7.0.0 - "@types/babel__generator": "*" - "@types/babel__template": "*" - "@types/babel__traverse": "*" - checksum: d5aa154ce8c63e5fd47f5b9286a2689eea1e6dd3e1005b0c608bfe72363a44cb32be1e104f81d4b976e8a9f1f802d03184e64a055984fd43a359c5518a0f94cf + version: 5.0.4 + resolution: "@types/aria-query@npm:5.0.4" + checksum: ad8b87e4ad64255db5f0a73bc2b4da9b146c38a3a8ab4d9306154334e0fc67ae64e76bfa298eebd1e71830591fb15987e5de7111bdb36a2221bdc379e3415fb0 languageName: node linkType: hard -"@types/babel__core@npm:^7.1.14": - version: 7.1.20 - resolution: "@types/babel__core@npm:7.1.20" +"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.1.7": + version: 7.20.5 + resolution: "@types/babel__core@npm:7.20.5" dependencies: - "@babel/parser": ^7.1.0 - "@babel/types": ^7.0.0 + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 "@types/babel__generator": "*" "@types/babel__template": "*" "@types/babel__traverse": "*" - checksum: a09c4f0456552547a5b8a5a009a3daec4d362f622168f8e08bda0ded2da0a65ab0b1642e23c433b3616721f5701dc34a996c5bde5baeaea53eda98f438043f2c + checksum: a3226f7930b635ee7a5e72c8d51a357e799d19cbf9d445710fa39ab13804f79ab1a54b72ea7d8e504659c7dfc50675db974b526142c754398d7413aa4bc30845 languageName: node linkType: hard "@types/babel__generator@npm:*": - version: 7.6.3 - resolution: "@types/babel__generator@npm:7.6.3" + version: 7.6.8 + resolution: "@types/babel__generator@npm:7.6.8" dependencies: "@babel/types": ^7.0.0 - checksum: 0aa1881c47e3e471cabb9183ae42176591b168a6fe4714d205aec33a7e480d65a8a1ba7fcd9678337aadc34059dc5baa04841e5adfbbe67ae33bad79e7633b8e + checksum: 5b332ea336a2efffbdeedb92b6781949b73498606ddd4205462f7d96dafd45ff3618770b41de04c4881e333dd84388bfb8afbdf6f2764cbd98be550d85c6bb48 languageName: node linkType: hard "@types/babel__template@npm:*": - version: 7.4.1 - resolution: "@types/babel__template@npm:7.4.1" + version: 7.4.4 + resolution: "@types/babel__template@npm:7.4.4" dependencies: "@babel/parser": ^7.1.0 "@babel/types": ^7.0.0 - checksum: 649fe8b42c2876be1fd28c6ed9b276f78152d5904ec290b6c861d9ef324206e0a5c242e8305c421ac52ecf6358fa7e32ab7a692f55370484825c1df29b1596ee + checksum: d7a02d2a9b67e822694d8e6a7ddb8f2b71a1d6962dfd266554d2513eefbb205b33ca71a0d163b1caea3981ccf849211f9964d8bd0727124d18ace45aa6c9ae29 languageName: node linkType: hard "@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": - version: 7.14.2 - resolution: "@types/babel__traverse@npm:7.14.2" + version: 7.20.6 + resolution: "@types/babel__traverse@npm:7.20.6" + dependencies: + "@babel/types": ^7.20.7 + checksum: 2bdc65eb62232c2d5c1086adeb0c31e7980e6fd7e50a3483b4a724a1a1029c84d9cb59749cf8de612f9afa2bc14c85b8f50e64e21f8a4398fa77eb9059a4283c + languageName: node + linkType: hard + +"@types/body-parser@npm:*": + version: 1.19.5 + resolution: "@types/body-parser@npm:1.19.5" + dependencies: + "@types/connect": "*" + "@types/node": "*" + checksum: 1e251118c4b2f61029cc43b0dc028495f2d1957fe8ee49a707fb940f86a9bd2f9754230805598278fe99958b49e9b7e66eec8ef6a50ab5c1f6b93e1ba2aaba82 + languageName: node + linkType: hard + +"@types/bonjour@npm:^3.5.9": + version: 3.5.13 + resolution: "@types/bonjour@npm:3.5.13" + dependencies: + "@types/node": "*" + checksum: e827570e097bd7d625a673c9c208af2d1a22fa3885c0a1646533cf24394c839c3e5f60ac1bc60c0ddcc69c0615078c9fb2c01b42596c7c582d895d974f2409ee + languageName: node + linkType: hard + +"@types/connect-history-api-fallback@npm:^1.3.5": + version: 1.5.4 + resolution: "@types/connect-history-api-fallback@npm:1.5.4" + dependencies: + "@types/express-serve-static-core": "*" + "@types/node": "*" + checksum: e1dee43b8570ffac02d2d47a2b4ba80d3ca0dd1840632dafb221da199e59dbe3778d3d7303c9e23c6b401f37c076935a5bc2aeae1c4e5feaefe1c371fe2073fd + languageName: node + linkType: hard + +"@types/connect@npm:*": + version: 3.4.38 + resolution: "@types/connect@npm:3.4.38" dependencies: - "@babel/types": ^7.3.0 - checksum: a797ea09c72307569e3ee08aa3900ca744ce3091114084f2dc59b67a45ee7d01df7865252790dbfa787a7915ce892cdc820c9b920f3683292765fc656b08dc63 + "@types/node": "*" + checksum: 7eb1bc5342a9604facd57598a6c62621e244822442976c443efb84ff745246b10d06e8b309b6e80130026a396f19bf6793b7cecd7380169f369dac3bfc46fb99 languageName: node linkType: hard @@ -1821,29 +1441,46 @@ __metadata: linkType: hard "@types/eslint@npm:*": - version: 7.28.1 - resolution: "@types/eslint@npm:7.28.1" + version: 9.6.0 + resolution: "@types/eslint@npm:9.6.0" dependencies: "@types/estree": "*" "@types/json-schema": "*" - checksum: 16086d00c2f56b16471fd02c2b495b07e3b84b57113fe34d94b57fb9fc0a5a85f6b87d787051f5d6acb859f6addda9b1e747d1a83ee08cac330d0f26c357fb9e + checksum: 7be4b1d24f3df30b28e9cbaac6a5fa14ec1ceca7c173d9605c0ec6e0d1dcdba0452d326dd695dd980f5c14b42aa09fe41675c4f09ffc82db4f466588d3f837cb languageName: node linkType: hard -"@types/estree@npm:*": - version: 0.0.50 - resolution: "@types/estree@npm:0.0.50" - checksum: 9a2b6a4a8c117f34d08fbda5e8f69b1dfb109f7d149b60b00fd7a9fb6ac545c078bc590aa4ec2f0a256d680cf72c88b3b28b60c326ee38a7bc8ee1ee95624922 - languageName: node - linkType: hard - -"@types/estree@npm:^1.0.5": +"@types/estree@npm:*, @types/estree@npm:^1.0.5": version: 1.0.5 resolution: "@types/estree@npm:1.0.5" checksum: dd8b5bed28e6213b7acd0fb665a84e693554d850b0df423ac8076cc3ad5823a6bc26b0251d080bdc545af83179ede51dd3f6fa78cad2c46ed1f29624ddf3e41a languageName: node linkType: hard +"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.33": + version: 4.19.5 + resolution: "@types/express-serve-static-core@npm:4.19.5" + dependencies: + "@types/node": "*" + "@types/qs": "*" + "@types/range-parser": "*" + "@types/send": "*" + checksum: 72076c2f8df55e89136d4343fc874050d56c0f4afd885772a8aa506b98c3f4f3ddc7dcba42295a8b931c61000234fd679aec79ef50db15f376bf37d46234939a + languageName: node + linkType: hard + +"@types/express@npm:*, @types/express@npm:^4.17.13": + version: 4.17.21 + resolution: "@types/express@npm:4.17.21" + dependencies: + "@types/body-parser": "*" + "@types/express-serve-static-core": ^4.17.33 + "@types/qs": "*" + "@types/serve-static": "*" + checksum: fb238298630370a7392c7abdc80f495ae6c716723e114705d7e3fb67e3850b3859bbfd29391463a3fb8c0b32051847935933d99e719c0478710f8098ee7091c5 + languageName: node + linkType: hard + "@types/fs-extra@npm:^9.0.12": version: 9.0.13 resolution: "@types/fs-extra@npm:9.0.13" @@ -1853,82 +1490,90 @@ __metadata: languageName: node linkType: hard -"@types/glob@npm:*, @types/glob@npm:^7": - version: 7.1.4 - resolution: "@types/glob@npm:7.1.4" +"@types/glob@npm:*": + version: 8.1.0 + resolution: "@types/glob@npm:8.1.0" dependencies: - "@types/minimatch": "*" + "@types/minimatch": ^5.1.2 "@types/node": "*" - checksum: 6911a956448f5eddea1e4371f814bf92072e8ceedba83de6ce2a6745938a6f0327376e1c0072fa0d7b3b73d84e255aafda53c1dff148225cfe542a8cc5d54b02 + checksum: 9101f3a9061e40137190f70626aa0e202369b5ec4012c3fabe6f5d229cce04772db9a94fa5a0eb39655e2e4ad105c38afbb4af56a56c0996a8c7d4fc72350e3d languageName: node linkType: hard -"@types/graceful-fs@npm:^4.1.2": - version: 4.1.5 - resolution: "@types/graceful-fs@npm:4.1.5" +"@types/glob@npm:^7": + version: 7.2.0 + resolution: "@types/glob@npm:7.2.0" dependencies: + "@types/minimatch": "*" "@types/node": "*" - checksum: d076bb61f45d0fc42dee496ef8b1c2f8742e15d5e47e90e20d0243386e426c04d4efd408a48875ab432f7960b4ce3414db20ed0fbbfc7bcc89d84e574f6e045a + checksum: 6ae717fedfdfdad25f3d5a568323926c64f52ef35897bcac8aca8e19bc50c0bd84630bbd063e5d52078b2137d8e7d3c26eabebd1a2f03ff350fff8a91e79fc19 languageName: node linkType: hard -"@types/graceful-fs@npm:^4.1.3": - version: 4.1.6 - resolution: "@types/graceful-fs@npm:4.1.6" +"@types/graceful-fs@npm:^4.1.2, @types/graceful-fs@npm:^4.1.3": + version: 4.1.9 + resolution: "@types/graceful-fs@npm:4.1.9" dependencies: "@types/node": "*" - checksum: c3070ccdc9ca0f40df747bced1c96c71a61992d6f7c767e8fd24bb6a3c2de26e8b84135ede000b7e79db530a23e7e88dcd9db60eee6395d0f4ce1dae91369dd4 + checksum: 79d746a8f053954bba36bd3d94a90c78de995d126289d656fb3271dd9f1229d33f678da04d10bce6be440494a5a73438e2e363e92802d16b8315b051036c5256 languageName: node linkType: hard "@types/html-minifier-terser@npm:^6.0.0": - version: 6.0.0 - resolution: "@types/html-minifier-terser@npm:6.0.0" - checksum: 8f602498d726c9fd30d2b895478b4e7cb1f91558d892e44f54533669dbbbfae572c5fb2b04ee4fa5cbe7f8d59982d2067bf5c2931a3aefcf8dac590e4494b103 + version: 6.1.0 + resolution: "@types/html-minifier-terser@npm:6.1.0" + checksum: eb843f6a8d662d44fb18ec61041117734c6aae77aa38df1be3b4712e8e50ffaa35f1e1c92fdd0fde14a5675fecf457abcd0d15a01fae7506c91926176967f452 + languageName: node + linkType: hard + +"@types/http-errors@npm:*": + version: 2.0.4 + resolution: "@types/http-errors@npm:2.0.4" + checksum: 1f3d7c3b32c7524811a45690881736b3ef741bf9849ae03d32ad1ab7062608454b150a4e7f1351f83d26a418b2d65af9bdc06198f1c079d75578282884c4e8e3 languageName: node linkType: hard -"@types/http-proxy@npm:^1.17.5": - version: 1.17.7 - resolution: "@types/http-proxy@npm:1.17.7" +"@types/http-proxy@npm:^1.17.8": + version: 1.17.15 + resolution: "@types/http-proxy@npm:1.17.15" dependencies: "@types/node": "*" - checksum: 88f9c75ca65378d0287d8d0b1dbeed372c8267f4841fe2f6f2d759522494382d3943bc6cc774bef7dd125464a266bafeda813d3658b17a2d1e74acc4efb6e21c + checksum: d96eaf4e22232b587b46256b89c20525c453216684481015cf50fb385b0b319b883749ccb77dee9af57d107e8440cdacd56f4234f65176d317e9777077ff5bf3 languageName: node linkType: hard "@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": - version: 2.0.3 - resolution: "@types/istanbul-lib-coverage@npm:2.0.3" - checksum: 0650cba4be8f464bee89b9de0b71a5ea3b5cc676ce24e1196b5d6a51542ce9e613ae4549bf19756bb33dbbbb32b47931040266100062bfb197c597d73e341eb0 + version: 2.0.6 + resolution: "@types/istanbul-lib-coverage@npm:2.0.6" + checksum: 3feac423fd3e5449485afac999dcfcb3d44a37c830af898b689fadc65d26526460bedb889db278e0d4d815a670331796494d073a10ee6e3a6526301fe7415778 languageName: node linkType: hard "@types/istanbul-lib-report@npm:*": - version: 3.0.0 - resolution: "@types/istanbul-lib-report@npm:3.0.0" + version: 3.0.3 + resolution: "@types/istanbul-lib-report@npm:3.0.3" dependencies: "@types/istanbul-lib-coverage": "*" - checksum: 656398b62dc288e1b5226f8880af98087233cdb90100655c989a09f3052b5775bf98ba58a16c5ae642fb66c61aba402e07a9f2bff1d1569e3b306026c59f3f36 + checksum: b91e9b60f865ff08cb35667a427b70f6c2c63e88105eadd29a112582942af47ed99c60610180aa8dcc22382fa405033f141c119c69b95db78c4c709fbadfeeb4 languageName: node linkType: hard "@types/istanbul-reports@npm:^3.0.0": - version: 3.0.1 - resolution: "@types/istanbul-reports@npm:3.0.1" + version: 3.0.4 + resolution: "@types/istanbul-reports@npm:3.0.4" dependencies: "@types/istanbul-lib-report": "*" - checksum: f1ad54bc68f37f60b30c7915886b92f86b847033e597f9b34f2415acdbe5ed742fa559a0a40050d74cdba3b6a63c342cac1f3a64dba5b68b66a6941f4abd7903 + checksum: 93eb18835770b3431f68ae9ac1ca91741ab85f7606f310a34b3586b5a34450ec038c3eed7ab19266635499594de52ff73723a54a72a75b9f7d6a956f01edee95 languageName: node linkType: hard "@types/jest@npm:*": - version: 27.0.2 - resolution: "@types/jest@npm:27.0.2" + version: 29.5.12 + resolution: "@types/jest@npm:29.5.12" dependencies: - jest-diff: ^27.0.0 - pretty-format: ^27.0.0 - checksum: 814ad5f5d2f277849f47e52906da4b745758e555630fc8cb46a071bde648eefeffb1b35710c530a8cea7fc4ea7c1d813812c120484bf7902ab6c5e473cdd49c9 + expect: ^29.0.0 + pretty-format: ^29.0.0 + checksum: 19b1efdeed9d9a60a81edc8226cdeae5af7479e493eaed273e01243891c9651f7b8b4c08fc633a7d0d1d379b091c4179bbaa0807af62542325fd72f2dd17ce1c languageName: node linkType: hard @@ -1943,10 +1588,10 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8": - version: 7.0.9 - resolution: "@types/json-schema@npm:7.0.9" - checksum: 259d0e25f11a21ba5c708f7ea47196bd396e379fddb79c76f9f4f62c945879dc21657904914313ec2754e443c5018ea8372362f323f30e0792897fdb2098a705 +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 languageName: node linkType: hard @@ -1957,105 +1602,116 @@ __metadata: languageName: node linkType: hard -"@types/minimatch@npm:*": - version: 3.0.5 - resolution: "@types/minimatch@npm:3.0.5" - checksum: c41d136f67231c3131cf1d4ca0b06687f4a322918a3a5adddc87ce90ed9dbd175a3610adee36b106ae68c0b92c637c35e02b58c8a56c424f71d30993ea220b92 +"@types/mime@npm:^1": + version: 1.3.5 + resolution: "@types/mime@npm:1.3.5" + checksum: e29a5f9c4776f5229d84e525b7cd7dd960b51c30a0fb9a028c0821790b82fca9f672dab56561e2acd9e8eed51d431bde52eafdfef30f643586c4162f1aecfc78 languageName: node linkType: hard -"@types/node@npm:*": - version: 16.10.3 - resolution: "@types/node@npm:16.10.3" - checksum: 3fd429bce8a4acb497dcc62b536782a5e87ccf7cd91d64a78b263ae5d66cb72bf84be9eeeff6f84ae0567b065a40b267caa66d311f9e094990a5847bbd168a29 +"@types/minimatch@npm:*, @types/minimatch@npm:^5.1.2": + version: 5.1.2 + resolution: "@types/minimatch@npm:5.1.2" + checksum: 0391a282860c7cb6fe262c12b99564732401bdaa5e395bee9ca323c312c1a0f45efbf34dce974682036e857db59a5c9b1da522f3d6055aeead7097264c8705a8 languageName: node linkType: hard -"@types/prettier@npm:^2": - version: 2.4.1 - resolution: "@types/prettier@npm:2.4.1" - checksum: df330c2d6fe7c282839b0f17701e069a9c6c96d2ff54704e933a1b3c1b98844d963a7cb00c5629d173604892ceee802312bbaeb8a97f5da21e13db8f653b519e +"@types/node-forge@npm:^1.3.0": + version: 1.3.11 + resolution: "@types/node-forge@npm:1.3.11" + dependencies: + "@types/node": "*" + checksum: 1e86bd55b92a492eaafd75f6d01f31e7d86a5cdadd0c6bcdc0b1df4103b7f99bb75b832efd5217c7ddda5c781095dc086a868e20b9de00f5a427ddad4c296cd5 languageName: node linkType: hard -"@types/prettier@npm:^2.1.5": - version: 2.7.2 - resolution: "@types/prettier@npm:2.7.2" - checksum: b47d76a5252265f8d25dd2fe2a5a61dc43ba0e6a96ffdd00c594cb4fd74c1982c2e346497e3472805d97915407a09423804cc2110a0b8e1b22cffcab246479b7 +"@types/node@npm:*": + version: 22.4.2 + resolution: "@types/node@npm:22.4.2" + dependencies: + undici-types: ~6.19.2 + checksum: 4eb577b229789aaea50f1b157f615d6b33564e5e1a0b047d347a4b3cd891f04501ecb409f4622847d8cf4ff67482ec2d9b0391bad327ea73fd353b0da972aa82 + languageName: node + linkType: hard + +"@types/prettier@npm:^2": + version: 2.7.3 + resolution: "@types/prettier@npm:2.7.3" + checksum: 705384209cea6d1433ff6c187c80dcc0b95d99d5c5ce21a46a9a58060c527973506822e428789d842761e0280d25e3359300f017fbe77b9755bc772ab3dc2f83 languageName: node linkType: hard "@types/prop-types@npm:*": - version: 15.7.4 - resolution: "@types/prop-types@npm:15.7.4" - checksum: ef6e1899e59b876c273811b1bd845022fc66d5a3d11cb38a25b6c566b30514ae38fe20a40f67622f362a4f4f7f9224e22d8da101cff3d6e97e11d7b4c307cfc1 + version: 15.7.12 + resolution: "@types/prop-types@npm:15.7.12" + checksum: ac16cc3d0a84431ffa5cfdf89579ad1e2269549f32ce0c769321fdd078f84db4fbe1b461ed5a1a496caf09e637c0e367d600c541435716a55b1d9713f5035dfe languageName: node linkType: hard "@types/puppeteer@npm:^5.4.4": - version: 5.4.4 - resolution: "@types/puppeteer@npm:5.4.4" + version: 5.4.7 + resolution: "@types/puppeteer@npm:5.4.7" dependencies: "@types/node": "*" - checksum: 99aa9e8fe0234b5624e93b36e38b407c48e2b9663c46dfc651ee37819e7ce1d19dfcd61d5b3f23b3d0b0f606615e0f298a86b3116a1b3cd09aa139204731e3b1 + checksum: 491c0ca2d879b72e869f5152a9ea7de1356a66f44ef6210fdd5c5036d893b4ee2956212e2f3353c7045b9e56d1a4cea408f41a26d7cf3708774c4d6c19a7c654 + languageName: node + linkType: hard + +"@types/qs@npm:*": + version: 6.9.15 + resolution: "@types/qs@npm:6.9.15" + checksum: 97d8208c2b82013b618e7a9fc14df6bd40a73e1385ac479b6896bafc7949a46201c15f42afd06e86a05e914f146f495f606b6fb65610cc60cf2e0ff743ec38a2 languageName: node linkType: hard "@types/ramda@npm:^0": - version: 0.27.45 - resolution: "@types/ramda@npm:0.27.45" + version: 0.30.1 + resolution: "@types/ramda@npm:0.30.1" dependencies: - ts-toolbelt: ^6.15.1 - checksum: 524ca41dd99430e9fd86b402bf646e41aca5ba0db50c37f345d23894d5a109e3b76937de8c97027fa554cce366863f6f0257ae0992bedbf469c3fae9e1c41b0d + types-ramda: ^0.30.1 + checksum: 3975599065ebfb4a923566ec17e04e5c59ab3b010dc09fb4462393c0e1b6962ff88c852d43f0f524788e589efea09d0ccdf242306c32872d48caaf7ff0362934 languageName: node linkType: hard -"@types/react-reconciler@npm:^0.28.0": - version: 0.28.0 - resolution: "@types/react-reconciler@npm:0.28.0" - dependencies: - "@types/react": "*" - checksum: d7b3f870a9c2c0f6f9c27e3fedd4cb495bd377312d856ee846475152e8a817b032e47f8d349ec2a51a95be5c674a288288173ef658e469369d6fec1f77159cbb +"@types/range-parser@npm:*": + version: 1.2.7 + resolution: "@types/range-parser@npm:1.2.7" + checksum: 95640233b689dfbd85b8c6ee268812a732cf36d5affead89e806fe30da9a430767af8ef2cd661024fd97e19d61f3dec75af2df5e80ec3bea000019ab7028629a languageName: node linkType: hard -"@types/react@npm:*": - version: 17.0.27 - resolution: "@types/react@npm:17.0.27" +"@types/react-dom@npm:^18.2.0": + version: 18.3.0 + resolution: "@types/react-dom@npm:18.3.0" dependencies: - "@types/prop-types": "*" - "@types/scheduler": "*" - csstype: ^3.0.2 - checksum: 3a1147d963c16dc9bbea5afb20c4be94f2389cf4eca4c5fbe9b02f3406bd9957602c0459ea017c95f8c3d523221f572e8bd842f94654835776d4c2923357f9dc + "@types/react": "*" + checksum: a0cd9b1b815a6abd2a367a9eabdd8df8dd8f13f95897b2f9e1359ea3ac6619f957c1432ece004af7d95e2a7caddbba19faa045f831f32d6263483fc5404a7596 languageName: node linkType: hard -"@types/react@npm:^17.0.11": - version: 17.0.52 - resolution: "@types/react@npm:17.0.52" +"@types/react-reconciler@npm:^0.28.0": + version: 0.28.8 + resolution: "@types/react-reconciler@npm:0.28.8" dependencies: - "@types/prop-types": "*" - "@types/scheduler": "*" - csstype: ^3.0.2 - checksum: a51b98dd87838d161278fdf9dd78e6a4ff8c018f406d6647f77963e144fb52a8beee40c89fd0e7e840eaeaa8bd9fe2f34519410540b1a52d43a6f8b4d2fbce33 + "@types/react": "*" + checksum: 14565638bb34443212738f4dd2e3c9ebccfb5b42e3e94e50feef58dc661a0da3a4eab0d0191d9668e400b9f1dff6cb13fe23b5d1b00f4b13574071d9073c9229 languageName: node linkType: hard -"@types/react@npm:^18.0.8": - version: 18.0.8 - resolution: "@types/react@npm:18.0.8" +"@types/react@npm:*, @types/react@npm:^18.2.0": + version: 18.3.4 + resolution: "@types/react@npm:18.3.4" dependencies: "@types/prop-types": "*" - "@types/scheduler": "*" csstype: ^3.0.2 - checksum: 12d0e6bc390709926d8eaeb7d2edb4ef9c9fbe8eac41cb0619d958386700547bff91c880c2a12a9eb1e0d09afa4f1e86fd1b93164c627824465b72123f149f3b + checksum: 555ccd1af86a23c781dea0360de64b2f7a0708cdcbf9e6496744b77630065868526fd55147c727dc5ef11b7fd712b04f7898757a84c67e2eb9dfd4c4ead10d95 languageName: node linkType: hard -"@types/retry@npm:^0.12.0": - version: 0.12.1 - resolution: "@types/retry@npm:0.12.1" - checksum: 5f46b2556053655f78262bb33040dc58417c900457cc63ff37d6c35349814471453ef511af0cec76a540c601296cd2b22f64bab1ab649c0dacc0223765ba876c +"@types/retry@npm:0.12.0": + version: 0.12.0 + resolution: "@types/retry@npm:0.12.0" + checksum: 61a072c7639f6e8126588bf1eb1ce8835f2cb9c2aba795c4491cf6310e013267b0c8488039857c261c387e9728c1b43205099223f160bb6a76b4374f741b5603 languageName: node linkType: hard @@ -2069,76 +1725,108 @@ __metadata: languageName: node linkType: hard -"@types/scheduler@npm:*": - version: 0.16.2 - resolution: "@types/scheduler@npm:0.16.2" - checksum: b6b4dcfeae6deba2e06a70941860fb1435730576d3689225a421280b7742318d1548b3d22c1f66ab68e414f346a9542f29240bc955b6332c5b11e561077583bc +"@types/send@npm:*": + version: 0.17.4 + resolution: "@types/send@npm:0.17.4" + dependencies: + "@types/mime": ^1 + "@types/node": "*" + checksum: cf4db48251bbb03cd6452b4de6e8e09e2d75390a92fd798eca4a803df06444adc94ed050246c94c7ed46fb97be1f63607f0e1f13c3ce83d71788b3e08640e5e0 + languageName: node + linkType: hard + +"@types/serve-index@npm:^1.9.1": + version: 1.9.4 + resolution: "@types/serve-index@npm:1.9.4" + dependencies: + "@types/express": "*" + checksum: 72727c88d54da5b13275ebfb75dcdc4aa12417bbe9da1939e017c4c5f0c906fae843aa4e0fbfe360e7ee9df2f3d388c21abfc488f77ce58693fb57809f8ded92 + languageName: node + linkType: hard + +"@types/serve-static@npm:*, @types/serve-static@npm:^1.13.10": + version: 1.15.7 + resolution: "@types/serve-static@npm:1.15.7" + dependencies: + "@types/http-errors": "*" + "@types/node": "*" + "@types/send": "*" + checksum: bbbf00dbd84719da2250a462270dc68964006e8d62f41fe3741abd94504ba3688f420a49afb2b7478921a1544d3793183ffa097c5724167da777f4e0c7f1a7d6 + languageName: node + linkType: hard + +"@types/sockjs@npm:^0.3.33": + version: 0.3.36 + resolution: "@types/sockjs@npm:0.3.36" + dependencies: + "@types/node": "*" + checksum: b4b5381122465d80ea8b158537c00bc82317222d3fb31fd7229ff25b31fa89134abfbab969118da55622236bf3d8fee75759f3959908b5688991f492008f29bc languageName: node linkType: hard "@types/stack-utils@npm:^2.0.0": - version: 2.0.1 - resolution: "@types/stack-utils@npm:2.0.1" - checksum: 205fdbe3326b7046d7eaf5e494d8084f2659086a266f3f9cf00bccc549c8e36e407f88168ad4383c8b07099957ad669f75f2532ed4bc70be2b037330f7bae019 + version: 2.0.3 + resolution: "@types/stack-utils@npm:2.0.3" + checksum: 72576cc1522090fe497337c2b99d9838e320659ac57fa5560fcbdcbafcf5d0216c6b3a0a8a4ee4fdb3b1f5e3420aa4f6223ab57b82fef3578bec3206425c6cf5 languageName: node linkType: hard "@types/testing-library__jest-dom@npm:^5.9.1": - version: 5.14.1 - resolution: "@types/testing-library__jest-dom@npm:5.14.1" + version: 5.14.9 + resolution: "@types/testing-library__jest-dom@npm:5.14.9" dependencies: "@types/jest": "*" - checksum: 77fe7ad3a9d49250972a0e3289b6d536942f95f0d539f32a917cf78c9422113d55c00de53b53dd4de1de49b68c8b500faea62e3017c4a64736cfbfbade749e04 + checksum: d364494fc2545316292e88861146146af1e3818792ca63b62a63758b2f737669b687f4aaddfcfbcb7d0e1ed7890a9bd05de23ff97f277d5e68de574497a9ee72 languageName: node linkType: hard "@types/tough-cookie@npm:*": - version: 4.0.2 - resolution: "@types/tough-cookie@npm:4.0.2" - checksum: e055556ffdaa39ad85ede0af192c93f93f986f4bd9e9426efdc2948e3e2632db3a4a584d4937dbf6d7620527419bc99e6182d3daf2b08685e710f2eda5291905 + version: 4.0.5 + resolution: "@types/tough-cookie@npm:4.0.5" + checksum: f19409d0190b179331586365912920d192733112a195e870c7f18d20ac8adb7ad0b0ff69dad430dba8bc2be09593453a719cfea92dc3bda19748fd158fe1498d languageName: node linkType: hard -"@types/yargs-parser@npm:*": - version: 20.2.1 - resolution: "@types/yargs-parser@npm:20.2.1" - checksum: 1d039e64494a7a61ddd278349a3dc60b19f99ff0517425696e796f794e4252452b9d62178e69755ad03f439f9dc0c8c3d7b3a1201b3a24e134bac1a09fa11eaa +"@types/ws@npm:^8.5.5": + version: 8.5.12 + resolution: "@types/ws@npm:8.5.12" + dependencies: + "@types/node": "*" + checksum: ddefb6ad1671f70ce73b38a5f47f471d4d493864fca7c51f002a86e5993d031294201c5dced6d5018fb8905ad46888d65c7f20dd54fc165910b69f42fba9a6d0 languageName: node linkType: hard -"@types/yargs@npm:^15.0.0": - version: 15.0.14 - resolution: "@types/yargs@npm:15.0.14" - dependencies: - "@types/yargs-parser": "*" - checksum: 8e358aeb8f0c3758e59e2b8fcfdee5627ab2fe3d92f50f380503d966c7f33287be3322155516a50d27727fde1ad3878f48f60cd6648439126d4b0bbb1a1153ed +"@types/yargs-parser@npm:*": + version: 21.0.3 + resolution: "@types/yargs-parser@npm:21.0.3" + checksum: ef236c27f9432983e91432d974243e6c4cdae227cb673740320eff32d04d853eed59c92ca6f1142a335cfdc0e17cccafa62e95886a8154ca8891cc2dec4ee6fc languageName: node linkType: hard -"@types/yargs@npm:^16.0.0": - version: 16.0.4 - resolution: "@types/yargs@npm:16.0.4" +"@types/yargs@npm:^15.0.0": + version: 15.0.19 + resolution: "@types/yargs@npm:15.0.19" dependencies: "@types/yargs-parser": "*" - checksum: caa21d2c957592fe2184a8368c8cbe5a82a6c2e2f2893722e489f842dc5963293d2f3120bc06fe3933d60a3a0d1e2eb269649fd6b1947fe1820f8841ba611dd9 + checksum: 6a509db36304825674f4f00300323dce2b4d850e75819c3db87e9e9f213ac2c4c6ed3247a3e4eed6e8e45b3f191b133a356d3391dd694d9ea27a0507d914ef4c languageName: node linkType: hard "@types/yargs@npm:^17.0.8": - version: 17.0.19 - resolution: "@types/yargs@npm:17.0.19" + version: 17.0.33 + resolution: "@types/yargs@npm:17.0.33" dependencies: "@types/yargs-parser": "*" - checksum: 89a664ba6cef795a5b14a1b2cdc0e2a943cd654e61cc4286b6a704b944051bc30b0d7fec249dd2685cb6cfd17fdf0750d60ec69859aa5a5911c48a288284e842 + checksum: ee013f257472ab643cb0584cf3e1ff9b0c44bca1c9ba662395300a7f1a6c55fa9d41bd40ddff42d99f5d95febb3907c9ff600fbcb92dadbec22c6a76de7e1236 languageName: node linkType: hard "@types/yauzl@npm:^2.9.1": - version: 2.9.2 - resolution: "@types/yauzl@npm:2.9.2" + version: 2.10.3 + resolution: "@types/yauzl@npm:2.10.3" dependencies: "@types/node": "*" - checksum: dfb49abe82605615712fc694eaa4f7068fe30aa03f38c085e2c2e74408beaad30471d36da9654a811482ece2ea4405575fd99b19c0aa327ed2a9736b554bbf43 + checksum: 5ee966ea7bd6b2802f31ad4281c92c4c0b6dfa593c378a2582c58541fa113bec3d70eb0696b34ad95e8e6861a884cba6c3e351285816693ed176222f840a8c08 languageName: node linkType: hard @@ -2181,19 +1869,19 @@ __metadata: linkType: hard "@typescript-eslint/parser@npm:^5.45.1": - version: 5.45.1 - resolution: "@typescript-eslint/parser@npm:5.45.1" + version: 5.62.0 + resolution: "@typescript-eslint/parser@npm:5.62.0" dependencies: - "@typescript-eslint/scope-manager": 5.45.1 - "@typescript-eslint/types": 5.45.1 - "@typescript-eslint/typescript-estree": 5.45.1 + "@typescript-eslint/scope-manager": 5.62.0 + "@typescript-eslint/types": 5.62.0 + "@typescript-eslint/typescript-estree": 5.62.0 debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 48704224972e67d7ecf928118d47a1eda6732afd585bb4aab6716b7d363e5d4a2e0b0f1bbb92cbef80c7dd75ede10b610e858eb0cb86a67d1866fd17d0722895 + checksum: d168f4c7f21a7a63f47002e2d319bcbb6173597af5c60c1cf2de046b46c76b4930a093619e69faf2d30214c29ab27b54dcf1efc7046a6a6bd6f37f59a990e752 languageName: node linkType: hard @@ -2207,13 +1895,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.45.1": - version: 5.45.1 - resolution: "@typescript-eslint/scope-manager@npm:5.45.1" +"@typescript-eslint/scope-manager@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/scope-manager@npm:5.62.0" dependencies: - "@typescript-eslint/types": 5.45.1 - "@typescript-eslint/visitor-keys": 5.45.1 - checksum: ee0f47ad85e6d8649a5c25cc923933e439542079929e02a7eb20332e18291674af36b25ab579f7d067745ca27c2b37e5d9be605902269968e274d26c1d2b684e + "@typescript-eslint/types": 5.62.0 + "@typescript-eslint/visitor-keys": 5.62.0 + checksum: 6062d6b797fe1ce4d275bb0d17204c827494af59b5eaf09d8a78cdd39dadddb31074dded4297aaf5d0f839016d601032857698b0e4516c86a41207de606e9573 languageName: node linkType: hard @@ -2224,10 +1912,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:5.45.1": - version: 5.45.1 - resolution: "@typescript-eslint/types@npm:5.45.1" - checksum: 7f809d2951812ae5752c9d1617b7e6dfd662370390b0ddba72005ebc62bd5f04745567bb62cf00a9e43db9dfd222d18ea22945f5457f76ea86386ef7b98c8424 +"@typescript-eslint/types@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/types@npm:5.62.0" + checksum: 48c87117383d1864766486f24de34086155532b070f6264e09d0e6139449270f8a9559cfef3c56d16e3bcfb52d83d42105d61b36743626399c7c2b5e0ac3b670 languageName: node linkType: hard @@ -2249,12 +1937,12 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.45.1": - version: 5.45.1 - resolution: "@typescript-eslint/typescript-estree@npm:5.45.1" +"@typescript-eslint/typescript-estree@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" dependencies: - "@typescript-eslint/types": 5.45.1 - "@typescript-eslint/visitor-keys": 5.45.1 + "@typescript-eslint/types": 5.62.0 + "@typescript-eslint/visitor-keys": 5.62.0 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 @@ -2263,7 +1951,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 867b19ba050af7410c75e4e42b511d4299c8043d238959e9794bb65d7a9db1a875880e5dd50f112896218f3a3d163cd8ce61db94034ca628eca4f7ddccb1d348 + checksum: 3624520abb5807ed8f57b1197e61c7b1ed770c56dfcaca66372d584ff50175225798bccb701f7ef129d62c5989070e1ee3a0aa2d84e56d9524dcf011a2bb1a52 languageName: node linkType: hard @@ -2277,13 +1965,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.45.1": - version: 5.45.1 - resolution: "@typescript-eslint/visitor-keys@npm:5.45.1" +"@typescript-eslint/visitor-keys@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" dependencies: - "@typescript-eslint/types": 5.45.1 + "@typescript-eslint/types": 5.62.0 eslint-visitor-keys: ^3.3.0 - checksum: 725a434fb05010b6ead7e880fa1fcdb4dbc7421b80667e96ad27fcfb3c2b2b0edde64be488740577dd147547fc4a9eac52e2602eb6a8a261ee14a917d4a50c4f + checksum: 976b05d103fe8335bef5c93ad3f76d781e3ce50329c0243ee0f00c0fcfb186c81df50e64bfdd34970148113f8ade90887f53e3c4938183afba830b4ba8e30a35 languageName: node linkType: hard @@ -2438,36 +2126,36 @@ __metadata: languageName: node linkType: hard -"@webpack-cli/configtest@npm:^1.1.0": - version: 1.1.0 - resolution: "@webpack-cli/configtest@npm:1.1.0" +"@webpack-cli/configtest@npm:^1.2.0": + version: 1.2.0 + resolution: "@webpack-cli/configtest@npm:1.2.0" peerDependencies: webpack: 4.x.x || 5.x.x webpack-cli: 4.x.x - checksum: 69e7816b5b5d8589d5fc14af591d63831ff6ea2ca2d498c2d8bc354faaef9aeb282f70ad13df2fc5c3726be0f88c3dbc7facc37f3ab5a8cad44f562081792b28 + checksum: a2726cd9ec601d2b57e5fc15e0ebf5200a8892065e735911269ac2038e62be4bfc176ea1f88c2c46ff09b4d05d4c10ae045e87b3679372483d47da625a327e28 languageName: node linkType: hard -"@webpack-cli/info@npm:^1.4.0": - version: 1.4.0 - resolution: "@webpack-cli/info@npm:1.4.0" +"@webpack-cli/info@npm:^1.5.0": + version: 1.5.0 + resolution: "@webpack-cli/info@npm:1.5.0" dependencies: envinfo: ^7.7.3 peerDependencies: webpack-cli: 4.x.x - checksum: 6385b1e2c511d0136fa53fcff5ecdc00ce7590d01648b437089e6d9c7b1866da8c6e850c41a7c52d3eb3ae23a31f3f40e1cead77ea2046ee6eb6b23a4124f4a9 + checksum: 7f56fe037cd7d1fd5c7428588519fbf04a0cad33925ee4202ffbafd00f8ec1f2f67d991245e687d50e0f3e23f7b7814273d56cb9f7da4b05eed47c8d815c6296 languageName: node linkType: hard -"@webpack-cli/serve@npm:^1.6.0": - version: 1.6.0 - resolution: "@webpack-cli/serve@npm:1.6.0" +"@webpack-cli/serve@npm:^1.7.0": + version: 1.7.0 + resolution: "@webpack-cli/serve@npm:1.7.0" peerDependencies: webpack-cli: 4.x.x peerDependenciesMeta: webpack-dev-server: optional: true - checksum: 050a930b63653ae0002e135cc9b0810483dd0857acd8e7ae2f41011f48f8856a150dd60c787105597ef8814541031779be1dc015ef637d70a7524d373cbbf346 + checksum: d475e8effa23eb7ff9a48b14d4de425989fd82f906ce71c210921cc3852327c22873be00c35e181a25a6bd03d424ae2b83e7f3b3f410ac7ee31b128ab4ac7713 languageName: node linkType: hard @@ -2492,20 +2180,20 @@ __metadata: languageName: node linkType: hard -"abbrev@npm:1": - version: 1.1.1 - resolution: "abbrev@npm:1.1.1" - checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36 languageName: node linkType: hard -"accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.7": - version: 1.3.7 - resolution: "accepts@npm:1.3.7" +"accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.8": + version: 1.3.8 + resolution: "accepts@npm:1.3.8" dependencies: - mime-types: ~2.1.24 - negotiator: 0.6.2 - checksum: 27fc8060ffc69481ff6719cd3ee06387d2b88381cb0ce626f087781bbd02201a645a9febc8e7e7333558354b33b1d2f922ad13560be4ec1b7ba9e76fc1c1241d + mime-types: ~2.1.34 + negotiator: 0.6.3 + checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4 languageName: node linkType: hard @@ -2538,9 +2226,11 @@ __metadata: linkType: hard "acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.1.1": - version: 8.2.0 - resolution: "acorn-walk@npm:8.2.0" - checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 + version: 8.3.3 + resolution: "acorn-walk@npm:8.3.3" + dependencies: + acorn: ^8.11.0 + checksum: 0f09d351fc30b69b2b9982bf33dc30f3d35a34e030e5f1ed3c49fc4e3814a192bf3101e4c30912a0595410f5e91bb70ddba011ea73398b3ecbfe41c7334c6dd0 languageName: node linkType: hard @@ -2553,25 +2243,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.1.0, acorn@npm:^8.5.0, acorn@npm:^8.8.1": - version: 8.8.1 - resolution: "acorn@npm:8.8.1" - bin: - acorn: bin/acorn - checksum: 4079b67283b94935157698831967642f24a075c52ce3feaaaafe095776dfbe15d86a1b33b1e53860fc0d062ed6c83f4284a5c87c85b9ad51853a01173da6097f - languageName: node - linkType: hard - -"acorn@npm:^8.4.1": - version: 8.5.0 - resolution: "acorn@npm:8.5.0" - bin: - acorn: bin/acorn - checksum: 2e4c1dbed3da327684863debf31d341bf8882c6893c506653872c00977eee45675feb9129255d6c74c88424d2b20d889ca6de5b39776e5e3cccfc756b3ca1da8 - languageName: node - linkType: hard - -"acorn@npm:^8.7.1, acorn@npm:^8.8.2": +"acorn@npm:^8.1.0, acorn@npm:^8.11.0, acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.1, acorn@npm:^8.8.2": version: 8.12.1 resolution: "acorn@npm:8.12.1" bin: @@ -2580,7 +2252,7 @@ __metadata: languageName: node linkType: hard -"agent-base@npm:6, agent-base@npm:^6.0.2": +"agent-base@npm:6": version: 6.0.2 resolution: "agent-base@npm:6.0.2" dependencies: @@ -2589,14 +2261,12 @@ __metadata: languageName: node linkType: hard -"agentkeepalive@npm:^4.1.3": - version: 4.1.4 - resolution: "agentkeepalive@npm:4.1.4" +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": + version: 7.1.1 + resolution: "agent-base@npm:7.1.1" dependencies: - debug: ^4.1.0 - depd: ^1.1.2 - humanize-ms: ^1.2.1 - checksum: d49c24d4b333e9507119385895a583872f4f53d62764a89be165926e824056a126955bae4a6d3c6f7cd26f4089621a40f7b27675f7868214d82118f744b9e82d + debug: ^4.3.4 + checksum: 51c158769c5c051482f9ca2e6e1ec085ac72b5a418a9b31b4e82fe6c0a6699adb94c1c42d246699a587b3335215037091c79e0de512c516f73b6ea844202f037 languageName: node linkType: hard @@ -2610,6 +2280,20 @@ __metadata: languageName: node linkType: hard +"ajv-formats@npm:^2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: ^8.0.0 + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 4a287d937f1ebaad4683249a4c40c0fa3beed30d9ddc0adba04859026a622da0d317851316ea64b3680dc60f5c3c708105ddd5d5db8fe595d9d0207fd19f90b7 + languageName: node + linkType: hard + "ajv-keywords@npm:^3.5.2": version: 3.5.2 resolution: "ajv-keywords@npm:3.5.2" @@ -2619,6 +2303,17 @@ __metadata: languageName: node linkType: hard +"ajv-keywords@npm:^5.1.0": + version: 5.1.0 + resolution: "ajv-keywords@npm:5.1.0" + dependencies: + fast-deep-equal: ^3.1.3 + peerDependencies: + ajv: ^8.8.2 + checksum: c35193940b853119242c6757787f09ecf89a2c19bcd36d03ed1a615e710d19d450cb448bfda407b939aba54b002368c8bff30529cc50a0536a8e10bcce300421 + languageName: node + linkType: hard + "ajv@npm:^6.10.0, ajv@npm:^6.12.4, ajv@npm:^6.12.5": version: 6.12.6 resolution: "ajv@npm:6.12.6" @@ -2631,22 +2326,22 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^8.0.1": - version: 8.6.3 - resolution: "ajv@npm:8.6.3" +"ajv@npm:^8.0.0, ajv@npm:^8.0.1, ajv@npm:^8.9.0": + version: 8.17.1 + resolution: "ajv@npm:8.17.1" dependencies: - fast-deep-equal: ^3.1.1 + fast-deep-equal: ^3.1.3 + fast-uri: ^3.0.1 json-schema-traverse: ^1.0.0 require-from-string: ^2.0.2 - uri-js: ^4.2.2 - checksum: 690ffb9408415fdab43686b3f92037ba0c8362f5d0709a123ba3fb546e6ad81414455f80a2b5cc432ce924afe9864671198f022bc331a19c072d4ede152ec3ca + checksum: 1797bf242cfffbaf3b870d13565bd1716b73f214bb7ada9a497063aada210200da36e3ed40237285f3255acc4feeae91b1fb183625331bad27da95973f7253d9 languageName: node linkType: hard "ansi-colors@npm:^4.1.1": - version: 4.1.1 - resolution: "ansi-colors@npm:4.1.1" - checksum: 138d04a51076cb085da0a7e2d000c5c0bb09f6e772ed5c65c53cb118d37f6c5f1637506d7155fb5f330f0abcf6f12fa2e489ac3f8cdab9da393bf1bb4f9a32b0 + version: 4.1.3 + resolution: "ansi-colors@npm:4.1.3" + checksum: a9c2ec842038a1fabc7db9ece7d3177e2fe1c5dc6f0c51ecfbf5f39911427b89c00b5dc6b8bd95f82a26e9b16aaae2e83d45f060e98070ce4d1333038edceb0e languageName: node linkType: hard @@ -2668,20 +2363,6 @@ __metadata: languageName: node linkType: hard -"ansi-regex@npm:^2.0.0": - version: 2.1.1 - resolution: "ansi-regex@npm:2.1.1" - checksum: 190abd03e4ff86794f338a31795d262c1dfe8c91f7e01d04f13f646f1dcb16c5800818f886047876f1272f065570ab86b24b99089f8b68a0e11ff19aed4ca8f1 - languageName: node - linkType: hard - -"ansi-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "ansi-regex@npm:3.0.0" - checksum: 2ad11c416f81c39f5c65eafc88cf1d71aa91d76a2f766e75e457c2a3c43e8a003aadbf2966b61c497aa6a6940a36412486c975b3270cdfc3f413b69826189ec3 - languageName: node - linkType: hard - "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -2721,6 +2402,13 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + "anymatch@npm:^2.0.0": version: 2.0.0 resolution: "anymatch@npm:2.0.0" @@ -2732,29 +2420,12 @@ __metadata: linkType: hard "anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": - version: 3.1.2 - resolution: "anymatch@npm:3.1.2" + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" dependencies: normalize-path: ^3.0.0 picomatch: ^2.0.4 - checksum: 985163db2292fac9e5a1e072bf99f1b5baccf196e4de25a0b0b81865ebddeb3b3eb4480734ef0a2ac8c002845396b91aa89121f5b84f93981a4658164a9ec6e9 - languageName: node - linkType: hard - -"aproba@npm:^1.0.3": - version: 1.2.0 - resolution: "aproba@npm:1.2.0" - checksum: 0fca141966559d195072ed047658b6e6c4fe92428c385dd38e288eacfc55807e7b4989322f030faff32c0f46bb0bc10f1e0ac32ec22d25315a1e5bbc0ebb76dc - languageName: node - linkType: hard - -"are-we-there-yet@npm:~1.1.2": - version: 1.1.7 - resolution: "are-we-there-yet@npm:1.1.7" - dependencies: - delegates: ^1.0.0 - readable-stream: ^2.0.6 - checksum: 70d251719c969b2745bfe5ddf3ebaefa846a636e90a6d5212573676af5d6670e15457761d4725731e19cbebdce42c4ab0cbedf23ab047f2a08274985aa10a3c7 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 languageName: node linkType: hard @@ -2774,10 +2445,21 @@ __metadata: languageName: node linkType: hard +"aria-query@npm:5.1.3": + version: 5.1.3 + resolution: "aria-query@npm:5.1.3" + dependencies: + deep-equal: ^2.0.5 + checksum: 929ff95f02857b650fb4cbcd2f41072eee2f46159a6605ea03bf63aa572e35ffdff43d69e815ddc462e16e07de8faba3978afc2813650b4448ee18c9895d982b + languageName: node + linkType: hard + "aria-query@npm:^5.0.0": - version: 5.0.0 - resolution: "aria-query@npm:5.0.0" - checksum: c41f98866c5a304561ee8cae55856711cddad6f3f85d8cb43cc5f79667078d9b8979ce32d244c1ff364e6463a4d0b6865804a33ccc717fed701b281cf7dc6296 + version: 5.3.0 + resolution: "aria-query@npm:5.3.0" + dependencies: + dequal: ^2.0.3 + checksum: 305bd73c76756117b59aba121d08f413c7ff5e80fa1b98e217a3443fcddb9a232ee790e24e432b59ae7625aebcf4c47cb01c2cac872994f0b426f5bdfcd96ba9 languageName: node linkType: hard @@ -2802,6 +2484,16 @@ __metadata: languageName: node linkType: hard +"array-buffer-byte-length@npm:^1.0.0, array-buffer-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "array-buffer-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.5 + is-array-buffer: ^3.0.4 + checksum: 53524e08f40867f6a9f35318fafe467c32e45e9c682ba67b11943e167344d2febc0f6977a17e699b05699e805c3e8f073d876f8bbf1b559ed494ad2cd0fae09e + languageName: node + linkType: hard + "array-flatten@npm:1.1.1": version: 1.1.1 resolution: "array-flatten@npm:1.1.1" @@ -2809,36 +2501,17 @@ __metadata: languageName: node linkType: hard -"array-flatten@npm:^2.1.0": - version: 2.1.2 - resolution: "array-flatten@npm:2.1.2" - checksum: e8988aac1fbfcdaae343d08c9a06a6fddd2c6141721eeeea45c3cf523bf4431d29a46602929455ed548c7a3e0769928cdc630405427297e7081bd118fdec9262 - languageName: node - linkType: hard - -"array-includes@npm:^3.1.3": - version: 3.1.4 - resolution: "array-includes@npm:3.1.4" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - get-intrinsic: ^1.1.1 - is-string: ^1.0.7 - checksum: 69967c38c52698f84b50a7aed5554aadc89c6ac6399b6d92ad061a5952f8423b4bba054c51d40963f791dfa294d7247cdd7988b6b1f2c5861477031c6386e1c0 - languageName: node - linkType: hard - -"array-includes@npm:^3.1.4": - version: 3.1.6 - resolution: "array-includes@npm:3.1.6" +"array-includes@npm:^3.1.6, array-includes@npm:^3.1.7, array-includes@npm:^3.1.8": + version: 3.1.8 + resolution: "array-includes@npm:3.1.8" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - get-intrinsic: ^1.1.3 + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-object-atoms: ^1.0.0 + get-intrinsic: ^1.2.4 is-string: ^1.0.7 - checksum: f22f8cd8ba8a6448d91eebdc69f04e4e55085d09232b5216ee2d476dab3ef59984e8d1889e662c6a0ed939dcb1b57fd05b2c0209c3370942fc41b752c82a2ca5 + checksum: eb39ba5530f64e4d8acab39297c11c1c5be2a4ea188ab2b34aba5fb7224d918f77717a9d57a3e2900caaa8440e59431bdaf5c974d5212ef65d97f132e38e2d91 languageName: node linkType: hard @@ -2849,33 +2522,91 @@ __metadata: languageName: node linkType: hard -"array-unique@npm:^0.3.2": - version: 0.3.2 - resolution: "array-unique@npm:0.3.2" - checksum: da344b89cfa6b0a5c221f965c21638bfb76b57b45184a01135382186924f55973cd9b171d4dad6bf606c6d9d36b0d721d091afdc9791535ead97ccbe78f8a888 +"array-unique@npm:^0.3.2": + version: 0.3.2 + resolution: "array-unique@npm:0.3.2" + checksum: da344b89cfa6b0a5c221f965c21638bfb76b57b45184a01135382186924f55973cd9b171d4dad6bf606c6d9d36b0d721d091afdc9791535ead97ccbe78f8a888 + languageName: node + linkType: hard + +"array.prototype.findlast@npm:^1.2.5": + version: 1.2.5 + resolution: "array.prototype.findlast@npm:1.2.5" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + es-shim-unscopables: ^1.0.2 + checksum: 83ce4ad95bae07f136d316f5a7c3a5b911ac3296c3476abe60225bc4a17938bf37541972fcc37dd5adbc99cbb9c928c70bbbfc1c1ce549d41a415144030bb446 + languageName: node + linkType: hard + +"array.prototype.findlastindex@npm:^1.2.3": + version: 1.2.5 + resolution: "array.prototype.findlastindex@npm:1.2.5" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + es-shim-unscopables: ^1.0.2 + checksum: 2c81cff2a75deb95bf1ed89b6f5f2bfbfb882211e3b7cc59c3d6b87df774cd9d6b36949a8ae39ac476e092c1d4a4905f5ee11a86a456abb10f35f8211ae4e710 + languageName: node + linkType: hard + +"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.2": + version: 1.3.2 + resolution: "array.prototype.flat@npm:1.3.2" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: 5d6b4bf102065fb3f43764bfff6feb3295d372ce89591e6005df3d0ce388527a9f03c909af6f2a973969a4d178ab232ffc9236654149173e0e187ec3a1a6b87b languageName: node linkType: hard -"array.prototype.flat@npm:^1.2.5": - version: 1.3.1 - resolution: "array.prototype.flat@npm:1.3.1" +"array.prototype.flatmap@npm:^1.3.2": + version: 1.3.2 + resolution: "array.prototype.flatmap@npm:1.3.2" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 es-shim-unscopables: ^1.0.0 - checksum: 5a8415949df79bf6e01afd7e8839bbde5a3581300e8ad5d8449dea52639e9e59b26a467665622783697917b43bf39940a6e621877c7dd9b3d1c1f97484b9b88b + checksum: ce09fe21dc0bcd4f30271f8144083aa8c13d4639074d6c8dc82054b847c7fc9a0c97f857491f4da19d4003e507172a78f4bcd12903098adac8b9cd374f734be3 languageName: node linkType: hard -"array.prototype.flatmap@npm:^1.2.4": - version: 1.2.5 - resolution: "array.prototype.flatmap@npm:1.2.5" +"array.prototype.tosorted@npm:^1.1.4": + version: 1.1.4 + resolution: "array.prototype.tosorted@npm:1.1.4" dependencies: - call-bind: ^1.0.0 - define-properties: ^1.1.3 - es-abstract: ^1.19.0 - checksum: a14119a28e5687a13cf3fd6756a8e7810563a9e81cd4227e27a25c31d362df47ac72553f06a271fd728741e199047933ad43d561d64a28da0b4e1a26f74e939e + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.3 + es-errors: ^1.3.0 + es-shim-unscopables: ^1.0.2 + checksum: e4142d6f556bcbb4f393c02e7dbaea9af8f620c040450c2be137c9cbbd1a17f216b9c688c5f2c08fbb038ab83f55993fa6efdd9a05881d84693c7bcb5422127a + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.3": + version: 1.0.3 + resolution: "arraybuffer.prototype.slice@npm:1.0.3" + dependencies: + array-buffer-byte-length: ^1.0.1 + call-bind: ^1.0.5 + define-properties: ^1.2.1 + es-abstract: ^1.22.3 + es-errors: ^1.2.1 + get-intrinsic: ^1.2.3 + is-array-buffer: ^3.0.4 + is-shared-array-buffer: ^1.0.2 + checksum: 352259cba534dcdd969c92ab002efd2ba5025b2e3b9bead3973150edbdf0696c629d7f4b3f061c5931511e8207bdc2306da614703c820b45dabce39e3daf7e3e languageName: node linkType: hard @@ -2893,12 +2624,12 @@ __metadata: languageName: node linkType: hard -"async@npm:^2.6.2": - version: 2.6.3 - resolution: "async@npm:2.6.3" +"async@npm:^2.6.4": + version: 2.6.4 + resolution: "async@npm:2.6.4" dependencies: lodash: ^4.17.14 - checksum: 5e5561ff8fca807e88738533d620488ac03a5c43fce6c937451f7e35f943d33ad06c24af3f681a48cca3d2b0002b3118faff0a128dc89438a9bf0226f712c499 + checksum: a52083fb32e1ebe1d63e5c5624038bb30be68ff07a6c8d7dfe35e47c93fc144bd8652cbec869e0ac07d57dde387aa5f1386be3559cdee799cb1f789678d88e19 languageName: node linkType: hard @@ -2918,6 +2649,15 @@ __metadata: languageName: node linkType: hard +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: ^1.0.0 + checksum: 1aa3ffbfe6578276996de660848b6e95669d9a95ad149e3dd0c0cda77db6ee1dbd9d1dd723b65b6d277b882dd0c4b91a654ae9d3cf9e1254b7e93e4908d78fd3 + languageName: node + linkType: hard + "babel-jest@npm:^26.0.1": version: 26.6.3 resolution: "babel-jest@npm:26.6.3" @@ -2936,20 +2676,20 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^29.3.1": - version: 29.3.1 - resolution: "babel-jest@npm:29.3.1" +"babel-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "babel-jest@npm:29.7.0" dependencies: - "@jest/transform": ^29.3.1 + "@jest/transform": ^29.7.0 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^29.2.0 + babel-preset-jest: ^29.6.3 chalk: ^4.0.0 graceful-fs: ^4.2.9 slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: 793848238a771a931ddeb5930b9ec8ab800522ac8d64933665698f4a39603d157e572e20b57d79610277e1df88d3ee82b180d59a21f3570388f602beeb38a595 + checksum: ee6f8e0495afee07cac5e4ee167be705c711a8cc8a737e05a587a131fdae2b3c8f9aa55dfd4d9c03009ac2d27f2de63d8ba96d3e8460da4d00e8af19ef9a83f7 languageName: node linkType: hard @@ -2962,20 +2702,7 @@ __metadata: languageName: node linkType: hard -"babel-plugin-istanbul@npm:^6.0.0": - version: 6.0.0 - resolution: "babel-plugin-istanbul@npm:6.0.0" - dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@istanbuljs/load-nyc-config": ^1.0.0 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-instrument: ^4.0.0 - test-exclude: ^6.0.0 - checksum: bc586cf088ec471a98a474ef0e9361ace61947da2a3e54162f1e1ab712a1a81a88007639e8aff7db2fc8678ae7c671e696e6edd6ccf72db8e6af86f0628d5a08 - languageName: node - linkType: hard - -"babel-plugin-istanbul@npm:^6.1.1": +"babel-plugin-istanbul@npm:^6.0.0, babel-plugin-istanbul@npm:^6.1.1": version: 6.1.1 resolution: "babel-plugin-istanbul@npm:6.1.1" dependencies: @@ -3000,37 +2727,40 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^29.2.0": - version: 29.2.0 - resolution: "babel-plugin-jest-hoist@npm:29.2.0" +"babel-plugin-jest-hoist@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-plugin-jest-hoist@npm:29.6.3" dependencies: "@babel/template": ^7.3.3 "@babel/types": ^7.3.3 "@types/babel__core": ^7.1.14 "@types/babel__traverse": ^7.0.6 - checksum: 368d271ceae491ae6b96cd691434859ea589fbe5fd5aead7660df75d02394077273c6442f61f390e9347adffab57a32b564d0fabcf1c53c4b83cd426cb644072 + checksum: 51250f22815a7318f17214a9d44650ba89551e6d4f47a2dc259128428324b52f5a73979d010cefd921fd5a720d8c1d55ad74ff601cd94c7bd44d5f6292fde2d1 languageName: node linkType: hard "babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.1 - resolution: "babel-preset-current-node-syntax@npm:1.0.1" + version: 1.1.0 + resolution: "babel-preset-current-node-syntax@npm:1.1.0" dependencies: "@babel/plugin-syntax-async-generators": ^7.8.4 "@babel/plugin-syntax-bigint": ^7.8.3 - "@babel/plugin-syntax-class-properties": ^7.8.3 - "@babel/plugin-syntax-import-meta": ^7.8.3 + "@babel/plugin-syntax-class-properties": ^7.12.13 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + "@babel/plugin-syntax-import-attributes": ^7.24.7 + "@babel/plugin-syntax-import-meta": ^7.10.4 "@babel/plugin-syntax-json-strings": ^7.8.3 - "@babel/plugin-syntax-logical-assignment-operators": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-numeric-separator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 "@babel/plugin-syntax-object-rest-spread": ^7.8.3 "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 "@babel/plugin-syntax-optional-chaining": ^7.8.3 - "@babel/plugin-syntax-top-level-await": ^7.8.3 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + "@babel/plugin-syntax-top-level-await": ^7.14.5 peerDependencies: "@babel/core": ^7.0.0 - checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 + checksum: 9f93fac975eaba296c436feeca1031ca0539143c4066eaf5d1ba23525a31850f03b651a1049caea7287df837a409588c8252c15627ad3903f17864c8e25ed64b languageName: node linkType: hard @@ -3046,15 +2776,15 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^29.2.0": - version: 29.2.0 - resolution: "babel-preset-jest@npm:29.2.0" +"babel-preset-jest@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-preset-jest@npm:29.6.3" dependencies: - babel-plugin-jest-hoist: ^29.2.0 + babel-plugin-jest-hoist: ^29.6.3 babel-preset-current-node-syntax: ^1.0.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 1b09a2db968c36e064daf98082cfffa39c849b63055112ddc56fc2551fd0d4783897265775b1d2f8a257960a3339745de92e74feb01bad86d41c4cecbfa854fc + checksum: aa4ff2a8a728d9d698ed521e3461a109a1e66202b13d3494e41eea30729a5e7cc03b3a2d56c594423a135429c37bf63a9fa8b0b9ce275298be3095a88c69f6fb languageName: node linkType: hard @@ -3112,6 +2842,7 @@ __metadata: "@types/fs-extra": ^9.0.12 "@types/puppeteer": ^5.4.4 "@types/ramda": ^0 + "@types/react-dom": ^18.2.0 fs-extra: ^10.0.0 html-webpack-plugin: ^5.3.2 http-server: ^13.0.2 @@ -3129,9 +2860,9 @@ __metadata: linkType: soft "binary-extensions@npm:^2.0.0": - version: 2.2.0 - resolution: "binary-extensions@npm:2.2.0" - checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 + version: 2.3.0 + resolution: "binary-extensions@npm:2.3.0" + checksum: bcad01494e8a9283abf18c1b967af65ee79b0c6a9e6fcfafebfe91dbe6e0fc7272bafb73389e198b310516ae04f7ad17d79aacf6cb4c0d5d5202a7e2e52c7d98 languageName: node linkType: hard @@ -3146,35 +2877,33 @@ __metadata: languageName: node linkType: hard -"body-parser@npm:1.19.0": - version: 1.19.0 - resolution: "body-parser@npm:1.19.0" +"body-parser@npm:1.20.2": + version: 1.20.2 + resolution: "body-parser@npm:1.20.2" dependencies: - bytes: 3.1.0 - content-type: ~1.0.4 + bytes: 3.1.2 + content-type: ~1.0.5 debug: 2.6.9 - depd: ~1.1.2 - http-errors: 1.7.2 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 iconv-lite: 0.4.24 - on-finished: ~2.3.0 - qs: 6.7.0 - raw-body: 2.4.0 - type-is: ~1.6.17 - checksum: 490231b4c89bbd43112762f7ba8e5342c174a6c9f64284a3b0fcabf63277e332f8316765596f1e5b15e4f3a6cf0422e005f4bb3149ed3a224bb025b7a36b9ac1 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.2 + type-is: ~1.6.18 + unpipe: 1.0.0 + checksum: 14d37ec638ab5c93f6099ecaed7f28f890d222c650c69306872e00b9efa081ff6c596cd9afb9930656aae4d6c4e1c17537bea12bb73c87a217cb3cfea8896737 languageName: node linkType: hard -"bonjour@npm:^3.5.0": - version: 3.5.0 - resolution: "bonjour@npm:3.5.0" +"bonjour-service@npm:^1.0.11": + version: 1.2.1 + resolution: "bonjour-service@npm:1.2.1" dependencies: - array-flatten: ^2.1.0 - deep-equal: ^1.0.1 - dns-equal: ^1.0.0 - dns-txt: ^2.0.2 - multicast-dns: ^6.0.1 - multicast-dns-service-types: ^1.1.0 - checksum: 2cfbe9fa861f4507b5ff3853eeae3ef03a231ede2b7363efedd80880ea3c0576f64416f98056c96e429ed68ff38dc4a70c0583d1eb4dab72e491ca44a0f03444 + fast-deep-equal: ^3.1.3 + multicast-dns: ^7.2.5 + checksum: b65b3e6e3a07e97f2da5806afb76f3946d5a6426b72e849a0236dc3c9d3612fb8c5359ebade4be7eb63f74a37670c53a53be2ff17f4f709811fda77f600eb25b languageName: node linkType: hard @@ -3195,6 +2924,15 @@ __metadata: languageName: node linkType: hard +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + "braces@npm:^2.3.1": version: 2.3.2 resolution: "braces@npm:2.3.2" @@ -3213,31 +2951,16 @@ __metadata: languageName: node linkType: hard -"braces@npm:^3.0.1, braces@npm:~3.0.2": - version: 3.0.2 - resolution: "braces@npm:3.0.2" - dependencies: - fill-range: ^7.0.1 - checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 - languageName: node - linkType: hard - -"browserslist@npm:^4.16.6": - version: 4.17.3 - resolution: "browserslist@npm:4.17.3" +"braces@npm:^3.0.3, braces@npm:~3.0.2": + version: 3.0.3 + resolution: "braces@npm:3.0.3" dependencies: - caniuse-lite: ^1.0.30001264 - electron-to-chromium: ^1.3.857 - escalade: ^3.1.1 - node-releases: ^1.1.77 - picocolors: ^0.2.1 - bin: - browserslist: cli.js - checksum: 9295bdff6e054fdbb131275f88d282dddda7e8d54ddc1571b24374d6ba85e6d1f7cb72280543ea44a9726bb5076ded644d943b38cdc5610249699254ca951f46 + fill-range: ^7.1.1 + checksum: b95aa0b3bd909f6cd1720ffcf031aeaf46154dd88b4da01f9a1d3f7ea866a79eba76a6d01cbc3c422b2ee5cdc39a4f02491058d5df0d7bf6e6a162a832df1f69 languageName: node linkType: hard -"browserslist@npm:^4.21.10": +"browserslist@npm:^4.21.10, browserslist@npm:^4.23.1": version: 4.23.3 resolution: "browserslist@npm:4.23.3" dependencies: @@ -3251,20 +2974,6 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.21.3": - version: 4.21.4 - resolution: "browserslist@npm:4.21.4" - dependencies: - caniuse-lite: ^1.0.30001400 - electron-to-chromium: ^1.4.251 - node-releases: ^2.0.6 - update-browserslist-db: ^1.0.9 - bin: - browserslist: cli.js - checksum: 4af3793704dbb4615bcd29059ab472344dc7961c8680aa6c4bb84f05340e14038d06a5aead58724eae69455b8fade8b8c69f1638016e87e5578969d74c078b79 - languageName: node - linkType: hard - "bser@npm:2.1.1": version: 2.1.1 resolution: "bser@npm:2.1.1" @@ -3288,13 +2997,6 @@ __metadata: languageName: node linkType: hard -"buffer-indexof@npm:^1.0.0": - version: 1.1.1 - resolution: "buffer-indexof@npm:1.1.1" - checksum: 0967abc2981a8e7d776324c6b84811e4d84a7ead89b54a3bb8791437f0c4751afd060406b06db90a436f1cf771867331b5ecf5c4aca95b4ccb9f6cb146c22ebc - languageName: node - linkType: hard - "buffer@npm:^5.2.1, buffer@npm:^5.5.0": version: 5.7.1 resolution: "buffer@npm:5.7.1" @@ -3319,36 +3021,30 @@ __metadata: languageName: node linkType: hard -"bytes@npm:3.1.0": - version: 3.1.0 - resolution: "bytes@npm:3.1.0" - checksum: 7c3b21c5d9d44ed455460d5d36a31abc6fa2ce3807964ba60a4b03fd44454c8cf07bb0585af83bfde1c5cc2ea4bbe5897bc3d18cd15e0acf25a3615a35aba2df +"bytes@npm:3.1.2": + version: 3.1.2 + resolution: "bytes@npm:3.1.2" + checksum: e4bcd3948d289c5127591fbedf10c0b639ccbf00243504e4e127374a15c3bc8eed0d28d4aaab08ff6f1cf2abc0cce6ba3085ed32f4f90e82a5683ce0014e1b6e languageName: node linkType: hard -"cacache@npm:^15.0.5": - version: 15.3.0 - resolution: "cacache@npm:15.3.0" +"cacache@npm:^18.0.0": + version: 18.0.4 + resolution: "cacache@npm:18.0.4" dependencies: - "@npmcli/fs": ^1.0.0 - "@npmcli/move-file": ^1.0.1 - chownr: ^2.0.0 - fs-minipass: ^2.0.0 - glob: ^7.1.4 - infer-owner: ^1.0.4 - lru-cache: ^6.0.0 - minipass: ^3.1.1 - minipass-collect: ^1.0.2 + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^10.0.1 + minipass: ^7.0.3 + minipass-collect: ^2.0.1 minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.2 - mkdirp: ^1.0.3 + minipass-pipeline: ^1.2.4 p-map: ^4.0.0 - promise-inflight: ^1.0.1 - rimraf: ^3.0.2 - ssri: ^8.0.1 - tar: ^6.0.2 - unique-filename: ^1.1.1 - checksum: a07327c27a4152c04eb0a831c63c00390d90f94d51bb80624a66f4e14a6b6360bbf02a84421267bd4d00ca73ac9773287d8d7169e8d2eafe378d2ce140579db8 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: b7422c113b4ec750f33beeca0f426a0024c28e3172f332218f48f963e5b970647fa1ac05679fe5bb448832c51efea9fda4456b9a95c3a1af1105fe6c1833cde2 languageName: node linkType: hard @@ -3369,13 +3065,16 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": - version: 1.0.2 - resolution: "call-bind@npm:1.0.2" +"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": + version: 1.0.7 + resolution: "call-bind@npm:1.0.7" dependencies: - function-bind: ^1.1.1 - get-intrinsic: ^1.0.2 - checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0 + 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 + checksum: 295c0c62b90dd6522e6db3b0ab1ce26bdf9e7404215bda13cfee25b626b5ff1a7761324d58d38b1ef1607fc65aca2d06e44d2e18d0dfc6c14b465b00d8660029 languageName: node linkType: hard @@ -3410,20 +3109,6 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001264": - version: 1.0.30001265 - resolution: "caniuse-lite@npm:1.0.30001265" - checksum: 19f1943045503ebd182191075a991035523123db6985bcccde6702c445154a470a72ff064568a977b607a0c42789bed73ecee6a6a04601dd04691c1a1fdfbd1c - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001400": - version: 1.0.30001445 - resolution: "caniuse-lite@npm:1.0.30001445" - checksum: f98ca67829c3c52af5af0a62b8510432b2ad9594437d24ad460a6eb1a23d93e7a31631b1f550fbbe482ad05c467aa00da710a41699eb13d1f246d7db4147ab79 - languageName: node - linkType: hard - "caniuse-lite@npm:^1.0.30001646": version: 1.0.30001651 resolution: "caniuse-lite@npm:1.0.30001651" @@ -3440,7 +3125,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^2.0.0": +"chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: @@ -3478,9 +3163,9 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^3.5.1": - version: 3.5.2 - resolution: "chokidar@npm:3.5.2" +"chokidar@npm:^3.5.3": + version: 3.6.0 + resolution: "chokidar@npm:3.6.0" dependencies: anymatch: ~3.1.2 braces: ~3.0.2 @@ -3493,7 +3178,7 @@ __metadata: dependenciesMeta: fsevents: optional: true - checksum: d1fda32fcd67d9f6170a8468ad2630a3c6194949c9db3f6a91b16478c328b2800f433fb5d2592511b6cb145a47c013ea1cce60b432b1a001ae3ee978a8bffc2d + checksum: d2f29f499705dcd4f6f3bbed79a9ce2388cf530460122eed3b9c48efeab7a4e28739c6551fd15bec9245c6b9eeca7a32baa64694d64d9b6faeb74ddb8c4a413d languageName: node linkType: hard @@ -3512,9 +3197,9 @@ __metadata: linkType: hard "chrome-trace-event@npm:^1.0.2": - version: 1.0.3 - resolution: "chrome-trace-event@npm:1.0.3" - checksum: cb8b1fc7e881aaef973bd0c4a43cd353c2ad8323fb471a041e64f7c2dd849cde4aad15f8b753331a32dda45c973f032c8a03b8177fc85d60eaa75e91e08bfb97 + version: 1.0.4 + resolution: "chrome-trace-event@npm:1.0.4" + checksum: fcbbd9dd0cd5b48444319007cc0c15870fd8612cc0df320908aa9d5e8a244084d48571eb28bf3c58c19327d2c5838f354c2d89fac3956d8e992273437401ac19 languageName: node linkType: hard @@ -3526,16 +3211,16 @@ __metadata: linkType: hard "ci-info@npm:^3.2.0": - version: 3.7.1 - resolution: "ci-info@npm:3.7.1" - checksum: 72d93d5101ea1c186511277fbd8d06ae8a6e028cc2fb94361e92bf735b39c5ebd192e8d15a66ff8c4e3ed569f87c2f844e96f90e141b2de5c649f77ec34ff601 + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 languageName: node linkType: hard "cjs-module-lexer@npm:^1.0.0": - version: 1.2.2 - resolution: "cjs-module-lexer@npm:1.2.2" - checksum: 977f3f042bd4f08e368c890d91eecfbc4f91da0bc009a3c557bc4dfbf32022ad1141244ac1178d44de70fc9f3dea7add7cd9a658a34b9fae98a55d8f92331ce5 + version: 1.3.1 + resolution: "cjs-module-lexer@npm:1.3.1" + checksum: 75f20ac264a397ea5c63f9c2343a51ab878043666468f275e94862f7180ec1d764a400ec0c09085dcf0db3193c74a8b571519abd2bf4be0d2be510d1377c8d4b languageName: node linkType: hard @@ -3551,12 +3236,12 @@ __metadata: languageName: node linkType: hard -"clean-css@npm:^5.1.5": - version: 5.2.1 - resolution: "clean-css@npm:5.2.1" +"clean-css@npm:^5.2.2": + version: 5.3.3 + resolution: "clean-css@npm:5.3.3" dependencies: source-map: ~0.6.0 - checksum: 45bf069a37d8d80a8e88933d7d26f5870aef086f7634ceda25865f6690e24fee1f1b49bf919f3cedb3d51d721534278ea5181b090256ea72ec0c3defb2aa17c2 + checksum: 941987c14860dd7d346d5cf121a82fd2caf8344160b1565c5387f7ccca4bbcaf885bace961be37c4f4713ce2d8c488dd89483c1add47bb779790edbfdcc79cbc languageName: node linkType: hard @@ -3596,17 +3281,10 @@ __metadata: languageName: node linkType: hard -"code-point-at@npm:^1.0.0": - version: 1.1.0 - resolution: "code-point-at@npm:1.1.0" - checksum: 17d5666611f9b16d64fdf48176d9b7fb1c7d1c1607a189f7e600040a11a6616982876af148230336adb7d8fe728a559f743a4e29db3747e3b1a32fa7f4529681 - languageName: node - linkType: hard - "collect-v8-coverage@npm:^1.0.0": - version: 1.0.1 - resolution: "collect-v8-coverage@npm:1.0.1" - checksum: 4efe0a1fccd517b65478a2364b33dadd0a43fc92a56f59aaece9b6186fe5177b2de471253587de7c91516f07c7268c2f6770b6cbcffc0e0ece353b766ec87e55 + version: 1.0.2 + resolution: "collect-v8-coverage@npm:1.0.2" + checksum: c10f41c39ab84629d16f9f6137bc8a63d332244383fc368caf2d2052b5e04c20cd1fd70f66fcf4e2422b84c8226598b776d39d5f2d2a51867cc1ed5d1982b4da languageName: node linkType: hard @@ -3653,16 +3331,9 @@ __metadata: linkType: hard "colorette@npm:^2.0.10, colorette@npm:^2.0.14": - version: 2.0.16 - resolution: "colorette@npm:2.0.16" - checksum: cd55596a3a2d1071c1a28eee7fd8a5387593ff1bd10a3e8d0a6221499311fe34a9f2b9272d77c391e0e003dcdc8934fb2f8d106e7ef1f7516f8060c901d41a27 - languageName: node - linkType: hard - -"colors@npm:^1.4.0": - version: 1.4.0 - resolution: "colors@npm:1.4.0" - checksum: 98aa2c2418ad87dedf25d781be69dc5fc5908e279d9d30c34d8b702e586a0474605b3a189511482b9d5ed0d20c867515d22749537f7bc546256c6014f3ebdcec + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: 0c016fea2b91b733eb9f4bcdb580018f52c0bc0979443dad930e5037a968237ac53d9beb98e218d2e9235834f8eebce7f8e080422d6194e957454255bde71d3d languageName: node linkType: hard @@ -3689,17 +3360,17 @@ __metadata: languageName: node linkType: hard -"commander@npm:^8.1.0": - version: 8.2.0 - resolution: "commander@npm:8.2.0" - checksum: e868805bc266777f7a9c8a740e15b9e02b8148d8251f577ea9b9ef373ac0bdeb77b9b60cfc033592c9e1affea89993be08c13c623f0c619f9bf152c0e4d12cb0 +"commander@npm:^8.3.0": + version: 8.3.0 + resolution: "commander@npm:8.3.0" + checksum: 0f82321821fc27b83bd409510bb9deeebcfa799ff0bf5d102128b500b7af22872c0c92cb6a0ebc5a4cf19c6b550fba9cedfa7329d18c6442a625f851377bacf0 languageName: node linkType: hard "component-emitter@npm:^1.2.1": - version: 1.3.0 - resolution: "component-emitter@npm:1.3.0" - checksum: b3c46de38ffd35c57d1c02488355be9f218e582aec72d72d1b8bbec95a3ac1b38c96cd6e03ff015577e68f550fbb361a3bfdbd9bb248be9390b7b3745691be6b + version: 1.3.1 + resolution: "component-emitter@npm:1.3.1" + checksum: 94550aa462c7bd5a61c1bc480e28554aa306066930152d1b1844a0dd3845d4e5db7e261ddec62ae184913b3e59b55a2ad84093b9d3596a8f17c341514d6c483d languageName: node linkType: hard @@ -3734,42 +3405,33 @@ __metadata: languageName: node linkType: hard -"connect-history-api-fallback@npm:^1.6.0": - version: 1.6.0 - resolution: "connect-history-api-fallback@npm:1.6.0" - checksum: 804ca2be28c999032ecd37a9f71405e5d7b7a4b3defcebbe41077bb8c5a0a150d7b59f51dcc33b2de30bc7e217a31d10f8cfad27e8e74c2fc7655eeba82d6e7e - languageName: node - linkType: hard - -"console-control-strings@npm:^1.0.0, console-control-strings@npm:~1.1.0": - version: 1.1.0 - resolution: "console-control-strings@npm:1.1.0" - checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed +"connect-history-api-fallback@npm:^2.0.0": + version: 2.0.0 + resolution: "connect-history-api-fallback@npm:2.0.0" + checksum: dc5368690f4a5c413889792f8df70d5941ca9da44523cde3f87af0745faee5ee16afb8195434550f0504726642734f2683d6c07f8b460f828a12c45fbd4c9a68 languageName: node linkType: hard -"content-disposition@npm:0.5.3": - version: 0.5.3 - resolution: "content-disposition@npm:0.5.3" +"content-disposition@npm:0.5.4": + version: 0.5.4 + resolution: "content-disposition@npm:0.5.4" dependencies: - safe-buffer: 5.1.2 - checksum: 95bf164c0b0b8199d3f44b7631e51b37f683c6a90b9baa4315bd3d405a6d1bc81b7346f0981046aa004331fb3d7a28b629514d01fc209a5251573fc7e4d33380 + safe-buffer: 5.2.1 + checksum: afb9d545e296a5171d7574fcad634b2fdf698875f4006a9dd04a3e1333880c5c0c98d47b560d01216fb6505a54a2ba6a843ee3a02ec86d7e911e8315255f56c3 languageName: node linkType: hard -"content-type@npm:~1.0.4": - version: 1.0.4 - resolution: "content-type@npm:1.0.4" - checksum: 3d93585fda985d1554eca5ebd251994327608d2e200978fdbfba21c0c679914d5faf266d17027de44b34a72c7b0745b18584ecccaa7e1fdfb6a68ac7114f12e0 +"content-type@npm:~1.0.4, content-type@npm:~1.0.5": + version: 1.0.5 + resolution: "content-type@npm:1.0.5" + checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766 languageName: node linkType: hard -"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": - version: 1.8.0 - resolution: "convert-source-map@npm:1.8.0" - dependencies: - safe-buffer: ~5.1.1 - checksum: 985d974a2d33e1a2543ada51c93e1ba2f73eaed608dc39f229afc78f71dcc4c8b7d7c684aa647e3c6a3a204027444d69e53e169ce94e8d1fa8d7dee80c9c8fed +"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.7.0": + version: 1.9.0 + resolution: "convert-source-map@npm:1.9.0" + checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 languageName: node linkType: hard @@ -3787,10 +3449,10 @@ __metadata: languageName: node linkType: hard -"cookie@npm:0.4.0": - version: 0.4.0 - resolution: "cookie@npm:0.4.0" - checksum: 760384ba0aef329c52523747e36a452b5e51bc49b34160363a6934e7b7df3f93fcc88b35e33450361535d40a92a96412da870e1816aba9aa6cc556a9fedd8492 +"cookie@npm:0.6.0": + version: 0.6.0 + resolution: "cookie@npm:0.6.0" + checksum: f56a7d32a07db5458e79c726b77e3c2eff655c36792f2b6c58d351fb5f61531e5b1ab7f46987150136e366c65213cbe31729e02a3eaed630c3bf7334635fb410 languageName: node linkType: hard @@ -3815,6 +3477,23 @@ __metadata: languageName: node linkType: hard +"create-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "create-jest@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + chalk: ^4.0.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + jest-config: ^29.7.0 + jest-util: ^29.7.0 + prompts: ^2.0.1 + bin: + create-jest: bin/create-jest.js + checksum: 1427d49458adcd88547ef6fa39041e1fe9033a661293aa8d2c3aa1b4967cb5bf4f0c00436c7a61816558f28ba2ba81a94d5c962e8022ea9a883978fc8e1f2945 + languageName: node + linkType: hard + "create-require@npm:^1.1.0": version: 1.1.1 resolution: "create-require@npm:1.1.1" @@ -3847,7 +3526,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -3859,22 +3538,22 @@ __metadata: linkType: hard "css-select@npm:^4.1.3": - version: 4.1.3 - resolution: "css-select@npm:4.1.3" + version: 4.3.0 + resolution: "css-select@npm:4.3.0" dependencies: boolbase: ^1.0.0 - css-what: ^5.0.0 - domhandler: ^4.2.0 - domutils: ^2.6.0 - nth-check: ^2.0.0 - checksum: 40928f1aa6c71faf36430e7f26bcbb8ab51d07b98b754caacb71906400a195df5e6c7020a94f2982f02e52027b9bd57c99419220cf7020968c3415f14e4be5f8 + css-what: ^6.0.1 + domhandler: ^4.3.1 + domutils: ^2.8.0 + nth-check: ^2.0.1 + checksum: d6202736839194dd7f910320032e7cfc40372f025e4bf21ca5bf6eb0a33264f322f50ba9c0adc35dadd342d3d6fae5ca244779a4873afbfa76561e343f2058e0 languageName: node linkType: hard -"css-what@npm:^5.0.0": - version: 5.1.0 - resolution: "css-what@npm:5.1.0" - checksum: 0b75d1bac95c885c168573c85744a6c6843d8c33345f54f717218b37ea6296b0e99bb12105930ea170fd4a921990392a7c790c16c585c1d8960c49e2b7ec39f7 +"css-what@npm:^6.0.1": + version: 6.1.0 + resolution: "css-what@npm:6.1.0" + checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe languageName: node linkType: hard @@ -3909,9 +3588,9 @@ __metadata: linkType: hard "csstype@npm:^3.0.2": - version: 3.0.9 - resolution: "csstype@npm:3.0.9" - checksum: 199f9af7e673f9f188525c3102a329d637ff46c52f6385a4427ff5cb17adcb736189150170a7af7c5701d18d7704bdad130273f4aa7e44c6c4f9967e6115dc93 + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: 8db785cc92d259102725b3c694ec0c823f5619a84741b5c7991b8ad135dfaa66093038a1cc63e03361a6cd28d122be48f2106ae72334e067dd619a51f49eddf7 languageName: node linkType: hard @@ -3926,7 +3605,40 @@ __metadata: languageName: node linkType: hard -"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.9": +"data-view-buffer@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-buffer@npm:1.0.1" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: ce24348f3c6231223b216da92e7e6a57a12b4af81a23f27eff8feabdf06acfb16c00639c8b705ca4d167f761cfc756e27e5f065d0a1f840c10b907fdaf8b988c + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: dbb3200edcb7c1ef0d68979834f81d64fd8cab2f7691b3a4c6b97e67f22182f3ec2c8602efd7b76997b55af6ff8bce485829c1feda4fa2165a6b71fb7baa4269 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "data-view-byte-offset@npm:1.0.0" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: 7f0bf8720b7414ca719eedf1846aeec392f2054d7af707c5dc9a753cc77eb8625f067fa901e0b5127e831f9da9056138d894b9c2be79c27a21f6db5824f009c2 + languageName: node + linkType: hard + +"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3": version: 2.6.9 resolution: "debug@npm:2.6.9" dependencies: @@ -3935,15 +3647,15 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1": - version: 4.3.2 - resolution: "debug@npm:4.3.2" +"debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.4": + version: 4.3.6 + resolution: "debug@npm:4.3.6" dependencies: ms: 2.1.2 peerDependenciesMeta: supports-color: optional: true - checksum: 820ea160e267e23c953c9ed87e7ad93494d8cda2f7349af5e7e3bb236d23707ee3022f477d5a7d2ee86ef2bf7d60aa9ab22d1f58080d7deb9dccd073585e1e43 + checksum: 1630b748dea3c581295e02137a9f5cbe2c1d85fea35c1e6597a65ca2b16a6fce68cec61b299d480787ef310ba927dc8c92d3061faba0ad06c6a724672f66be7f languageName: node linkType: hard @@ -3959,7 +3671,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^3.1.1, debug@npm:^3.2.7": +"debug@npm:^3.2.7": version: 3.2.7 resolution: "debug@npm:3.2.7" dependencies: @@ -3968,18 +3680,6 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.3.4": - version: 4.3.4 - resolution: "debug@npm:4.3.4" - dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 - languageName: node - linkType: hard - "decimal.js@npm:^10.4.2": version: 10.4.3 resolution: "decimal.js@npm:10.4.3" @@ -3988,34 +3688,51 @@ __metadata: linkType: hard "decode-uri-component@npm:^0.2.0": - version: 0.2.0 - resolution: "decode-uri-component@npm:0.2.0" - checksum: f3749344ab9305ffcfe4bfe300e2dbb61fc6359e2b736812100a3b1b6db0a5668cba31a05e4b45d4d63dbf1a18dfa354cd3ca5bb3ededddabb8cd293f4404f94 + version: 0.2.2 + resolution: "decode-uri-component@npm:0.2.2" + checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139 languageName: node linkType: hard -"dedent@npm:^0.7.0": - version: 0.7.0 - resolution: "dedent@npm:0.7.0" - checksum: 87de191050d9a40dd70cad01159a0bcf05ecb59750951242070b6abf9569088684880d00ba92a955b4058804f16eeaf91d604f283929b4f614d181cd7ae633d2 +"dedent@npm:^1.0.0": + version: 1.5.3 + resolution: "dedent@npm:1.5.3" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: 045b595557b2a8ea2eb9b0b4623d764e9a87326486fe2b61191b4342ed93dc01245644d8a09f3108a50c0ee7965f1eedd92e4a3a503ed89ea8e810566ea27f9a languageName: node linkType: hard -"deep-equal@npm:^1.0.1": - version: 1.1.1 - resolution: "deep-equal@npm:1.1.1" - dependencies: - is-arguments: ^1.0.4 - is-date-object: ^1.0.1 - is-regex: ^1.0.4 - object-is: ^1.0.1 +"deep-equal@npm:^2.0.5": + version: 2.2.3 + resolution: "deep-equal@npm:2.2.3" + dependencies: + array-buffer-byte-length: ^1.0.0 + call-bind: ^1.0.5 + es-get-iterator: ^1.1.3 + get-intrinsic: ^1.2.2 + is-arguments: ^1.1.1 + is-array-buffer: ^3.0.2 + is-date-object: ^1.0.5 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.2 + isarray: ^2.0.5 + object-is: ^1.1.5 object-keys: ^1.1.1 - regexp.prototype.flags: ^1.2.0 - checksum: f92686f2c5bcdf714a75a5fa7a9e47cb374a8ec9307e717b8d1ce61f56a75aaebf5619c2a12b8087a705b5a2f60d0292c35f8b58cb1f72e3268a3a15cab9f78d + object.assign: ^4.1.4 + regexp.prototype.flags: ^1.5.1 + side-channel: ^1.0.4 + which-boxed-primitive: ^1.0.2 + which-collection: ^1.0.1 + which-typed-array: ^1.1.13 + checksum: ee8852f23e4d20a5626c13b02f415ba443a1b30b4b3d39eaf366d59c4a85e6545d7ec917db44d476a85ae5a86064f7e5f7af7479f38f113995ba869f3a1ddc53 languageName: node linkType: hard -"deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": +"deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 @@ -4023,13 +3740,13 @@ __metadata: linkType: hard "deepmerge@npm:^4.2.2": - version: 4.2.2 - resolution: "deepmerge@npm:4.2.2" - checksum: a8c43a1ed8d6d1ed2b5bf569fa4c8eb9f0924034baf75d5d406e47e157a451075c4db353efea7b6bcc56ec48116a8ce72fccf867b6e078e7c561904b5897530b + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 languageName: node linkType: hard -"default-gateway@npm:^6.0.0": +"default-gateway@npm:^6.0.3": version: 6.0.3 resolution: "default-gateway@npm:6.0.3" dependencies: @@ -4038,6 +3755,17 @@ __metadata: languageName: node linkType: hard +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + gopd: ^1.0.1 + checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b + languageName: node + linkType: hard + "define-lazy-prop@npm:^2.0.0": version: 2.0.0 resolution: "define-lazy-prop@npm:2.0.0" @@ -4045,22 +3773,14 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.1.3": - version: 1.1.3 - resolution: "define-properties@npm:1.1.3" - dependencies: - object-keys: ^1.0.12 - checksum: da80dba55d0cd76a5a7ab71ef6ea0ebcb7b941f803793e4e0257b384cb772038faa0c31659d244e82c4342edef841c1a1212580006a05a5068ee48223d787317 - languageName: node - linkType: hard - -"define-properties@npm:^1.1.4": - version: 1.1.4 - resolution: "define-properties@npm:1.1.4" +"define-properties@npm:^1.1.3, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" dependencies: + define-data-property: ^1.0.1 has-property-descriptors: ^1.0.0 object-keys: ^1.1.1 - checksum: ce0aef3f9eb193562b5cfb79b2d2c86b6a109dfc9fdcb5f45d680631a1a908c06824ddcdb72b7573b54e26ace07f0a23420aaba0d5c627b34d2c1de8ef527e2b + checksum: b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 languageName: node linkType: hard @@ -4092,22 +3812,6 @@ __metadata: languageName: node linkType: hard -"del@npm:^6.0.0": - version: 6.0.0 - resolution: "del@npm:6.0.0" - dependencies: - globby: ^11.0.1 - graceful-fs: ^4.2.4 - is-glob: ^4.0.1 - is-path-cwd: ^2.2.0 - is-path-inside: ^3.0.2 - p-map: ^4.0.0 - rimraf: ^3.0.2 - slash: ^3.0.0 - checksum: 5742891627e91aaf62385714025233f4664da28bc55b6ab825649dcdea4691fed3cf329a2b1913fd2d2612e693e99e08a03c84cac7f36ef54bacac9390520192 - languageName: node - linkType: hard - "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -4115,24 +3819,31 @@ __metadata: languageName: node linkType: hard -"delegates@npm:^1.0.0": - version: 1.0.0 - resolution: "delegates@npm:1.0.0" - checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd +"depd@npm:2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a languageName: node linkType: hard -"depd@npm:^1.1.2, depd@npm:~1.1.2": +"depd@npm:~1.1.2": version: 1.1.2 resolution: "depd@npm:1.1.2" checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 languageName: node linkType: hard -"destroy@npm:~1.0.4": - version: 1.0.4 - resolution: "destroy@npm:1.0.4" - checksum: da9ab4961dc61677c709da0c25ef01733042614453924d65636a7db37308fef8a24cd1e07172e61173d471ca175371295fbc984b0af5b2b4ff47cd57bd784c03 +"dequal@npm:^2.0.3": + version: 2.0.3 + resolution: "dequal@npm:2.0.3" + checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 + languageName: node + linkType: hard + +"destroy@npm:1.2.0": + version: 1.2.0 + resolution: "destroy@npm:1.2.0" + checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 languageName: node linkType: hard @@ -4157,17 +3868,10 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^27.0.6": - version: 27.0.6 - resolution: "diff-sequences@npm:27.0.6" - checksum: f35ad024d426cd1026d6c98a1f604c41966a0e89712b05a38812fc11e645ff0e915ec17bc8f4b6910fed6df0b309b255aa6c7c77728be452c6dbbfa30aa2067b - languageName: node - linkType: hard - -"diff-sequences@npm:^29.3.1": - version: 29.3.1 - resolution: "diff-sequences@npm:29.3.1" - checksum: 8edab8c383355022e470779a099852d595dd856f9f5bd7af24f177e74138a668932268b4c4fd54096eed643861575c3652d4ecbbb1a9d710488286aed3ffa443 +"diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: f4914158e1f2276343d98ff5b31fc004e7304f5470bf0f1adb2ac6955d85a531a6458d33e87667f98f6ae52ebd3891bb47d420bb48a5bd8b7a27ee25b20e33aa languageName: node linkType: hard @@ -4187,29 +3891,12 @@ __metadata: languageName: node linkType: hard -"dns-equal@npm:^1.0.0": - version: 1.0.0 - resolution: "dns-equal@npm:1.0.0" - checksum: a8471ac849c7c13824f053babea1bc26e2f359394dd5a460f8340d8abd13434be01e3327a5c59d212f8c8997817450efd3f3ac77bec709b21979cf0235644524 - languageName: node - linkType: hard - -"dns-packet@npm:^1.3.1": - version: 1.3.4 - resolution: "dns-packet@npm:1.3.4" - dependencies: - ip: ^1.1.0 - safe-buffer: ^5.0.1 - checksum: 7dd87f85cb4f9d1a99c03470730e3d9385e67dc94f6c13868c4034424a5378631e492f9f1fbc43d3c42f319fbbfe18b6488bb9527c32d34692c52bf1f5eedf69 - languageName: node - linkType: hard - -"dns-txt@npm:^2.0.2": - version: 2.0.2 - resolution: "dns-txt@npm:2.0.2" +"dns-packet@npm:^5.2.2": + version: 5.6.1 + resolution: "dns-packet@npm:5.6.1" dependencies: - buffer-indexof: ^1.0.0 - checksum: 80130b665379ecd991687ae079fbee25d091e03e4c4cef41e7643b977849ac48c2f56bfcb3727e53594d29029b833749811110d9f3fbee1b26a6e6f8096a5cef + "@leichtgewicht/ip-codec": ^2.0.1 + checksum: 64c06457f0c6e143f7a0946e0aeb8de1c5f752217cfa143ef527467c00a6d78db1835cfdb6bb68333d9f9a4963cf23f410439b5262a8935cce1236f45e344b81 languageName: node linkType: hard @@ -4231,17 +3918,10 @@ __metadata: languageName: node linkType: hard -"dom-accessibility-api@npm:^0.5.6": - version: 0.5.8 - resolution: "dom-accessibility-api@npm:0.5.8" - checksum: 6ede8578a7e6123f2eb27c04ff4c7947cb1362f73105c2cf75b700d94ff82740f9566025357f46ced4ae9fa2a6f6f101f4b910bb308ab516e247ed77951f46e5 - languageName: node - linkType: hard - -"dom-accessibility-api@npm:^0.5.9": - version: 0.5.14 - resolution: "dom-accessibility-api@npm:0.5.14" - checksum: 782c813f75a09ba6735ef03b5e1624406a3829444ae49d5bdedd272a49d437ae3354f53e02ffc8c9fd9165880250f41546538f27461f839dd4ea1234e77e8d5e +"dom-accessibility-api@npm:^0.5.6, dom-accessibility-api@npm:^0.5.9": + version: 0.5.16 + resolution: "dom-accessibility-api@npm:0.5.16" + checksum: 005eb283caef57fc1adec4d5df4dd49189b628f2f575af45decb210e04d634459e3f1ee64f18b41e2dcf200c844bc1d9279d80807e686a30d69a4756151ad248 languageName: node linkType: hard @@ -4255,20 +3935,20 @@ __metadata: linkType: hard "dom-serializer@npm:^1.0.1": - version: 1.3.2 - resolution: "dom-serializer@npm:1.3.2" + version: 1.4.1 + resolution: "dom-serializer@npm:1.4.1" dependencies: domelementtype: ^2.0.1 domhandler: ^4.2.0 entities: ^2.0.0 - checksum: bff48714944d67b160db71ba244fb0f3fe72e77ef2ec8414e2eeb56f2d926e404a13456b8b83a5392e217ba47dec2ec0c368801b31481813e94d185276c3e964 + checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22 languageName: node linkType: hard "domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": - version: 2.2.0 - resolution: "domelementtype@npm:2.2.0" - checksum: 24cb386198640cd58aa36f8c987f2ea61859929106d06ffcc8f547e70cb2ed82a6dc56dcb8252b21fba1f1ea07df6e4356d60bfe57f77114ca1aed6828362629 + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 languageName: node linkType: hard @@ -4281,16 +3961,16 @@ __metadata: languageName: node linkType: hard -"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0": - version: 4.2.2 - resolution: "domhandler@npm:4.2.2" +"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.3.1": + version: 4.3.1 + resolution: "domhandler@npm:4.3.1" dependencies: domelementtype: ^2.2.0 - checksum: ad782fef984eca5a6fdd4ce70b90c38aff335ae4d6a51223ac82bd371b6674614efdcfff2dbb1126a7395634357906781f179e4ec028c7c578bb7f2beef8a4a5 + checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa languageName: node linkType: hard -"domutils@npm:^2.5.2, domutils@npm:^2.6.0": +"domutils@npm:^2.5.2, domutils@npm:^2.8.0": version: 2.8.0 resolution: "domutils@npm:2.8.0" dependencies: @@ -4311,6 +3991,13 @@ __metadata: languageName: node linkType: hard +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + "ee-first@npm:1.1.1": version: 1.1.1 resolution: "ee-first@npm:1.1.1" @@ -4318,24 +4005,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.3.857": - version: 1.3.864 - resolution: "electron-to-chromium@npm:1.3.864" - checksum: a3405aa5d1ce5af0da9b2c5fff9da9aeaa49d9aafc2a3046a7d448e438ef02a7ed10625a10b2eb6b6c3452d70f75f9b28c9ea3603f74b29cbdcdacd984927f69 - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.4.251": - version: 1.4.284 - resolution: "electron-to-chromium@npm:1.4.284" - checksum: be496e9dca6509dbdbb54dc32146fc99f8eb716d28a7ee8ccd3eba0066561df36fc51418d8bd7cf5a5891810bf56c0def3418e74248f51ea4a843d423603d10a - languageName: node - linkType: hard - "electron-to-chromium@npm:^1.5.4": - version: 1.5.6 - resolution: "electron-to-chromium@npm:1.5.6" - checksum: 09ca45c781e3e3ef87de87fb74019228f41e1a4abd2e703319aa7d942866815f3df89cc4bf61af81a4cac81271992d4f59a5eca7a093c07322ae0608bf98a427 + version: 1.5.13 + resolution: "electron-to-chromium@npm:1.5.13" + checksum: f18ac84dd3bf9a200654a6a9292b9ec4bced0cf9bd26cec9941b775f4470c581c9d043e70b37a124d9752dcc0f47fc96613d52b2defd8e59632852730cb418b9 languageName: node linkType: hard @@ -4353,6 +4026,13 @@ __metadata: languageName: node linkType: hard +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + "encodeurl@npm:~1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" @@ -4360,7 +4040,7 @@ __metadata: languageName: node linkType: hard -"encoding@npm:^0.1.12": +"encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" dependencies: @@ -4378,27 +4058,7 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.0.0": - version: 5.8.3 - resolution: "enhanced-resolve@npm:5.8.3" - dependencies: - graceful-fs: ^4.2.4 - tapable: ^2.2.0 - checksum: d79fbe531106448b768bb0673fb623ec0202d7ee70373ab7d4f4745d5dfe0806f38c9db7e7da8c941288fe475ab3d538db3791fce522056eeea40ca398c9e287 - languageName: node - linkType: hard - -"enhanced-resolve@npm:^5.10.0": - version: 5.12.0 - resolution: "enhanced-resolve@npm:5.12.0" - dependencies: - graceful-fs: ^4.2.4 - tapable: ^2.2.0 - checksum: bf3f787facaf4ce3439bef59d148646344e372bef5557f0d37ea8aa02c51f50a925cd1f07b8d338f18992c29f544ec235a8c64bcdb56030196c48832a5494174 - languageName: node - linkType: hard - -"enhanced-resolve@npm:^5.17.0": +"enhanced-resolve@npm:^5.0.0, enhanced-resolve@npm:^5.12.0, enhanced-resolve@npm:^5.17.0": version: 5.17.1 resolution: "enhanced-resolve@npm:5.17.1" dependencies: @@ -4409,11 +4069,12 @@ __metadata: linkType: hard "enquirer@npm:^2.3.5": - version: 2.3.6 - resolution: "enquirer@npm:2.3.6" + version: 2.4.1 + resolution: "enquirer@npm:2.4.1" dependencies: ansi-colors: ^4.1.1 - checksum: 1c0911e14a6f8d26721c91e01db06092a5f7675159f0261d69c403396a385afd13dd76825e7678f66daffa930cfaa8d45f506fb35f818a2788463d022af1b884 + strip-ansi: ^6.0.1 + checksum: f080f11a74209647dbf347a7c6a83c8a47ae1ebf1e75073a808bc1088eb780aa54075bfecd1bcdb3e3c724520edb8e6ee05da031529436b421b71066fcc48cb5 languageName: node linkType: hard @@ -4425,9 +4086,9 @@ __metadata: linkType: hard "entities@npm:^4.4.0": - version: 4.4.0 - resolution: "entities@npm:4.4.0" - checksum: 84d250329f4b56b40fa93ed067b194db21e8815e4eb9b59f43a086f0ecd342814f6bc483de8a77da5d64e0f626033192b1b4f1792232a7ea6b970ebe0f3187c2 + version: 4.5.0 + resolution: "entities@npm:4.5.0" + checksum: 853f8ebd5b425d350bffa97dd6958143179a5938352ccae092c62d1267c4e392a039be1bae7d51b6e4ffad25f51f9617531fedf5237f15df302ccfb452cbf2d7 languageName: node linkType: hard @@ -4439,11 +4100,11 @@ __metadata: linkType: hard "envinfo@npm:^7.7.3": - version: 7.8.1 - resolution: "envinfo@npm:7.8.1" + version: 7.13.0 + resolution: "envinfo@npm:7.13.0" bin: envinfo: dist/cli.js - checksum: de736c98d6311c78523628ff127af138451b162e57af5293c1b984ca821d0aeb9c849537d2fde0434011bed33f6bca5310ca2aab8a51a3f28fc719e89045d648 + checksum: 822fc30f53bd0be67f0e25be96eb6a2562b8062f3058846bbd7ec471bd4b7835fca6436ee72c4029c8ae4a3d8f8cddbe2ee725b22291f015232d20a682bee732 languageName: node linkType: hard @@ -4463,63 +4124,112 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1": - version: 1.19.1 - resolution: "es-abstract@npm:1.19.1" +"es-abstract@npm:^1.17.5, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3": + version: 1.23.3 + resolution: "es-abstract@npm:1.23.3" dependencies: - call-bind: ^1.0.2 + array-buffer-byte-length: ^1.0.1 + arraybuffer.prototype.slice: ^1.0.3 + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + data-view-buffer: ^1.0.1 + data-view-byte-length: ^1.0.1 + data-view-byte-offset: ^1.0.0 + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + es-set-tostringtag: ^2.0.3 es-to-primitive: ^1.2.1 - function-bind: ^1.1.1 - get-intrinsic: ^1.1.1 - get-symbol-description: ^1.0.0 - has: ^1.0.3 - has-symbols: ^1.0.2 - internal-slot: ^1.0.3 - is-callable: ^1.2.4 - is-negative-zero: ^2.0.1 + function.prototype.name: ^1.1.6 + get-intrinsic: ^1.2.4 + get-symbol-description: ^1.0.2 + globalthis: ^1.0.3 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.2 + has-proto: ^1.0.3 + has-symbols: ^1.0.3 + hasown: ^2.0.2 + internal-slot: ^1.0.7 + is-array-buffer: ^3.0.4 + is-callable: ^1.2.7 + is-data-view: ^1.0.1 + is-negative-zero: ^2.0.3 is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.1 + is-shared-array-buffer: ^1.0.3 is-string: ^1.0.7 - is-weakref: ^1.0.1 - object-inspect: ^1.11.0 + is-typed-array: ^1.1.13 + is-weakref: ^1.0.2 + object-inspect: ^1.13.1 object-keys: ^1.1.1 - object.assign: ^4.1.2 - string.prototype.trimend: ^1.0.4 - string.prototype.trimstart: ^1.0.4 - unbox-primitive: ^1.0.1 - checksum: b6be8410672c5364db3fb01eb786e30c7b4bb32b4af63d381c08840f4382c4a168e7855cd338bf59d4f1a1a1138f4d748d1fd40ec65aaa071876f9e9fbfed949 + object.assign: ^4.1.5 + regexp.prototype.flags: ^1.5.2 + safe-array-concat: ^1.1.2 + safe-regex-test: ^1.0.3 + string.prototype.trim: ^1.2.9 + string.prototype.trimend: ^1.0.8 + string.prototype.trimstart: ^1.0.8 + typed-array-buffer: ^1.0.2 + typed-array-byte-length: ^1.0.1 + typed-array-byte-offset: ^1.0.2 + typed-array-length: ^1.0.6 + unbox-primitive: ^1.0.2 + which-typed-array: ^1.1.15 + checksum: f840cf161224252512f9527306b57117192696571e07920f777cb893454e32999206198b4f075516112af6459daca282826d1735c450528470356d09eff3a9ae + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: ^1.2.4 + checksum: f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 + languageName: node + linkType: hard + +"es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 languageName: node linkType: hard -"es-abstract@npm:^1.20.4": - version: 1.20.4 - resolution: "es-abstract@npm:1.20.4" +"es-get-iterator@npm:^1.1.3": + version: 1.1.3 + resolution: "es-get-iterator@npm:1.1.3" dependencies: call-bind: ^1.0.2 - es-to-primitive: ^1.2.1 - function-bind: ^1.1.1 - function.prototype.name: ^1.1.5 get-intrinsic: ^1.1.3 - get-symbol-description: ^1.0.0 - has: ^1.0.3 - has-property-descriptors: ^1.0.0 has-symbols: ^1.0.3 - internal-slot: ^1.0.3 - is-callable: ^1.2.7 - is-negative-zero: ^2.0.2 - is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.2 + is-arguments: ^1.1.1 + is-map: ^2.0.2 + is-set: ^2.0.2 is-string: ^1.0.7 - is-weakref: ^1.0.2 - object-inspect: ^1.12.2 - object-keys: ^1.1.1 - object.assign: ^4.1.4 - regexp.prototype.flags: ^1.4.3 - safe-regex-test: ^1.0.0 - string.prototype.trimend: ^1.0.5 - string.prototype.trimstart: ^1.0.5 - unbox-primitive: ^1.0.2 - checksum: 89297cc785c31aedf961a603d5a07ed16471e435d3a1b6d070b54f157cf48454b95cda2ac55e4b86ff4fe3276e835fcffd2771578e6fa634337da49b26826141 + isarray: ^2.0.5 + stop-iteration-iterator: ^1.0.0 + checksum: 8fa118da42667a01a7c7529f8a8cca514feeff243feec1ce0bb73baaa3514560bd09d2b3438873cf8a5aaec5d52da248131de153b28e2638a061b6e4df13267d + languageName: node + linkType: hard + +"es-iterator-helpers@npm:^1.0.19": + version: 1.0.19 + resolution: "es-iterator-helpers@npm:1.0.19" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.3 + es-errors: ^1.3.0 + es-set-tostringtag: ^2.0.3 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 + globalthis: ^1.0.3 + has-property-descriptors: ^1.0.2 + has-proto: ^1.0.3 + has-symbols: ^1.0.3 + internal-slot: ^1.0.7 + iterator.prototype: ^1.1.2 + safe-array-concat: ^1.1.2 + checksum: 7ae112b88359fbaf4b9d7d1d1358ae57c5138768c57ba3a8fb930393662653b0512bfd7917c15890d1471577fb012fee8b73b4465e59b331739e6ee94f961683 languageName: node linkType: hard @@ -4530,12 +4240,32 @@ __metadata: languageName: node linkType: hard -"es-shim-unscopables@npm:^1.0.0": +"es-object-atoms@npm:^1.0.0": version: 1.0.0 - resolution: "es-shim-unscopables@npm:1.0.0" + resolution: "es-object-atoms@npm:1.0.0" + dependencies: + es-errors: ^1.3.0 + checksum: 26f0ff78ab93b63394e8403c353842b2272836968de4eafe97656adfb8a7c84b9099bf0fe96ed58f4a4cddc860f6e34c77f91649a58a5daa4a9c40b902744e3c + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.3": + version: 2.0.3 + resolution: "es-set-tostringtag@npm:2.0.3" + dependencies: + get-intrinsic: ^1.2.4 + has-tostringtag: ^1.0.2 + hasown: ^2.0.1 + checksum: 7227fa48a41c0ce83e0377b11130d324ac797390688135b8da5c28994c0165be8b252e15cd1de41e1325e5a5412511586960213e88f9ab4a5e7d028895db5129 + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.0, es-shim-unscopables@npm:^1.0.2": + version: 1.0.2 + resolution: "es-shim-unscopables@npm:1.0.2" dependencies: - has: ^1.0.3 - checksum: 83e95cadbb6ee44d3644dfad60dcad7929edbc42c85e66c3e99aefd68a3a5c5665f2686885cddb47dfeabfd77bd5ea5a7060f2092a955a729bbd8834f0d86fa1 + hasown: ^2.0.0 + checksum: 432bd527c62065da09ed1d37a3f8e623c423683285e6188108286f4a1e8e164a5bcbfbc0051557c7d14633cd2a41ce24c7048e6bbb66a985413fd32f1be72626 languageName: node linkType: hard @@ -4550,14 +4280,7 @@ __metadata: languageName: node linkType: hard -"escalade@npm:^3.1.1": - version: 3.1.1 - resolution: "escalade@npm:3.1.1" - checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 - languageName: node - linkType: hard - -"escalade@npm:^3.1.2": +"escalade@npm:^3.1.1, escalade@npm:^3.1.2": version: 3.1.2 resolution: "escalade@npm:3.1.2" checksum: 1ec0977aa2772075493002bdbd549d595ff6e9393b1cb0d7d6fcaf78c750da0c158f180938365486f75cb69fba20294351caddfce1b46552a7b6c3cde52eaa02 @@ -4593,13 +4316,12 @@ __metadata: linkType: hard "escodegen@npm:^2.0.0": - version: 2.0.0 - resolution: "escodegen@npm:2.0.0" + version: 2.1.0 + resolution: "escodegen@npm:2.1.0" dependencies: esprima: ^4.0.1 estraverse: ^5.2.0 esutils: ^2.0.2 - optionator: ^0.8.1 source-map: ~0.6.1 dependenciesMeta: source-map: @@ -4607,7 +4329,7 @@ __metadata: bin: escodegen: bin/escodegen.js esgenerate: bin/esgenerate.js - checksum: 5aa6b2966fafe0545e4e77936300cc94ad57cfe4dc4ebff9950492eaba83eef634503f12d7e3cbd644ecc1bab388ad0e92b06fd32222c9281a75d1cf02ec6cef + checksum: 096696407e161305cd05aebb95134ad176708bc5cb13d0dcc89a5fcbb959b8ed757e7f2591a5f8036f8f4952d4a724de0df14cd419e29212729fa6df5ce16bf6 languageName: node linkType: hard @@ -4624,66 +4346,71 @@ __metadata: languageName: node linkType: hard -"eslint-import-resolver-node@npm:^0.3.6": - version: 0.3.6 - resolution: "eslint-import-resolver-node@npm:0.3.6" +"eslint-import-resolver-node@npm:^0.3.9": + version: 0.3.9 + resolution: "eslint-import-resolver-node@npm:0.3.9" dependencies: debug: ^3.2.7 - resolve: ^1.20.0 - checksum: 6266733af1e112970e855a5bcc2d2058fb5ae16ad2a6d400705a86b29552b36131ffc5581b744c23d550de844206fb55e9193691619ee4dbf225c4bde526b1c8 + is-core-module: ^2.13.0 + resolve: ^1.22.4 + checksum: 439b91271236b452d478d0522a44482e8c8540bf9df9bd744062ebb89ab45727a3acd03366a6ba2bdbcde8f9f718bab7fe8db64688aca75acf37e04eafd25e22 languageName: node linkType: hard "eslint-import-resolver-typescript@npm:^3.5.2": - version: 3.5.2 - resolution: "eslint-import-resolver-typescript@npm:3.5.2" + version: 3.6.1 + resolution: "eslint-import-resolver-typescript@npm:3.6.1" dependencies: debug: ^4.3.4 - enhanced-resolve: ^5.10.0 - get-tsconfig: ^4.2.0 - globby: ^13.1.2 - is-core-module: ^2.10.0 + enhanced-resolve: ^5.12.0 + eslint-module-utils: ^2.7.4 + fast-glob: ^3.3.1 + get-tsconfig: ^4.5.0 + is-core-module: ^2.11.0 is-glob: ^4.0.3 - synckit: ^0.8.4 peerDependencies: eslint: "*" eslint-plugin-import: "*" - checksum: e163f36072c31150671973eb784e6b2a5d1e5dcc4c8ac19a01d9f1f4223ed07bc4c7ab235bef6caecb1949ba74eea20048cbbb4d6ac7de5f02bdd50c29485a4c + checksum: 454fa0646533050fb57f13d27daf8c71f51b0bb9156d6a461290ccb8576d892209fcc6702a89553f3f5ea8e5b407395ca2e5de169a952c953685f1f7c46b4496 languageName: node linkType: hard -"eslint-module-utils@npm:^2.7.3": - version: 2.7.4 - resolution: "eslint-module-utils@npm:2.7.4" +"eslint-module-utils@npm:^2.7.4, eslint-module-utils@npm:^2.8.0": + version: 2.8.1 + resolution: "eslint-module-utils@npm:2.8.1" dependencies: debug: ^3.2.7 peerDependenciesMeta: eslint: optional: true - checksum: 5da13645daff145a5c922896b258f8bba560722c3767254e458d894ff5fbb505d6dfd945bffa932a5b0ae06714da2379bd41011c4c20d2d59cc83e23895360f7 + checksum: 3cecd99b6baf45ffc269167da0f95dcb75e5aa67b93d73a3bab63e2a7eedd9cdd6f188eed048e2f57c1b77db82c9cbf2adac20b512fa70e597d863dd3720170d languageName: node linkType: hard "eslint-plugin-import@npm:^2.26.0": - version: 2.26.0 - resolution: "eslint-plugin-import@npm:2.26.0" + version: 2.29.1 + resolution: "eslint-plugin-import@npm:2.29.1" dependencies: - array-includes: ^3.1.4 - array.prototype.flat: ^1.2.5 - debug: ^2.6.9 + array-includes: ^3.1.7 + array.prototype.findlastindex: ^1.2.3 + array.prototype.flat: ^1.3.2 + array.prototype.flatmap: ^1.3.2 + debug: ^3.2.7 doctrine: ^2.1.0 - eslint-import-resolver-node: ^0.3.6 - eslint-module-utils: ^2.7.3 - has: ^1.0.3 - is-core-module: ^2.8.1 + eslint-import-resolver-node: ^0.3.9 + eslint-module-utils: ^2.8.0 + hasown: ^2.0.0 + is-core-module: ^2.13.1 is-glob: ^4.0.3 minimatch: ^3.1.2 - object.values: ^1.1.5 - resolve: ^1.22.0 - tsconfig-paths: ^3.14.1 + object.fromentries: ^2.0.7 + object.groupby: ^1.0.1 + object.values: ^1.1.7 + semver: ^6.3.1 + tsconfig-paths: ^3.15.0 peerDependencies: eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - checksum: 0bf77ad80339554481eafa2b1967449e1f816b94c7a6f9614ce33fb4083c4e6c050f10d241dd50b4975d47922880a34de1e42ea9d8e6fd663ebb768baa67e655 + checksum: e65159aef808136d26d029b71c8c6e4cb5c628e65e5de77f1eb4c13a379315ae55c9c3afa847f43f4ff9df7e54515c77ffc6489c6a6f81f7dd7359267577468c languageName: node linkType: hard @@ -4703,35 +4430,39 @@ __metadata: linkType: hard "eslint-plugin-react-hooks@npm:^4.6.0": - version: 4.6.0 - resolution: "eslint-plugin-react-hooks@npm:4.6.0" + version: 4.6.2 + resolution: "eslint-plugin-react-hooks@npm:4.6.2" peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - checksum: 23001801f14c1d16bf0a837ca7970d9dd94e7b560384b41db378b49b6e32dc43d6e2790de1bd737a652a86f81a08d6a91f402525061b47719328f586a57e86c3 + checksum: 395c433610f59577cfcf3f2e42bcb130436c8a0b3777ac64f441d88c5275f4fcfc89094cedab270f2822daf29af1079151a7a6579a8e9ea8cee66540ba0384c4 languageName: node linkType: hard "eslint-plugin-react@npm:^7.23.2": - version: 7.26.1 - resolution: "eslint-plugin-react@npm:7.26.1" + version: 7.35.0 + resolution: "eslint-plugin-react@npm:7.35.0" dependencies: - array-includes: ^3.1.3 - array.prototype.flatmap: ^1.2.4 + array-includes: ^3.1.8 + array.prototype.findlast: ^1.2.5 + array.prototype.flatmap: ^1.3.2 + array.prototype.tosorted: ^1.1.4 doctrine: ^2.1.0 - estraverse: ^5.2.0 + es-iterator-helpers: ^1.0.19 + estraverse: ^5.3.0 + hasown: ^2.0.2 jsx-ast-utils: ^2.4.1 || ^3.0.0 - minimatch: ^3.0.4 - object.entries: ^1.1.4 - object.fromentries: ^2.0.4 - object.hasown: ^1.0.0 - object.values: ^1.1.4 - prop-types: ^15.7.2 - resolve: ^2.0.0-next.3 - semver: ^6.3.0 - string.prototype.matchall: ^4.0.5 + minimatch: ^3.1.2 + object.entries: ^1.1.8 + object.fromentries: ^2.0.8 + object.values: ^1.2.0 + prop-types: ^15.8.1 + resolve: ^2.0.0-next.5 + semver: ^6.3.1 + string.prototype.matchall: ^4.0.11 + string.prototype.repeat: ^1.0.0 peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 - checksum: 856eec868fe45de941f86f5e197a4da1421246bef2dcc88802e78ceedaa067edefd84352483bf595a56054022594f6c3ea93a5fb49aac6830b31d09754ab9237 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + checksum: cd4d3c0567e947964643dda5fc80147e058d75f06bac47c3f086ff0cd6156286c669d98e685e3834997c4043f3922b90e6374b6c3658f22abd025dbd41acc23f languageName: node linkType: hard @@ -4790,9 +4521,9 @@ __metadata: linkType: hard "eslint-visitor-keys@npm:^3.3.0": - version: 3.3.0 - resolution: "eslint-visitor-keys@npm:3.3.0" - checksum: d59e68a7c5a6d0146526b0eec16ce87fbf97fe46b8281e0d41384224375c4e52f5ffb9e16d48f4ea50785cde93f766b0c898e31ab89978d88b0e1720fbfb7808 + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 languageName: node linkType: hard @@ -4868,11 +4599,11 @@ __metadata: linkType: hard "esquery@npm:^1.4.0": - version: 1.4.0 - resolution: "esquery@npm:1.4.0" + version: 1.6.0 + resolution: "esquery@npm:1.6.0" dependencies: estraverse: ^5.1.0 - checksum: a0807e17abd7fbe5fbd4fab673038d6d8a50675cdae6b04fbaa520c34581be0c5fa24582990e8acd8854f671dd291c78bb2efb9e0ed5b62f33bac4f9cf820210 + checksum: 08ec4fe446d9ab27186da274d979558557fbdbbd10968fa9758552482720c54152a5640e08b9009e5a30706b66aba510692054d4129d32d0e12e05bbc0b96fb2 languageName: node linkType: hard @@ -4892,20 +4623,13 @@ __metadata: languageName: node linkType: hard -"estraverse@npm:^5.1.0": +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": version: 5.3.0 resolution: "estraverse@npm:5.3.0" checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b languageName: node linkType: hard -"estraverse@npm:^5.2.0": - version: 5.2.0 - resolution: "estraverse@npm:5.2.0" - checksum: ec11b70d946bf5d7f76f91db38ef6f08109ac1b36cda293a26e678e58df4719f57f67b9ec87042afdd1f0267cee91865be3aa48d2161765a93defab5431be7b8 - languageName: node - linkType: hard - "esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" @@ -4995,54 +4719,62 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.3.1": - version: 29.3.1 - resolution: "expect@npm:29.3.1" +"expect@npm:^29.0.0, expect@npm:^29.7.0": + version: 29.7.0 + resolution: "expect@npm:29.7.0" dependencies: - "@jest/expect-utils": ^29.3.1 - jest-get-type: ^29.2.0 - jest-matcher-utils: ^29.3.1 - jest-message-util: ^29.3.1 - jest-util: ^29.3.1 - checksum: e9588c2a430b558b9a3dc72d4ad05f36b047cb477bc6a7bb9cfeef7614fe7e5edbab424c2c0ce82739ee21ecbbbd24596259528209f84cd72500cc612d910d30 + "@jest/expect-utils": ^29.7.0 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + checksum: 9257f10288e149b81254a0fda8ffe8d54a7061cd61d7515779998b012579d2b8c22354b0eb901daf0145f347403da582f75f359f4810c007182ad3fb318b5c0c + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 languageName: node linkType: hard -"express@npm:^4.17.1": - version: 4.17.1 - resolution: "express@npm:4.17.1" +"express@npm:^4.17.3": + version: 4.19.2 + resolution: "express@npm:4.19.2" dependencies: - accepts: ~1.3.7 + accepts: ~1.3.8 array-flatten: 1.1.1 - body-parser: 1.19.0 - content-disposition: 0.5.3 + body-parser: 1.20.2 + content-disposition: 0.5.4 content-type: ~1.0.4 - cookie: 0.4.0 + cookie: 0.6.0 cookie-signature: 1.0.6 debug: 2.6.9 - depd: ~1.1.2 + depd: 2.0.0 encodeurl: ~1.0.2 escape-html: ~1.0.3 etag: ~1.8.1 - finalhandler: ~1.1.2 + finalhandler: 1.2.0 fresh: 0.5.2 + http-errors: 2.0.0 merge-descriptors: 1.0.1 methods: ~1.1.2 - on-finished: ~2.3.0 + on-finished: 2.4.1 parseurl: ~1.3.3 path-to-regexp: 0.1.7 - proxy-addr: ~2.0.5 - qs: 6.7.0 + proxy-addr: ~2.0.7 + qs: 6.11.0 range-parser: ~1.2.1 - safe-buffer: 5.1.2 - send: 0.17.1 - serve-static: 1.14.1 - setprototypeof: 1.1.1 - statuses: ~1.5.0 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 type-is: ~1.6.18 utils-merge: 1.0.1 vary: ~1.1.2 - checksum: d964e9e17af331ea6fa2f84999b063bc47189dd71b4a735df83f9126d3bb2b92e830f1cb1d7c2742530eb625e2689d7a9a9c71f0c3cc4dd6015c3cd32a01abd5 + checksum: 212dbd6c2c222a96a61bc927639c95970a53b06257080bb9e2838adb3bffdb966856551fdad1ab5dd654a217c35db94f987d0aa88d48fb04d306340f5f34dca5 languageName: node linkType: hard @@ -5106,35 +4838,22 @@ __metadata: linkType: hard "fast-diff@npm:^1.1.2": - version: 1.2.0 - resolution: "fast-diff@npm:1.2.0" - checksum: 1b5306eaa9e826564d9e5ffcd6ebd881eb5f770b3f977fcbf38f05c824e42172b53c79920e8429c54eb742ce15a0caf268b0fdd5b38f6de52234c4a8368131ae - languageName: node - linkType: hard - -"fast-glob@npm:^3.1.1": - version: 3.2.7 - resolution: "fast-glob@npm:3.2.7" - dependencies: - "@nodelib/fs.stat": ^2.0.2 - "@nodelib/fs.walk": ^1.2.3 - glob-parent: ^5.1.2 - merge2: ^1.3.0 - micromatch: ^4.0.4 - checksum: 2f4708ff112d2b451888129fdd9a0938db88b105b0ddfd043c064e3c4d3e20eed8d7c7615f7565fee660db34ddcf08a2db1bf0ab3c00b87608e4719694642d78 + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: d22d371b994fdc8cce9ff510d7b8dc4da70ac327bcba20df607dd5b9cae9f908f4d1028f5fe467650f058d1e7270235ae0b8230809a262b4df587a3b3aa216c3 languageName: node linkType: hard -"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.9": - version: 3.2.12 - resolution: "fast-glob@npm:3.2.12" +"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.1": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" dependencies: "@nodelib/fs.stat": ^2.0.2 "@nodelib/fs.walk": ^1.2.3 glob-parent: ^5.1.2 merge2: ^1.3.0 micromatch: ^4.0.4 - checksum: 0b1990f6ce831c7e28c4d505edcdaad8e27e88ab9fa65eedadb730438cfc7cde4910d6c975d6b7b8dc8a73da4773702ebcfcd6e3518e73938bb1383badfe01c2 + checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1 languageName: node linkType: hard @@ -5145,26 +4864,33 @@ __metadata: languageName: node linkType: hard -"fast-levenshtein@npm:^2.0.6, fast-levenshtein@npm:~2.0.6": +"fast-levenshtein@npm:^2.0.6": version: 2.0.6 resolution: "fast-levenshtein@npm:2.0.6" checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c languageName: node linkType: hard +"fast-uri@npm:^3.0.1": + version: 3.0.1 + resolution: "fast-uri@npm:3.0.1" + checksum: 106143ff83705995225dcc559411288f3337e732bb2e264e79788f1914b6bd8f8bc3683102de60b15ba00e6ebb443633cabac77d4ebc5cb228c47cf955e199ff + languageName: node + linkType: hard + "fastest-levenshtein@npm:^1.0.12": - version: 1.0.12 - resolution: "fastest-levenshtein@npm:1.0.12" - checksum: e1a013698dd1d302c7a78150130c7d50bb678c2c2f8839842a796d66cc7cdf50ea6b3d7ca930b0c8e7e8c2cd84fea8ab831023b382f7aab6922c318c1451beab + version: 1.0.16 + resolution: "fastest-levenshtein@npm:1.0.16" + checksum: a78d44285c9e2ae2c25f3ef0f8a73f332c1247b7ea7fb4a191e6bb51aa6ee1ef0dfb3ed113616dcdc7023e18e35a8db41f61c8d88988e877cf510df8edafbc71 languageName: node linkType: hard "fastq@npm:^1.6.0": - version: 1.13.0 - resolution: "fastq@npm:1.13.0" + version: 1.17.1 + resolution: "fastq@npm:1.17.1" dependencies: reusify: ^1.0.4 - checksum: 32cf15c29afe622af187d12fc9cd93e160a0cb7c31a3bb6ace86b7dea3b28e7b72acde89c882663f307b2184e14782c6c664fa315973c03626c7d4bff070bb0b + checksum: a8c5b26788d5a1763f88bae56a8ddeee579f935a831c5fe7a8268cea5b0a91fbfe705f612209e02d639b881d7b48e461a50da4a10cfaa40da5ca7cc9da098d88 languageName: node linkType: hard @@ -5178,11 +4904,11 @@ __metadata: linkType: hard "fb-watchman@npm:^2.0.0": - version: 2.0.1 - resolution: "fb-watchman@npm:2.0.1" + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" dependencies: bser: 2.1.1 - checksum: 8510230778ab3a51c27dffb1b76ef2c24fab672a42742d3c0a45c2e9d1e5f20210b1fbca33486088da4a9a3958bde96b5aec0a63aac9894b4e9df65c88b2cbd6 + checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 languageName: node linkType: hard @@ -5216,27 +4942,27 @@ __metadata: languageName: node linkType: hard -"fill-range@npm:^7.0.1": - version: 7.0.1 - resolution: "fill-range@npm:7.0.1" +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" dependencies: to-regex-range: ^5.0.1 - checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 + checksum: b4abfbca3839a3d55e4ae5ec62e131e2e356bf4859ce8480c64c4876100f4df292a63e5bb1618e1d7460282ca2b305653064f01654474aa35c68000980f17798 languageName: node linkType: hard -"finalhandler@npm:~1.1.2": - version: 1.1.2 - resolution: "finalhandler@npm:1.1.2" +"finalhandler@npm:1.2.0": + version: 1.2.0 + resolution: "finalhandler@npm:1.2.0" dependencies: debug: 2.6.9 encodeurl: ~1.0.2 escape-html: ~1.0.3 - on-finished: ~2.3.0 + on-finished: 2.4.1 parseurl: ~1.3.3 - statuses: ~1.5.0 + statuses: 2.0.1 unpipe: ~1.0.0 - checksum: 617880460c5138dd7ccfd555cb5dde4d8f170f4b31b8bd51e4b646bb2946c30f7db716428a1f2882d730d2b72afb47d1f67cc487b874cb15426f95753a88965e + checksum: 92effbfd32e22a7dff2994acedbd9bcc3aa646a3e919ea6a53238090e87097f8ef07cced90aa2cc421abdf993aefbdd5b00104d55c7c5479a8d00ed105b45716 languageName: node linkType: hard @@ -5260,29 +4986,48 @@ __metadata: linkType: hard "flat-cache@npm:^3.0.4": - version: 3.0.4 - resolution: "flat-cache@npm:3.0.4" + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" dependencies: - flatted: ^3.1.0 + flatted: ^3.2.9 + keyv: ^4.5.3 rimraf: ^3.0.2 - checksum: 4fdd10ecbcbf7d520f9040dd1340eb5dfe951e6f0ecf2252edeec03ee68d989ec8b9a20f4434270e71bcfd57800dc09b3344fca3966b2eb8f613072c7d9a2365 + checksum: e7e0f59801e288b54bee5cb9681e9ee21ee28ef309f886b312c9d08415b79fc0f24ac842f84356ce80f47d6a53de62197ce0e6e148dc42d5db005992e2a756ec languageName: node linkType: hard -"flatted@npm:^3.1.0": - version: 3.2.2 - resolution: "flatted@npm:3.2.2" - checksum: 9d5e03fd9309b9103f345cf6d0cef4fa46201baa053b0ca3d57fa489449b0bee687b7355407898f630afbb1a1286d2a6658e7e77dea3b85c3cd6c6ce2894a5c3 +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 12a1536ac746db74881316a181499a78ef953632ddd28050b7a3a43c62ef5462e3357c8c29d76072bb635f147f7a9a1f0c02efef6b4be28f8db62ceb3d5c7f5d + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.3.1 + resolution: "flatted@npm:3.3.1" + checksum: 85ae7181650bb728c221e7644cbc9f4bf28bc556f2fc89bb21266962bdf0ce1029cc7acc44bb646cd469d9baac7c317f64e841c4c4c00516afa97320cdac7f94 languageName: node linkType: hard "follow-redirects@npm:^1.0.0": - version: 1.14.4 - resolution: "follow-redirects@npm:1.14.4" + version: 1.15.6 + resolution: "follow-redirects@npm:1.15.6" peerDependenciesMeta: debug: optional: true - checksum: d4ce74cf5c6f363168b97e706b914eb9ffb6bf4d4c6d8f8330b93088d9b90e566611ddbcf0e42c8ed5fd17598dfeda1d19230d3e9d6d6c6b4d1c10ec3a0b99be + checksum: a62c378dfc8c00f60b9c80cab158ba54e99ba0239a5dd7c81245e5a5b39d10f0c35e249c3379eae719ff0285fff88c365dd446fab19dee771f1d76252df1bbf5 + languageName: node + linkType: hard + +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: ^1.1.3 + checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 languageName: node linkType: hard @@ -5293,6 +5038,16 @@ __metadata: languageName: node linkType: hard +"foreground-child@npm:^3.1.0": + version: 3.3.0 + resolution: "foreground-child@npm:3.3.0" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 1989698488f725b05b26bc9afc8a08f08ec41807cd7b92ad85d96004ddf8243fd3e79486b8348c64a3011ae5cc2c9f0936af989e1f28339805d8bc178a75b451 + languageName: node + linkType: hard + "form-data@npm:^4.0.0": version: 4.0.0 resolution: "form-data@npm:4.0.0" @@ -5335,13 +5090,13 @@ __metadata: linkType: hard "fs-extra@npm:^10.0.0": - version: 10.0.0 - resolution: "fs-extra@npm:10.0.0" + version: 10.1.0 + resolution: "fs-extra@npm:10.1.0" dependencies: graceful-fs: ^4.2.0 jsonfile: ^6.0.1 universalify: ^2.0.0 - checksum: 5285a3d8f34b917cf2b66af8c231a40c1623626e9d701a20051d3337be16c6d7cac94441c8b3732d47a92a2a027886ca93c69b6a4ae6aee3c89650d2a8880c0a + checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50 languageName: node linkType: hard @@ -5354,10 +5109,19 @@ __metadata: languageName: node linkType: hard -"fs-monkey@npm:1.0.3": - version: 1.0.3 - resolution: "fs-monkey@npm:1.0.3" - checksum: cf50804833f9b88a476911ae911fe50f61a98d986df52f890bd97e7262796d023698cb2309fa9b74fdd8974f04315b648748a0a8ee059e7d5257b293bfc409c0 +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + +"fs-monkey@npm:^1.0.4": + version: 1.0.6 + resolution: "fs-monkey@npm:1.0.6" + checksum: 4e9986acf197581b10b79d3e63e74252681ca215ef82d4afbd98dcfe86b3f09189ac1d7e8064bc433e4e53cdb5c14fdb38773277d41bba18b1ff8bbdcab01a3a languageName: node linkType: hard @@ -5368,41 +5132,41 @@ __metadata: languageName: node linkType: hard -"fsevents@^2.1.2, fsevents@npm:^2.3.2, fsevents@~2.3.2": - version: 2.3.2 - resolution: "fsevents@npm:2.3.2" +"fsevents@npm:^2.1.2, fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" dependencies: node-gyp: latest - checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 conditions: os=darwin languageName: node linkType: hard "fsevents@patch:fsevents@^2.1.2#~builtin, fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": - version: 2.3.2 - resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=18f3a7" + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" dependencies: node-gyp: latest conditions: os=darwin languageName: node linkType: hard -"function-bind@npm:^1.1.1": - version: 1.1.1 - resolution: "function-bind@npm:1.1.1" - checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 languageName: node linkType: hard -"function.prototype.name@npm:^1.1.5": - version: 1.1.5 - resolution: "function.prototype.name@npm:1.1.5" +"function.prototype.name@npm:^1.1.6": + version: 1.1.6 + resolution: "function.prototype.name@npm:1.1.6" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.0 - functions-have-names: ^1.2.2 - checksum: acd21d733a9b649c2c442f067567743214af5fa248dbeee69d8278ce7df3329ea5abac572be9f7470b4ec1cd4d8f1040e3c5caccf98ebf2bf861a0deab735c27 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + functions-have-names: ^1.2.3 + checksum: 7a3f9bd98adab09a07f6e1f03da03d3f7c26abbdeaeee15223f6c04a9fb5674792bdf5e689dac19b97ac71de6aad2027ba3048a9b883aa1b3173eed6ab07f479 languageName: node linkType: hard @@ -5413,29 +5177,13 @@ __metadata: languageName: node linkType: hard -"functions-have-names@npm:^1.2.2": +"functions-have-names@npm:^1.2.3": version: 1.2.3 resolution: "functions-have-names@npm:1.2.3" checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 languageName: node linkType: hard -"gauge@npm:~2.7.3": - version: 2.7.4 - resolution: "gauge@npm:2.7.4" - dependencies: - aproba: ^1.0.3 - console-control-strings: ^1.0.0 - has-unicode: ^2.0.0 - object-assign: ^4.1.0 - signal-exit: ^3.0.0 - string-width: ^1.0.1 - strip-ansi: ^3.0.1 - wide-align: ^1.1.0 - checksum: a89b53cee65579b46832e050b5f3a79a832cc422c190de79c6b8e2e15296ab92faddde6ddf2d376875cbba2b043efa99b9e1ed8124e7365f61b04e3cee9d40ee - languageName: node - linkType: hard - "gensync@npm:^1.0.0-beta.2": version: 1.0.0-beta.2 resolution: "gensync@npm:1.0.0-beta.2" @@ -5450,25 +5198,16 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1": - version: 1.1.1 - resolution: "get-intrinsic@npm:1.1.1" - dependencies: - function-bind: ^1.1.1 - has: ^1.0.3 - has-symbols: ^1.0.1 - checksum: a9fe2ca8fa3f07f9b0d30fb202bcd01f3d9b9b6b732452e79c48e79f7d6d8d003af3f9e38514250e3553fdc83c61650851cb6870832ac89deaaceb08e3721a17 - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.1.3": - version: 1.1.3 - resolution: "get-intrinsic@npm:1.1.3" +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" dependencies: - function-bind: ^1.1.1 - has: ^1.0.3 + es-errors: ^1.3.0 + function-bind: ^1.1.2 + has-proto: ^1.0.1 has-symbols: ^1.0.3 - checksum: 152d79e87251d536cf880ba75cfc3d6c6c50e12b3a64e1ea960e73a3752b47c69f46034456eae1b0894359ce3bc64c55c186f2811f8a788b75b638b06fab228a + hasown: ^2.0.0 + checksum: 414e3cdf2c203d1b9d7d33111df746a4512a1aa622770b361dadddf8ed0b5aeb26c560f49ca077e24bfafb0acb55ca908d1f709216ccba33ffc548ec8a79a951 languageName: node linkType: hard @@ -5511,20 +5250,23 @@ __metadata: languageName: node linkType: hard -"get-symbol-description@npm:^1.0.0": - version: 1.0.0 - resolution: "get-symbol-description@npm:1.0.0" +"get-symbol-description@npm:^1.0.2": + version: 1.0.2 + resolution: "get-symbol-description@npm:1.0.2" dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.1.1 - checksum: 9ceff8fe968f9270a37a1f73bf3f1f7bda69ca80f4f80850670e0e7b9444ff99323f7ac52f96567f8b5f5fbe7ac717a0d81d3407c7313e82810c6199446a5247 + call-bind: ^1.0.5 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.4 + checksum: e1cb53bc211f9dbe9691a4f97a46837a553c4e7caadd0488dc24ac694db8a390b93edd412b48dcdd0b4bbb4c595de1709effc75fc87c0839deedc6968f5bd973 languageName: node linkType: hard -"get-tsconfig@npm:^4.2.0": - version: 4.2.0 - resolution: "get-tsconfig@npm:4.2.0" - checksum: dfae3520bee20b71a651fdc93fd29901013dfc4df9fb41a423cf3efb4468c79087ef9d3bc3d0625b6486397730991d2a749eed4985d8ab411f481319c3e931e5 +"get-tsconfig@npm:^4.5.0": + version: 4.7.6 + resolution: "get-tsconfig@npm:4.7.6" + dependencies: + resolve-pkg-maps: ^1.0.0 + checksum: ebfd86f0b356cde98e2a7afe63b58d92e02b8e413ff95551933d277702bf725386ee82c5c0092fe45fb2ba60002340c94ee70777b3220bbfeca83ab45dda1544 languageName: node linkType: hard @@ -5551,17 +5293,33 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^3.1.2 + minimatch: ^9.0.4 + minipass: ^7.1.2 + package-json-from-dist: ^1.0.0 + path-scurry: ^1.11.1 + bin: + glob: dist/esm/bin.mjs + checksum: 0bc725de5e4862f9f387fd0f2b274baf16850dcd2714502ccf471ee401803997983e2c05590cb65f9675a3c6f2a58e7a53f9e365704108c6ad3cbf1d60934c4a + languageName: node + linkType: hard + "glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.7": - version: 7.2.0 - resolution: "glob@npm:7.2.0" + version: 7.2.3 + resolution: "glob@npm:7.2.3" dependencies: fs.realpath: ^1.0.0 inflight: ^1.0.4 inherits: 2 - minimatch: ^3.0.4 + minimatch: ^3.1.1 once: ^1.3.0 path-is-absolute: ^1.0.0 - checksum: 78a8ea942331f08ed2e055cb5b9e40fe6f46f579d7fd3d694f3412fe5db23223d29b7fee1575440202e9a7ff9a72ab106a39fee39934c7bedafe5e5f8ae20134 + checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 languageName: node linkType: hard @@ -5586,36 +5344,25 @@ __metadata: linkType: hard "globals@npm:^13.6.0, globals@npm:^13.9.0": - version: 13.12.0 - resolution: "globals@npm:13.12.0" + version: 13.24.0 + resolution: "globals@npm:13.24.0" dependencies: type-fest: ^0.20.2 - checksum: 1f959abb11117916468a1afcba527eead152900cad652c8383c4e8976daea7ec55e1ee30c086f48d1b8655719f214e9d92eca083c3a43b5543bc4056e7e5fccf - languageName: node - linkType: hard - -"globalyzer@npm:0.1.0": - version: 0.1.0 - resolution: "globalyzer@npm:0.1.0" - checksum: 419a0f95ba542534fac0842964d31b3dc2936a479b2b1a8a62bad7e8b61054faa9b0a06ad9f2e12593396b9b2621cac93358d9b3071d33723fb1778608d358a1 + checksum: 56066ef058f6867c04ff203b8a44c15b038346a62efbc3060052a1016be9f56f4cf0b2cd45b74b22b81e521a889fc7786c73691b0549c2f3a6e825b3d394f43c languageName: node linkType: hard -"globby@npm:^11.0.1, globby@npm:^11.0.3": - version: 11.0.4 - resolution: "globby@npm:11.0.4" +"globalthis@npm:^1.0.3": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" dependencies: - array-union: ^2.1.0 - dir-glob: ^3.0.1 - fast-glob: ^3.1.1 - ignore: ^5.1.4 - merge2: ^1.3.0 - slash: ^3.0.0 - checksum: d3e02d5e459e02ffa578b45f040381c33e3c0538ed99b958f0809230c423337999867d7b0dbf752ce93c46157d3bbf154d3fff988a93ccaeb627df8e1841775b + define-properties: ^1.2.1 + gopd: ^1.0.1 + checksum: 39ad667ad9f01476474633a1834a70842041f70a55571e8dcef5fb957980a92da5022db5430fca8aecc5d47704ae30618c0bc877a579c70710c904e9ef06108a languageName: node linkType: hard -"globby@npm:^11.1.0": +"globby@npm:^11.0.3, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -5629,47 +5376,22 @@ __metadata: languageName: node linkType: hard -"globby@npm:^13.1.2": - version: 13.1.2 - resolution: "globby@npm:13.1.2" +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" dependencies: - dir-glob: ^3.0.1 - fast-glob: ^3.2.11 - ignore: ^5.2.0 - merge2: ^1.4.1 - slash: ^4.0.0 - checksum: c148fcda0c981f00fb434bb94ca258f0a9d23cedbde6fb3f37098e1abde5b065019e2c63fe2aa2fad4daf2b54bf360b4d0423d85fb3a63d09ed75a2837d4de0f - languageName: node - linkType: hard - -"globrex@npm:^0.1.2": - version: 0.1.2 - resolution: "globrex@npm:0.1.2" - checksum: adca162494a176ce9ecf4dd232f7b802956bb1966b37f60c15e49d2e7d961b66c60826366dc2649093cad5a0d69970cfa8875bd1695b5a1a2f33dcd2aa88da3c - languageName: node - linkType: hard - -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": - version: 4.2.8 - resolution: "graceful-fs@npm:4.2.8" - checksum: 5d224c8969ad0581d551dfabdb06882706b31af2561bd5e2034b4097e67cc27d05232849b8643866585fd0a41c7af152950f8776f4dd5579e9853733f31461c6 + get-intrinsic: ^1.1.3 + checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 languageName: node linkType: hard -"graceful-fs@npm:^4.2.11": +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 languageName: node linkType: hard -"graceful-fs@npm:^4.2.9": - version: 4.2.10 - resolution: "graceful-fs@npm:4.2.10" - checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da - languageName: node - linkType: hard - "handle-thing@npm:^2.0.0": version: 2.0.1 resolution: "handle-thing@npm:2.0.1" @@ -5677,14 +5399,7 @@ __metadata: languageName: node linkType: hard -"has-bigints@npm:^1.0.1": - version: 1.0.1 - resolution: "has-bigints@npm:1.0.1" - checksum: 44ab55868174470065d2e0f8f6def1c990d12b82162a8803c679699fa8a39f966e336f2a33c185092fe8aea7e8bf2e85f1c26add5f29d98f2318bd270096b183 - languageName: node - linkType: hard - -"has-bigints@npm:^1.0.2": +"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": version: 1.0.2 resolution: "has-bigints@npm:1.0.2" checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b @@ -5705,42 +5420,35 @@ __metadata: languageName: node linkType: hard -"has-property-descriptors@npm:^1.0.0": - version: 1.0.0 - resolution: "has-property-descriptors@npm:1.0.0" +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" dependencies: - get-intrinsic: ^1.1.1 - checksum: a6d3f0a266d0294d972e354782e872e2fe1b6495b321e6ef678c9b7a06a40408a6891817350c62e752adced73a94ac903c54734fee05bf65b1905ee1368194bb + es-define-property: ^1.0.0 + checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3 languageName: node linkType: hard -"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2": - version: 1.0.2 - resolution: "has-symbols@npm:1.0.2" - checksum: 2309c426071731be792b5be43b3da6fb4ed7cbe8a9a6bcfca1862587709f01b33d575ce8f5c264c1eaad09fca2f9a8208c0a2be156232629daa2dd0c0740976b +"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": + version: 1.0.3 + resolution: "has-proto@npm:1.0.3" + checksum: fe7c3d50b33f50f3933a04413ed1f69441d21d2d2944f81036276d30635cad9279f6b43bc8f32036c31ebdfcf6e731150f46c1907ad90c669ffe9b066c3ba5c4 languageName: node linkType: hard -"has-symbols@npm:^1.0.3": +"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 languageName: node linkType: hard -"has-tostringtag@npm:^1.0.0": - version: 1.0.0 - resolution: "has-tostringtag@npm:1.0.0" +"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" dependencies: - has-symbols: ^1.0.2 - checksum: cc12eb28cb6ae22369ebaad3a8ab0799ed61270991be88f208d508076a1e99abe4198c965935ce85ea90b60c94ddda73693b0920b58e7ead048b4a391b502c1c - languageName: node - linkType: hard - -"has-unicode@npm:^2.0.0": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 + has-symbols: ^1.0.3 + checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d languageName: node linkType: hard @@ -5783,12 +5491,12 @@ __metadata: languageName: node linkType: hard -"has@npm:^1.0.3": - version: 1.0.3 - resolution: "has@npm:1.0.3" +"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" dependencies: - function-bind: ^1.1.1 - checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792 + function-bind: ^1.1.2 + checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db languageName: node linkType: hard @@ -5823,9 +5531,9 @@ __metadata: linkType: hard "html-entities@npm:^2.3.2": - version: 2.3.2 - resolution: "html-entities@npm:2.3.2" - checksum: 522d8d202df301ff51b517a379e642023ed5c81ea9fb5674ffad88cff386165733d00b6089d5c2fcc644e44777d6072017b6216d8fa40f271d3610420d00a886 + version: 2.5.2 + resolution: "html-entities@npm:2.5.2" + checksum: b23f4a07d33d49ade1994069af4e13d31650e3fb62621e92ae10ecdf01d1a98065c78fd20fdc92b4c7881612210b37c275f2c9fba9777650ab0d6f2ceb3b99b6 languageName: node linkType: hard @@ -5837,34 +5545,40 @@ __metadata: linkType: hard "html-minifier-terser@npm:^6.0.2": - version: 6.0.2 - resolution: "html-minifier-terser@npm:6.0.2" + version: 6.1.0 + resolution: "html-minifier-terser@npm:6.1.0" dependencies: camel-case: ^4.1.2 - clean-css: ^5.1.5 - commander: ^8.1.0 + clean-css: ^5.2.2 + commander: ^8.3.0 he: ^1.2.0 param-case: ^3.0.4 relateurl: ^0.2.7 - terser: ^5.7.2 + terser: ^5.10.0 bin: html-minifier-terser: cli.js - checksum: 9c8775ea036f7b04fd5a16607cf4242efdddc64884e84fcc81e27ef56505a12b8a9e1f9ac865ca00a77a3e4c21ef4ffb194dcc6492cdf6cfdfc73bf8de6d7c2d + checksum: ac52c14006476f773204c198b64838477859dc2879490040efab8979c0207424da55d59df7348153f412efa45a0840a1ca3c757bf14767d23a15e3e389d37a93 languageName: node linkType: hard "html-webpack-plugin@npm:^5.3.2": - version: 5.4.0 - resolution: "html-webpack-plugin@npm:5.4.0" + version: 5.6.0 + resolution: "html-webpack-plugin@npm:5.6.0" dependencies: "@types/html-minifier-terser": ^6.0.0 html-minifier-terser: ^6.0.2 lodash: ^4.17.21 - pretty-error: ^3.0.4 + pretty-error: ^4.0.0 tapable: ^2.0.0 peerDependencies: + "@rspack/core": 0.x || 1.x webpack: ^5.20.0 - checksum: 4963e1955df0d97021bc725700f2d24094506ea1b70d3a969edbd65127701523315993c5428ff8b36ab4bd5459a76e139d420d528ba76aade5565cb92361b89c + peerDependenciesMeta: + "@rspack/core": + optional: true + webpack: + optional: true + checksum: 32a6e41da538e798fd0be476637d7611a5e8a98a3508f031996e9eb27804dcdc282cb01f847cf5d066f21b49cfb8e21627fcf977ffd0c9bea81cf80e5a65070d languageName: node linkType: hard @@ -5880,10 +5594,10 @@ __metadata: languageName: node linkType: hard -"http-cache-semantics@npm:^4.1.0": - version: 4.1.0 - resolution: "http-cache-semantics@npm:4.1.0" - checksum: 974de94a81c5474be07f269f9fd8383e92ebb5a448208223bfb39e172a9dbc26feff250192ecc23b9593b3f92098e010406b0f24bd4d588d631f80214648ed42 +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 languageName: node linkType: hard @@ -5894,16 +5608,16 @@ __metadata: languageName: node linkType: hard -"http-errors@npm:1.7.2": - version: 1.7.2 - resolution: "http-errors@npm:1.7.2" +"http-errors@npm:2.0.0": + version: 2.0.0 + resolution: "http-errors@npm:2.0.0" dependencies: - depd: ~1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.1 - statuses: ">= 1.5.0 < 2" - toidentifier: 1.0.0 - checksum: 5534b0ae08e77f5a45a2380f500e781f6580c4ff75b816cb1f09f99a290b57e78a518be6d866db1b48cca6b052c09da2c75fc91fb16a2fe3da3c44d9acbb9972 + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + checksum: 9b0a3782665c52ce9dc658a0d1560bcb0214ba5699e4ea15aefb2a496e2ca83db03ebc42e1cce4ac1f413e4e0d2d736a3fd755772c556a9a06853ba2a0b7d920 languageName: node linkType: hard @@ -5919,34 +5633,10 @@ __metadata: languageName: node linkType: hard -"http-errors@npm:~1.7.2": - version: 1.7.3 - resolution: "http-errors@npm:1.7.3" - dependencies: - depd: ~1.1.2 - inherits: 2.0.4 - setprototypeof: 1.1.1 - statuses: ">= 1.5.0 < 2" - toidentifier: 1.0.0 - checksum: a59f359473f4b3ea78305beee90d186268d6075432622a46fb7483059068a2dd4c854a20ac8cd438883127e06afb78c1309168bde6cdfeed1e3700eb42487d99 - languageName: node - linkType: hard - "http-parser-js@npm:>=0.5.1": - version: 0.5.3 - resolution: "http-parser-js@npm:0.5.3" - checksum: 6f3142c5f60ad995a6895a1dc4f70f8cef0910745366e97cbcb99caa604590dbcc11006b00989ad306837d6b820e9bfc6e801c4060ed19a0e4df83caa8577cb5 - languageName: node - linkType: hard - -"http-proxy-agent@npm:^4.0.1": - version: 4.0.1 - resolution: "http-proxy-agent@npm:4.0.1" - dependencies: - "@tootallnate/once": 1 - agent-base: 6 - debug: 4 - checksum: c6a5da5a1929416b6bbdf77b1aca13888013fe7eb9d59fc292e25d18e041bb154a8dfada58e223fc7b76b9b2d155a87e92e608235201f77d34aa258707963a82 + version: 0.5.8 + resolution: "http-parser-js@npm:0.5.8" + checksum: 6bbdf2429858e8cf13c62375b0bfb6dc3955ca0f32e58237488bc86cd2378f31d31785fd3ac4ce93f1c74e0189cf8823c91f5cb061696214fd368d2452dc871d languageName: node linkType: hard @@ -5961,16 +5651,31 @@ __metadata: languageName: node linkType: hard -"http-proxy-middleware@npm:^2.0.0": - version: 2.0.1 - resolution: "http-proxy-middleware@npm:2.0.1" +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: ^7.1.0 + debug: ^4.3.4 + checksum: 670858c8f8f3146db5889e1fa117630910101db601fff7d5a8aa637da0abedf68c899f03d3451cac2f83bcc4c3d2dabf339b3aa00ff8080571cceb02c3ce02f3 + languageName: node + linkType: hard + +"http-proxy-middleware@npm:^2.0.3": + version: 2.0.6 + resolution: "http-proxy-middleware@npm:2.0.6" dependencies: - "@types/http-proxy": ^1.17.5 + "@types/http-proxy": ^1.17.8 http-proxy: ^1.18.1 is-glob: ^4.0.1 is-plain-obj: ^3.0.0 micromatch: ^4.0.2 - checksum: 0de65bc6644b6efae5d26cd3bec071ceaeb92f26856ffee5ecdde9c702ea1435936e7dfb09da2ac0883eada80fdc993e9925902fc10bf6625565d6365f8cb30f + peerDependencies: + "@types/express": ^4.17.13 + peerDependenciesMeta: + "@types/express": + optional: true + checksum: 2ee85bc878afa6cbf34491e972ece0f5be0a3e5c98a60850cf40d2a9a5356e1fc57aab6cff33c1fc37691b0121c3a42602d2b1956c52577e87a5b77b62ae1c3a languageName: node linkType: hard @@ -5986,11 +5691,11 @@ __metadata: linkType: hard "http-server@npm:^13.0.2": - version: 13.0.2 - resolution: "http-server@npm:13.0.2" + version: 13.1.0 + resolution: "http-server@npm:13.1.0" dependencies: basic-auth: ^1.0.3 - colors: ^1.4.0 + chalk: ^4.1.2 corser: ^2.0.1 he: ^1.1.0 http-proxy: ^1.18.0 @@ -6003,11 +5708,11 @@ __metadata: url-join: ^2.0.5 bin: http-server: bin/http-server - checksum: 04ce03f51553d38571c428e8562ca6b63058b470f5784b77bb22c91514d204b5db58d129558be57bf0cdd937d6a868572a9b24176c800592da85025a5242583a + checksum: 09aec3461eebd087db661064456ad95fd0f0999784f1eafb8c6bf934e0979587733ea296ee913b998577f22c62fc6ac4da6f08d264587bc4126688c3afffb70e languageName: node linkType: hard -"https-proxy-agent@npm:5.0.0, https-proxy-agent@npm:^5.0.0": +"https-proxy-agent@npm:5.0.0": version: 5.0.0 resolution: "https-proxy-agent@npm:5.0.0" dependencies: @@ -6027,6 +5732,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^7.0.1": + version: 7.0.5 + resolution: "https-proxy-agent@npm:7.0.5" + dependencies: + agent-base: ^7.0.2 + debug: 4 + checksum: 2e1a28960f13b041a50702ee74f240add8e75146a5c37fc98f1960f0496710f6918b3a9fe1e5aba41e50f58e6df48d107edd9c405c5f0d73ac260dabf2210857 + languageName: node + linkType: hard + "human-signals@npm:^2.1.0": version: 2.1.0 resolution: "human-signals@npm:2.1.0" @@ -6034,15 +5749,6 @@ __metadata: languageName: node linkType: hard -"humanize-ms@npm:^1.2.1": - version: 1.2.1 - resolution: "humanize-ms@npm:1.2.1" - dependencies: - ms: ^2.0.0 - checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 - languageName: node - linkType: hard - "iconv-lite@npm:0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" @@ -6075,24 +5781,10 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.1.4": - version: 5.1.8 - resolution: "ignore@npm:5.1.8" - checksum: 967abadb61e2cb0e5c5e8c4e1686ab926f91bc1a4680d994b91947d3c65d04c3ae126dcdf67f08e0feeb8ff8407d453e641aeeddcc47a3a3cca359f283cf6121 - languageName: node - linkType: hard - -"ignore@npm:^5.1.8": - version: 5.1.9 - resolution: "ignore@npm:5.1.9" - checksum: 6f6b2235f4e63648116c5814f76b2d3d63fae9c21b8a466862e865732f59e787c9938a9042f9457091db6f0d811508ea3c8c6a60f35bafc4ceea08bbe8f96fd5 - languageName: node - linkType: hard - -"ignore@npm:^5.2.0": - version: 5.2.1 - resolution: "ignore@npm:5.2.1" - checksum: 7251d00cba49fe88c4f3565fadeb4aa726ba38294a9a79ffed542edc47bafd989d4b2ccf65700c5b1b26a1e91dfc7218fb23017937c79216025d5caeec0ee9d5 +"ignore@npm:^5.1.8, ignore@npm:^5.2.0": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 2acfd32a573260ea522ea0bfeff880af426d68f6831f973129e2ba7363f422923cf53aab62f8369cbf4667c7b25b6f8a3761b34ecdb284ea18e87a5262a865be languageName: node linkType: hard @@ -6107,14 +5799,14 @@ __metadata: linkType: hard "import-local@npm:^3.0.2": - version: 3.0.3 - resolution: "import-local@npm:3.0.3" + version: 3.2.0 + resolution: "import-local@npm:3.2.0" dependencies: pkg-dir: ^4.2.0 resolve-cwd: ^3.0.0 bin: import-local-fixture: fixtures/cli.js - checksum: 38ae57d35e7fd5f63b55895050c798d4dd590e4e2337e9ffa882fb3ea7a7716f3162c7300e382e0a733ca5d07b389fadff652c00fa7b072d5cb6ea34ca06b179 + checksum: 0b0b0b412b2521739fbb85eeed834a3c34de9bc67e670b3d0b86248fc460d990a7b116ad056c084b87a693ef73d1f17268d6a5be626bb43c998a8b1c8a230004 languageName: node linkType: hard @@ -6132,13 +5824,6 @@ __metadata: languageName: node linkType: hard -"infer-owner@npm:^1.0.4": - version: 1.0.4 - resolution: "infer-owner@npm:1.0.4" - checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 - languageName: node - linkType: hard - "inflight@npm:^1.0.4": version: 1.0.6 resolution: "inflight@npm:1.0.6" @@ -6159,30 +5844,18 @@ __metadata: "inherits@npm:2.0.3": version: 2.0.3 resolution: "inherits@npm:2.0.3" - checksum: 78cb8d7d850d20a5e9a7f3620db31483aa00ad5f722ce03a55b110e5a723539b3716a3b463e2b96ce3fe286f33afc7c131fa2f91407528ba80cea98a7545d4c0 - languageName: node - linkType: hard - -"internal-ip@npm:^6.2.0": - version: 6.2.0 - resolution: "internal-ip@npm:6.2.0" - dependencies: - default-gateway: ^6.0.0 - ipaddr.js: ^1.9.1 - is-ip: ^3.1.0 - p-event: ^4.2.0 - checksum: 6d08299c052c4ec926fa4e3643049d81daacbc33d3ab90fc30cd59cd7f12902152107bc75778e1202a269eb82cab0c412ff04a78f0361e056de0c5c2628881fa + checksum: 78cb8d7d850d20a5e9a7f3620db31483aa00ad5f722ce03a55b110e5a723539b3716a3b463e2b96ce3fe286f33afc7c131fa2f91407528ba80cea98a7545d4c0 languageName: node linkType: hard -"internal-slot@npm:^1.0.3": - version: 1.0.3 - resolution: "internal-slot@npm:1.0.3" +"internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.7": + version: 1.0.7 + resolution: "internal-slot@npm:1.0.7" dependencies: - get-intrinsic: ^1.1.0 - has: ^1.0.3 + es-errors: ^1.3.0 + hasown: ^2.0.0 side-channel: ^1.0.4 - checksum: 1944f92e981e47aebc98a88ff0db579fd90543d937806104d0b96557b10c1f170c51fb777b97740a8b6ddeec585fca8c39ae99fd08a8e058dfc8ab70937238bf + checksum: cadc5eea5d7d9bc2342e93aae9f31f04c196afebb11bde97448327049f492cd7081e18623ae71388aac9cd237b692ca3a105be9c68ac39c1dec679d7409e33eb languageName: node linkType: hard @@ -6193,21 +5866,17 @@ __metadata: languageName: node linkType: hard -"ip-regex@npm:^4.0.0": - version: 4.3.0 - resolution: "ip-regex@npm:4.3.0" - checksum: 7ff904b891221b1847f3fdf3dbb3e6a8660dc39bc283f79eb7ed88f5338e1a3d1104b779bc83759159be266249c59c2160e779ee39446d79d4ed0890dfd06f08 - languageName: node - linkType: hard - -"ip@npm:^1.1.0, ip@npm:^1.1.5": - version: 1.1.5 - resolution: "ip@npm:1.1.5" - checksum: 30133981f082a060a32644f6a7746e9ba7ac9e2bc07ecc8bbdda3ee8ca9bec1190724c390e45a1ee7695e7edfd2a8f7dda2c104ec5f7ac5068c00648504c7e5a +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: 1.1.0 + sprintf-js: ^1.1.3 + checksum: aa15f12cfd0ef5e38349744e3654bae649a34c3b10c77a674a167e99925d1549486c5b14730eebce9fea26f6db9d5e42097b00aa4f9f612e68c79121c71652dc languageName: node linkType: hard -"ipaddr.js@npm:1.9.1, ipaddr.js@npm:^1.9.1": +"ipaddr.js@npm:1.9.1": version: 1.9.1 resolution: "ipaddr.js@npm:1.9.1" checksum: f88d3825981486f5a1942414c8d77dd6674dd71c065adcfa46f578d677edcb99fda25af42675cb59db492fdf427b34a5abfcde3982da11a8fd83a500b41cfe77 @@ -6215,31 +5884,22 @@ __metadata: linkType: hard "ipaddr.js@npm:^2.0.1": - version: 2.0.1 - resolution: "ipaddr.js@npm:2.0.1" - checksum: dd194a394a843d470f88d17191b0948f383ed1c8e320813f850c336a0fcb5e9215d97ec26ca35ab4fbbd31392c8b3467f3e8344628029ed3710b2ff6b5d1034e - languageName: node - linkType: hard - -"is-accessor-descriptor@npm:^0.1.6": - version: 0.1.6 - resolution: "is-accessor-descriptor@npm:0.1.6" - dependencies: - kind-of: ^3.0.2 - checksum: 3d629a086a9585bc16a83a8e8a3416f400023301855cafb7ccc9a1d63145b7480f0ad28877dcc2cce09492c4ec1c39ef4c071996f24ee6ac626be4217b8ffc8a + version: 2.2.0 + resolution: "ipaddr.js@npm:2.2.0" + checksum: 770ba8451fd9bf78015e8edac0d5abd7a708cbf75f9429ca9147a9d2f3a2d60767cd5de2aab2b1e13ca6e4445bdeff42bf12ef6f151c07a5c6cf8a44328e2859 languageName: node linkType: hard -"is-accessor-descriptor@npm:^1.0.0": - version: 1.0.0 - resolution: "is-accessor-descriptor@npm:1.0.0" +"is-accessor-descriptor@npm:^1.0.1": + version: 1.0.1 + resolution: "is-accessor-descriptor@npm:1.0.1" dependencies: - kind-of: ^6.0.0 - checksum: 8e475968e9b22f9849343c25854fa24492dbe8ba0dea1a818978f9f1b887339190b022c9300d08c47fe36f1b913d70ce8cbaca00369c55a56705fdb7caed37fe + hasown: ^2.0.0 + checksum: 8db44c02230a5e9b9dec390a343178791f073d5d5556a400527d2fd67a72d93b226abab2bd4123305c268f5dc22831bfdbd38430441fda82ea9e0b95ddc6b267 languageName: node linkType: hard -"is-arguments@npm:^1.0.4": +"is-arguments@npm:^1.1.1": version: 1.1.1 resolution: "is-arguments@npm:1.1.1" dependencies: @@ -6249,6 +5909,16 @@ __metadata: languageName: node linkType: hard +"is-array-buffer@npm:^3.0.2, is-array-buffer@npm:^3.0.4": + version: 3.0.4 + resolution: "is-array-buffer@npm:3.0.4" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.1 + checksum: e4e3e6ef0ff2239e75371d221f74bc3c26a03564a22efb39f6bb02609b598917ddeecef4e8c877df2a25888f247a98198959842a5e73236bc7f22cabdf6351a7 + languageName: node + linkType: hard + "is-arrayish@npm:^0.2.1": version: 0.2.1 resolution: "is-arrayish@npm:0.2.1" @@ -6256,6 +5926,15 @@ __metadata: languageName: node linkType: hard +"is-async-function@npm:^2.0.0": + version: 2.0.0 + resolution: "is-async-function@npm:2.0.0" + dependencies: + has-tostringtag: ^1.0.0 + checksum: e3471d95e6c014bf37cad8a93f2f4b6aac962178e0a5041e8903147166964fdc1c5c1d2ef87e86d77322c370ca18f2ea004fa7420581fa747bcaf7c223069dbd + languageName: node + linkType: hard + "is-bigint@npm:^1.0.1": version: 1.0.4 resolution: "is-bigint@npm:1.0.4" @@ -6300,14 +5979,7 @@ __metadata: languageName: node linkType: hard -"is-callable@npm:^1.1.4, is-callable@npm:^1.2.4": - version: 1.2.4 - resolution: "is-callable@npm:1.2.4" - checksum: 1a28d57dc435797dae04b173b65d6d1e77d4f16276e9eff973f994eadcfdc30a017e6a597f092752a083c1103cceb56c91e3dadc6692fedb9898dfaba701575f - languageName: node - linkType: hard - -"is-callable@npm:^1.2.7": +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac @@ -6325,43 +5997,34 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.10.0, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": - version: 2.11.0 - resolution: "is-core-module@npm:2.11.0" - dependencies: - has: ^1.0.3 - checksum: f96fd490c6b48eb4f6d10ba815c6ef13f410b0ba6f7eb8577af51697de523e5f2cd9de1c441b51d27251bf0e4aebc936545e33a5d26d5d51f28d25698d4a8bab - languageName: node - linkType: hard - -"is-core-module@npm:^2.2.0": - version: 2.7.0 - resolution: "is-core-module@npm:2.7.0" +"is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": + version: 2.15.0 + resolution: "is-core-module@npm:2.15.0" dependencies: - has: ^1.0.3 - checksum: 8ec6dc714438ef9dc4dae10c94d21bd5aa67244da7e85bd9e42f0fd298514181214f6bebe358a486477c1242458b170ad7a8c936be0be15d465862fa61d3d1c7 + hasown: ^2.0.2 + checksum: a9f7a52707c9b59d7164094d183bda892514fc3ba3139f245219c7abe7f6e8d3e2cdcf861f52a891a467f785f1dfa5d549f73b0ee715f4ba56e8882d335ea585 languageName: node linkType: hard -"is-data-descriptor@npm:^0.1.4": - version: 0.1.4 - resolution: "is-data-descriptor@npm:0.1.4" +"is-data-descriptor@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-descriptor@npm:1.0.1" dependencies: - kind-of: ^3.0.2 - checksum: 5c622e078ba933a78338ae398a3d1fc5c23332b395312daf4f74bab4afb10d061cea74821add726cb4db8b946ba36217ee71a24fe71dd5bca4632edb7f6aad87 + hasown: ^2.0.0 + checksum: fc6da5be5177149d554c5612cc382e9549418ed72f2d3ed5a3e6511b03dd119ae1b2258320ca94931df50b7e9ee012894eccd4ca45bbcadf0d5b27da6faeb15a languageName: node linkType: hard -"is-data-descriptor@npm:^1.0.0": - version: 1.0.0 - resolution: "is-data-descriptor@npm:1.0.0" +"is-data-view@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-view@npm:1.0.1" dependencies: - kind-of: ^6.0.0 - checksum: e705e6816241c013b05a65dc452244ee378d1c3e3842bd140beabe6e12c0d700ef23c91803f971aa7b091fb0573c5da8963af34a2b573337d87bc3e1f53a4e6d + is-typed-array: ^1.1.13 + checksum: 4ba4562ac2b2ec005fefe48269d6bd0152785458cd253c746154ffb8a8ab506a29d0cfb3b74af87513843776a88e4981ae25c89457bf640a33748eab1a7216b5 languageName: node linkType: hard -"is-date-object@npm:^1.0.1": +"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": version: 1.0.5 resolution: "is-date-object@npm:1.0.5" dependencies: @@ -6371,24 +6034,22 @@ __metadata: linkType: hard "is-descriptor@npm:^0.1.0": - version: 0.1.6 - resolution: "is-descriptor@npm:0.1.6" + version: 0.1.7 + resolution: "is-descriptor@npm:0.1.7" dependencies: - is-accessor-descriptor: ^0.1.6 - is-data-descriptor: ^0.1.4 - kind-of: ^5.0.0 - checksum: 0f780c1b46b465f71d970fd7754096ffdb7b69fd8797ca1f5069c163eaedcd6a20ec4a50af669075c9ebcfb5266d2e53c8b227e485eefdb0d1fee09aa1dd8ab6 + is-accessor-descriptor: ^1.0.1 + is-data-descriptor: ^1.0.1 + checksum: 45743109f0bb03f9fa989c34d31ece87cc15792649f147b896a7c4db2906a02fca685867619f4d312e024d7bbd53b945a47c6830d01f5e73efcc6388ac211963 languageName: node linkType: hard "is-descriptor@npm:^1.0.0, is-descriptor@npm:^1.0.2": - version: 1.0.2 - resolution: "is-descriptor@npm:1.0.2" + version: 1.0.3 + resolution: "is-descriptor@npm:1.0.3" dependencies: - is-accessor-descriptor: ^1.0.0 - is-data-descriptor: ^1.0.0 - kind-of: ^6.0.2 - checksum: 2ed623560bee035fb67b23e32ce885700bef8abe3fbf8c909907d86507b91a2c89a9d3a4d835a4d7334dd5db0237a0aeae9ca109c1e4ef1c0e7b577c0846ab5a + is-accessor-descriptor: ^1.0.1 + is-data-descriptor: ^1.0.1 + checksum: 316153b2fd86ac23b0a2f28b77744ae0a4e3c7a54fe52fa70b125d0971eb0a3bcfb562fa8e74537af0dad5bc405cc606726eb501fc748a241c10910deea89cfb languageName: node linkType: hard @@ -6424,19 +6085,12 @@ __metadata: languageName: node linkType: hard -"is-fullwidth-code-point@npm:^1.0.0": - version: 1.0.0 - resolution: "is-fullwidth-code-point@npm:1.0.0" +"is-finalizationregistry@npm:^1.0.2": + version: 1.0.2 + resolution: "is-finalizationregistry@npm:1.0.2" dependencies: - number-is-nan: ^1.0.0 - checksum: 4d46a7465a66a8aebcc5340d3b63a56602133874af576a9ca42c6f0f4bd787a743605771c5f246db77da96605fefeffb65fc1dbe862dcc7328f4b4d03edf5a57 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^2.0.0": - version: 2.0.0 - resolution: "is-fullwidth-code-point@npm:2.0.0" - checksum: eef9c6e15f68085fec19ff6a978a6f1b8f48018fd1265035552078ee945573594933b09bbd6f562553e2a241561439f1ef5339276eba68d272001343084cfab8 + call-bind: ^1.0.2 + checksum: 4f243a8e06228cd45bdab8608d2cb7abfc20f6f0189c8ac21ea8d603f1f196eabd531ce0bb8e08cbab047e9845ef2c191a3761c9a17ad5cabf8b35499c4ad35d languageName: node linkType: hard @@ -6454,6 +6108,15 @@ __metadata: languageName: node linkType: hard +"is-generator-function@npm:^1.0.10": + version: 1.0.10 + resolution: "is-generator-function@npm:1.0.10" + dependencies: + has-tostringtag: ^1.0.0 + checksum: d54644e7dbaccef15ceb1e5d91d680eb5068c9ee9f9eb0a9e04173eb5542c9b51b5ab52c5537f5703e48d5fddfd376817c1ca07a84a407b7115b769d4bdde72b + languageName: node + linkType: hard + "is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" @@ -6463,15 +6126,6 @@ __metadata: languageName: node linkType: hard -"is-ip@npm:^3.1.0": - version: 3.1.0 - resolution: "is-ip@npm:3.1.0" - dependencies: - ip-regex: ^4.0.0 - checksum: da2c2b282407194adf2320bade0bad94be9c9d0bdab85ff45b1b62d8185f31c65dff3884519d57bf270277e5ea2046c7916a6e5a6db22fe4b7ddcdd3760f23eb - languageName: node - linkType: hard - "is-lambda@npm:^1.0.1": version: 1.0.1 resolution: "is-lambda@npm:1.0.1" @@ -6479,26 +6133,26 @@ __metadata: languageName: node linkType: hard -"is-negative-zero@npm:^2.0.1": - version: 2.0.1 - resolution: "is-negative-zero@npm:2.0.1" - checksum: a46f2e0cb5e16fdb8f2011ed488979386d7e68d381966682e3f4c98fc126efe47f26827912baca2d06a02a644aee458b9cba307fb389f6b161e759125db7a3b8 +"is-map@npm:^2.0.2, is-map@npm:^2.0.3": + version: 2.0.3 + resolution: "is-map@npm:2.0.3" + checksum: e6ce5f6380f32b141b3153e6ba9074892bbbbd655e92e7ba5ff195239777e767a976dcd4e22f864accaf30e53ebf961ab1995424aef91af68788f0591b7396cc languageName: node linkType: hard -"is-negative-zero@npm:^2.0.2": - version: 2.0.2 - resolution: "is-negative-zero@npm:2.0.2" - checksum: f3232194c47a549da60c3d509c9a09be442507616b69454716692e37ae9f37c4dea264fb208ad0c9f3efd15a796a46b79df07c7e53c6227c32170608b809149a +"is-negative-zero@npm:^2.0.3": + version: 2.0.3 + resolution: "is-negative-zero@npm:2.0.3" + checksum: c1e6b23d2070c0539d7b36022d5a94407132411d01aba39ec549af824231f3804b1aea90b5e4e58e807a65d23ceb538ed6e355ce76b267bdd86edb757ffcbdcd languageName: node linkType: hard "is-number-object@npm:^1.0.4": - version: 1.0.6 - resolution: "is-number-object@npm:1.0.6" + version: 1.0.7 + resolution: "is-number-object@npm:1.0.7" dependencies: has-tostringtag: ^1.0.0 - checksum: c697704e8fc2027fc41cb81d29805de4e8b6dc9c3efee93741dbf126a8ecc8443fef85adbc581415ae7e55d325e51d0a942324ae35c829131748cce39cba55f3 + checksum: d1e8d01bb0a7134c74649c4e62da0c6118a0bfc6771ea3c560914d52a627873e6920dd0fd0ebc0e12ad2ff4687eac4c308f7e80320b973b2c8a2c8f97a7524f7 languageName: node linkType: hard @@ -6518,20 +6172,6 @@ __metadata: languageName: node linkType: hard -"is-path-cwd@npm:^2.2.0": - version: 2.2.0 - resolution: "is-path-cwd@npm:2.2.0" - checksum: 46a840921bb8cc0dc7b5b423a14220e7db338072a4495743a8230533ce78812dc152548c86f4b828411fe98c5451959f07cf841c6a19f611e46600bd699e8048 - languageName: node - linkType: hard - -"is-path-inside@npm:^3.0.2": - version: 3.0.3 - resolution: "is-path-inside@npm:3.0.3" - checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 - languageName: node - linkType: hard - "is-plain-obj@npm:^3.0.0": version: 3.0.0 resolution: "is-plain-obj@npm:3.0.0" @@ -6555,7 +6195,7 @@ __metadata: languageName: node linkType: hard -"is-regex@npm:^1.0.4, is-regex@npm:^1.1.4": +"is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" dependencies: @@ -6565,19 +6205,19 @@ __metadata: languageName: node linkType: hard -"is-shared-array-buffer@npm:^1.0.1": - version: 1.0.1 - resolution: "is-shared-array-buffer@npm:1.0.1" - checksum: 2ffb92533e64e2876e6cfe6906871d28400b6f1a53130fe652ec8007bc0e5044d05e7af8e31bdc992fbba520bd92938cfbeedd0f286be92f250c7c76191c4d90 +"is-set@npm:^2.0.2, is-set@npm:^2.0.3": + version: 2.0.3 + resolution: "is-set@npm:2.0.3" + checksum: 36e3f8c44bdbe9496c9689762cc4110f6a6a12b767c5d74c0398176aa2678d4467e3bf07595556f2dba897751bde1422480212b97d973c7b08a343100b0c0dfe languageName: node linkType: hard -"is-shared-array-buffer@npm:^1.0.2": - version: 1.0.2 - resolution: "is-shared-array-buffer@npm:1.0.2" +"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "is-shared-array-buffer@npm:1.0.3" dependencies: - call-bind: ^1.0.2 - checksum: 9508929cf14fdc1afc9d61d723c6e8d34f5e117f0bffda4d97e7a5d88c3a8681f633a74f8e3ad1fe92d5113f9b921dc5ca44356492079612f9a247efbce7032a + call-bind: ^1.0.7 + checksum: a4fff602c309e64ccaa83b859255a43bb011145a42d3f56f67d9268b55bc7e6d98a5981a1d834186ad3105d6739d21547083fe7259c76c0468483fc538e716d8 languageName: node linkType: hard @@ -6613,6 +6253,15 @@ __metadata: languageName: node linkType: hard +"is-typed-array@npm:^1.1.13": + version: 1.1.13 + resolution: "is-typed-array@npm:1.1.13" + dependencies: + which-typed-array: ^1.1.14 + checksum: 150f9ada183a61554c91e1c4290086d2c100b0dff45f60b028519be72a8db964da403c48760723bf5253979b8dffe7b544246e0e5351dcd05c5fdb1dcc1dc0f0 + languageName: node + linkType: hard + "is-typedarray@npm:^1.0.0": version: 1.0.0 resolution: "is-typedarray@npm:1.0.0" @@ -6620,12 +6269,10 @@ __metadata: languageName: node linkType: hard -"is-weakref@npm:^1.0.1": - version: 1.0.1 - resolution: "is-weakref@npm:1.0.1" - dependencies: - call-bind: ^1.0.0 - checksum: fdafb7b955671dd2f9658ff47c86e4025c0650fc68a3542a40e5a75898a763b1abd6b1e1f9f13207eed49541cdd76af67d73c44989ea358b201b70274cf8f6c1 +"is-weakmap@npm:^2.0.2": + version: 2.0.2 + resolution: "is-weakmap@npm:2.0.2" + checksum: f36aef758b46990e0d3c37269619c0a08c5b29428c0bb11ecba7f75203442d6c7801239c2f31314bc79199217ef08263787f3837d9e22610ad1da62970d6616d languageName: node linkType: hard @@ -6638,6 +6285,16 @@ __metadata: languageName: node linkType: hard +"is-weakset@npm:^2.0.3": + version: 2.0.3 + resolution: "is-weakset@npm:2.0.3" + dependencies: + call-bind: ^1.0.7 + get-intrinsic: ^1.2.4 + checksum: 8b6a20ee9f844613ff8f10962cfee49d981d584525f2357fee0a04dfbcde9fd607ed60cb6dab626dbcc470018ae6392e1ff74c0c1aced2d487271411ad9d85ae + languageName: node + linkType: hard + "is-windows@npm:^1.0.2": version: 1.0.2 resolution: "is-windows@npm:1.0.2" @@ -6661,6 +6318,13 @@ __metadata: languageName: node linkType: hard +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -6668,6 +6332,13 @@ __metadata: languageName: node linkType: hard +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e + languageName: node + linkType: hard + "isobject@npm:^2.0.0": version: 2.1.0 resolution: "isobject@npm:2.1.0" @@ -6684,33 +6355,14 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-coverage@npm:^3.0.0": - version: 3.0.1 - resolution: "istanbul-lib-coverage@npm:3.0.1" - checksum: abb09e725179b60fd76208b10e467ec0796f8a0ee4c9f5a9250b2894d873997346907951e70b7fe1162cd609f9e1da62d54243d671b5b5c8083440f8f93cd050 - languageName: node - linkType: hard - -"istanbul-lib-coverage@npm:^3.2.0": - version: 3.2.0 - resolution: "istanbul-lib-coverage@npm:3.2.0" - checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^4.0.0": - version: 4.0.3 - resolution: "istanbul-lib-instrument@npm:4.0.3" - dependencies: - "@babel/core": ^7.7.5 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-coverage: ^3.0.0 - semver: ^6.3.0 - checksum: fa1171d3022b1bb8f6a734042620ac5d9ee7dc80f3065a0bb12863e9f0494d0eefa3d86608fcc0254ab2765d29d7dad8bdc42e5f8df2f9a1fbe85ccc59d76cb9 +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 2367407a8d13982d8f7a859a35e7f8dd5d8f75aae4bb5484ede3a9ea1b426dc245aff28b976a2af48ee759fdd9be374ce2bd2669b644f31e76c5f46a2e29a831 languageName: node linkType: hard -"istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": +"istanbul-lib-instrument@npm:^5.0.4": version: 5.2.1 resolution: "istanbul-lib-instrument@npm:5.2.1" dependencies: @@ -6723,90 +6375,130 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-instrument@npm:^6.0.0": + version: 6.0.3 + resolution: "istanbul-lib-instrument@npm:6.0.3" + dependencies: + "@babel/core": ^7.23.9 + "@babel/parser": ^7.23.9 + "@istanbuljs/schema": ^0.1.3 + istanbul-lib-coverage: ^3.2.0 + semver: ^7.5.4 + checksum: 74104c60c65c4fa0e97cc76f039226c356123893929f067bfad5f86fe839e08f5d680354a68fead3bc9c1e2f3fa6f3f53cded70778e821d911e851d349f3545a + languageName: node + linkType: hard + "istanbul-lib-report@npm:^3.0.0": - version: 3.0.0 - resolution: "istanbul-lib-report@npm:3.0.0" + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" dependencies: istanbul-lib-coverage: ^3.0.0 - make-dir: ^3.0.0 + make-dir: ^4.0.0 supports-color: ^7.1.0 - checksum: 3f29eb3f53c59b987386e07fe772d24c7f58c6897f34c9d7a296f4000de7ae3de9eb95c3de3df91dc65b134c84dee35c54eee572a56243e8907c48064e34ff1b + checksum: fd17a1b879e7faf9bb1dc8f80b2a16e9f5b7b8498fe6ed580a618c34df0bfe53d2abd35bf8a0a00e628fb7405462576427c7df20bbe4148d19c14b431c974b21 languageName: node linkType: hard "istanbul-lib-source-maps@npm:^4.0.0": - version: 4.0.0 - resolution: "istanbul-lib-source-maps@npm:4.0.0" + version: 4.0.1 + resolution: "istanbul-lib-source-maps@npm:4.0.1" dependencies: debug: ^4.1.1 istanbul-lib-coverage: ^3.0.0 source-map: ^0.6.1 - checksum: 292bfb4083e5f8783cdf829a7686b1a377d0c6c2119d4343c8478e948b38146c4827cddc7eee9f57605acd63c291376d67e4a84163d37c5fc78ad0f27f7e2621 + checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 languageName: node linkType: hard "istanbul-reports@npm:^3.1.3": - version: 3.1.5 - resolution: "istanbul-reports@npm:3.1.5" + version: 3.1.7 + resolution: "istanbul-reports@npm:3.1.7" dependencies: html-escaper: ^2.0.0 istanbul-lib-report: ^3.0.0 - checksum: 7867228f83ed39477b188ea07e7ccb9b4f5320b6f73d1db93a0981b7414fa4ef72d3f80c4692c442f90fc250d9406e71d8d7ab65bb615cb334e6292b73192b89 + checksum: 2072db6e07bfbb4d0eb30e2700250636182398c1af811aea5032acb219d2080f7586923c09fa194029efd6b92361afb3dcbe1ebcc3ee6651d13340f7c6c4ed95 languageName: node linkType: hard -"jest-changed-files@npm:^29.2.0": - version: 29.2.0 - resolution: "jest-changed-files@npm:29.2.0" +"iterator.prototype@npm:^1.1.2": + version: 1.1.2 + resolution: "iterator.prototype@npm:1.1.2" + dependencies: + define-properties: ^1.2.1 + get-intrinsic: ^1.2.1 + has-symbols: ^1.0.3 + reflect.getprototypeof: ^1.0.4 + set-function-name: ^2.0.1 + checksum: d8a507e2ccdc2ce762e8a1d3f4438c5669160ac72b88b648e59a688eec6bc4e64b22338e74000518418d9e693faf2a092d2af21b9ec7dbf7763b037a54701168 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: be31027fc72e7cc726206b9f560395604b82e0fddb46c4cbf9f97d049bcef607491a5afc0699612eaa4213ca5be8fd3e1e7cd187b3040988b65c9489838a7c00 + languageName: node + linkType: hard + +"jest-changed-files@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-changed-files@npm:29.7.0" dependencies: execa: ^5.0.0 + jest-util: ^29.7.0 p-limit: ^3.1.0 - checksum: 8ad8290324db1de2ee3c9443d3e3fbfdcb6d72ec7054c5796be2854b2bc239dea38a7c797c8c9c2bd959f539d44305790f2f75b18f3046b04317ed77c7480cb1 + checksum: 963e203893c396c5dfc75e00a49426688efea7361b0f0e040035809cecd2d46b3c01c02be2d9e8d38b1138357d2de7719ea5b5be21f66c10f2e9685a5a73bb99 languageName: node linkType: hard -"jest-circus@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-circus@npm:29.3.1" +"jest-circus@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-circus@npm:29.7.0" dependencies: - "@jest/environment": ^29.3.1 - "@jest/expect": ^29.3.1 - "@jest/test-result": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/environment": ^29.7.0 + "@jest/expect": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 - dedent: ^0.7.0 + dedent: ^1.0.0 is-generator-fn: ^2.0.0 - jest-each: ^29.3.1 - jest-matcher-utils: ^29.3.1 - jest-message-util: ^29.3.1 - jest-runtime: ^29.3.1 - jest-snapshot: ^29.3.1 - jest-util: ^29.3.1 + jest-each: ^29.7.0 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-runtime: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 p-limit: ^3.1.0 - pretty-format: ^29.3.1 + pretty-format: ^29.7.0 + pure-rand: ^6.0.0 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 125710debd998ad9693893e7c1235e271b79f104033b8169d82afe0bc0d883f8f5245feef87adcbb22ad27ff749fd001aa998d11a132774b03b4e2b8af77d5d8 + checksum: 349437148924a5a109c9b8aad6d393a9591b4dac1918fc97d81b7fc515bc905af9918495055071404af1fab4e48e4b04ac3593477b1d5dcf48c4e71b527c70a7 languageName: node linkType: hard -"jest-cli@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-cli@npm:29.3.1" +"jest-cli@npm:^29.3.1, jest-cli@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-cli@npm:29.7.0" dependencies: - "@jest/core": ^29.3.1 - "@jest/test-result": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/core": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 chalk: ^4.0.0 + create-jest: ^29.7.0 exit: ^0.1.2 - graceful-fs: ^4.2.9 import-local: ^3.0.2 - jest-config: ^29.3.1 - jest-util: ^29.3.1 - jest-validate: ^29.3.1 - prompts: ^2.0.1 + jest-config: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 yargs: ^17.3.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -6815,34 +6507,34 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 829895d33060042443bd1e9e87eb68993773d74f2c8a9b863acf53cece39d227ae0e7d76df2e9c5934c414bdf70ce398a34b3122cfe22164acb2499a74d7288d + checksum: 664901277a3f5007ea4870632ed6e7889db9da35b2434e7cb488443e6bf5513889b344b7fddf15112135495b9875892b156faeb2d7391ddb9e2a849dcb7b6c36 languageName: node linkType: hard -"jest-config@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-config@npm:29.3.1" +"jest-config@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-config@npm:29.7.0" dependencies: "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.3.1 - "@jest/types": ^29.3.1 - babel-jest: ^29.3.1 + "@jest/test-sequencer": ^29.7.0 + "@jest/types": ^29.6.3 + babel-jest: ^29.7.0 chalk: ^4.0.0 ci-info: ^3.2.0 deepmerge: ^4.2.2 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-circus: ^29.3.1 - jest-environment-node: ^29.3.1 - jest-get-type: ^29.2.0 - jest-regex-util: ^29.2.0 - jest-resolve: ^29.3.1 - jest-runner: ^29.3.1 - jest-util: ^29.3.1 - jest-validate: ^29.3.1 + jest-circus: ^29.7.0 + jest-environment-node: ^29.7.0 + jest-get-type: ^29.6.3 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-runner: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 micromatch: ^4.0.4 parse-json: ^5.2.0 - pretty-format: ^29.3.1 + pretty-format: ^29.7.0 slash: ^3.0.0 strip-json-comments: ^3.1.1 peerDependencies: @@ -6853,102 +6545,83 @@ __metadata: optional: true ts-node: optional: true - checksum: 6e663f04ae1024a53a4c2c744499b4408ca9a8b74381dd5e31b11bb3c7393311ecff0fb61b06287768709eb2c9e5a2fd166d258f5a9123abbb4c5812f99c12fe - languageName: node - linkType: hard - -"jest-diff@npm:^27.0.0": - version: 27.2.5 - resolution: "jest-diff@npm:27.2.5" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^27.0.6 - jest-get-type: ^27.0.6 - pretty-format: ^27.2.5 - checksum: 05a2fd97b52ef4d9f03174f360d5f065478f4de8a08e1347cb5999ecb2cca85581ca112aa34533ddd54efd9d3278a0c3cc5c34de5bdab1f99448e4cd5042263a + checksum: 4cabf8f894c180cac80b7df1038912a3fc88f96f2622de33832f4b3314f83e22b08fb751da570c0ab2b7988f21604bdabade95e3c0c041068ac578c085cf7dff languageName: node linkType: hard -"jest-diff@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-diff@npm:29.3.1" +"jest-diff@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-diff@npm:29.7.0" dependencies: chalk: ^4.0.0 - diff-sequences: ^29.3.1 - jest-get-type: ^29.2.0 - pretty-format: ^29.3.1 - checksum: ac5c09745f2b1897e6f53216acaf6ed44fc4faed8e8df053ff4ac3db5d2a1d06a17b876e49faaa15c8a7a26f5671bcbed0a93781dcc2835f781c79a716a591a9 + diff-sequences: ^29.6.3 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: 08e24a9dd43bfba1ef07a6374e5af138f53137b79ec3d5cc71a2303515335898888fa5409959172e1e05de966c9e714368d15e8994b0af7441f0721ee8e1bb77 languageName: node linkType: hard -"jest-docblock@npm:^29.2.0": - version: 29.2.0 - resolution: "jest-docblock@npm:29.2.0" +"jest-docblock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-docblock@npm:29.7.0" dependencies: detect-newline: ^3.0.0 - checksum: b3f1227b7d73fc9e4952180303475cf337b36fa65c7f730ac92f0580f1c08439983262fee21cf3dba11429aa251b4eee1e3bc74796c5777116b400d78f9d2bbe + checksum: 66390c3e9451f8d96c5da62f577a1dad701180cfa9b071c5025acab2f94d7a3efc2515cfa1654ebe707213241541ce9c5530232cdc8017c91ed64eea1bd3b192 languageName: node linkType: hard -"jest-each@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-each@npm:29.3.1" +"jest-each@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-each@npm:29.7.0" dependencies: - "@jest/types": ^29.3.1 + "@jest/types": ^29.6.3 chalk: ^4.0.0 - jest-get-type: ^29.2.0 - jest-util: ^29.3.1 - pretty-format: ^29.3.1 - checksum: 16d51ef8f96fba44a3479f1c6f7672027e3b39236dc4e41217c38fe60a3b66b022ffcee72f8835a442f7a8a0a65980a93fb8e73a9782d192452526e442ad049a + jest-get-type: ^29.6.3 + jest-util: ^29.7.0 + pretty-format: ^29.7.0 + checksum: e88f99f0184000fc8813f2a0aa79e29deeb63700a3b9b7928b8a418d7d93cd24933608591dbbdea732b473eb2021c72991b5cc51a17966842841c6e28e6f691c languageName: node linkType: hard "jest-environment-jsdom@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-environment-jsdom@npm:29.3.1" + version: 29.7.0 + resolution: "jest-environment-jsdom@npm:29.7.0" dependencies: - "@jest/environment": ^29.3.1 - "@jest/fake-timers": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 "@types/jsdom": ^20.0.0 "@types/node": "*" - jest-mock: ^29.3.1 - jest-util: ^29.3.1 + jest-mock: ^29.7.0 + jest-util: ^29.7.0 jsdom: ^20.0.0 peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: canvas: optional: true - checksum: 91b04ed02b2275c3a47740e20c2691f67c4295e17174c8ccd3a71fe77707239e487506bd157279b4257ce1be0a8c2be377817ee85689966a9e604bb6ef1199f0 + checksum: 559aac134c196fccc1dfc794d8fc87377e9f78e894bb13012b0831d88dec0abd7ece99abec69da564b8073803be4f04a9eb4f4d1bb80e29eec0cb252c254deb8 languageName: node linkType: hard -"jest-environment-node@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-environment-node@npm:29.3.1" +"jest-environment-node@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-environment-node@npm:29.7.0" dependencies: - "@jest/environment": ^29.3.1 - "@jest/fake-timers": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" - jest-mock: ^29.3.1 - jest-util: ^29.3.1 - checksum: 16d4854bd2d35501bd4862ca069baf27ce9f5fd7642fdcab9d2dab49acd28c082d0c8882bf2bb28ed7bbaada486da577c814c9688ddc62d1d9f74a954fde996a + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: 501a9966292cbe0ca3f40057a37587cb6def25e1e0c5e39ac6c650fe78d3c70a2428304341d084ac0cced5041483acef41c477abac47e9a290d5545fd2f15646 languageName: node linkType: hard -"jest-get-type@npm:^27.0.6": - version: 27.0.6 - resolution: "jest-get-type@npm:27.0.6" - checksum: 2d4c1381bb5ddb212d80ad00497c7cbb3312358e10b62ac19f1fe5a28ae4af709202bfc235b77ec508970b83fd89945937652d636bcaf88614fa00028a6f3138 - languageName: node - linkType: hard - -"jest-get-type@npm:^29.2.0": - version: 29.2.0 - resolution: "jest-get-type@npm:29.2.0" - checksum: e396fd880a30d08940ed8a8e43cd4595db1b8ff09649018eb358ca701811137556bae82626af73459e3c0f8c5e972ed1e57fd3b1537b13a260893dac60a90942 +"jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 languageName: node linkType: hard @@ -6977,88 +6650,88 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-haste-map@npm:29.3.1" +"jest-haste-map@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-haste-map@npm:29.7.0" dependencies: - "@jest/types": ^29.3.1 + "@jest/types": ^29.6.3 "@types/graceful-fs": ^4.1.3 "@types/node": "*" anymatch: ^3.0.3 fb-watchman: ^2.0.0 fsevents: ^2.3.2 graceful-fs: ^4.2.9 - jest-regex-util: ^29.2.0 - jest-util: ^29.3.1 - jest-worker: ^29.3.1 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 micromatch: ^4.0.4 walker: ^1.0.8 dependenciesMeta: fsevents: optional: true - checksum: 97ea26af0c28a2ba568c9c65d06211487bbcd501cb4944f9d55e07fd2b00ad96653ea2cc9033f3d5b7dc1feda33e47ae9cc56b400191ea4533be213c9f82e67c + checksum: c2c8f2d3e792a963940fbdfa563ce14ef9e14d4d86da645b96d3cd346b8d35c5ce0b992ee08593939b5f718cf0a1f5a90011a056548a1dbf58397d4356786f01 languageName: node linkType: hard -"jest-leak-detector@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-leak-detector@npm:29.3.1" +"jest-leak-detector@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-leak-detector@npm:29.7.0" dependencies: - jest-get-type: ^29.2.0 - pretty-format: ^29.3.1 - checksum: 0dd8ed31ae0b5a3d14f13f567ca8567f2663dd2d540d1e55511d3b3fd7f80a1d075392179674ebe9fab9be0b73678bf4d2f8bbbc0f4bdd52b9815259194da559 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: e3950e3ddd71e1d0c22924c51a300a1c2db6cf69ec1e51f95ccf424bcc070f78664813bef7aed4b16b96dfbdeea53fe358f8aeaaea84346ae15c3735758f1605 languageName: node linkType: hard -"jest-matcher-utils@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-matcher-utils@npm:29.3.1" +"jest-matcher-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-matcher-utils@npm:29.7.0" dependencies: chalk: ^4.0.0 - jest-diff: ^29.3.1 - jest-get-type: ^29.2.0 - pretty-format: ^29.3.1 - checksum: 311e8d9f1e935216afc7dd8c6acf1fbda67a7415e1afb1bf72757213dfb025c1f2dc5e2c185c08064a35cdc1f2d8e40c57616666774ed1b03e57eb311c20ec77 + jest-diff: ^29.7.0 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: d7259e5f995d915e8a37a8fd494cb7d6af24cd2a287b200f831717ba0d015190375f9f5dc35393b8ba2aae9b2ebd60984635269c7f8cff7d85b077543b7744cd languageName: node linkType: hard -"jest-message-util@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-message-util@npm:29.3.1" +"jest-message-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-message-util@npm:29.7.0" dependencies: "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.3.1 + "@jest/types": ^29.6.3 "@types/stack-utils": ^2.0.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 micromatch: ^4.0.4 - pretty-format: ^29.3.1 + pretty-format: ^29.7.0 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 15d0a2fca3919eb4570bbf575734780c4b9e22de6aae903c4531b346699f7deba834c6c86fe6e9a83ad17fac0f7935511cf16dce4d71a93a71ebb25f18a6e07b + checksum: a9d025b1c6726a2ff17d54cc694de088b0489456c69106be6b615db7a51b7beb66788bea7a59991a019d924fbf20f67d085a445aedb9a4d6760363f4d7d09930 languageName: node linkType: hard -"jest-mock@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-mock@npm:29.3.1" +"jest-mock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-mock@npm:29.7.0" dependencies: - "@jest/types": ^29.3.1 + "@jest/types": ^29.6.3 "@types/node": "*" - jest-util: ^29.3.1 - checksum: 9098852cb2866db4a1a59f9f7581741dfc572f648e9e574a1b187fd69f5f2f6190ad387ede21e139a8b80a6a1343ecc3d6751cd2ae1ae11d7ea9fa1950390fb2 + jest-util: ^29.7.0 + checksum: 81ba9b68689a60be1482212878973700347cb72833c5e5af09895882b9eb5c4e02843a1bbdf23f94c52d42708bab53a30c45a3482952c9eec173d1eaac5b86c5 languageName: node linkType: hard "jest-pnp-resolver@npm:^1.2.2": - version: 1.2.2 - resolution: "jest-pnp-resolver@npm:1.2.2" + version: 1.2.3 + resolution: "jest-pnp-resolver@npm:1.2.3" peerDependencies: jest-resolve: "*" peerDependenciesMeta: jest-resolve: optional: true - checksum: bd85dcc0e76e0eb0c3d56382ec140f08d25ff4068cda9d0e360bb78fb176cb726d0beab82dc0e8694cafd09f55fee7622b8bcb240afa5fad301f4ed3eebb4f47 + checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 languageName: node linkType: hard @@ -7069,96 +6742,96 @@ __metadata: languageName: node linkType: hard -"jest-regex-util@npm:^29.2.0": - version: 29.2.0 - resolution: "jest-regex-util@npm:29.2.0" - checksum: 7c533e51c51230dac20c0d7395b19b8366cb022f7c6e08e6bcf2921626840ff90424af4c9b4689f02f0addfc9b071c4cd5f8f7a989298a4c8e0f9c94418ca1c3 +"jest-regex-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-regex-util@npm:29.6.3" + checksum: 0518beeb9bf1228261695e54f0feaad3606df26a19764bc19541e0fc6e2a3737191904607fb72f3f2ce85d9c16b28df79b7b1ec9443aa08c3ef0e9efda6f8f2a languageName: node linkType: hard -"jest-resolve-dependencies@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-resolve-dependencies@npm:29.3.1" +"jest-resolve-dependencies@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve-dependencies@npm:29.7.0" dependencies: - jest-regex-util: ^29.2.0 - jest-snapshot: ^29.3.1 - checksum: 6ec4727a87c6e7954e93de9949ab9967b340ee2f07626144c273355f05a2b65fa47eb8dece2d6e5f4fd99cdb893510a3540aa5e14ba443f70b3feb63f6f98982 + jest-regex-util: ^29.6.3 + jest-snapshot: ^29.7.0 + checksum: aeb75d8150aaae60ca2bb345a0d198f23496494677cd6aefa26fc005faf354061f073982175daaf32b4b9d86b26ca928586344516e3e6969aa614cb13b883984 languageName: node linkType: hard -"jest-resolve@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-resolve@npm:29.3.1" +"jest-resolve@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve@npm:29.7.0" dependencies: chalk: ^4.0.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.3.1 + jest-haste-map: ^29.7.0 jest-pnp-resolver: ^1.2.2 - jest-util: ^29.3.1 - jest-validate: ^29.3.1 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 resolve: ^1.20.0 - resolve.exports: ^1.1.0 + resolve.exports: ^2.0.0 slash: ^3.0.0 - checksum: 0dea22ed625e07b8bfee52dea1391d3a4b453c1a0c627a0fa7c22e44bb48e1c289afe6f3c316def70753773f099c4e8f436c7a2cc12fcc6c7dd6da38cba2cd5f + checksum: 0ca218e10731aa17920526ec39deaec59ab9b966237905ffc4545444481112cd422f01581230eceb7e82d86f44a543d520a71391ec66e1b4ef1a578bd5c73487 languageName: node linkType: hard -"jest-runner@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-runner@npm:29.3.1" +"jest-runner@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runner@npm:29.7.0" dependencies: - "@jest/console": ^29.3.1 - "@jest/environment": ^29.3.1 - "@jest/test-result": ^29.3.1 - "@jest/transform": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/console": ^29.7.0 + "@jest/environment": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 emittery: ^0.13.1 graceful-fs: ^4.2.9 - jest-docblock: ^29.2.0 - jest-environment-node: ^29.3.1 - jest-haste-map: ^29.3.1 - jest-leak-detector: ^29.3.1 - jest-message-util: ^29.3.1 - jest-resolve: ^29.3.1 - jest-runtime: ^29.3.1 - jest-util: ^29.3.1 - jest-watcher: ^29.3.1 - jest-worker: ^29.3.1 + jest-docblock: ^29.7.0 + jest-environment-node: ^29.7.0 + jest-haste-map: ^29.7.0 + jest-leak-detector: ^29.7.0 + jest-message-util: ^29.7.0 + jest-resolve: ^29.7.0 + jest-runtime: ^29.7.0 + jest-util: ^29.7.0 + jest-watcher: ^29.7.0 + jest-worker: ^29.7.0 p-limit: ^3.1.0 source-map-support: 0.5.13 - checksum: 61ad445d8a5f29573332f27a21fc942fb0d2a82bf901a0ea1035bf3bd7f349d1e425f71f54c3a3f89b292a54872c3248d395a2829d987f26b6025b15530ea5d2 + checksum: f0405778ea64812bf9b5c50b598850d94ccf95d7ba21f090c64827b41decd680ee19fcbb494007cdd7f5d0d8906bfc9eceddd8fa583e753e736ecd462d4682fb languageName: node linkType: hard -"jest-runtime@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-runtime@npm:29.3.1" +"jest-runtime@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runtime@npm:29.7.0" dependencies: - "@jest/environment": ^29.3.1 - "@jest/fake-timers": ^29.3.1 - "@jest/globals": ^29.3.1 - "@jest/source-map": ^29.2.0 - "@jest/test-result": ^29.3.1 - "@jest/transform": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/globals": ^29.7.0 + "@jest/source-map": ^29.6.3 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 cjs-module-lexer: ^1.0.0 collect-v8-coverage: ^1.0.0 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-haste-map: ^29.3.1 - jest-message-util: ^29.3.1 - jest-mock: ^29.3.1 - jest-regex-util: ^29.2.0 - jest-resolve: ^29.3.1 - jest-snapshot: ^29.3.1 - jest-util: ^29.3.1 + jest-haste-map: ^29.7.0 + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 slash: ^3.0.0 strip-bom: ^4.0.0 - checksum: 82f27b48f000be074064a854e16e768f9453e9b791d8c5f9316606c37f871b5b10f70544c1b218ab9784f00bd972bb77f868c5ab6752c275be2cd219c351f5a7 + checksum: d19f113d013e80691e07047f68e1e3448ef024ff2c6b586ce4f90cd7d4c62a2cd1d460110491019719f3c59bfebe16f0e201ed005ef9f80e2cf798c374eed54e languageName: node linkType: hard @@ -7172,35 +6845,31 @@ __metadata: languageName: node linkType: hard -"jest-snapshot@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-snapshot@npm:29.3.1" +"jest-snapshot@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-snapshot@npm:29.7.0" dependencies: "@babel/core": ^7.11.6 "@babel/generator": ^7.7.2 "@babel/plugin-syntax-jsx": ^7.7.2 "@babel/plugin-syntax-typescript": ^7.7.2 - "@babel/traverse": ^7.7.2 "@babel/types": ^7.3.3 - "@jest/expect-utils": ^29.3.1 - "@jest/transform": ^29.3.1 - "@jest/types": ^29.3.1 - "@types/babel__traverse": ^7.0.6 - "@types/prettier": ^2.1.5 + "@jest/expect-utils": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^29.3.1 + expect: ^29.7.0 graceful-fs: ^4.2.9 - jest-diff: ^29.3.1 - jest-get-type: ^29.2.0 - jest-haste-map: ^29.3.1 - jest-matcher-utils: ^29.3.1 - jest-message-util: ^29.3.1 - jest-util: ^29.3.1 + jest-diff: ^29.7.0 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 natural-compare: ^1.4.0 - pretty-format: ^29.3.1 - semver: ^7.3.5 - checksum: d7d0077935e78c353c828be78ccb092e12ba7622cb0577f21641fadd728ae63a7c1f4a0d8113bfb38db3453a64bfa232fb1cdeefe0e2b48c52ef4065b0ab75ae + pretty-format: ^29.7.0 + semver: ^7.5.3 + checksum: 86821c3ad0b6899521ce75ee1ae7b01b17e6dfeff9166f2cf17f012e0c5d8c798f30f9e4f8f7f5bed01ea7b55a6bc159f5eda778311162cbfa48785447c237ad languageName: node linkType: hard @@ -7218,47 +6887,47 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-util@npm:29.3.1" +"jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" dependencies: - "@jest/types": ^29.3.1 + "@jest/types": ^29.6.3 "@types/node": "*" chalk: ^4.0.0 ci-info: ^3.2.0 graceful-fs: ^4.2.9 picomatch: ^2.2.3 - checksum: f67c60f062b94d21cb60e84b3b812d64b7bfa81fe980151de5c17a74eb666042d0134e2e756d099b7606a1fcf1d633824d2e58197d01d76dde1e2dc00dfcd413 + checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca languageName: node linkType: hard -"jest-validate@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-validate@npm:29.3.1" +"jest-validate@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-validate@npm:29.7.0" dependencies: - "@jest/types": ^29.3.1 + "@jest/types": ^29.6.3 camelcase: ^6.2.0 chalk: ^4.0.0 - jest-get-type: ^29.2.0 + jest-get-type: ^29.6.3 leven: ^3.1.0 - pretty-format: ^29.3.1 - checksum: 92584f0b8ac284235f12b3b812ccbc43ef6dea080a3b98b1aa81adbe009e962d0aa6131f21c8157b30ac3d58f335961694238a93d553d1d1e02ab264c923778c + pretty-format: ^29.7.0 + checksum: 191fcdc980f8a0de4dbdd879fa276435d00eb157a48683af7b3b1b98b0f7d9de7ffe12689b617779097ff1ed77601b9f7126b0871bba4f776e222c40f62e9dae languageName: node linkType: hard -"jest-watcher@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-watcher@npm:29.3.1" +"jest-watcher@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-watcher@npm:29.7.0" dependencies: - "@jest/test-result": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 emittery: ^0.13.1 - jest-util: ^29.3.1 + jest-util: ^29.7.0 string-length: ^4.0.1 - checksum: 60d189473486c73e9d540406a30189da5a3c67bfb0fb4ad4a83991c189135ef76d929ec99284ca5a505fe4ee9349ae3c99b54d2e00363e72837b46e77dec9642 + checksum: 67e6e7fe695416deff96b93a14a561a6db69389a0667e9489f24485bb85e5b54e12f3b2ba511ec0b777eca1e727235b073e3ebcdd473d68888650489f88df92f languageName: node linkType: hard @@ -7284,26 +6953,26 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^29.3.1": - version: 29.3.1 - resolution: "jest-worker@npm:29.3.1" +"jest-worker@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-worker@npm:29.7.0" dependencies: "@types/node": "*" - jest-util: ^29.3.1 + jest-util: ^29.7.0 merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: 38687fcbdc2b7ddc70bbb5dfc703ae095b46b3c7f206d62ecdf5f4d16e336178e217302138f3b906125576bb1cfe4cfe8d43681276fa5899d138ed9422099fb3 + checksum: 30fff60af49675273644d408b650fc2eb4b5dcafc5a0a455f238322a8f9d8a98d847baca9d51ff197b6747f54c7901daa2287799230b856a0f48287d131f8c13 languageName: node linkType: hard "jest@npm:^29.3.1": - version: 29.3.1 - resolution: "jest@npm:29.3.1" + version: 29.7.0 + resolution: "jest@npm:29.7.0" dependencies: - "@jest/core": ^29.3.1 - "@jest/types": ^29.3.1 + "@jest/core": ^29.7.0 + "@jest/types": ^29.6.3 import-local: ^3.0.2 - jest-cli: ^29.3.1 + jest-cli: ^29.7.0 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -7311,7 +6980,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 613f4ec657b14dd84c0056b2fef1468502927fd551bef0b19d4a91576a609678fb316c6a5b5fc6120dd30dd4ff4569070ffef3cb507db9bb0260b28ddaa18d7a + checksum: 17ca8d67504a7dbb1998cf3c3077ec9031ba3eb512da8d71cb91bcabb2b8995c4e4b292b740cb9bf1cbff5ce3e110b3f7c777b0cefb6f41ab05445f248d0ee0b languageName: node linkType: hard @@ -7334,6 +7003,13 @@ __metadata: languageName: node linkType: hard +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 944f924f2bd67ad533b3850eee47603eed0f6ae425fd1ee8c760f477e8c34a05f144c1bd4f5a5dd1963141dc79a2c55f89ccc5ab77d039e7077f3ad196b64965 + languageName: node + linkType: hard + "jsdom@npm:^20.0.0": version: 20.0.3 resolution: "jsdom@npm:20.0.3" @@ -7382,6 +7058,13 @@ __metadata: languageName: node linkType: hard +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 + languageName: node + linkType: hard + "json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": version: 2.3.1 resolution: "json-parse-even-better-errors@npm:2.3.1" @@ -7410,29 +7093,18 @@ __metadata: languageName: node linkType: hard -"json5@npm:^1.0.1": - version: 1.0.1 - resolution: "json5@npm:1.0.1" +"json5@npm:^1.0.2": + version: 1.0.2 + resolution: "json5@npm:1.0.2" dependencies: minimist: ^1.2.0 bin: json5: lib/cli.js - checksum: e76ea23dbb8fc1348c143da628134a98adf4c5a4e8ea2adaa74a80c455fc2cdf0e2e13e6398ef819bfe92306b610ebb2002668ed9fc1af386d593691ef346fc3 - languageName: node - linkType: hard - -"json5@npm:^2.1.2": - version: 2.2.0 - resolution: "json5@npm:2.2.0" - dependencies: - minimist: ^1.2.5 - bin: - json5: lib/cli.js - checksum: e88fc5274bb58fc99547baa777886b069d2dd96d9cfc4490b305fd16d711dabd5979e35a4f90873cefbeb552e216b041a304fe56702bedba76e19bc7845f208d + checksum: 866458a8c58a95a49bef3adba929c625e82532bcff1fe93f01d29cb02cac7c3fe1f4b79951b7792c2da9de0b32871a8401a6e3c5b36778ad852bf5b8a61165d7 languageName: node linkType: hard -"json5@npm:^2.2.2": +"json5@npm:^2.1.2, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -7455,12 +7127,23 @@ __metadata: linkType: hard "jsx-ast-utils@npm:^2.4.1 || ^3.0.0": - version: 3.2.1 - resolution: "jsx-ast-utils@npm:3.2.1" + version: 3.3.5 + resolution: "jsx-ast-utils@npm:3.3.5" dependencies: - array-includes: ^3.1.3 - object.assign: ^4.1.2 - checksum: dcee22e6382ee5a6bd4187333a44b6420d9d079838119a07055d6e88d137dd0afadc97a2246152b0b65006bd5fc393112dc0cef01956a01a66c1713913953c66 + array-includes: ^3.1.6 + array.prototype.flat: ^1.3.1 + object.assign: ^4.1.4 + object.values: ^1.1.6 + checksum: f4b05fa4d7b5234230c905cfa88d36dc8a58a6666975a3891429b1a8cdc8a140bca76c297225cb7a499fad25a2c052ac93934449a2c31a44fc9edd06c773780a + languageName: node + linkType: hard + +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: 3.0.1 + checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 languageName: node linkType: hard @@ -7482,14 +7165,7 @@ __metadata: languageName: node linkType: hard -"kind-of@npm:^5.0.0": - version: 5.1.0 - resolution: "kind-of@npm:5.1.0" - checksum: f2a0102ae0cf19c4a953397e552571bad2b588b53282874f25fca7236396e650e2db50d41f9f516bd402536e4df968dbb51b8e69e4d5d4a7173def78448f7bab - languageName: node - linkType: hard - -"kind-of@npm:^6.0.0, kind-of@npm:^6.0.2": +"kind-of@npm:^6.0.2": version: 6.0.3 resolution: "kind-of@npm:6.0.3" checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b @@ -7503,6 +7179,16 @@ __metadata: languageName: node linkType: hard +"launch-editor@npm:^2.6.0": + version: 2.8.1 + resolution: "launch-editor@npm:2.8.1" + dependencies: + picocolors: ^1.0.0 + shell-quote: ^1.8.1 + checksum: 69adfc913c066b0bcd685103907525789db6af3585cdc5f8c1172f0fcebe2c4ea1cff1108f76e9c591c00134329a5fb29e5911e9c0c347618a5300978b6bb767 + languageName: node + linkType: hard + "leven@npm:^3.1.0": version: 3.1.0 resolution: "leven@npm:3.1.0" @@ -7520,27 +7206,17 @@ __metadata: languageName: node linkType: hard -"levn@npm:~0.3.0": - version: 0.3.0 - resolution: "levn@npm:0.3.0" - dependencies: - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - checksum: 0d084a524231a8246bb10fec48cdbb35282099f6954838604f3c7fc66f2e16fa66fd9cc2f3f20a541a113c4dafdf181e822c887c8a319c9195444e6c64ac395e - languageName: node - linkType: hard - "lines-and-columns@npm:^1.1.6": - version: 1.1.6 - resolution: "lines-and-columns@npm:1.1.6" - checksum: 198a5436b1fa5cf703bae719c01c686b076f0ad7e1aafd95a58d626cabff302dc0414822126f2f80b58a8c3d66cda8a7b6da064f27130f87e1d3506d6dfd0d68 + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 languageName: node linkType: hard "loader-runner@npm:^4.2.0": - version: 4.2.0 - resolution: "loader-runner@npm:4.2.0" - checksum: e61aea8b6904b8af53d9de6f0484da86c462c0001f4511bedc837cec63deb9475cea813db62f702cd7930420ccb0e75c78112270ca5c8b61b374294f53c0cb3a + version: 4.3.0 + resolution: "loader-runner@npm:4.3.0" + checksum: a90e00dee9a16be118ea43fec3192d0b491fe03a32ed48a4132eb61d498f5536a03a1315531c19d284392a8726a4ecad71d82044c28d7f22ef62e029bf761569 languageName: node linkType: hard @@ -7553,13 +7229,6 @@ __metadata: languageName: node linkType: hard -"lodash.clonedeep@npm:^4.5.0": - version: 4.5.0 - resolution: "lodash.clonedeep@npm:4.5.0" - checksum: 92c46f094b064e876a23c97f57f81fbffd5d760bf2d8a1c61d85db6d1e488c66b0384c943abee4f6af7debf5ad4e4282e74ff83177c9e63d8ff081a4837c3489 - languageName: node - linkType: hard - "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -7601,6 +7270,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 6476138d2125387a6d20f100608c2583d415a4f64a0fecf30c9e2dda976614f09cad4baa0842447bd37dd459a7bd27f57d9d8f8ce558805abd487c583f3d774a + languageName: node + linkType: hard + "lru-cache@npm:^5.1.1": version: 5.1.1 resolution: "lru-cache@npm:5.1.1" @@ -7610,30 +7286,21 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: ^4.0.0 - checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 - languageName: node - linkType: hard - -"lz-string@npm:^1.4.4": - version: 1.4.4 - resolution: "lz-string@npm:1.4.4" +"lz-string@npm:^1.5.0": + version: 1.5.0 + resolution: "lz-string@npm:1.5.0" bin: lz-string: bin/bin.js - checksum: 54e31238a61a84d8f664d9860a9fba7310c5b97a52c444f80543069bc084815eff40b8d4474ae1d93992fdf6c252dca37cf27f6adbeb4dbc3df2f3ac773d0e61 + checksum: 1ee98b4580246fd90dd54da6e346fb1caefcf05f677c686d9af237a157fdea3fd7c83a4bc58f858cd5b10a34d27afe0fdcbd0505a47e0590726a873dc8b8f65d languageName: node linkType: hard -"make-dir@npm:^3.0.0": - version: 3.1.0 - resolution: "make-dir@npm:3.1.0" +"make-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" dependencies: - semver: ^6.0.0 - checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 + semver: ^7.5.3 + checksum: bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a languageName: node linkType: hard @@ -7644,26 +7311,23 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^8.0.14": - version: 8.0.14 - resolution: "make-fetch-happen@npm:8.0.14" +"make-fetch-happen@npm:^13.0.0": + version: 13.0.1 + resolution: "make-fetch-happen@npm:13.0.1" dependencies: - agentkeepalive: ^4.1.3 - cacache: ^15.0.5 - http-cache-semantics: ^4.1.0 - http-proxy-agent: ^4.0.1 - https-proxy-agent: ^5.0.0 + "@npmcli/agent": ^2.0.0 + cacache: ^18.0.0 + http-cache-semantics: ^4.1.1 is-lambda: ^1.0.1 - lru-cache: ^6.0.0 - minipass: ^3.1.3 - minipass-collect: ^1.0.2 - minipass-fetch: ^1.3.2 + minipass: ^7.0.2 + minipass-fetch: ^3.0.0 minipass-flush: ^1.0.5 minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + proc-log: ^4.2.0 promise-retry: ^2.0.1 - socks-proxy-agent: ^5.0.0 - ssri: ^8.0.0 - checksum: 326fefde1aec1f1314e548be74baaaa322208718d1b51c9688a326f73dea70f57767b4f5423230e39408cfe7c6dcf7adcf86ca4798c919c3ea78f54532910434 + ssri: ^10.0.0 + checksum: 5c9fad695579b79488fa100da05777213dd9365222f85e4757630f8dd2a21a79ddd3206c78cfd6f9b37346819681782b67900ac847a57cf04190f52dda5343fd languageName: node linkType: hard @@ -7676,15 +7340,6 @@ __metadata: languageName: node linkType: hard -"makeerror@npm:1.0.x": - version: 1.0.11 - resolution: "makeerror@npm:1.0.11" - dependencies: - tmpl: 1.0.x - checksum: 9a62ec2d9648c5329fdc4bc7d779a7305f32b1e55422a4f14244bc890bb43287fe013eb8d965e92a0cf4c443f3e59265b1fc3125eaedb0c2361e28b1a8de565d - languageName: node - linkType: hard - "map-cache@npm:^0.2.2": version: 0.2.2 resolution: "map-cache@npm:0.2.2" @@ -7708,12 +7363,12 @@ __metadata: languageName: node linkType: hard -"memfs@npm:^3.2.2": - version: 3.3.0 - resolution: "memfs@npm:3.3.0" +"memfs@npm:^3.4.3": + version: 3.5.3 + resolution: "memfs@npm:3.5.3" dependencies: - fs-monkey: 1.0.3 - checksum: 9e9eb71cfc077fd5e14ad2f497f5a8791689b64f307cf379ed6737c5781652a7af0509395c0dfba43c4e413dbc7cd7010e9ca002168ec329e6df178414b96268 + fs-monkey: ^1.0.4 + checksum: 18dfdeacad7c8047b976a6ccd58bc98ba76e122ad3ca0e50a21837fe2075fc0d9aafc58ab9cf2576c2b6889da1dd2503083f2364191b695273f40969db2ecc44 languageName: node linkType: hard @@ -7767,19 +7422,12 @@ __metadata: linkType: hard "micromatch@npm:^4.0.0, micromatch@npm:^4.0.2, micromatch@npm:^4.0.4": - version: 4.0.4 - resolution: "micromatch@npm:4.0.4" + version: 4.0.7 + resolution: "micromatch@npm:4.0.7" dependencies: - braces: ^3.0.1 - picomatch: ^2.2.3 - checksum: ef3d1c88e79e0a68b0e94a03137676f3324ac18a908c245a9e5936f838079fcc108ac7170a5fadc265a9c2596963462e402841406bda1a4bb7b68805601d631c - languageName: node - linkType: hard - -"mime-db@npm:1.50.0, mime-db@npm:>= 1.43.0 < 2": - version: 1.50.0 - resolution: "mime-db@npm:1.50.0" - checksum: 95fcc19c3664ae72391c8a7e4015dde7fb6817c98c951493ca3a1d48050feb8ee08810a372ce7d9e16310042d26e5bda168916f600583a9a583655eeea8ff5f5 + braces: ^3.0.3 + picomatch: ^2.3.1 + checksum: 3cde047d70ad80cf60c787b77198d680db3b8c25b23feb01de5e2652205d9c19f43bd81882f69a0fd1f0cde6a7a122d774998aad3271ddb1b8accf8a0f480cf7 languageName: node linkType: hard @@ -7790,7 +7438,14 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12": +"mime-db@npm:>= 1.43.0 < 2": + version: 1.53.0 + resolution: "mime-db@npm:1.53.0" + checksum: 3fd9380bdc0b085d0b56b580e4f89ca4fc3b823722310d795c248f0806b9a80afd5d8f4347f015ad943b9ecfa7cc0b71dffa0db96fa776d01a13474821a2c7fb + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -7799,15 +7454,6 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24": - version: 2.1.33 - resolution: "mime-types@npm:2.1.33" - dependencies: - mime-db: 1.50.0 - checksum: 05f2a0b3f169fbc51d79bdc7674ceb379dd07dbeadb0143059a7def865224686ee9f9051aeb340e98b6c11dbc06794ce0122181db4312cb1ad054fd90b0d510e - languageName: node - linkType: hard - "mime@npm:1.6.0, mime@npm:^1.6.0": version: 1.6.0 resolution: "mime@npm:1.6.0" @@ -7838,16 +7484,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:2 || 3, minimatch@npm:^3.0.4": - version: 3.0.4 - resolution: "minimatch@npm:3.0.4" - dependencies: - brace-expansion: ^1.1.7 - checksum: 66ac295f8a7b59788000ea3749938b0970344c841750abd96694f80269b926ebcafad3deeb3f1da2522978b119e6ae3a5869b63b13a7859a456b3408bd18a078 - languageName: node - linkType: hard - -"minimatch@npm:^3.1.2": +"minimatch@npm:2 || 3, minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -7856,41 +7493,43 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.1.1, minimist@npm:^1.2.0, minimist@npm:^1.2.5": - version: 1.2.5 - resolution: "minimist@npm:1.2.5" - checksum: 86706ce5b36c16bfc35c5fe3dbb01d5acdc9a22f2b6cc810b6680656a1d2c0e44a0159c9a3ba51fb072bb5c203e49e10b51dcd0eec39c481f4c42086719bae52 +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: ^2.0.1 + checksum: 2c035575eda1e50623c731ec6c14f65a85296268f749b9337005210bb2b34e2705f8ef1a358b188f69892286ab99dc42c8fb98a57bde55c8d81b3023c19cea28 languageName: node linkType: hard -"minimist@npm:^1.2.6": - version: 1.2.7 - resolution: "minimist@npm:1.2.7" - checksum: 7346574a1038ca23c32e02252f603801f09384dd1d78b69a943a4e8c2c28730b80e96193882d3d3b22a063445f460e48316b29b8a25addca2d7e5e8f75478bec +"minimist@npm:^1.1.1, minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 languageName: node linkType: hard -"minipass-collect@npm:^1.0.2": - version: 1.0.2 - resolution: "minipass-collect@npm:1.0.2" +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" dependencies: - minipass: ^3.0.0 - checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 + minipass: ^7.0.3 + checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 languageName: node linkType: hard -"minipass-fetch@npm:^1.3.2": - version: 1.4.1 - resolution: "minipass-fetch@npm:1.4.1" +"minipass-fetch@npm:^3.0.0": + version: 3.0.5 + resolution: "minipass-fetch@npm:3.0.5" dependencies: - encoding: ^0.1.12 - minipass: ^3.1.0 + encoding: ^0.1.13 + minipass: ^7.0.3 minipass-sized: ^1.0.3 - minizlib: ^2.0.0 + minizlib: ^2.1.2 dependenciesMeta: encoding: optional: true - checksum: ec93697bdb62129c4e6c0104138e681e30efef8c15d9429dd172f776f83898471bc76521b539ff913248cc2aa6d2b37b652c993504a51cc53282563640f29216 + checksum: 8047d273236157aab27ab7cd8eab7ea79e6ecd63e8f80c3366ec076cb9a0fed550a6935bab51764369027c414647fd8256c2a20c5445fb250c483de43350de83 languageName: node linkType: hard @@ -7903,7 +7542,7 @@ __metadata: languageName: node linkType: hard -"minipass-pipeline@npm:^1.2.2, minipass-pipeline@npm:^1.2.4": +"minipass-pipeline@npm:^1.2.4": version: 1.2.4 resolution: "minipass-pipeline@npm:1.2.4" dependencies: @@ -7921,16 +7560,30 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3": - version: 3.1.5 - resolution: "minipass@npm:3.1.5" +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" dependencies: yallist: ^4.0.0 - checksum: 8b410b9a5bd99ceb9d63c895891d1c30511791fdc7b717da4cf9403ca2419bc57af63b8485ffdaa421ef6cff56f63ae0b2f5135f8df502d21296e8c91460ebf9 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 2bfd325b95c555f2b4d2814d49325691c7bee937d753814861b0b49d5edcda55cbbf22b6b6a60bb91eddac8668771f03c5ff647dcd9d0f798e9548b9cdc46ee3 languageName: node linkType: hard -"minizlib@npm:^2.0.0, minizlib@npm:^2.1.1": +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": version: 2.1.2 resolution: "minizlib@npm:2.1.2" dependencies: @@ -7950,18 +7603,18 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.5": - version: 0.5.5 - resolution: "mkdirp@npm:0.5.5" +"mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.6": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" dependencies: - minimist: ^1.2.5 + minimist: ^1.2.6 bin: mkdirp: bin/cmd.js - checksum: 3bce20ea525f9477befe458ab85284b0b66c8dc3812f94155af07c827175948cdd8114852ac6c6d82009b13c1048c37f6d98743eb019651ee25c39acc8aabe7d + checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 languageName: node linkType: hard -"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": +"mkdirp@npm:^1.0.3": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" bin: @@ -7977,13 +7630,6 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.1": - version: 2.1.1 - resolution: "ms@npm:2.1.1" - checksum: 0078a23cd916a9a7435c413caa14c57d4b4f6e2470e0ab554b6964163c8a4436448ac7ae020e883685475da6b6796cc396b670f579cb275db288a21e3e57721e - languageName: node - linkType: hard - "ms@npm:2.1.2": version: 2.1.2 resolution: "ms@npm:2.1.2" @@ -7991,29 +7637,22 @@ __metadata: languageName: node linkType: hard -"ms@npm:^2.0.0, ms@npm:^2.1.1": +"ms@npm:2.1.3, ms@npm:^2.1.1": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d languageName: node linkType: hard -"multicast-dns-service-types@npm:^1.1.0": - version: 1.1.0 - resolution: "multicast-dns-service-types@npm:1.1.0" - checksum: 0979fca1cce85484d256e4db3af591d941b41a61f134da3607213d2624c12ed5b8a246565cb19a9b3cb542819e8fbc71a90b07e77023ee6a9515540fe1d371f7 - languageName: node - linkType: hard - -"multicast-dns@npm:^6.0.1": - version: 6.2.3 - resolution: "multicast-dns@npm:6.2.3" +"multicast-dns@npm:^7.2.5": + version: 7.2.5 + resolution: "multicast-dns@npm:7.2.5" dependencies: - dns-packet: ^1.3.1 + dns-packet: ^5.2.2 thunky: ^1.0.2 bin: multicast-dns: cli.js - checksum: f515b49ca964429ab48a4ac8041fcf969c927aeb49ab65288bd982e52c849a870fc3b03565780b0d194a1a02da8821f28b6425e48e95b8107bc9fcc92f571a6f + checksum: 00b8a57df152d4cd0297946320a94b7c3cdf75a46a2247f32f958a8927dea42958177f9b7fdae69fab2e4e033fb3416881af1f5e9055a3e1542888767139e2fb languageName: node linkType: hard @@ -8043,10 +7682,10 @@ __metadata: languageName: node linkType: hard -"negotiator@npm:0.6.2": - version: 0.6.2 - resolution: "negotiator@npm:0.6.2" - checksum: dfddaff6c06792f1c4c3809e29a427b8daef8cd437c83b08dd51d7ee11bbd1c29d9512d66b801144d6c98e910ffd8723f2432e0cbf8b18d41d2a09599c975ab3 +"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 languageName: node linkType: hard @@ -8081,30 +7720,30 @@ __metadata: languageName: node linkType: hard -"node-forge@npm:^0.10.0": - version: 0.10.0 - resolution: "node-forge@npm:0.10.0" - checksum: 5aa6dc9922e424a20ef101d2f517418e2bc9cfc0255dd22e0701c0fad1568445f510ee67f6f3fcdf085812c4ca1b847b8ba45683b34776828e41f5c1794e42e1 +"node-forge@npm:^1": + version: 1.3.1 + resolution: "node-forge@npm:1.3.1" + checksum: 08fb072d3d670599c89a1704b3e9c649ff1b998256737f0e06fbd1a5bf41cae4457ccaee32d95052d80bbafd9ffe01284e078c8071f0267dc9744e51c5ed42a9 languageName: node linkType: hard "node-gyp@npm:latest": - version: 8.2.0 - resolution: "node-gyp@npm:8.2.0" + version: 10.2.0 + resolution: "node-gyp@npm:10.2.0" dependencies: env-paths: ^2.2.0 - glob: ^7.1.4 + exponential-backoff: ^3.1.1 + glob: ^10.3.10 graceful-fs: ^4.2.6 - make-fetch-happen: ^8.0.14 - nopt: ^5.0.0 - npmlog: ^4.1.2 - rimraf: ^3.0.2 + make-fetch-happen: ^13.0.0 + nopt: ^7.0.0 + proc-log: ^4.1.0 semver: ^7.3.5 - tar: ^6.1.2 - which: ^2.0.2 + tar: ^6.2.1 + which: ^4.0.0 bin: node-gyp: bin/node-gyp.js - checksum: 5e0e755eab8ca88647d20fc8aba4095560c3dd549686e86761b57b8489d93a1af68b0dccf881e5314bfce4d7ca290f8248e192915ccd3e18bf46571d72da6a9d + checksum: 0233759d8c19765f7fdc259a35eb046ad86c3d09e22f7384613ae2b89647dd27fcf833fdf5293d9335041e91f9b1c539494225959cdb312a5c8080b7534b926f languageName: node linkType: hard @@ -8115,20 +7754,6 @@ __metadata: languageName: node linkType: hard -"node-modules-regexp@npm:^1.0.0": - version: 1.0.0 - resolution: "node-modules-regexp@npm:1.0.0" - checksum: 99541903536c5ce552786f0fca7f06b88df595e62e423c21fa86a1674ee2363dad1f7482d1bec20b4bd9fa5f262f88e6e5cb788fc56411113f2fe2e97783a3a7 - languageName: node - linkType: hard - -"node-releases@npm:^1.1.77": - version: 1.1.77 - resolution: "node-releases@npm:1.1.77" - checksum: eb2fcb45310e7d77f82bfdadeca546a698d258e011f15d88ad9a452a5e838a672ec532906581096ca19c66284a788330c3b09227ffc540e67228730f41b9c2e2 - languageName: node - linkType: hard - "node-releases@npm:^2.0.18": version: 2.0.18 resolution: "node-releases@npm:2.0.18" @@ -8136,21 +7761,14 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.6": - version: 2.0.8 - resolution: "node-releases@npm:2.0.8" - checksum: b1ab02c0d5d8e081bf9537232777a7a787dc8fef07f70feabe70a344599b220fe16462f746ac30f3eed5a58549445ad69368964d12a1f8b3b764f6caab7ba34a - languageName: node - linkType: hard - -"nopt@npm:^5.0.0": - version: 5.0.0 - resolution: "nopt@npm:5.0.0" +"nopt@npm:^7.0.0": + version: 7.2.1 + resolution: "nopt@npm:7.2.1" dependencies: - abbrev: 1 + abbrev: ^2.0.0 bin: nopt: bin/nopt.js - checksum: d35fdec187269503843924e0114c0c6533fb54bbf1620d0f28b4b60ba01712d6687f62565c55cc20a504eff0fbe5c63e22340c3fad549ad40469ffb611b04f2f + checksum: 6fa729cc77ce4162cfad8abbc9ba31d4a0ff6850c3af61d59b505653bef4781ec059f8890ecfe93ee8aa0c511093369cca88bfc998101616a2904e715bbbb7c9 languageName: node linkType: hard @@ -8188,42 +7806,23 @@ __metadata: languageName: node linkType: hard -"npmlog@npm:^4.1.2": - version: 4.1.2 - resolution: "npmlog@npm:4.1.2" - dependencies: - are-we-there-yet: ~1.1.2 - console-control-strings: ~1.1.0 - gauge: ~2.7.3 - set-blocking: ~2.0.0 - checksum: edbda9f95ec20957a892de1839afc6fb735054c3accf6fbefe767bac9a639fd5cea2baeac6bd2bcd50a85cb54924d57d9886c81c7fbc2332c2ddd19227504192 - languageName: node - linkType: hard - -"nth-check@npm:^2.0.0": - version: 2.0.1 - resolution: "nth-check@npm:2.0.1" +"nth-check@npm:^2.0.1": + version: 2.1.1 + resolution: "nth-check@npm:2.1.1" dependencies: boolbase: ^1.0.0 - checksum: 5386d035c48438ff304fe687704d93886397349d1bed136de97aeae464caba10e8ffac55a04b215b86b3bc8897f33e0a5aa1045a9d8b2f251ae61b2a3ad3e450 - languageName: node - linkType: hard - -"number-is-nan@npm:^1.0.0": - version: 1.0.1 - resolution: "number-is-nan@npm:1.0.1" - checksum: 13656bc9aa771b96cef209ffca31c31a03b507ca6862ba7c3f638a283560620d723d52e626d57892c7fff475f4c36ac07f0600f14544692ff595abff214b9ffb + checksum: 5afc3dafcd1573b08877ca8e6148c52abd565f1d06b1eb08caf982e3fa289a82f2cae697ffb55b5021e146d60443f1590a5d6b944844e944714a5b549675bcd3 languageName: node linkType: hard "nwsapi@npm:^2.2.2": - version: 2.2.2 - resolution: "nwsapi@npm:2.2.2" - checksum: 43769106292bc95f776756ca2f3513dab7b4d506a97c67baec32406447841a35f65f29c1f95ab5d42785210fd41668beed33ca16fa058780be43b101ad73e205 + version: 2.2.12 + resolution: "nwsapi@npm:2.2.12" + checksum: 4dbce7ecbcf336eef1edcbb5161cbceea95863e63a16d9bcec8e81cbb260bdab3d07e6c7b58354d465dc803eef6d0ea4fb20220a80fa148ae65f18d56df81799 languageName: node linkType: hard -"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": +"object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f @@ -8241,31 +7840,24 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.11.0, object-inspect@npm:^1.9.0": - version: 1.11.0 - resolution: "object-inspect@npm:1.11.0" - checksum: 8c64f89ce3a7b96b6925879ad5f6af71d498abc217e136660efecd97452991216f375a7eb47cb1cb50643df939bf0c7cc391567b7abc6a924d04679705e58e27 - languageName: node - linkType: hard - -"object-inspect@npm:^1.12.2": - version: 1.12.2 - resolution: "object-inspect@npm:1.12.2" - checksum: a534fc1b8534284ed71f25ce3a496013b7ea030f3d1b77118f6b7b1713829262be9e6243acbcb3ef8c626e2b64186112cb7f6db74e37b2789b9c789ca23048b2 +"object-inspect@npm:^1.13.1": + version: 1.13.2 + resolution: "object-inspect@npm:1.13.2" + checksum: 9f850b3c045db60e0e97746e809ee4090d6ce62195af17dd1e9438ac761394a7d8ec4f7906559aea5424eaf61e35d3e53feded2ccd5f62fcc7d9670d3c8eb353 languageName: node linkType: hard -"object-is@npm:^1.0.1": - version: 1.1.5 - resolution: "object-is@npm:1.1.5" +"object-is@npm:^1.1.5": + version: 1.1.6 + resolution: "object-is@npm:1.1.6" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - checksum: 989b18c4cba258a6b74dc1d74a41805c1a1425bce29f6cabb50dcb1a6a651ea9104a1b07046739a49a5bb1bc49727bcb00efd5c55f932f6ea04ec8927a7901fe + call-bind: ^1.0.7 + define-properties: ^1.2.1 + checksum: 3ea22759967e6f2380a2cbbd0f737b42dc9ddb2dfefdb159a1b927fea57335e1b058b564bfa94417db8ad58cddab33621a035de6f5e5ad56d89f2dd03e66c6a1 languageName: node linkType: hard -"object-keys@npm:^1.0.12, object-keys@npm:^1.1.1": +"object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a @@ -8281,59 +7873,49 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.0, object.assign@npm:^4.1.2": - version: 4.1.2 - resolution: "object.assign@npm:4.1.2" - dependencies: - call-bind: ^1.0.0 - define-properties: ^1.1.3 - has-symbols: ^1.0.1 - object-keys: ^1.1.1 - checksum: d621d832ed7b16ac74027adb87196804a500d80d9aca536fccb7ba48d33a7e9306a75f94c1d29cbfa324bc091bfc530bc24789568efdaee6a47fcfa298993814 - languageName: node - linkType: hard - -"object.assign@npm:^4.1.4": - version: 4.1.4 - resolution: "object.assign@npm:4.1.4" +"object.assign@npm:^4.1.0, object.assign@npm:^4.1.4, object.assign@npm:^4.1.5": + version: 4.1.5 + resolution: "object.assign@npm:4.1.5" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 + call-bind: ^1.0.5 + define-properties: ^1.2.1 has-symbols: ^1.0.3 object-keys: ^1.1.1 - checksum: 76cab513a5999acbfe0ff355f15a6a125e71805fcf53de4e9d4e082e1989bdb81d1e329291e1e4e0ae7719f0e4ef80e88fb2d367ae60500d79d25a6224ac8864 + checksum: f9aeac0541661370a1fc86e6a8065eb1668d3e771f7dbb33ee54578201336c057b21ee61207a186dd42db0c62201d91aac703d20d12a79fc79c353eed44d4e25 languageName: node linkType: hard -"object.entries@npm:^1.1.4": - version: 1.1.5 - resolution: "object.entries@npm:1.1.5" +"object.entries@npm:^1.1.8": + version: 1.1.8 + resolution: "object.entries@npm:1.1.8" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - checksum: d658696f74fd222060d8428d2a9fda2ce736b700cb06f6bdf4a16a1892d145afb746f453502b2fa55d1dca8ead6f14ddbcf66c545df45adadea757a6c4cd86c7 + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: 5314877cb637ef3437a30bba61d9bacdb3ce74bf73ac101518be0633c37840c8cc67407edb341f766e8093b3d7516d5c3358f25adfee4a2c697c0ec4c8491907 languageName: node linkType: hard -"object.fromentries@npm:^2.0.4": - version: 2.0.5 - resolution: "object.fromentries@npm:2.0.5" +"object.fromentries@npm:^2.0.7, object.fromentries@npm:^2.0.8": + version: 2.0.8 + resolution: "object.fromentries@npm:2.0.8" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - checksum: 61a0b565ded97b76df9e30b569729866e1824cce902f98e90bb106e84f378aea20163366f66dc75c9000e2aad2ed0caf65c6f530cb2abc4c0c0f6c982102db4b + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-object-atoms: ^1.0.0 + checksum: 29b2207a2db2782d7ced83f93b3ff5d425f901945f3665ffda1821e30a7253cd1fd6b891a64279976098137ddfa883d748787a6fea53ecdb51f8df8b8cec0ae1 languageName: node linkType: hard -"object.hasown@npm:^1.0.0": - version: 1.1.0 - resolution: "object.hasown@npm:1.1.0" +"object.groupby@npm:^1.0.1": + version: 1.0.3 + resolution: "object.groupby@npm:1.0.3" dependencies: - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - checksum: 5c5d0b1b793514609f7a635f3110fbd346e142c9afd2485b802775e1ef6c90e48ff6e8e8744927933370ba30964e21af9c5fcf782b47f34d650aa6b277565330 + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + checksum: 0d30693ca3ace29720bffd20b3130451dca7a56c612e1926c0a1a15e4306061d84410bdb1456be2656c5aca53c81b7a3661eceaa362db1bba6669c2c9b6d1982 languageName: node linkType: hard @@ -8346,25 +7928,14 @@ __metadata: languageName: node linkType: hard -"object.values@npm:^1.1.4": - version: 1.1.5 - resolution: "object.values@npm:1.1.5" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - checksum: 0f17e99741ebfbd0fa55ce942f6184743d3070c61bd39221afc929c8422c4907618c8da694c6915bc04a83ab3224260c779ba37fc07bb668bdc5f33b66a902a4 - languageName: node - linkType: hard - -"object.values@npm:^1.1.5": - version: 1.1.6 - resolution: "object.values@npm:1.1.6" +"object.values@npm:^1.1.6, object.values@npm:^1.1.7, object.values@npm:^1.2.0": + version: 1.2.0 + resolution: "object.values@npm:1.2.0" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: f6fff9fd817c24cfd8107f50fb33061d81cd11bacc4e3dbb3852e9ff7692fde4dbce823d4333ea27cd9637ef1b6690df5fbb61f1ed314fa2959598dc3ae23d8e + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: 51fef456c2a544275cb1766897f34ded968b22adfc13ba13b5e4815fdaf4304a90d42a3aee114b1f1ede048a4890381d47a5594d84296f2767c6a0364b9da8fa languageName: node linkType: hard @@ -8375,12 +7946,12 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:~2.3.0": - version: 2.3.0 - resolution: "on-finished@npm:2.3.0" +"on-finished@npm:2.4.1": + version: 2.4.1 + resolution: "on-finished@npm:2.4.1" dependencies: ee-first: 1.1.1 - checksum: 1db595bd963b0124d6fa261d18320422407b8f01dc65863840f3ddaaf7bcad5b28ff6847286703ca53f4ec19595bd67a2f1253db79fc4094911ec6aa8df1671b + checksum: d20929a25e7f0bb62f937a425b5edeb4e4cde0540d77ba146ec9357f00b0d497cdb3b9b05b9c8e46222407d1548d08166bff69cc56dfa55ba0e4469228920ff0 languageName: node linkType: hard @@ -8410,24 +7981,13 @@ __metadata: linkType: hard "open@npm:^8.0.9": - version: 8.3.0 - resolution: "open@npm:8.3.0" - dependencies: - define-lazy-prop: ^2.0.0 - is-docker: ^2.1.1 - is-wsl: ^2.2.0 - checksum: 10fcb7ad453534cc1103ff90e0ebc36e542d67a4ccacf3b3d78c8e6401cec686e2849479cbc4a3386c7a3210064cbcc52e6ac38b788fc5fff1cf1dcbfef3c83b - languageName: node - linkType: hard - -"open@npm:^8.4.0": - version: 8.4.0 - resolution: "open@npm:8.4.0" + version: 8.4.2 + resolution: "open@npm:8.4.2" dependencies: define-lazy-prop: ^2.0.0 is-docker: ^2.1.1 is-wsl: ^2.2.0 - checksum: e9545bec64cdbf30a0c35c1bdc310344adf8428a117f7d8df3c0af0a0a24c513b304916a6d9b11db0190ff7225c2d578885080b761ed46a3d5f6f1eebb98b63c + checksum: 6388bfff21b40cb9bd8f913f9130d107f2ed4724ea81a8fd29798ee322b361ca31fa2cdfb491a5c31e43a3996cfe9566741238c7a741ada8d7af1cb78d85cf26 languageName: node linkType: hard @@ -8440,31 +8000,17 @@ __metadata: languageName: node linkType: hard -"optionator@npm:^0.8.1": - version: 0.8.3 - resolution: "optionator@npm:0.8.3" - dependencies: - deep-is: ~0.1.3 - fast-levenshtein: ~2.0.6 - levn: ~0.3.0 - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - word-wrap: ~1.2.3 - checksum: b8695ddf3d593203e25ab0900e265d860038486c943ff8b774f596a310f8ceebdb30c6832407a8198ba3ec9debe1abe1f51d4aad94843612db3b76d690c61d34 - languageName: node - linkType: hard - "optionator@npm:^0.9.1": - version: 0.9.1 - resolution: "optionator@npm:0.9.1" + version: 0.9.4 + resolution: "optionator@npm:0.9.4" dependencies: deep-is: ^0.1.3 fast-levenshtein: ^2.0.6 levn: ^0.4.1 prelude-ls: ^1.2.1 type-check: ^0.4.0 - word-wrap: ^1.2.3 - checksum: dbc6fa065604b24ea57d734261914e697bd73b69eff7f18e967e8912aa2a40a19a9f599a507fa805be6c13c24c4eae8c71306c239d517d42d4c041c942f508a0 + word-wrap: ^1.2.5 + checksum: ecbd010e3dc73e05d239976422d9ef54a82a13f37c11ca5911dff41c98a6c7f0f163b27f922c37e7f8340af9d36febd3b6e9cef508f3339d4c393d7276d716bb languageName: node linkType: hard @@ -8507,15 +8053,6 @@ __metadata: languageName: unknown linkType: soft -"p-event@npm:^4.2.0": - version: 4.2.0 - resolution: "p-event@npm:4.2.0" - dependencies: - p-timeout: ^3.1.0 - checksum: 8a3588f7a816a20726a3262dfeee70a631e3997e4773d23219176333eda55cce9a76219e3d2b441b331eb746e14fdb381eb2694ab9ff2fcf87c846462696fe89 - languageName: node - linkType: hard - "p-finally@npm:^1.0.0": version: 1.0.0 resolution: "p-finally@npm:1.0.0" @@ -8560,21 +8097,12 @@ __metadata: linkType: hard "p-retry@npm:^4.5.0": - version: 4.6.1 - resolution: "p-retry@npm:4.6.1" + version: 4.6.2 + resolution: "p-retry@npm:4.6.2" dependencies: - "@types/retry": ^0.12.0 + "@types/retry": 0.12.0 retry: ^0.13.1 - checksum: e6d540413bb3d0b96e0db44f74a7af1dce41f5005e6e84d617960110b148348c86a3987be07797749e3ddd55817dd3a8ffd6eae3428758bc2994d987e48c3a70 - languageName: node - linkType: hard - -"p-timeout@npm:^3.1.0": - version: 3.2.0 - resolution: "p-timeout@npm:3.2.0" - dependencies: - p-finally: ^1.0.0 - checksum: 3dd0eaa048780a6f23e5855df3dd45c7beacff1f820476c1d0d1bcd6648e3298752ba2c877aa1c92f6453c7dd23faaf13d9f5149fc14c0598a142e2c5e8d649c + checksum: 45c270bfddaffb4a895cea16cb760dcc72bdecb6cb45fef1971fa6ea2e91ddeafddefe01e444ac73e33b1b3d5d29fb0dd18a7effb294262437221ddc03ce0f2e languageName: node linkType: hard @@ -8585,6 +8113,13 @@ __metadata: languageName: node linkType: hard +"package-json-from-dist@npm:^1.0.0": + version: 1.0.0 + resolution: "package-json-from-dist@npm:1.0.0" + checksum: ac706ec856a5a03f5261e4e48fa974f24feb044d51f84f8332e2af0af04fbdbdd5bbbfb9cbbe354190409bc8307c83a9e38c6672c3c8855f709afb0006a009ea + languageName: node + linkType: hard + "param-case@npm:^3.0.4": version: 3.0.4 resolution: "param-case@npm:3.0.4" @@ -8677,13 +8212,23 @@ __metadata: languageName: node linkType: hard -"path-parse@npm:^1.0.6, path-parse@npm:^1.0.7": +"path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a languageName: node linkType: hard +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: ^10.2.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: 890d5abcd593a7912dcce7cf7c6bf7a0b5648e3dee6caf0712c126ca0a65c7f3d7b9d769072a4d1baf370f61ce493ab5b038d59988688e0c5f3f646ee3c69023 + languageName: node + linkType: hard + "path-to-regexp@npm:0.1.7": version: 0.1.7 resolution: "path-to-regexp@npm:0.1.7" @@ -8705,47 +8250,24 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^0.2.1": - version: 0.2.1 - resolution: "picocolors@npm:0.2.1" - checksum: 3b0f441f0062def0c0f39e87b898ae7461c3a16ffc9f974f320b44c799418cabff17780ee647fda42b856a1dc45897e2c62047e1b546d94d6d5c6962f45427b2 - languageName: node - linkType: hard - -"picocolors@npm:^1.0.0": - version: 1.0.0 - resolution: "picocolors@npm:1.0.0" - checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 - languageName: node - linkType: hard - -"picocolors@npm:^1.0.1": +"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": version: 1.0.1 resolution: "picocolors@npm:1.0.1" checksum: fa68166d1f56009fc02a34cdfd112b0dd3cf1ef57667ac57281f714065558c01828cdf4f18600ad6851cbe0093952ed0660b1e0156bddf2184b6aaf5817553a5 languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3": - version: 2.3.0 - resolution: "picomatch@npm:2.3.0" - checksum: 16818720ea7c5872b6af110760dee856c8e4cd79aed1c7a006d076b1cc09eff3ae41ca5019966694c33fbd2e1cc6ea617ab10e4adac6df06556168f13be3fca2 - languageName: node - linkType: hard - -"pirates@npm:^4.0.1": - version: 4.0.1 - resolution: "pirates@npm:4.0.1" - dependencies: - node-modules-regexp: ^1.0.0 - checksum: 091e232aac19f0049a681838fa9fcb4af824b5b1eb0e9325aa07b9d13245bfe3e4fa57a7766b9fdcd19cb89f2c15c688b46023be3047cb288023a0c079d3b2a3 +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf languageName: node linkType: hard -"pirates@npm:^4.0.4": - version: 4.0.5 - resolution: "pirates@npm:4.0.5" - checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 +"pirates@npm:^4.0.1, pirates@npm:^4.0.4": + version: 4.0.6 + resolution: "pirates@npm:4.0.6" + checksum: 46a65fefaf19c6f57460388a5af9ab81e3d7fd0e7bc44ca59d753cb5c4d0df97c6c6e583674869762101836d68675f027d60f841c105d72734df9dfca97cbcc6 languageName: node linkType: hard @@ -8758,14 +8280,14 @@ __metadata: languageName: node linkType: hard -"portfinder@npm:^1.0.25, portfinder@npm:^1.0.28": - version: 1.0.28 - resolution: "portfinder@npm:1.0.28" +"portfinder@npm:^1.0.25": + version: 1.0.32 + resolution: "portfinder@npm:1.0.32" dependencies: - async: ^2.6.2 - debug: ^3.1.1 - mkdirp: ^0.5.5 - checksum: 91fef602f13f8f4c64385d0ad2a36cc9dc6be0b8d10a2628ee2c3c7b9917ab4fefb458815b82cea2abf4b785cd11c9b4e2d917ac6fa06f14b6fa880ca8f8928c + async: ^2.6.4 + debug: ^3.2.7 + mkdirp: ^0.5.6 + checksum: 116b4aed1b9e16f6d5503823d966d9ffd41b1c2339e27f54c06cd2f3015a9d8ef53e2a53b57bc0a25af0885977b692007353aa28f9a0a98a44335cb50487240d languageName: node linkType: hard @@ -8776,6 +8298,13 @@ __metadata: languageName: node linkType: hard +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: b32d403ece71e042385cc7856385cecf1cd8e144fa74d2f1de40d1e16035dba097bc189715925e79b67bdd1472796ff168d3a90d296356c9c94d272d5b95f3ae + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -8783,13 +8312,6 @@ __metadata: languageName: node linkType: hard -"prelude-ls@npm:~1.1.2": - version: 1.1.2 - resolution: "prelude-ls@npm:1.1.2" - checksum: c4867c87488e4a0c233e158e4d0d5565b609b105d75e4c05dc760840475f06b731332eb93cc8c9cecb840aa8ec323ca3c9a56ad7820ad2e63f0261dadcb154e4 - languageName: node - linkType: hard - "prettier-linter-helpers@npm:^1.0.0": version: 1.0.0 resolution: "prettier-linter-helpers@npm:1.0.0" @@ -8800,44 +8322,50 @@ __metadata: linkType: hard "prettier@npm:^2.3.2": - version: 2.4.1 - resolution: "prettier@npm:2.4.1" + version: 2.8.8 + resolution: "prettier@npm:2.8.8" bin: prettier: bin-prettier.js - checksum: cc6830588b401b0d742862fe9c46bc9118204fb307c3abe0e49e95b35ed23629573807ffdf9cdd65289c252a0bb51fc0171437f6626ee36378dea80f0ee80b91 + checksum: b49e409431bf129dd89238d64299ba80717b57ff5a6d1c1a8b1a28b590d998a34e083fa13573bc732bb8d2305becb4c9a4407f8486c81fa7d55100eb08263cf8 languageName: node linkType: hard -"pretty-error@npm:^3.0.4": - version: 3.0.4 - resolution: "pretty-error@npm:3.0.4" +"pretty-error@npm:^4.0.0": + version: 4.0.0 + resolution: "pretty-error@npm:4.0.0" dependencies: lodash: ^4.17.20 - renderkid: ^2.0.6 - checksum: c985666a1f471fd8d5a7b6f1f2154f947aff0a2c60c5d5a4513ff152a91d3296e5849d2fa3914be1a22b57db7580a968c25ab720b0afd1cc8d64de670153dc61 + renderkid: ^3.0.0 + checksum: a5b9137365690104ded6947dca2e33360bf55e62a4acd91b1b0d7baa3970e43754c628cc9e16eafbdd4e8f8bcb260a5865475d4fc17c3106ff2d61db4e72cdf3 languageName: node linkType: hard -"pretty-format@npm:^27.0.0, pretty-format@npm:^27.0.2, pretty-format@npm:^27.2.5": - version: 27.2.5 - resolution: "pretty-format@npm:27.2.5" +"pretty-format@npm:^27.0.2": + version: 27.5.1 + resolution: "pretty-format@npm:27.5.1" dependencies: - "@jest/types": ^27.2.5 ansi-regex: ^5.0.1 ansi-styles: ^5.0.0 react-is: ^17.0.1 - checksum: 83adebba0a1b23c3d289a60e9443665e428c9b74e91cc11b5bba4231ad52b90f5376ab9742ad9e78f955c5c24699904d6baaad7d32c75a220db66a4679332d53 + checksum: cf610cffcb793885d16f184a62162f2dd0df31642d9a18edf4ca298e909a8fe80bdbf556d5c9573992c102ce8bf948691da91bf9739bee0ffb6e79c8a8a6e088 languageName: node linkType: hard -"pretty-format@npm:^29.3.1": - version: 29.3.1 - resolution: "pretty-format@npm:29.3.1" +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" dependencies: - "@jest/schemas": ^29.0.0 + "@jest/schemas": ^29.6.3 ansi-styles: ^5.0.0 react-is: ^18.0.0 - checksum: 9917a0bb859cd7a24a343363f70d5222402c86d10eb45bcc2f77b23a4e67586257390e959061aec22762a782fe6bafb59bf34eb94527bc2e5d211afdb287eb4e + checksum: 032c1602383e71e9c0c02a01bbd25d6759d60e9c7cf21937dde8357aa753da348fcec5def5d1002c9678a8524d5fe099ad98861286550ef44de8808cc61e43b6 + languageName: node + linkType: hard + +"proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 98f6cd012d54b5334144c5255ecb941ee171744f45fca8b43b58ae5a0c1af07352475f481cadd9848e7f0250376ee584f6aa0951a856ff8f021bdfbff4eb33fc languageName: node linkType: hard @@ -8862,13 +8390,6 @@ __metadata: languageName: node linkType: hard -"promise-inflight@npm:^1.0.1": - version: 1.0.1 - resolution: "promise-inflight@npm:1.0.1" - checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 - languageName: node - linkType: hard - "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -8889,18 +8410,18 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.7.2": - version: 15.7.2 - resolution: "prop-types@npm:15.7.2" +"prop-types@npm:^15.8.1": + version: 15.8.1 + resolution: "prop-types@npm:15.8.1" dependencies: loose-envify: ^1.4.0 object-assign: ^4.1.1 - react-is: ^16.8.1 - checksum: 5eef82fdda64252c7e75aa5c8cc28a24bbdece0f540adb60ce67c205cf978a5bd56b83e4f269f91c6e4dcfd80b36f2a2dec24d362e278913db2086ca9c6f9430 + react-is: ^16.13.1 + checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 languageName: node linkType: hard -"proxy-addr@npm:~2.0.5": +"proxy-addr@npm:~2.0.7": version: 2.0.7 resolution: "proxy-addr@npm:2.0.7" dependencies: @@ -8934,24 +8455,10 @@ __metadata: languageName: node linkType: hard -"punycode@npm:1.3.2": - version: 1.3.2 - resolution: "punycode@npm:1.3.2" - checksum: b8807fd594b1db33335692d1f03e8beeddde6fda7fbb4a2e32925d88d20a3aa4cd8dcc0c109ccaccbd2ba761c208dfaaada83007087ea8bfb0129c9ef1b99ed6 - languageName: node - linkType: hard - -"punycode@npm:^2.1.0": - version: 2.1.1 - resolution: "punycode@npm:2.1.1" - checksum: 823bf443c6dd14f669984dea25757b37993f67e8d94698996064035edd43bed8a5a17a9f12e439c2b35df1078c6bec05a6c86e336209eb1061e8025c481168e8 - languageName: node - linkType: hard - -"punycode@npm:^2.1.1": - version: 2.2.0 - resolution: "punycode@npm:2.2.0" - checksum: 32f291c1b1e8bef8a7d351a369579565bc17530ee5224d2f2b5c37b2647aa0ec7f1972294e2de1b632812f90c8080a7c0c5645c14758aadc0f27b35dd4906d89 +"punycode@npm:^2.1.0, punycode@npm:^2.1.1": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 languageName: node linkType: hard @@ -8975,26 +8482,28 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.7.0": - version: 6.7.0 - resolution: "qs@npm:6.7.0" - checksum: dfd5f6adef50e36e908cfa70a6233871b5afe66fbaca37ecc1da352ba29eb2151a3797991948f158bb37fccde51bd57845cb619a8035287bfc24e4591172c347 +"pure-rand@npm:^6.0.0": + version: 6.1.0 + resolution: "pure-rand@npm:6.1.0" + checksum: 8d53bc02bed99eca0b65b505090152ee7e9bd67dd74f8ff32ba1c883b87234067c5bf68d2614759fb217d82594d7a92919e6df80f97885e7b12b42af4bd3316a languageName: node linkType: hard -"qs@npm:^6.4.0": - version: 6.10.1 - resolution: "qs@npm:6.10.1" +"qs@npm:6.11.0": + version: 6.11.0 + resolution: "qs@npm:6.11.0" dependencies: side-channel: ^1.0.4 - checksum: 00e390dbf98eff4d8ff121b61ab2fe32106852290de99ecd0e40fc76651c4101f43fc6cc8313cb69423563876fc532951b11dda55d2917def05f292258263480 + checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297 languageName: node linkType: hard -"querystring@npm:0.2.0": - version: 0.2.0 - resolution: "querystring@npm:0.2.0" - checksum: 8258d6734f19be27e93f601758858c299bdebe71147909e367101ba459b95446fbe5b975bf9beb76390156a592b6f4ac3a68b6087cea165c259705b8b4e56a69 +"qs@npm:^6.4.0": + version: 6.13.0 + resolution: "qs@npm:6.13.0" + dependencies: + side-channel: ^1.0.6 + checksum: e9404dc0fc2849245107108ce9ec2766cde3be1b271de0bf1021d049dc5b98d1a2901e67b431ac5509f865420a7ed80b7acb3980099fe1c118a1c5d2e1432ad8 languageName: node linkType: hard @@ -9013,9 +8522,9 @@ __metadata: linkType: hard "ramda@npm:^0.27.1": - version: 0.27.1 - resolution: "ramda@npm:0.27.1" - checksum: 31a0c0ef739b2525d7615f84cbb5d3cb89ee0c795469b711f729ea1d8df0dccc3cd75d3717a1e9742d42315ce86435680b7c87743eb7618111c60c144a5b8059 + version: 0.27.2 + resolution: "ramda@npm:0.27.2" + checksum: 28d6735dd1eea1a796c56cf6111f3673c6105bbd736e521cdd7826c46a18eeff337c2dba4668f6eed990d539b9961fd6db19aa46ccc1530ba67a396c0a9f580d languageName: node linkType: hard @@ -9035,31 +8544,31 @@ __metadata: languageName: node linkType: hard -"raw-body@npm:2.4.0": - version: 2.4.0 - resolution: "raw-body@npm:2.4.0" +"raw-body@npm:2.5.2": + version: 2.5.2 + resolution: "raw-body@npm:2.5.2" dependencies: - bytes: 3.1.0 - http-errors: 1.7.2 + bytes: 3.1.2 + http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - checksum: 6343906939e018c6e633a34a938a5d6d1e93ffcfa48646e00207d53b418e941953b521473950c079347220944dc75ba10e7b3c08bf97e3ac72c7624882db09bb + checksum: ba1583c8d8a48e8fbb7a873fdbb2df66ea4ff83775421bfe21ee120140949ab048200668c47d9ae3880012f6e217052690628cf679ddfbd82c9fc9358d574676 languageName: node linkType: hard "react-dom@npm:^18.2.0": - version: 18.2.0 - resolution: "react-dom@npm:18.2.0" + version: 18.3.1 + resolution: "react-dom@npm:18.3.1" dependencies: loose-envify: ^1.1.0 - scheduler: ^0.23.0 + scheduler: ^0.23.2 peerDependencies: - react: ^18.2.0 - checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc + react: ^18.3.1 + checksum: 298954ecd8f78288dcaece05e88b570014d8f6dce5db6f66e6ee91448debeb59dcd31561dddb354eee47e6c1bb234669459060deb238ed0213497146e555a0b9 languageName: node linkType: hard -"react-is@npm:^16.8.1": +"react-is@npm:^16.13.1": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f @@ -9074,9 +8583,9 @@ __metadata: linkType: hard "react-is@npm:^18.0.0": - version: 18.2.0 - resolution: "react-is@npm:18.2.0" - checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: e20fe84c86ff172fc8d898251b7cc2c43645d108bf96d0b8edf39b98f9a2cae97b40520ee7ed8ee0085ccc94736c4886294456033304151c3f94978cec03df21 languageName: node linkType: hard @@ -9101,9 +8610,18 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.6": - version: 2.3.7 - resolution: "readable-stream@npm:2.3.7" +"react@npm:^18.2.0": + version: 18.3.1 + resolution: "react@npm:18.3.1" + dependencies: + loose-envify: ^1.1.0 + checksum: a27bcfa8ff7c15a1e50244ad0d0c1cb2ad4375eeffefd266a64889beea6f6b64c4966c9b37d14ee32d6c9fcd5aa6ba183b6988167ab4d127d13e7cb5b386a376 + languageName: node + linkType: hard + +"readable-stream@npm:^2.0.1": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" dependencies: core-util-is: ~1.0.0 inherits: ~2.0.3 @@ -9112,18 +8630,18 @@ __metadata: safe-buffer: ~5.1.1 string_decoder: ~1.1.1 util-deprecate: ~1.0.1 - checksum: e4920cf7549a60f8aaf694d483a0e61b2a878b969d224f89b3bc788b8d920075132c4b55a7494ee944c7b6a9a0eada28a7f6220d80b0312ece70bbf08eeca755 + checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 languageName: node linkType: hard "readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0": - version: 3.6.0 - resolution: "readable-stream@npm:3.6.0" + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" dependencies: inherits: ^2.0.3 string_decoder: ^1.1.1 util-deprecate: ^1.0.1 - checksum: d4ea81502d3799439bb955a3a5d1d808592cf3133350ed352aeaa499647858b27b1c4013984900238b0873ec8d0d8defce72469fb7a83e61d53f5ad61cb80dc8 + checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d languageName: node linkType: hard @@ -9155,10 +8673,25 @@ __metadata: languageName: node linkType: hard -"regenerator-runtime@npm:^0.13.4": - version: 0.13.9 - resolution: "regenerator-runtime@npm:0.13.9" - checksum: 65ed455fe5afd799e2897baf691ca21c2772e1a969d19bb0c4695757c2d96249eb74ee3553ea34a91062b2a676beedf630b4c1551cc6299afb937be1426ec55e +"reflect.getprototypeof@npm:^1.0.4": + version: 1.0.6 + resolution: "reflect.getprototypeof@npm:1.0.6" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.1 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.4 + globalthis: ^1.0.3 + which-builtin-type: ^1.1.3 + checksum: 88e9e65a7eaa0bf8e9a8bbf8ac07571363bc333ba8b6769ed5e013e0042ed7c385e97fae9049510b3b5fe4b42472d8f32de9ce8ce84902bc4297d4bbe3777dba + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.14.0": + version: 0.14.1 + resolution: "regenerator-runtime@npm:0.14.1" + checksum: 9f57c93277b5585d3c83b0cf76be47b473ae8c6d9142a46ce8b0291a04bb2cf902059f0f8445dcabb3fb7378e5fe4bb4ea1e008876343d42e46d3b484534ce38 languageName: node linkType: hard @@ -9172,24 +8705,15 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.2.0, regexp.prototype.flags@npm:^1.3.1": - version: 1.3.1 - resolution: "regexp.prototype.flags@npm:1.3.1" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - checksum: 343595db5a6bbbb3bfbda881f9c74832cfa9fc0039e64a43843f6bb9158b78b921055266510800ed69d4997638890b17a46d55fd9f32961f53ae56ac3ec4dd05 - languageName: node - linkType: hard - -"regexp.prototype.flags@npm:^1.4.3": - version: 1.4.3 - resolution: "regexp.prototype.flags@npm:1.4.3" +"regexp.prototype.flags@npm:^1.5.1, regexp.prototype.flags@npm:^1.5.2": + version: 1.5.2 + resolution: "regexp.prototype.flags@npm:1.5.2" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - functions-have-names: ^1.2.2 - checksum: 51228bae732592adb3ededd5e15426be25f289e9c4ef15212f4da73f4ec3919b6140806374b8894036a86020d054a8d2657d3fee6bb9b4d35d8939c20030b7a6 + call-bind: ^1.0.6 + define-properties: ^1.2.1 + es-errors: ^1.3.0 + set-function-name: ^2.0.1 + checksum: d7f333667d5c564e2d7a97c56c3075d64c722c9bb51b2b4df6822b2e8096d623a5e63088fb4c83df919b6951ef8113841de8b47de7224872fa6838bc5d8a7d64 languageName: node linkType: hard @@ -9214,16 +8738,16 @@ __metadata: languageName: node linkType: hard -"renderkid@npm:^2.0.6": - version: 2.0.7 - resolution: "renderkid@npm:2.0.7" +"renderkid@npm:^3.0.0": + version: 3.0.0 + resolution: "renderkid@npm:3.0.0" dependencies: css-select: ^4.1.3 dom-converter: ^0.2.0 htmlparser2: ^6.1.0 lodash: ^4.17.21 - strip-ansi: ^3.0.1 - checksum: d3d7562531fb8104154d4aa6aa977707783616318014088378a6c5bbc36318ada9289543d380ede707e531b7f5b96229e87d1b8944f675e5ec3686e62692c7c7 + strip-ansi: ^6.0.1 + checksum: 77162b62d6f33ab81f337c39efce0439ff0d1f6d441e29c35183151f83041c7850774fb904da163d6c844264d440d10557714e6daa0b19e4561a5cd4ef305d41 languageName: node linkType: hard @@ -9285,6 +8809,13 @@ __metadata: languageName: node linkType: hard +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: 1012afc566b3fdb190a6309cc37ef3b2dcc35dff5fa6683a9d00cd25c3247edfbc4691b91078c97adc82a29b77a2660c30d791d65dab4fc78bfc473f60289977 + languageName: node + linkType: hard + "resolve-url@npm:^0.2.1": version: 0.2.1 resolution: "resolve-url@npm:0.2.1" @@ -9292,76 +8823,62 @@ __metadata: languageName: node linkType: hard -"resolve.exports@npm:^1.1.0": - version: 1.1.1 - resolution: "resolve.exports@npm:1.1.1" - checksum: 485aa10082eb388a569d696e17ad7b16f4186efc97dd34eadd029d95b811f21ffee13b1b733198bb4584dbb3cb296aa6f141835221fb7613b9606b84f1386655 - languageName: node - linkType: hard - -resolve@^1.9.0: - version: 1.20.0 - resolution: "resolve@npm:1.20.0" - dependencies: - is-core-module: ^2.2.0 - path-parse: ^1.0.6 - checksum: 40cf70b2cde00ef57f99daf2dc63c6a56d6c14a1b7fc51735d06a6f0a3b97cb67b4fb7ef6c747b4e13a7baba83b0ef625d7c4ce92a483cd5af923c3b65fd16fe - languageName: node - linkType: hard - -resolve@^2.0.0-next.3: - version: 2.0.0-next.3 - resolution: "resolve@npm:2.0.0-next.3" - dependencies: - is-core-module: ^2.2.0 - path-parse: ^1.0.6 - checksum: f34b3b93ada77d64a6d590c06a83e198f3a827624c4ec972260905fa6c4d612164fbf0200d16d2beefea4ad1755b001f4a9a1293d8fc2322a8f7d6bf692c4ff5 +"resolve.exports@npm:^2.0.0": + version: 2.0.2 + resolution: "resolve.exports@npm:2.0.2" + checksum: 1c7778ca1b86a94f8ab4055d196c7d87d1874b96df4d7c3e67bbf793140f0717fd506dcafd62785b079cd6086b9264424ad634fb904409764c3509c3df1653f2 languageName: node linkType: hard -"resolve@npm:^1.20.0, resolve@npm:^1.22.0": - version: 1.22.1 - resolution: "resolve@npm:1.22.1" +"resolve@npm:^1.20.0, resolve@npm:^1.22.4, resolve@npm:^1.9.0": + version: 1.22.8 + resolution: "resolve@npm:1.22.8" dependencies: - is-core-module: ^2.9.0 + is-core-module: ^2.13.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: 07af5fc1e81aa1d866cbc9e9460fbb67318a10fa3c4deadc35c3ad8a898ee9a71a86a65e4755ac3195e0ea0cfbe201eb323ebe655ce90526fd61917313a34e4e + checksum: f8a26958aa572c9b064562750b52131a37c29d072478ea32e129063e2da7f83e31f7f11e7087a18225a8561cfe8d2f0df9dbea7c9d331a897571c0a2527dbb4c languageName: node linkType: hard -"resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin": - version: 1.22.1 - resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" +"resolve@npm:^2.0.0-next.5": + version: 2.0.0-next.5 + resolution: "resolve@npm:2.0.0-next.5" dependencies: - is-core-module: ^2.9.0 + is-core-module: ^2.13.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: 5656f4d0bedcf8eb52685c1abdf8fbe73a1603bb1160a24d716e27a57f6cecbe2432ff9c89c2bd57542c3a7b9d14b1882b73bfe2e9d7849c9a4c0b8b39f02b8b + checksum: a73ac69a1c4bd34c56b213d91f5b17ce390688fdb4a1a96ed3025cc7e08e7bfb90b3a06fcce461780cb0b589c958afcb0080ab802c71c01a7ecc8c64feafc89f languageName: node linkType: hard -"resolve@patch:resolve@^1.9.0#~builtin": - version: 1.20.0 - resolution: "resolve@patch:resolve@npm%3A1.20.0#~builtin::version=1.20.0&hash=07638b" +"resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.4#~builtin, resolve@patch:resolve@^1.9.0#~builtin": + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=07638b" dependencies: - is-core-module: ^2.2.0 - path-parse: ^1.0.6 - checksum: a0dd7d16a8e47af23afa9386df2dff10e3e0debb2c7299a42e581d9d9b04d7ad5d2c53f24f1e043f7b3c250cbdc71150063e53d0b6559683d37f790b7c8c3cd5 + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 5479b7d431cacd5185f8db64bfcb7286ae5e31eb299f4c4f404ad8aa6098b77599563ac4257cb2c37a42f59dfc06a1bec2bcf283bb448f319e37f0feb9a09847 languageName: node linkType: hard -"resolve@patch:resolve@^2.0.0-next.3#~builtin": - version: 2.0.0-next.3 - resolution: "resolve@patch:resolve@npm%3A2.0.0-next.3#~builtin::version=2.0.0-next.3&hash=07638b" +"resolve@patch:resolve@^2.0.0-next.5#~builtin": + version: 2.0.0-next.5 + resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#~builtin::version=2.0.0-next.5&hash=07638b" dependencies: - is-core-module: ^2.2.0 - path-parse: ^1.0.6 - checksum: 21684b4d99a4877337cdbd5484311c811b3e8910edb5d868eec85c6e6550b0f570d911f9a384f9e176172d6713f2715bd0b0887fa512cb8c6aeece018de6a9f8 + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 064d09c1808d0c51b3d90b5d27e198e6d0c5dad0eb57065fd40803d6a20553e5398b07f76739d69cbabc12547058bec6b32106ea66622375fb0d7e8fca6a846c languageName: node linkType: hard @@ -9420,6 +8937,18 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard +"safe-array-concat@npm:^1.1.2": + version: 1.1.2 + resolution: "safe-array-concat@npm:1.1.2" + dependencies: + call-bind: ^1.0.7 + get-intrinsic: ^1.2.4 + has-symbols: ^1.0.3 + isarray: ^2.0.5 + checksum: a3b259694754ddfb73ae0663829e396977b99ff21cbe8607f35a469655656da8e271753497e59da8a7575baa94d2e684bea3e10ddd74ba046c0c9b4418ffa0c4 + languageName: node + linkType: hard + "safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" @@ -9427,21 +8956,21 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 languageName: node linkType: hard -"safe-regex-test@npm:^1.0.0": - version: 1.0.0 - resolution: "safe-regex-test@npm:1.0.0" +"safe-regex-test@npm:^1.0.3": + version: 1.0.3 + resolution: "safe-regex-test@npm:1.0.3" dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.1.3 + call-bind: ^1.0.6 + es-errors: ^1.3.0 is-regex: ^1.1.4 - checksum: bc566d8beb8b43c01b94e67de3f070fd2781685e835959bbbaaec91cc53381145ca91f69bd837ce6ec244817afa0a5e974fc4e40a2957f0aca68ac3add1ddd34 + checksum: 6c7d392ff1ae7a3ae85273450ed02d1d131f1d2c76e177d6b03eb88e6df8fa062639070e7d311802c1615f351f18dc58f9454501c58e28d5ffd9b8f502ba6489 languageName: node linkType: hard @@ -9498,34 +9027,35 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"scheduler@npm:^0.23.0": - version: 0.23.0 - resolution: "scheduler@npm:0.23.0" +"scheduler@npm:^0.23.2": + version: 0.23.2 + resolution: "scheduler@npm:0.23.2" dependencies: loose-envify: ^1.1.0 - checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a + checksum: 3e82d1f419e240ef6219d794ff29c7ee415fbdc19e038f680a10c067108e06284f1847450a210b29bbaf97b9d8a97ced5f624c31c681248ac84c80d56ad5a2c4 languageName: node linkType: hard -"schema-utils@npm:^3.1.0, schema-utils@npm:^3.1.1": - version: 3.1.1 - resolution: "schema-utils@npm:3.1.1" +"schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": + version: 3.3.0 + resolution: "schema-utils@npm:3.3.0" dependencies: "@types/json-schema": ^7.0.8 ajv: ^6.12.5 ajv-keywords: ^3.5.2 - checksum: fb73f3d759d43ba033c877628fe9751620a26879f6301d3dbeeb48cf2a65baec5cdf99da65d1bf3b4ff5444b2e59cbe4f81c2456b5e0d2ba7d7fd4aed5da29ce + checksum: ea56971926fac2487f0757da939a871388891bc87c6a82220d125d587b388f1704788f3706e7f63a7b70e49fc2db974c41343528caea60444afd5ce0fe4b85c0 languageName: node linkType: hard -"schema-utils@npm:^3.2.0": - version: 3.3.0 - resolution: "schema-utils@npm:3.3.0" +"schema-utils@npm:^4.0.0": + version: 4.2.0 + resolution: "schema-utils@npm:4.2.0" dependencies: - "@types/json-schema": ^7.0.8 - ajv: ^6.12.5 - ajv-keywords: ^3.5.2 - checksum: ea56971926fac2487f0757da939a871388891bc87c6a82220d125d587b388f1704788f3706e7f63a7b70e49fc2db974c41343528caea60444afd5ce0fe4b85c0 + "@types/json-schema": ^7.0.9 + ajv: ^8.9.0 + ajv-formats: ^2.1.1 + ajv-keywords: ^5.1.0 + checksum: 26a0463d47683258106e6652e9aeb0823bf0b85843039e068b57da1892f7ae6b6b1094d48e9ed5ba5cbe9f7166469d880858b9d91abe8bd249421eb813850cde languageName: node linkType: hard @@ -9543,73 +9073,61 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"selfsigned@npm:^1.10.11": - version: 1.10.11 - resolution: "selfsigned@npm:1.10.11" +"selfsigned@npm:^2.1.1": + version: 2.4.1 + resolution: "selfsigned@npm:2.4.1" dependencies: - node-forge: ^0.10.0 - checksum: 1fd8fd317dc0b7d713d12d828131ac03c53abf41c4538b263fecd37bbc15688526c631654049ff00806b757ccb85492de6a13d6fefcad5cb54926631e48a76e1 + "@types/node-forge": ^1.3.0 + node-forge: ^1 + checksum: 38b91c56f1d7949c0b77f9bbe4545b19518475cae15e7d7f0043f87b1626710b011ce89879a88969651f650a19d213bb15b7d5b4c2877df9eeeff7ba8f8b9bfa languageName: node linkType: hard "semver@npm:^5.5.0": - version: 5.7.1 - resolution: "semver@npm:5.7.1" - bin: - semver: ./bin/semver - checksum: 57fd0acfd0bac382ee87cd52cd0aaa5af086a7dc8d60379dfe65fea491fb2489b6016400813930ecd61fd0952dae75c115287a1b16c234b1550887117744dfaf - languageName: node - linkType: hard - -"semver@npm:^6.0.0, semver@npm:^6.3.0": - version: 6.3.0 - resolution: "semver@npm:6.3.0" + version: 5.7.2 + resolution: "semver@npm:5.7.2" bin: - semver: ./bin/semver.js - checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9 + semver: bin/semver + checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 languageName: node linkType: hard -"semver@npm:^7.2.1, semver@npm:^7.3.4, semver@npm:^7.3.5": - version: 7.3.5 - resolution: "semver@npm:7.3.5" - dependencies: - lru-cache: ^6.0.0 +"semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" bin: semver: bin/semver.js - checksum: 5eafe6102bea2a7439897c1856362e31cc348ccf96efd455c8b5bc2c61e6f7e7b8250dc26b8828c1d76a56f818a7ee907a36ae9fb37a599d3d24609207001d60 + checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 languageName: node linkType: hard -"semver@npm:^7.3.7": - version: 7.3.8 - resolution: "semver@npm:7.3.8" - dependencies: - lru-cache: ^6.0.0 +"semver@npm:^7.2.1, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3, semver@npm:^7.5.4": + version: 7.6.3 + resolution: "semver@npm:7.6.3" bin: semver: bin/semver.js - checksum: ba9c7cbbf2b7884696523450a61fee1a09930d888b7a8d7579025ad93d459b2d1949ee5bbfeb188b2be5f4ac163544c5e98491ad6152df34154feebc2cc337c1 + checksum: 4110ec5d015c9438f322257b1c51fe30276e5f766a3f64c09edd1d7ea7118ecbc3f379f3b69032bacf13116dc7abc4ad8ce0d7e2bd642e26b0d271b56b61a7d8 languageName: node linkType: hard -"send@npm:0.17.1": - version: 0.17.1 - resolution: "send@npm:0.17.1" +"send@npm:0.18.0": + version: 0.18.0 + resolution: "send@npm:0.18.0" dependencies: debug: 2.6.9 - depd: ~1.1.2 - destroy: ~1.0.4 + depd: 2.0.0 + destroy: 1.2.0 encodeurl: ~1.0.2 escape-html: ~1.0.3 etag: ~1.8.1 fresh: 0.5.2 - http-errors: ~1.7.2 + http-errors: 2.0.0 mime: 1.6.0 - ms: 2.1.1 - on-finished: ~2.3.0 + ms: 2.1.3 + on-finished: 2.4.1 range-parser: ~1.2.1 - statuses: ~1.5.0 - checksum: d214c2fa42e7fae3f8fc1aa3931eeb3e6b78c2cf141574e09dbe159915c1e3a337269fc6b7512e7dfddcd7d6ff5974cb62f7c3637ba86a55bde20a92c18bdca0 + statuses: 2.0.1 + checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8 languageName: node linkType: hard @@ -9637,22 +9155,41 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"serve-static@npm:1.14.1": - version: 1.14.1 - resolution: "serve-static@npm:1.14.1" +"serve-static@npm:1.15.0": + version: 1.15.0 + resolution: "serve-static@npm:1.15.0" dependencies: encodeurl: ~1.0.2 escape-html: ~1.0.3 parseurl: ~1.3.3 - send: 0.17.1 - checksum: c6b268e8486d39ecd54b86c7f2d0ee4a38cd7514ddd9c92c8d5793bb005afde5e908b12395898ae206782306ccc848193d93daa15b86afb3cbe5a8414806abe8 + send: 0.18.0 + checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d languageName: node linkType: hard -"set-blocking@npm:~2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 +"set-function-length@npm:^1.2.1": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: ^1.1.4 + es-errors: ^1.3.0 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.2 + checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72 + languageName: node + linkType: hard + +"set-function-name@npm:^2.0.1, set-function-name@npm:^2.0.2": + version: 2.0.2 + resolution: "set-function-name@npm:2.0.2" + dependencies: + define-data-property: ^1.1.4 + es-errors: ^1.3.0 + functions-have-names: ^1.2.3 + has-property-descriptors: ^1.0.2 + checksum: d6229a71527fd0404399fc6227e0ff0652800362510822a291925c9d7b48a1ca1a468b11b281471c34cd5a2da0db4f5d7ff315a61d26655e77f6e971e6d0c80f languageName: node linkType: hard @@ -9675,10 +9212,10 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"setprototypeof@npm:1.1.1": - version: 1.1.1 - resolution: "setprototypeof@npm:1.1.1" - checksum: a8bee29c1c64c245d460ce53f7460af8cbd0aceac68d66e5215153992cc8b3a7a123416353e0c642060e85cc5fd4241c92d1190eec97eda0dcb97436e8fcca3b +"setprototypeof@npm:1.2.0": + version: 1.2.0 + resolution: "setprototypeof@npm:1.2.0" + checksum: be18cbbf70e7d8097c97f713a2e76edf84e87299b40d085c6bf8b65314e994cc15e2e317727342fa6996e38e1f52c59720b53fe621e2eb593a6847bf0356db89 languageName: node linkType: hard @@ -9723,31 +9260,39 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"side-channel@npm:^1.0.4": - version: 1.0.4 - resolution: "side-channel@npm:1.0.4" - dependencies: - call-bind: ^1.0.0 - get-intrinsic: ^1.0.2 - object-inspect: ^1.9.0 - checksum: 351e41b947079c10bd0858364f32bb3a7379514c399edb64ab3dce683933483fc63fb5e4efe0a15a2e8a7e3c436b6a91736ddb8d8c6591b0460a24bb4a1ee245 +"shell-quote@npm:^1.8.1": + version: 1.8.1 + resolution: "shell-quote@npm:1.8.1" + checksum: 5f01201f4ef504d4c6a9d0d283fa17075f6770bfbe4c5850b074974c68062f37929ca61700d95ad2ac8822e14e8c4b990ca0e6e9272e64befd74ce5e19f0736b languageName: node linkType: hard -"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": - version: 3.0.5 - resolution: "signal-exit@npm:3.0.5" - checksum: a1d3d0d63f581bd298b30ed8f6de21b73a0fe5a0c0f123b2e8ed7168bbff8f4c1a45e681de12a1966a89bb725d8eb727816be1c436e136951f31953e4a201587 +"side-channel@npm:^1.0.4, side-channel@npm:^1.0.6": + version: 1.0.6 + resolution: "side-channel@npm:1.0.6" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.4 + object-inspect: ^1.13.1 + checksum: bfc1afc1827d712271453e91b7cd3878ac0efd767495fd4e594c4c2afaa7963b7b510e249572bfd54b0527e66e4a12b61b80c061389e129755f34c493aad9b97 languageName: node linkType: hard -"signal-exit@npm:^3.0.7": +"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 languageName: node linkType: hard +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 + languageName: node + linkType: hard + "sisteransi@npm:^1.0.5": version: 1.0.5 resolution: "sisteransi@npm:1.0.5" @@ -9762,13 +9307,6 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"slash@npm:^4.0.0": - version: 4.0.0 - resolution: "slash@npm:4.0.0" - checksum: da8e4af73712253acd21b7853b7e0dbba776b786e82b010a5bfc8b5051a1db38ed8aba8e1e8f400dd2c9f373be91eb1c42b66e91abb407ff42b10feece5e1d2d - languageName: node - linkType: hard - "slice-ansi@npm:^4.0.0": version: 4.0.0 resolution: "slice-ansi@npm:4.0.0" @@ -9780,7 +9318,7 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"smart-buffer@npm:^4.1.0": +"smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b @@ -9823,35 +9361,35 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"sockjs@npm:^0.3.21": - version: 0.3.21 - resolution: "sockjs@npm:0.3.21" +"sockjs@npm:^0.3.24": + version: 0.3.24 + resolution: "sockjs@npm:0.3.24" dependencies: faye-websocket: ^0.11.3 - uuid: ^3.4.0 + uuid: ^8.3.2 websocket-driver: ^0.7.4 - checksum: 9614e5dded95d38c08c42bba3505638801d0e88d9fec03dc1ae37296286ad5c31dff503b8c81a11e573bd0bea76b295db93d4f00cc336e749bc89f9f7cc7e6c9 + checksum: 355309b48d2c4e9755349daa29cea1c0d9ee23e49b983841c6bf7a20276b00d3c02343f9f33f26d2ee8b261a5a02961b52a25c8da88b2538c5b68d3071b4934c languageName: node linkType: hard -"socks-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "socks-proxy-agent@npm:5.0.1" +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.4 + resolution: "socks-proxy-agent@npm:8.0.4" dependencies: - agent-base: ^6.0.2 - debug: 4 - socks: ^2.3.3 - checksum: 1b60c4977b2fef783f0fc4dc619cd2758aafdb43f3cf679f1e3627cb6c6e752811cee5513ebb4157ad26786033d2f85029440f197d321e8293b38cc5aab01e06 + agent-base: ^7.1.1 + debug: ^4.3.4 + socks: ^2.8.3 + checksum: b2ec5051d85fe49072f9a250c427e0e9571fd09d5db133819192d078fd291276e1f0f50f6dbc04329b207738b1071314cee8bdbb4b12e27de42dbcf1d4233c67 languageName: node linkType: hard -"socks@npm:^2.3.3": - version: 2.6.1 - resolution: "socks@npm:2.6.1" +"socks@npm:^2.8.3": + version: 2.8.3 + resolution: "socks@npm:2.8.3" dependencies: - ip: ^1.1.5 - smart-buffer: ^4.1.0 - checksum: 2ca9d616e424f645838ebaabb04f85d94ea999e0f8393dc07f86c435af22ed88cb83958feeabd1bb7bc537c635ed47454255635502c6808a6df61af1f41af750 + ip-address: ^9.0.5 + smart-buffer: ^4.2.0 + checksum: 7a6b7f6eedf7482b9e4597d9a20e09505824208006ea8f2c49b71657427f3c137ca2ae662089baa73e1971c62322d535d9d0cf1c9235cf6f55e315c18203eadd languageName: node linkType: hard @@ -9879,12 +9417,12 @@ resolve@^2.0.0-next.3: linkType: hard "source-map-support@npm:~0.5.20": - version: 0.5.20 - resolution: "source-map-support@npm:0.5.20" + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" dependencies: buffer-from: ^1.0.0 source-map: ^0.6.0 - checksum: 43946aff452011960d16154304b11011e0185549493e65dd90da045959409fb2d266ba1c854fff3d5949f8e59382e3fcc7f7c5fa66136007a6750ad06c6c0baa + checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 languageName: node linkType: hard @@ -9909,10 +9447,10 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"source-map@npm:~0.7.2": - version: 0.7.3 - resolution: "source-map@npm:0.7.3" - checksum: cd24efb3b8fa69b64bf28e3c1b1a500de77e84260c5b7f2b873f88284df17974157cc88d386ee9b6d081f08fdd8242f3fc05c953685a6ad81aad94c7393dedea +"source-map@npm:^0.7.4": + version: 0.7.4 + resolution: "source-map@npm:0.7.4" + checksum: 01cc5a74b1f0e1d626a58d36ad6898ea820567e87f18dfc9d24a9843a351aaa2ec09b87422589906d6ff1deed29693e176194dc88bcae7c9a852dc74b311dbf5 languageName: node linkType: hard @@ -9952,6 +9490,13 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: a3fdac7b49643875b70864a9d9b469d87a40dfeaf5d34d9d0c5b1cda5fd7d065531fcb43c76357d62254c57184a7b151954156563a4d6a747015cfb41021cad0 + languageName: node + linkType: hard + "sprintf-js@npm:~1.0.2": version: 1.0.3 resolution: "sprintf-js@npm:1.0.3" @@ -9959,12 +9504,12 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"ssri@npm:^8.0.0, ssri@npm:^8.0.1": - version: 8.0.1 - resolution: "ssri@npm:8.0.1" +"ssri@npm:^10.0.0": + version: 10.0.6 + resolution: "ssri@npm:10.0.6" dependencies: - minipass: ^3.1.1 - checksum: bc447f5af814fa9713aa201ec2522208ae0f4d8f3bda7a1f445a797c7b929a02720436ff7c478fb5edc4045adb02b1b88d2341b436a80798734e2494f1067b36 + minipass: ^7.0.3 + checksum: 4603d53a05bcd44188747d38f1cc43833b9951b5a1ee43ba50535bdfc5fe4a0897472dbe69837570a5417c3c073377ef4f8c1a272683b401857f72738ee57299 languageName: node linkType: hard @@ -9987,13 +9532,29 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"statuses@npm:>= 1.4.0 < 2, statuses@npm:>= 1.5.0 < 2, statuses@npm:~1.5.0": +"statuses@npm:2.0.1": + version: 2.0.1 + resolution: "statuses@npm:2.0.1" + checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb + languageName: node + linkType: hard + +"statuses@npm:>= 1.4.0 < 2": version: 1.5.0 resolution: "statuses@npm:1.5.0" checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c languageName: node linkType: hard +"stop-iteration-iterator@npm:^1.0.0": + version: 1.0.0 + resolution: "stop-iteration-iterator@npm:1.0.0" + dependencies: + internal-slot: ^1.0.4 + checksum: d04173690b2efa40e24ab70e5e51a3ff31d56d699550cfad084104ab3381390daccb36652b25755e420245f3b0737de66c1879eaa2a8d4fc0a78f9bf892fcb42 + languageName: node + linkType: hard + "string-length@npm:^4.0.1": version: 4.0.2 resolution: "string-length@npm:4.0.2" @@ -10004,28 +9565,7 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"string-width@npm:^1.0.1": - version: 1.0.2 - resolution: "string-width@npm:1.0.2" - dependencies: - code-point-at: ^1.0.0 - is-fullwidth-code-point: ^1.0.0 - strip-ansi: ^3.0.0 - checksum: 5c79439e95bc3bd7233a332c5f5926ab2ee90b23816ed4faa380ce3b2576d7800b0a5bb15ae88ed28737acc7ea06a518c2eef39142dd727adad0e45c776cd37e - languageName: node - linkType: hard - -"string-width@npm:^1.0.2 || 2": - version: 2.1.1 - resolution: "string-width@npm:2.1.1" - dependencies: - is-fullwidth-code-point: ^2.0.0 - strip-ansi: ^4.0.0 - checksum: d6173abe088c615c8dffaf3861dc5d5906ed3dc2d6fd67ff2bd2e2b5dce7fd683c5240699cf0b1b8aa679a3b3bd6b28b5053c824cb89b813d7f6541d8f89064a - languageName: node - linkType: hard - -"string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -10036,61 +9576,78 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.5": - version: 4.0.6 - resolution: "string.prototype.matchall@npm:4.0.6" +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - get-intrinsic: ^1.1.1 - has-symbols: ^1.0.2 - internal-slot: ^1.0.3 - regexp.prototype.flags: ^1.3.1 - side-channel: ^1.0.4 - checksum: 07aca53ddd8a096a8bd0560eb8574386c6b3887a6a06b40a98abd42c94dadeed3296261fca22fec59a1ed970d199bdeb450fcb6a7390193588d9c6b5f48fe842 + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 languageName: node linkType: hard -"string.prototype.trimend@npm:^1.0.4": - version: 1.0.4 - resolution: "string.prototype.trimend@npm:1.0.4" +"string.prototype.matchall@npm:^4.0.11": + version: 4.0.11 + resolution: "string.prototype.matchall@npm:4.0.11" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + get-intrinsic: ^1.2.4 + gopd: ^1.0.1 + has-symbols: ^1.0.3 + internal-slot: ^1.0.7 + regexp.prototype.flags: ^1.5.2 + set-function-name: ^2.0.2 + side-channel: ^1.0.6 + checksum: 6ac6566ed065c0c8489c91156078ca077db8ff64d683fda97ae652d00c52dfa5f39aaab0a710d8243031a857fd2c7c511e38b45524796764d25472d10d7075ae + languageName: node + linkType: hard + +"string.prototype.repeat@npm:^1.0.0": + version: 1.0.0 + resolution: "string.prototype.repeat@npm:1.0.0" dependencies: - call-bind: ^1.0.2 define-properties: ^1.1.3 - checksum: 17e5aa45c3983f582693161f972c1c1fa4bbbdf22e70e582b00c91b6575f01680dc34e83005b98e31abe4d5d29e0b21fcc24690239c106c7b2315aade6a898ac + es-abstract: ^1.17.5 + checksum: 95dfc514ed7f328d80a066dabbfbbb1615c3e51490351085409db2eb7cbfed7ea29fdadaf277647fbf9f4a1e10e6dd9e95e78c0fd2c4e6bb6723ea6e59401004 languageName: node linkType: hard -"string.prototype.trimend@npm:^1.0.5": - version: 1.0.6 - resolution: "string.prototype.trimend@npm:1.0.6" +"string.prototype.trim@npm:^1.2.9": + version: 1.2.9 + resolution: "string.prototype.trim@npm:1.2.9" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 0fdc34645a639bd35179b5a08227a353b88dc089adf438f46be8a7c197fc3f22f8514c1c9be4629b3cd29c281582730a8cbbad6466c60f76b5f99cf2addb132e + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.0 + es-object-atoms: ^1.0.0 + checksum: ea2df6ec1e914c9d4e2dc856fa08228e8b1be59b59e50b17578c94a66a176888f417264bb763d4aac638ad3b3dad56e7a03d9317086a178078d131aa293ba193 languageName: node linkType: hard -"string.prototype.trimstart@npm:^1.0.4": - version: 1.0.4 - resolution: "string.prototype.trimstart@npm:1.0.4" +"string.prototype.trimend@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimend@npm:1.0.8" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - checksum: 3fb06818d3cccac5fa3f5f9873d984794ca0e9f6616fae6fcc745885d9efed4e17fe15f832515d9af5e16c279857fdbffdfc489ca4ed577811b017721b30302f + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: cc3bd2de08d8968a28787deba9a3cb3f17ca5f9f770c91e7e8fa3e7d47f079bad70fadce16f05dda9f261788be2c6e84a942f618c3bed31e42abc5c1084f8dfd languageName: node linkType: hard -"string.prototype.trimstart@npm:^1.0.5": - version: 1.0.6 - resolution: "string.prototype.trimstart@npm:1.0.6" +"string.prototype.trimstart@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 89080feef416621e6ef1279588994305477a7a91648d9436490d56010a1f7adc39167cddac7ce0b9884b8cdbef086987c4dcb2960209f2af8bac0d23ceff4f41 + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: df1007a7f580a49d692375d996521dc14fd103acda7f3034b3c558a60b82beeed3a64fa91e494e164581793a8ab0ae2f59578a49896a7af6583c1f20472bce96 languageName: node linkType: hard @@ -10112,25 +9669,7 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": - version: 3.0.1 - resolution: "strip-ansi@npm:3.0.1" - dependencies: - ansi-regex: ^2.0.0 - checksum: 9b974de611ce5075c70629c00fa98c46144043db92ae17748fb780f706f7a789e9989fd10597b7c2053ae8d1513fd707816a91f1879b2f71e6ac0b6a863db465 - languageName: node - linkType: hard - -"strip-ansi@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-ansi@npm:4.0.0" - dependencies: - ansi-regex: ^3.0.0 - checksum: d9186e6c0cf78f25274f6750ee5e4a5725fb91b70fdd79aa5fe648eab092a0ec5b9621b22d69d4534a56319f75d8944efbd84e3afa8d4ad1b9a9491f12c84eca - languageName: node - linkType: hard - -"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" dependencies: @@ -10139,12 +9678,12 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"strip-ansi@npm:^7.0.0": - version: 7.0.1 - resolution: "strip-ansi@npm:7.0.1" +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" dependencies: ansi-regex: ^6.0.1 - checksum: 257f78fa433520e7f9897722731d78599cb3fce29ff26a20a5e12ba4957463b50a01136f37c43707f4951817a75e90820174853d6ccc240997adc5df8f966039 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d languageName: node linkType: hard @@ -10233,27 +9772,16 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"synckit@npm:^0.8.4": - version: 0.8.4 - resolution: "synckit@npm:0.8.4" - dependencies: - "@pkgr/utils": ^2.3.1 - tslib: ^2.4.0 - checksum: 83e054fe4494dab42114fc4ed36a11b85e18742d304ade3f40d3afb4ba4145d76183adba1f29e2c36e9a0a453b93a83e2387505f96a0efd901f562927a968c44 - languageName: node - linkType: hard - "table@npm:^6.0.9": - version: 6.7.2 - resolution: "table@npm:6.7.2" + version: 6.8.2 + resolution: "table@npm:6.8.2" dependencies: ajv: ^8.0.1 - lodash.clonedeep: ^4.5.0 lodash.truncate: ^4.4.2 slice-ansi: ^4.0.0 string-width: ^4.2.3 strip-ansi: ^6.0.1 - checksum: d61f91d64b9be56ac66edd2a8c0f10fcc59995313f37198cb87de73a6b441a05ad36f4a567bd8736da35bc4a2f8f4049b0e4ff1d4356c0a7c2b91af48b8bf8b2 + checksum: 61188652f53a980d1759ca460ca8dea5c5322aece3210457e7084882f053c2b6a870041295e08a82cb1d676e31b056406845d94b0abf3c79a4b104777bec413b languageName: node linkType: hard @@ -10289,17 +9817,17 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"tar@npm:^6.0.2, tar@npm:^6.1.2": - version: 6.1.11 - resolution: "tar@npm:6.1.11" +"tar@npm:^6.1.11, tar@npm:^6.2.1": + version: 6.2.1 + resolution: "tar@npm:6.2.1" dependencies: chownr: ^2.0.0 fs-minipass: ^2.0.0 - minipass: ^3.0.0 + minipass: ^5.0.0 minizlib: ^2.1.1 mkdirp: ^1.0.3 yallist: ^4.0.0 - checksum: a04c07bb9e2d8f46776517d4618f2406fb977a74d914ad98b264fc3db0fe8224da5bec11e5f8902c5b9bcb8ace22d95fbe3c7b36b8593b7dfc8391a25898f32f + checksum: f1322768c9741a25356c11373bce918483f40fa9a25c69c59410c8a1247632487edef5fe76c5f12ac51a6356d2f1829e96d2bc34098668a2fc34d76050ac2b6c languageName: node linkType: hard @@ -10325,9 +9853,9 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"terser@npm:^5.26.0": - version: 5.31.5 - resolution: "terser@npm:5.31.5" +"terser@npm:^5.10.0, terser@npm:^5.26.0": + version: 5.31.6 + resolution: "terser@npm:5.31.6" dependencies: "@jridgewell/source-map": ^0.3.3 acorn: ^8.8.2 @@ -10335,20 +9863,7 @@ resolve@^2.0.0-next.3: source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: edd2de6569116f637bb2e154c913e6ea434cadd6bcf5df41cf62000e3c69ec41f95be66fe639b57b95564545c9f7c0fcb28ca63351424a08e244a8b49ed12ac3 - languageName: node - linkType: hard - -"terser@npm:^5.7.2": - version: 5.9.0 - resolution: "terser@npm:5.9.0" - dependencies: - commander: ^2.20.0 - source-map: ~0.7.2 - source-map-support: ~0.5.20 - bin: - terser: bin/terser - checksum: 11c1246b1991015a8881742878af779e3863fad42f626ffda957dbf28c94bf51e7994cffb9ffbec86ff3c23ab45ffa6d79d453c15e664306e35fc7b2c4eee5f4 + checksum: 60d3faf39c9ad7acc891e17888bbd206e0b777f442649cf49873a5fa317b8b8a17179a46970d884d5f93e8addde0206193ed1e2e4f1ccb1cafb167f7d1ddee96 languageName: node linkType: hard @@ -10384,17 +9899,7 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"tiny-glob@npm:^0.2.9": - version: 0.2.9 - resolution: "tiny-glob@npm:0.2.9" - dependencies: - globalyzer: 0.1.0 - globrex: ^0.1.2 - checksum: aea5801eb6663ddf77ebb74900b8f8bd9dfcfc9b6a1cc8018cb7421590c00bf446109ff45e4b64a98e6c95ddb1255a337a5d488fb6311930e2a95334151ec9c6 - languageName: node - linkType: hard - -"tmpl@npm:1.0.5, tmpl@npm:1.0.x": +"tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 @@ -10448,22 +9953,22 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"toidentifier@npm:1.0.0": - version: 1.0.0 - resolution: "toidentifier@npm:1.0.0" - checksum: 199e6bfca1531d49b3506cff02353d53ec987c9ee10ee272ca6484ed97f1fc10fb77c6c009079ca16d5c5be4a10378178c3cacdb41ce9ec954c3297c74c6053e +"toidentifier@npm:1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45 languageName: node linkType: hard "tough-cookie@npm:^4.1.2": - version: 4.1.2 - resolution: "tough-cookie@npm:4.1.2" + version: 4.1.4 + resolution: "tough-cookie@npm:4.1.4" dependencies: psl: ^1.1.33 punycode: ^2.1.1 universalify: ^0.2.0 url-parse: ^1.5.3 - checksum: a7359e9a3e875121a84d6ba40cc184dec5784af84f67f3a56d1d2ae39b87c0e004e6ba7c7331f9622a7d2c88609032473488b28fe9f59a1fec115674589de39a + checksum: 5815059f014c31179a303c673f753f7899a6fce94ac93712c88ea5f3c26e0c042b5f0c7a599a00f8e0feeca4615dba75c3dffc54f3c1a489978aa8205e09307c languageName: node linkType: hard @@ -10477,61 +9982,24 @@ resolve@^2.0.0-next.3: linkType: hard "ts-loader@npm:^9.2.5": - version: 9.2.6 - resolution: "ts-loader@npm:9.2.6" + version: 9.5.1 + resolution: "ts-loader@npm:9.5.1" dependencies: chalk: ^4.1.0 enhanced-resolve: ^5.0.0 micromatch: ^4.0.0 semver: ^7.3.4 + source-map: ^0.7.4 peerDependencies: typescript: "*" webpack: ^5.0.0 - checksum: 309d8fb6348c0c3a7166d42c1238c585ede00f816155b24217dbca489406a72409395d7954bc5801ddb9ca71c71e7e0b2375dbc342337e0ab1a461944598a7fe - languageName: node - linkType: hard - -"ts-node@npm:^10.3.1": - version: 10.8.1 - resolution: "ts-node@npm:10.8.1" - dependencies: - "@cspotcode/source-map-support": ^0.8.0 - "@tsconfig/node10": ^1.0.7 - "@tsconfig/node12": ^1.0.7 - "@tsconfig/node14": ^1.0.0 - "@tsconfig/node16": ^1.0.2 - acorn: ^8.4.1 - acorn-walk: ^8.1.1 - arg: ^4.1.0 - create-require: ^1.1.0 - diff: ^4.0.1 - make-error: ^1.1.1 - v8-compile-cache-lib: ^3.0.1 - yn: 3.1.1 - peerDependencies: - "@swc/core": ">=1.2.50" - "@swc/wasm": ">=1.2.50" - "@types/node": "*" - typescript: ">=2.7" - peerDependenciesMeta: - "@swc/core": - optional: true - "@swc/wasm": - optional: true - bin: - ts-node: dist/bin.js - ts-node-cwd: dist/bin-cwd.js - ts-node-esm: dist/bin-esm.js - ts-node-script: dist/bin-script.js - ts-node-transpile-only: dist/bin-transpile.js - ts-script: dist/bin-script-deprecated.js - checksum: 7d1aa7aa3ae1c0459c4922ed0dbfbade442cfe0c25aebaf620cdf1774f112c8d7a9b14934cb6719274917f35b2c503ba87bcaf5e16a0d39ba0f68ce3e7728363 + checksum: 7cf396e656d905388ea2a9b5e82f16d3c955fda8d3df2fbf219f4bee16ff50a3c995c44ae3e584634e9443f056cec70bb3151add3917ffb4588ecd7394bac0ec languageName: node linkType: hard -"ts-node@npm:^10.9.1": - version: 10.9.1 - resolution: "ts-node@npm:10.9.1" +"ts-node@npm:^10.3.1, ts-node@npm:^10.9.1": + version: 10.9.2 + resolution: "ts-node@npm:10.9.2" dependencies: "@cspotcode/source-map-support": ^0.8.0 "@tsconfig/node10": ^1.0.7 @@ -10563,26 +10031,26 @@ resolve@^2.0.0-next.3: ts-node-script: dist/bin-script.js ts-node-transpile-only: dist/bin-transpile.js ts-script: dist/bin-script-deprecated.js - checksum: 090adff1302ab20bd3486e6b4799e90f97726ed39e02b39e566f8ab674fd5bd5f727f43615debbfc580d33c6d9d1c6b1b3ce7d8e3cca3e20530a145ffa232c35 + checksum: fde256c9073969e234526e2cfead42591b9a2aec5222bac154b0de2fa9e4ceb30efcd717ee8bc785a56f3a119bdd5aa27b333d9dbec94ed254bd26f8944c67ac languageName: node linkType: hard -"ts-toolbelt@npm:^6.15.1": - version: 6.15.5 - resolution: "ts-toolbelt@npm:6.15.5" - checksum: 24ad00cfd9ce735c76c873a9b1347eac475b94e39ebbdf100c9019dce88dd5f4babed52884cf82bb456a38c28edd0099ab6f704b84b2e5e034852b618472c1f3 +"ts-toolbelt@npm:^9.6.0": + version: 9.6.0 + resolution: "ts-toolbelt@npm:9.6.0" + checksum: 9f35fd95d895a5d32ea9fd2e532a695b0bae6cbff6832b77292efa188a0ed1ed6e54f63f74a8920390f3d909a7a3adb20a144686372a8e78b420246a9bd3d58a languageName: node linkType: hard -"tsconfig-paths@npm:^3.14.1": - version: 3.14.1 - resolution: "tsconfig-paths@npm:3.14.1" +"tsconfig-paths@npm:^3.15.0": + version: 3.15.0 + resolution: "tsconfig-paths@npm:3.15.0" dependencies: "@types/json5": ^0.0.29 - json5: ^1.0.1 + json5: ^1.0.2 minimist: ^1.2.6 strip-bom: ^3.0.0 - checksum: 8afa01c673ebb4782ba53d3a12df97fa837ce524f8ad38ee4e2b2fd57f5ac79abc21c574e9e9eb014d93efe7fe8214001b96233b5c6ea75bd1ea82afe17a4c6d + checksum: 59f35407a390d9482b320451f52a411a256a130ff0e7543d18c6f20afab29ac19fbe55c360a93d6476213cc335a4d76ce90f67df54c4e9037f7d240920832201 languageName: node linkType: hard @@ -10594,16 +10062,9 @@ resolve@^2.0.0-next.3: linkType: hard "tslib@npm:^2.0.3": - version: 2.3.1 - resolution: "tslib@npm:2.3.1" - checksum: de17a98d4614481f7fcb5cd53ffc1aaf8654313be0291e1bfaee4b4bb31a20494b7d218ff2e15017883e8ea9626599b3b0e0229c18383ba9dce89da2adf15cb9 - languageName: node - linkType: hard - -"tslib@npm:^2.4.0": - version: 2.4.1 - resolution: "tslib@npm:2.4.1" - checksum: 19480d6e0313292bd6505d4efe096a6b31c70e21cf08b5febf4da62e95c265c8f571f7b36fcc3d1a17e068032f59c269fab3459d6cd3ed6949eafecf64315fca + version: 2.6.3 + resolution: "tslib@npm:2.6.3" + checksum: 74fce0e100f1ebd95b8995fbbd0e6c91bdd8f4c35c00d4da62e285a3363aaa534de40a80db30ecfd388ed7c313c42d930ee0eaf108e8114214b180eec3dbe6f5 languageName: node linkType: hard @@ -10627,15 +10088,6 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"type-check@npm:~0.3.2": - version: 0.3.2 - resolution: "type-check@npm:0.3.2" - dependencies: - prelude-ls: ~1.1.2 - checksum: dd3b1495642731bc0e1fc40abe5e977e0263005551ac83342ecb6f4f89551d106b368ec32ad3fb2da19b3bd7b2d1f64330da2ea9176d8ddbfe389fb286eb5124 - languageName: node - linkType: hard - "type-detect@npm:4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" @@ -10657,7 +10109,7 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"type-is@npm:~1.6.17, type-is@npm:~1.6.18": +"type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" dependencies: @@ -10667,6 +10119,58 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard +"typed-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-buffer@npm:1.0.2" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + is-typed-array: ^1.1.13 + checksum: 02ffc185d29c6df07968272b15d5319a1610817916ec8d4cd670ded5d1efe72901541ff2202fcc622730d8a549c76e198a2f74e312eabbfb712ed907d45cbb0b + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "typed-array-byte-length@npm:1.0.1" + 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 + checksum: f65e5ecd1cf76b1a2d0d6f631f3ea3cdb5e08da106c6703ffe687d583e49954d570cc80434816d3746e18be889ffe53c58bf3e538081ea4077c26a41055b216d + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-byte-offset@npm:1.0.2" + dependencies: + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + checksum: c8645c8794a621a0adcc142e0e2c57b1823bbfa4d590ad2c76b266aa3823895cf7afb9a893bf6685e18454ab1b0241e1a8d885a2d1340948efa4b56add4b5f67 + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.6": + version: 1.0.6 + resolution: "typed-array-length@npm:1.0.6" + 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 + checksum: f0315e5b8f0168c29d390ff410ad13e4d511c78e6006df4a104576844812ee447fcc32daab1f3a76c9ef4f64eff808e134528b5b2439de335586b392e9750e5c + languageName: node + linkType: hard + "typedarray-to-buffer@npm:^3.1.5": version: 3.1.5 resolution: "typedarray-to-buffer@npm:3.1.5" @@ -10676,35 +10180,32 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -typescript@^4.8.2: - version: 4.8.3 - resolution: "typescript@npm:4.8.3" +"types-ramda@npm:^0.30.1": + version: 0.30.1 + resolution: "types-ramda@npm:0.30.1" + dependencies: + ts-toolbelt: ^9.6.0 + checksum: 7af1b5b6dbb5878e5104013f7eca7feff999b538d98d59c91ce82e69908b31223b44a163271b0c13c9828c27f6cff39f78cff0f83d82b73ac47f74ffb3fe7ded + languageName: node + linkType: hard + +"typescript@npm:^4.8.2": + version: 4.9.5 + resolution: "typescript@npm:4.9.5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 8286a5edcaf3d68e65c451aa1e7150ad1cf53ee0813c07ec35b7abdfdb10f355ecaa13c6a226a694ae7a67785fd7eeebf89f845da0b4f7e4a35561ddc459aba0 + checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db languageName: node linkType: hard "typescript@patch:typescript@^4.8.2#~builtin": - version: 4.8.3 - resolution: "typescript@patch:typescript@npm%3A4.8.3#~builtin::version=4.8.3&hash=701156" + version: 4.9.5 + resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=701156" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 2222d2382fb3146089b1d27ce2b55e9d1f99cc64118f1aba75809b693b856c5d3c324f052f60c75b577947fc538bc1c27bad0eb76cbdba9a63a253489504ba7e - languageName: node - linkType: hard - -"unbox-primitive@npm:^1.0.1": - version: 1.0.1 - resolution: "unbox-primitive@npm:1.0.1" - dependencies: - function-bind: ^1.1.1 - has-bigints: ^1.0.1 - has-symbols: ^1.0.2 - which-boxed-primitive: ^1.0.2 - checksum: 89d950e18fb45672bc6b3c961f1e72c07beb9640c7ceed847b571ba6f7d2af570ae1a2584cfee268b9d9ea1e3293f7e33e0bc29eaeb9f8e8a0bab057ff9e6bba + checksum: 2eee5c37cad4390385db5db5a8e81470e42e8f1401b0358d7390095d6f681b410f2c4a0c496c6ff9ebd775423c7785cdace7bcdad76c7bee283df3d9718c0f20 languageName: node linkType: hard @@ -10730,6 +10231,13 @@ typescript@^4.8.2: languageName: node linkType: hard +"undici-types@npm:~6.19.2": + version: 6.19.8 + resolution: "undici-types@npm:6.19.8" + checksum: de51f1b447d22571cf155dfe14ff6d12c5bdaec237c765085b439c38ca8518fc360e88c70f99469162bf2e14188a7b0bcb06e1ed2dc031042b984b0bb9544017 + languageName: node + linkType: hard + "union-value@npm:^1.0.0": version: 1.0.1 resolution: "union-value@npm:1.0.1" @@ -10751,21 +10259,21 @@ typescript@^4.8.2: languageName: node linkType: hard -"unique-filename@npm:^1.1.1": - version: 1.1.1 - resolution: "unique-filename@npm:1.1.1" +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" dependencies: - unique-slug: ^2.0.0 - checksum: cf4998c9228cc7647ba7814e255dec51be43673903897b1786eff2ac2d670f54d4d733357eb08dea969aa5e6875d0e1bd391d668fbdb5a179744e7c7551a6f80 + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df languageName: node linkType: hard -"unique-slug@npm:^2.0.0": - version: 2.0.2 - resolution: "unique-slug@npm:2.0.2" +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" dependencies: imurmurhash: ^0.1.4 - checksum: 5b6876a645da08d505dedb970d1571f6cebdf87044cb6b740c8dbb24f0d6e1dc8bdbf46825fd09f994d7cf50760e6f6e063cfa197d51c5902c00a861702eb75a + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 languageName: node linkType: hard @@ -10777,9 +10285,9 @@ typescript@^4.8.2: linkType: hard "universalify@npm:^2.0.0": - version: 2.0.0 - resolution: "universalify@npm:2.0.0" - checksum: 2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44 + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 languageName: node linkType: hard @@ -10800,20 +10308,6 @@ typescript@^4.8.2: languageName: node linkType: hard -"update-browserslist-db@npm:^1.0.9": - version: 1.0.10 - resolution: "update-browserslist-db@npm:1.0.10" - dependencies: - escalade: ^3.1.1 - picocolors: ^1.0.0 - peerDependencies: - browserslist: ">= 4.21.0" - bin: - browserslist-lint: cli.js - checksum: 12db73b4f63029ac407b153732e7cd69a1ea8206c9100b482b7d12859cd3cd0bc59c602d7ae31e652706189f1acb90d42c53ab24a5ba563ed13aebdddc5561a0 - languageName: node - linkType: hard - "update-browserslist-db@npm:^1.1.0": version: 1.1.0 resolution: "update-browserslist-db@npm:1.1.0" @@ -10861,16 +10355,6 @@ typescript@^4.8.2: languageName: node linkType: hard -"url@npm:^0.11.0": - version: 0.11.0 - resolution: "url@npm:0.11.0" - dependencies: - punycode: 1.3.2 - querystring: 0.2.0 - checksum: 50d100d3dd2d98b9fe3ada48cadb0b08aa6be6d3ac64112b867b56b19be4bfcba03c2a9a0d7922bfd7ac17d4834e88537749fe182430dfd9b68e520175900d90 - languageName: node - linkType: hard - "use@npm:^3.1.0": version: 3.1.1 resolution: "use@npm:3.1.1" @@ -10899,12 +10383,12 @@ typescript@^4.8.2: languageName: node linkType: hard -"uuid@npm:^3.4.0": - version: 3.4.0 - resolution: "uuid@npm:3.4.0" +"uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" bin: - uuid: ./bin/uuid - checksum: 58de2feed61c59060b40f8203c0e4ed7fd6f99d42534a499f1741218a1dd0c129f4aa1de797bcf822c8ea5da7e4137aa3673431a96dae729047f7aca7b27866f + uuid: dist/bin/uuid + checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df languageName: node linkType: hard @@ -10916,20 +10400,20 @@ typescript@^4.8.2: linkType: hard "v8-compile-cache@npm:^2.0.3": - version: 2.3.0 - resolution: "v8-compile-cache@npm:2.3.0" - checksum: adb0a271eaa2297f2f4c536acbfee872d0dd26ec2d76f66921aa7fc437319132773483344207bdbeee169225f4739016d8d2dbf0553913a52bb34da6d0334f8e + version: 2.4.0 + resolution: "v8-compile-cache@npm:2.4.0" + checksum: 8eb6ddb59d86f24566503f1e6ca98f3e6f43599f05359bd3ab737eaaf1585b338091478a4d3d5c2646632cf8030288d7888684ea62238cdce15a65ae2416718f languageName: node linkType: hard "v8-to-istanbul@npm:^9.0.1": - version: 9.0.1 - resolution: "v8-to-istanbul@npm:9.0.1" + version: 9.3.0 + resolution: "v8-to-istanbul@npm:9.3.0" dependencies: "@jridgewell/trace-mapping": ^0.3.12 "@types/istanbul-lib-coverage": ^2.0.1 - convert-source-map: ^1.6.0 - checksum: a49c34bf0a3af0c11041a3952a2600913904a983bd1bc87148b5c033bc5c1d02d5a13620fcdbfa2c60bc582a2e2970185780f0c844b4c3a220abf405f8af6311 + convert-source-map: ^2.0.0 + checksum: ded42cd535d92b7fd09a71c4c67fb067487ef5551cc227bfbf2a1f159a842e4e4acddaef20b955789b8d3b455b9779d036853f4a27ce15007f6364a4d30317ae languageName: node linkType: hard @@ -10949,16 +10433,7 @@ typescript@^4.8.2: languageName: node linkType: hard -"walker@npm:^1.0.7, walker@npm:~1.0.5": - version: 1.0.7 - resolution: "walker@npm:1.0.7" - dependencies: - makeerror: 1.0.x - checksum: 4038fcf92f6ab0288267ad05008aec9e089a759f1bd32e1ea45cc2eb498eb12095ec43cf8ca2bf23a465f4580a0d33b25b89f450ba521dd27083cbc695ee6bf5 - languageName: node - linkType: hard - -"walker@npm:^1.0.8": +"walker@npm:^1.0.7, walker@npm:^1.0.8, walker@npm:~1.0.5": version: 1.0.8 resolution: "walker@npm:1.0.8" dependencies: @@ -10968,12 +10443,12 @@ typescript@^4.8.2: linkType: hard "watchpack@npm:^2.4.1": - version: 2.4.1 - resolution: "watchpack@npm:2.4.1" + version: 2.4.2 + resolution: "watchpack@npm:2.4.2" dependencies: glob-to-regexp: ^0.4.1 graceful-fs: ^4.1.2 - checksum: 5b0179348655dcdf19cac7cb4ff923fdc024d630650c0bf6bec8899cf47c60e19d4f810a88dba692ed0e7f684cf0fcffea86efdbf6c35d81f031e328043b7fab + checksum: 92d9d52ce3d16fd83ed6994d1dd66a4d146998882f4c362d37adfea9ab77748a5b4d1e0c65fa104797928b2d40f635efa8f9b925a6265428a69f1e1852ca3441 languageName: node linkType: hard @@ -10994,16 +10469,16 @@ typescript@^4.8.2: linkType: hard "webpack-cli@npm:^4.8.0": - version: 4.9.1 - resolution: "webpack-cli@npm:4.9.1" + version: 4.10.0 + resolution: "webpack-cli@npm:4.10.0" dependencies: "@discoveryjs/json-ext": ^0.5.0 - "@webpack-cli/configtest": ^1.1.0 - "@webpack-cli/info": ^1.4.0 - "@webpack-cli/serve": ^1.6.0 + "@webpack-cli/configtest": ^1.2.0 + "@webpack-cli/info": ^1.5.0 + "@webpack-cli/serve": ^1.7.0 colorette: ^2.0.14 commander: ^7.0.0 - execa: ^5.0.0 + cross-spawn: ^7.0.3 fastest-levenshtein: ^1.0.12 import-local: ^3.0.2 interpret: ^2.2.0 @@ -11022,72 +10497,80 @@ typescript@^4.8.2: optional: true bin: webpack-cli: bin/cli.js - checksum: 2aff0349c15e54d616e1fd6dc1f59be16ec1a630f652f948c0b4b108776d1889446e3498e83d9d514bf1b28c5125a8b87c4aeb5dceb41b593ba90765af673c4f + checksum: 2ff5355ac348e6b40f2630a203b981728834dca96d6d621be96249764b2d0fc01dd54edfcc37f02214d02935de2cf0eefd6ce689d970d154ef493f01ba922390 languageName: node linkType: hard -"webpack-dev-middleware@npm:^5.2.1": - version: 5.2.1 - resolution: "webpack-dev-middleware@npm:5.2.1" +"webpack-dev-middleware@npm:^5.3.4": + version: 5.3.4 + resolution: "webpack-dev-middleware@npm:5.3.4" dependencies: colorette: ^2.0.10 - memfs: ^3.2.2 + memfs: ^3.4.3 mime-types: ^2.1.31 range-parser: ^1.2.1 - schema-utils: ^3.1.0 + schema-utils: ^4.0.0 peerDependencies: webpack: ^4.0.0 || ^5.0.0 - checksum: 06f3ef14ec983d115d7109f37312fc691c867c95fe7579784c7b80db0a2be77392fa27de444d0a937546da68c7e99640c13df73dc1351bbed7ebab4cc5569f14 + checksum: 90cf3e27d0714c1a745454a1794f491b7076434939340605b9ee8718ba2b85385b120939754e9fdbd6569811e749dee53eec319e0d600e70e0b0baffd8e3fb13 languageName: node linkType: hard "webpack-dev-server@npm:^4.0.0": - version: 4.3.1 - resolution: "webpack-dev-server@npm:4.3.1" - dependencies: + version: 4.15.2 + resolution: "webpack-dev-server@npm:4.15.2" + dependencies: + "@types/bonjour": ^3.5.9 + "@types/connect-history-api-fallback": ^1.3.5 + "@types/express": ^4.17.13 + "@types/serve-index": ^1.9.1 + "@types/serve-static": ^1.13.10 + "@types/sockjs": ^0.3.33 + "@types/ws": ^8.5.5 ansi-html-community: ^0.0.8 - bonjour: ^3.5.0 - chokidar: ^3.5.1 + bonjour-service: ^1.0.11 + chokidar: ^3.5.3 colorette: ^2.0.10 compression: ^1.7.4 - connect-history-api-fallback: ^1.6.0 - del: ^6.0.0 - express: ^4.17.1 + connect-history-api-fallback: ^2.0.0 + default-gateway: ^6.0.3 + express: ^4.17.3 graceful-fs: ^4.2.6 html-entities: ^2.3.2 - http-proxy-middleware: ^2.0.0 - internal-ip: ^6.2.0 + http-proxy-middleware: ^2.0.3 ipaddr.js: ^2.0.1 + launch-editor: ^2.6.0 open: ^8.0.9 p-retry: ^4.5.0 - portfinder: ^1.0.28 - schema-utils: ^3.1.0 - selfsigned: ^1.10.11 + rimraf: ^3.0.2 + schema-utils: ^4.0.0 + selfsigned: ^2.1.1 serve-index: ^1.9.1 - sockjs: ^0.3.21 + sockjs: ^0.3.24 spdy: ^4.0.2 - strip-ansi: ^7.0.0 - url: ^0.11.0 - webpack-dev-middleware: ^5.2.1 - ws: ^8.1.0 + webpack-dev-middleware: ^5.3.4 + ws: ^8.13.0 peerDependencies: webpack: ^4.37.0 || ^5.0.0 peerDependenciesMeta: + webpack: + optional: true webpack-cli: optional: true bin: webpack-dev-server: bin/webpack-dev-server.js - checksum: ce9d054c3de335df4cca4759aaff3a5291487c906b15bd3bb6e41de86e3784b307ae1e2cdd6403424567b0645a0dc6a9dd21b4839ba86176d5097664474d2b68 + checksum: 123507129cb4d55fdc5fabdd177574f31133605748372bb11353307b7a583ef25c6fd27b6addf56bf070ba44c88d5da861771c2ec55f52405082ec9efd01f039 languageName: node linkType: hard "webpack-merge@npm:^5.7.3": - version: 5.8.0 - resolution: "webpack-merge@npm:5.8.0" + version: 5.10.0 + resolution: "webpack-merge@npm:5.10.0" dependencies: clone-deep: ^4.0.1 + flat: ^5.0.2 wildcard: ^2.0.0 - checksum: 88786ab91013f1bd2a683834ff381be81c245a4b0f63304a5103e90f6653f44dab496a0768287f8531761f8ad957d1f9f3ccb2cb55df0de1bd9ee343e079da26 + checksum: 1fe8bf5309add7298e1ac72fb3f2090e1dfa80c48c7e79fa48aa60b5961332c7d0d61efa8851acb805e6b91a4584537a347bc106e05e9aec87fa4f7088c62f2f languageName: node linkType: hard @@ -11192,6 +10675,51 @@ typescript@^4.8.2: languageName: node linkType: hard +"which-builtin-type@npm:^1.1.3": + version: 1.1.4 + resolution: "which-builtin-type@npm:1.1.4" + dependencies: + function.prototype.name: ^1.1.6 + has-tostringtag: ^1.0.2 + is-async-function: ^2.0.0 + is-date-object: ^1.0.5 + is-finalizationregistry: ^1.0.2 + is-generator-function: ^1.0.10 + is-regex: ^1.1.4 + is-weakref: ^1.0.2 + isarray: ^2.0.5 + which-boxed-primitive: ^1.0.2 + which-collection: ^1.0.2 + which-typed-array: ^1.1.15 + checksum: 1f413025250072534de2a2ee25139a24d477512b532b05c85fb9aa05aef04c6e1ca8e2668acf971b777e602721dbdec4b9d6a4f37c6b9ff8f026ad030352707f + languageName: node + linkType: hard + +"which-collection@npm:^1.0.1, which-collection@npm:^1.0.2": + version: 1.0.2 + resolution: "which-collection@npm:1.0.2" + dependencies: + is-map: ^2.0.3 + is-set: ^2.0.3 + is-weakmap: ^2.0.2 + is-weakset: ^2.0.3 + checksum: c51821a331624c8197916598a738fc5aeb9a857f1e00d89f5e4c03dc7c60b4032822b8ec5696d28268bb83326456a8b8216344fb84270d18ff1d7628051879d9 + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15": + version: 1.1.15 + resolution: "which-typed-array@npm:1.1.15" + dependencies: + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.2 + checksum: 65227dcbfadf5677aacc43ec84356d17b5500cb8b8753059bb4397de5cd0c2de681d24e1a7bd575633f976a95f88233abfd6549c2105ef4ebd58af8aa1807c75 + languageName: node + linkType: hard + "which@npm:^1.2.9": version: 1.3.1 resolution: "which@npm:1.3.1" @@ -11203,7 +10731,7 @@ typescript@^4.8.2: languageName: node linkType: hard -"which@npm:^2.0.1, which@npm:^2.0.2": +"which@npm:^2.0.1": version: 2.0.2 resolution: "which@npm:2.0.2" dependencies: @@ -11214,30 +10742,32 @@ typescript@^4.8.2: languageName: node linkType: hard -"wide-align@npm:^1.1.0": - version: 1.1.3 - resolution: "wide-align@npm:1.1.3" +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" dependencies: - string-width: ^1.0.2 || 2 - checksum: d09c8012652a9e6cab3e82338d1874a4d7db2ad1bd19ab43eb744acf0b9b5632ec406bdbbbb970a8f4771a7d5ef49824d038ba70aa884e7723f5b090ab87134d + isexe: ^3.1.1 + bin: + node-which: bin/which.js + checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 languageName: node linkType: hard "wildcard@npm:^2.0.0": - version: 2.0.0 - resolution: "wildcard@npm:2.0.0" - checksum: 1f4fe4c03dfc492777c60f795bbba597ac78794f1b650d68f398fbee9adb765367c516ebd4220889b6a81e9626e7228bbe0d66237abb311573c2ee1f4902a5ad + version: 2.0.1 + resolution: "wildcard@npm:2.0.1" + checksum: e0c60a12a219e4b12065d1199802d81c27b841ed6ad6d9d28240980c73ceec6f856771d575af367cbec2982d9ae7838759168b551776577f155044f5a5ba843c languageName: node linkType: hard -"word-wrap@npm:^1.2.3, word-wrap@npm:~1.2.3": - version: 1.2.3 - resolution: "word-wrap@npm:1.2.3" - checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: f93ba3586fc181f94afdaff3a6fef27920b4b6d9eaefed0f428f8e07adea2a7f54a5f2830ce59406c8416f033f86902b91eb824072354645eea687dff3691ccb languageName: node linkType: hard -"wrap-ansi@npm:^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" dependencies: @@ -11248,6 +10778,17 @@ typescript@^4.8.2: languageName: node linkType: hard +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + "wrappy@npm:1": version: 1.0.2 resolution: "wrappy@npm:1.0.2" @@ -11267,7 +10808,7 @@ typescript@^4.8.2: languageName: node linkType: hard -"write-file-atomic@npm:^4.0.1": +"write-file-atomic@npm:^4.0.2": version: 4.0.2 resolution: "write-file-atomic@npm:4.0.2" dependencies: @@ -11292,24 +10833,9 @@ typescript@^4.8.2: languageName: node linkType: hard -"ws@npm:^8.1.0": - version: 8.2.3 - resolution: "ws@npm:8.2.3" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: c869296ccb45f218ac6d32f8f614cd85b50a21fd434caf11646008eef92173be53490810c5c23aea31bc527902261fbfd7b062197eea341b26128d4be56a85e4 - languageName: node - linkType: hard - -"ws@npm:^8.11.0": - version: 8.12.0 - resolution: "ws@npm:8.12.0" +"ws@npm:^8.11.0, ws@npm:^8.13.0": + version: 8.18.0 + resolution: "ws@npm:8.18.0" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -11318,7 +10844,7 @@ typescript@^4.8.2: optional: true utf-8-validate: optional: true - checksum: 818ff3f8749c172a95a114cceb8b89cedd27e43a82d65c7ad0f7882b1e96a2ee6709e3746a903c3fa88beec0c8bae9a9fcd75f20858b32a166dfb7519316a5d7 + checksum: 91d4d35bc99ff6df483bdf029b9ea4bfd7af1f16fc91231a96777a63d263e1eabf486e13a2353970efc534f9faa43bdbf9ee76525af22f4752cbc5ebda333975 languageName: node linkType: hard @@ -11365,8 +10891,8 @@ typescript@^4.8.2: linkType: hard "yargs@npm:^17.3.1": - version: 17.6.2 - resolution: "yargs@npm:17.6.2" + version: 17.7.2 + resolution: "yargs@npm:17.7.2" dependencies: cliui: ^8.0.1 escalade: ^3.1.1 @@ -11375,7 +10901,7 @@ typescript@^4.8.2: string-width: ^4.2.3 y18n: ^5.0.5 yargs-parser: ^21.1.1 - checksum: 47da1b0d854fa16d45a3ded57b716b013b2179022352a5f7467409da5a04a1eef5b3b3d97a2dfc13e8bbe5f2ffc0afe3bc6a4a72f8254e60f5a4bd7947138643 + checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a languageName: node linkType: hard From f4002813178343194cfb2a17bcb035562b8ae8ec Mon Sep 17 00:00:00 2001 From: Victor Conner Date: Tue, 11 Mar 2025 15:12:20 +0100 Subject: [PATCH 74/88] Updated puppeteer to the latest version (#146) * Updated puppeteer to the latest version * Launch puppeteer with no sandbox * Update actions/upload-artifact to v4 --- .github/workflows/build.yml | 2 +- examples/benchmarking/compare.ts | 4 +- examples/benchmarking/package.json | 2 +- yarn.lock | 581 +++++++++++++++++++++-------- 4 files changed, 427 insertions(+), 162 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d35a980d..9b9ada26 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,7 +17,7 @@ jobs: - run: yarn build - run: yarn package - name: Archive packages - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: packages path: artifacts diff --git a/examples/benchmarking/compare.ts b/examples/benchmarking/compare.ts index 40417b2d..de64ace1 100644 --- a/examples/benchmarking/compare.ts +++ b/examples/benchmarking/compare.ts @@ -22,7 +22,9 @@ const compare = async (optionA: string, optionB: string, targetRelativePerforman // Puppeteer doesn't really have a `launch` named export. // eslint-disable-next-line import/no-named-as-default-member - const browser = await puppeteer.launch() + const browser = await puppeteer.launch({ + args: ['--no-sandbox'], + }) interface TraceEvent { name: string diff --git a/examples/benchmarking/package.json b/examples/benchmarking/package.json index 57e8f167..f17db324 100644 --- a/examples/benchmarking/package.json +++ b/examples/benchmarking/package.json @@ -25,7 +25,7 @@ "fs-extra": "^10.0.0", "html-webpack-plugin": "^5.3.2", "http-server": "^13.0.2", - "puppeteer": "^10.4.0", + "puppeteer": "^24.4.0", "ts-loader": "^9.2.5", "ts-node": "^10.3.1", "typescript": "^4.8.2", diff --git a/yarn.lock b/yarn.lock index 9616d14b..43b59bb3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1132,6 +1132,23 @@ __metadata: languageName: node linkType: hard +"@puppeteer/browsers@npm:2.9.0": + version: 2.9.0 + resolution: "@puppeteer/browsers@npm:2.9.0" + dependencies: + debug: ^4.4.0 + extract-zip: ^2.0.1 + progress: ^2.0.3 + proxy-agent: ^6.5.0 + semver: ^7.7.1 + tar-fs: ^3.0.8 + yargs: ^17.7.2 + bin: + browsers: lib/cjs/main-cli.js + checksum: bd3f51e73de9056d3a8b4928d37f1a3d1dd2d6b2518b96809d60321331ae56b54b8668372a0e53c277cfb452e27fdbaf9ded394b90a92ded5033c53883cbf204 + languageName: node + linkType: hard + "@react-facet/core@0.6.1, @react-facet/core@workspace:packages/@react-facet/core": version: 0.0.0-use.local resolution: "@react-facet/core@workspace:packages/@react-facet/core" @@ -1316,6 +1333,13 @@ __metadata: languageName: node linkType: hard +"@tootallnate/quickjs-emscripten@npm:^0.23.0": + version: 0.23.0 + resolution: "@tootallnate/quickjs-emscripten@npm:0.23.0" + checksum: c350a2947ffb80b22e14ff35099fd582d1340d65723384a0fd0515e905e2534459ad2f301a43279a37308a27c99273c932e64649abd57d0bb3ca8c557150eccc + languageName: node + linkType: hard + "@tsconfig/node10@npm:^1.0.7": version: 1.0.11 resolution: "@tsconfig/node10@npm:1.0.11" @@ -2270,6 +2294,13 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 87bb7ee54f5ecf0ccbfcba0b07473885c43ecd76cb29a8db17d6137a19d9f9cd443a2a7c5fd8a3f24d58ad8145f9eb49116344a66b107e1aeab82cf2383f4753 + languageName: node + linkType: hard + "aggregate-error@npm:^3.0.0": version: 3.1.0 resolution: "aggregate-error@npm:3.1.0" @@ -2445,6 +2476,13 @@ __metadata: languageName: node linkType: hard +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced + languageName: node + linkType: hard + "aria-query@npm:5.1.3": version: 5.1.3 resolution: "aria-query@npm:5.1.3" @@ -2617,6 +2655,15 @@ __metadata: languageName: node linkType: hard +"ast-types@npm:^0.13.4": + version: 0.13.4 + resolution: "ast-types@npm:0.13.4" + dependencies: + tslib: ^2.0.1 + checksum: 5a51f7b70588ecced3601845a0e203279ca2f5fdc184416a0a1640c93ec0a267241d6090a328e78eebb8de81f8754754e0a4f1558ba2a3d638f8ccbd0b1f0eff + languageName: node + linkType: hard + "astral-regex@npm:^2.0.0": version: 2.0.0 resolution: "astral-regex@npm:2.0.0" @@ -2658,6 +2705,13 @@ __metadata: languageName: node linkType: hard +"b4a@npm:^1.6.4": + version: 1.6.7 + resolution: "b4a@npm:1.6.7" + checksum: afe4e239b49c0ef62236fe0d788ac9bd9d7eac7e9855b0d1835593cd0efcc7be394f9cc28a747a2ed2cdcb0a48c3528a551a196f472eb625457c711169c9efa2 + languageName: node + linkType: hard + "babel-jest@npm:^26.0.1": version: 26.6.3 resolution: "babel-jest@npm:26.6.3" @@ -2795,10 +2849,59 @@ __metadata: languageName: node linkType: hard -"base64-js@npm:^1.3.1": - version: 1.5.1 - resolution: "base64-js@npm:1.5.1" - checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 +"bare-events@npm:^2.2.0, bare-events@npm:^2.5.4": + version: 2.5.4 + resolution: "bare-events@npm:2.5.4" + checksum: 522a5401caaede9d8c857c2fd346c993bf43995e958e8ebfa79d32b1e086032800e0639f3559d7ad85788fae54f6d9605685de507eec54298ea2aa2c8c9cb2c3 + languageName: node + linkType: hard + +"bare-fs@npm:^4.0.1": + version: 4.1.2 + resolution: "bare-fs@npm:4.1.2" + dependencies: + bare-events: ^2.5.4 + bare-path: ^3.0.0 + bare-stream: ^2.6.4 + peerDependencies: + bare-buffer: "*" + peerDependenciesMeta: + bare-buffer: + optional: true + checksum: f4b3e9b0a07cb5ab5904c8644cf8945b271707e69bac29e817dfd1f7624583f3c91c1502d2ea1650919fea20425fcf6823b413087cbd8fa158e480b3db60ab87 + languageName: node + linkType: hard + +"bare-os@npm:^3.0.1": + version: 3.6.1 + resolution: "bare-os@npm:3.6.1" + checksum: 2fcdbaa631e02e2b7a4a38ded4586ae8bef2d329c6933b9dca8c543b4af0ac3c257fdf0ff3339b83259e179e07873f300e61c75c0a1e6b796c0214b1fbae8696 + languageName: node + linkType: hard + +"bare-path@npm:^3.0.0": + version: 3.0.0 + resolution: "bare-path@npm:3.0.0" + dependencies: + bare-os: ^3.0.1 + checksum: 51d559515f332f62cf9c37c38f2640c1b84b5e8c9de454b70baf029f806058cf94c51d6a0dfec0025cc7760f2069dc3e16c82f0d24f4a9ddb18c829bf9c0206d + languageName: node + linkType: hard + +"bare-stream@npm:^2.6.4": + version: 2.6.5 + resolution: "bare-stream@npm:2.6.5" + dependencies: + streamx: ^2.21.0 + peerDependencies: + bare-buffer: "*" + bare-events: "*" + peerDependenciesMeta: + bare-buffer: + optional: true + bare-events: + optional: true + checksum: 6a3d4baf8ded0bdc465b7b0b65dfbb8e40f7520ee8899adcae5fd37949d5c520412164116659750ad841215b03ce761fe252a626cd4fe3ec9df0440c6fd07a96 languageName: node linkType: hard @@ -2824,6 +2927,13 @@ __metadata: languageName: node linkType: hard +"basic-ftp@npm:^5.0.2": + version: 5.0.5 + resolution: "basic-ftp@npm:5.0.5" + checksum: bc82d1c1c61cd838eaca96d68ece888bacf07546642fb6b9b8328ed410756f5935f8cf43a42cb44bb343e0565e28e908adc54c298bd2f1a6e0976871fb11fec6 + languageName: node + linkType: hard + "batch@npm:0.6.1": version: 0.6.1 resolution: "batch@npm:0.6.1" @@ -2846,7 +2956,7 @@ __metadata: fs-extra: ^10.0.0 html-webpack-plugin: ^5.3.2 http-server: ^13.0.2 - puppeteer: ^10.4.0 + puppeteer: ^24.4.0 ramda: ^0.27.1 react: 18.2.0 react-dom: ^18.2.0 @@ -2866,17 +2976,6 @@ __metadata: languageName: node linkType: hard -"bl@npm:^4.0.3": - version: 4.1.0 - resolution: "bl@npm:4.1.0" - dependencies: - buffer: ^5.5.0 - inherits: ^2.0.4 - readable-stream: ^3.4.0 - checksum: 9e8521fa7e83aa9427c6f8ccdcba6e8167ef30cc9a22df26effcc5ab682ef91d2cbc23a239f945d099289e4bbcfae7a192e9c28c84c6202e710a0dfec3722662 - languageName: node - linkType: hard - "body-parser@npm:1.20.2": version: 1.20.2 resolution: "body-parser@npm:1.20.2" @@ -2997,16 +3096,6 @@ __metadata: languageName: node linkType: hard -"buffer@npm:^5.2.1, buffer@npm:^5.5.0": - version: 5.7.1 - resolution: "buffer@npm:5.7.1" - dependencies: - base64-js: ^1.3.1 - ieee754: ^1.1.13 - checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84 - languageName: node - linkType: hard - "builtin-modules@npm:^1.0.0": version: 1.1.1 resolution: "builtin-modules@npm:1.1.1" @@ -3182,13 +3271,6 @@ __metadata: languageName: node linkType: hard -"chownr@npm:^1.1.1": - version: 1.1.4 - resolution: "chownr@npm:1.1.4" - checksum: 115648f8eb38bac5e41c3857f3e663f9c39ed6480d1349977c4d96c95a47266fcacc5a5aabf3cb6c481e22d72f41992827db47301851766c4fd77ac21a4f081d - languageName: node - linkType: hard - "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -3203,6 +3285,18 @@ __metadata: languageName: node linkType: hard +"chromium-bidi@npm:3.0.0": + version: 3.0.0 + resolution: "chromium-bidi@npm:3.0.0" + dependencies: + mitt: ^3.0.1 + zod: ^3.24.1 + peerDependencies: + devtools-protocol: "*" + checksum: 3a20b551fdcb95e4ac13dbfd38a8d468933a560e2985ca95daf2f6e80deefa72ae54c512a0039f148819418127a55a158f1ebd8ef06367ad0c67e2b10616299b + languageName: node + linkType: hard + "ci-info@npm:^2.0.0": version: 2.0.0 resolution: "ci-info@npm:2.0.0" @@ -3477,6 +3571,23 @@ __metadata: languageName: node linkType: hard +"cosmiconfig@npm:^9.0.0": + version: 9.0.0 + resolution: "cosmiconfig@npm:9.0.0" + dependencies: + env-paths: ^2.2.1 + import-fresh: ^3.3.0 + js-yaml: ^4.1.0 + parse-json: ^5.2.0 + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: a30c424b53d442ea0bdd24cb1b3d0d8687c8dda4a17ab6afcdc439f8964438801619cdb66e8e79f63b9caa3e6586b60d8bab9ce203e72df6c5e80179b971fe8f + languageName: node + linkType: hard + "create-jest@npm:^29.7.0": version: 29.7.0 resolution: "create-jest@npm:29.7.0" @@ -3594,6 +3705,13 @@ __metadata: languageName: node linkType: hard +"data-uri-to-buffer@npm:^6.0.2": + version: 6.0.2 + resolution: "data-uri-to-buffer@npm:6.0.2" + checksum: 8b6927c33f9b54037f442856be0aa20e5fd49fa6c9c8ceece408dc306445d593ad72d207d57037c529ce65f413b421da800c6827b1dbefb607b8056f17123a61 + languageName: node + linkType: hard + "data-urls@npm:^3.0.2": version: 3.0.2 resolution: "data-urls@npm:3.0.2" @@ -3659,18 +3777,6 @@ __metadata: languageName: node linkType: hard -"debug@npm:4.3.1": - version: 4.3.1 - resolution: "debug@npm:4.3.1" - dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 2c3352e37d5c46b0d203317cd45ea0e26b2c99f2d9dfec8b128e6ceba90dfb65425f5331bf3020fe9929d7da8c16758e737f4f3bfc0fce6b8b3d503bae03298b - languageName: node - linkType: hard - "debug@npm:^3.2.7": version: 3.2.7 resolution: "debug@npm:3.2.7" @@ -3680,6 +3786,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.4.0": + version: 4.4.0 + resolution: "debug@npm:4.4.0" + dependencies: + ms: ^2.1.3 + peerDependenciesMeta: + supports-color: + optional: true + checksum: fb42df878dd0e22816fc56e1fdca9da73caa85212fbe40c868b1295a6878f9101ae684f4eeef516c13acfc700f5ea07f1136954f43d4cd2d477a811144136479 + languageName: node + linkType: hard + "decimal.js@npm:^10.4.2": version: 10.4.3 resolution: "decimal.js@npm:10.4.3" @@ -3812,6 +3930,17 @@ __metadata: languageName: node linkType: hard +"degenerator@npm:^5.0.0": + version: 5.0.1 + resolution: "degenerator@npm:5.0.1" + dependencies: + ast-types: ^0.13.4 + escodegen: ^2.1.0 + esprima: ^4.0.1 + checksum: a64fa39cdf6c2edd75188157d32338ee9de7193d7dbb2aeb4acb1eb30fa4a15ed80ba8dae9bd4d7b085472cf174a5baf81adb761aaa8e326771392c922084152 + languageName: node + linkType: hard + "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -3861,10 +3990,10 @@ __metadata: languageName: node linkType: hard -"devtools-protocol@npm:0.0.901419": - version: 0.0.901419 - resolution: "devtools-protocol@npm:0.0.901419" - checksum: de68331ddfb35b828ad743d939d9237e122f76d4a6cbf1e64f6c6d8e9c2c5cc65a5f1994db0fead90192cca1aa9dbed2ea822a7da7b58104cd041a90e215b9a3 +"devtools-protocol@npm:0.0.1425554": + version: 0.0.1425554 + resolution: "devtools-protocol@npm:0.0.1425554" + checksum: 8ad301abee2146f0aff613c81c01570d787a0a01fc764fc8fbe0bdbac379d2f426d69fe0e38fbbb1342032f9e063910ec1d807d18e40af29a85eda88bfefc763 languageName: node linkType: hard @@ -4049,7 +4178,7 @@ __metadata: languageName: node linkType: hard -"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": +"end-of-stream@npm:^1.1.0": version: 1.4.4 resolution: "end-of-stream@npm:1.4.4" dependencies: @@ -4092,7 +4221,7 @@ __metadata: languageName: node linkType: hard -"env-paths@npm:^2.2.0": +"env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": version: 2.2.1 resolution: "env-paths@npm:2.2.1" checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e @@ -4315,7 +4444,7 @@ __metadata: languageName: node linkType: hard -"escodegen@npm:^2.0.0": +"escodegen@npm:^2.0.0, escodegen@npm:^2.1.0": version: 2.1.0 resolution: "escodegen@npm:2.1.0" dependencies: @@ -4813,7 +4942,7 @@ __metadata: languageName: node linkType: hard -"extract-zip@npm:2.0.1": +"extract-zip@npm:^2.0.1": version: 2.0.1 resolution: "extract-zip@npm:2.0.1" dependencies: @@ -4844,6 +4973,13 @@ __metadata: languageName: node linkType: hard +"fast-fifo@npm:^1.2.0, fast-fifo@npm:^1.3.2": + version: 1.3.2 + resolution: "fast-fifo@npm:1.3.2" + checksum: 6bfcba3e4df5af7be3332703b69a7898a8ed7020837ec4395bb341bd96cc3a6d86c3f6071dd98da289618cf2234c70d84b2a6f09a33dd6f988b1ff60d8e54275 + languageName: node + linkType: hard + "fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.1": version: 3.3.2 resolution: "fast-glob@npm:3.3.2" @@ -5082,13 +5218,6 @@ __metadata: languageName: node linkType: hard -"fs-constants@npm:^1.0.0": - version: 1.0.0 - resolution: "fs-constants@npm:1.0.0" - checksum: 18f5b718371816155849475ac36c7d0b24d39a11d91348cfcb308b4494824413e03572c403c86d3a260e049465518c4f0d5bd00f0371cdfcad6d4f30a85b350d - languageName: node - linkType: hard - "fs-extra@npm:^10.0.0": version: 10.1.0 resolution: "fs-extra@npm:10.1.0" @@ -5270,6 +5399,17 @@ __metadata: languageName: node linkType: hard +"get-uri@npm:^6.0.1": + version: 6.0.4 + resolution: "get-uri@npm:6.0.4" + dependencies: + basic-ftp: ^5.0.2 + data-uri-to-buffer: ^6.0.2 + debug: ^4.3.4 + checksum: 7eae81655e0c8cee250d29c189e09030f37a2d37987298325709affb9408de448bf2dc43ee9a59acd21c1f100c3ca711d0446b4e689e9590c25774ecc59f0442 + languageName: node + linkType: hard + "get-value@npm:^2.0.3, get-value@npm:^2.0.6": version: 2.0.6 resolution: "get-value@npm:2.0.6" @@ -5651,7 +5791,7 @@ __metadata: languageName: node linkType: hard -"http-proxy-agent@npm:^7.0.0": +"http-proxy-agent@npm:^7.0.0, http-proxy-agent@npm:^7.0.1": version: 7.0.2 resolution: "http-proxy-agent@npm:7.0.2" dependencies: @@ -5712,16 +5852,6 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:5.0.0": - version: 5.0.0 - resolution: "https-proxy-agent@npm:5.0.0" - dependencies: - agent-base: 6 - debug: 4 - checksum: 165bfb090bd26d47693597661298006841ab733d0c7383a8cb2f17373387a94c903a3ac687090aa739de05e379ab6f868bae84ab4eac288ad85c328cd1ec9e53 - languageName: node - linkType: hard - "https-proxy-agent@npm:^5.0.1": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" @@ -5742,6 +5872,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^7.0.6": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: ^7.1.2 + debug: 4 + checksum: b882377a120aa0544846172e5db021fa8afbf83fea2a897d397bd2ddd8095ab268c24bc462f40a15f2a8c600bf4aa05ce52927f70038d4014e68aefecfa94e8d + languageName: node + linkType: hard + "human-signals@npm:^2.1.0": version: 2.1.0 resolution: "human-signals@npm:2.1.0" @@ -5767,13 +5907,6 @@ __metadata: languageName: node linkType: hard -"ieee754@npm:^1.1.13": - version: 1.2.1 - resolution: "ieee754@npm:1.2.1" - checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e - languageName: node - linkType: hard - "ignore@npm:^4.0.6": version: 4.0.6 resolution: "ignore@npm:4.0.6" @@ -5798,6 +5931,16 @@ __metadata: languageName: node linkType: hard +"import-fresh@npm:^3.3.0": + version: 3.3.1 + resolution: "import-fresh@npm:3.3.1" + dependencies: + parent-module: ^1.0.0 + resolve-from: ^4.0.0 + checksum: a06b19461b4879cc654d46f8a6244eb55eb053437afd4cbb6613cad6be203811849ed3e4ea038783092879487299fda24af932b86bdfff67c9055ba3612b8c87 + languageName: node + linkType: hard + "import-local@npm:^3.0.2": version: 3.2.0 resolution: "import-local@npm:3.2.0" @@ -5834,7 +5977,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -7003,6 +7146,17 @@ __metadata: languageName: node linkType: hard +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + languageName: node + linkType: hard + "jsbn@npm:1.1.0": version: 1.1.0 resolution: "jsbn@npm:1.1.0" @@ -7286,6 +7440,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^7.14.1": + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 + languageName: node + linkType: hard + "lz-string@npm:^1.5.0": version: 1.5.0 resolution: "lz-string@npm:1.5.0" @@ -7593,6 +7754,13 @@ __metadata: languageName: node linkType: hard +"mitt@npm:^3.0.1": + version: 3.0.1 + resolution: "mitt@npm:3.0.1" + checksum: b55a489ac9c2949ab166b7f060601d3b6d893a852515ae9eca4e11df01c013876df777ea109317622b5c1c60e8aae252558e33c8c94e14124db38f64a39614b1 + languageName: node + linkType: hard + "mixin-deep@npm:^1.2.0": version: 1.3.2 resolution: "mixin-deep@npm:1.3.2" @@ -7603,7 +7771,7 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.6": +"mkdirp@npm:^0.5.6": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" dependencies: @@ -7637,7 +7805,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3, ms@npm:^2.1.1": +"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -7696,6 +7864,13 @@ __metadata: languageName: node linkType: hard +"netmask@npm:^2.0.2": + version: 2.0.2 + resolution: "netmask@npm:2.0.2" + checksum: c65cb8d3f7ea5669edddb3217e4c96910a60d0d9a4b52d9847ff6b28b2d0277cd8464eee0ef85133cdee32605c57940cacdd04a9a019079b091b6bba4cb0ec22 + languageName: node + linkType: hard + "nice-try@npm:^1.0.4": version: 1.0.5 resolution: "nice-try@npm:1.0.5" @@ -7713,13 +7888,6 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:2.6.1": - version: 2.6.1 - resolution: "node-fetch@npm:2.6.1" - checksum: 91075bedd57879117e310fbcc36983ad5d699e522edb1ebcdc4ee5294c982843982652925c3532729fdc86b2d64a8a827797a745f332040d91823c8752ee4d7c - languageName: node - linkType: hard - "node-forge@npm:^1": version: 1.3.1 resolution: "node-forge@npm:1.3.1" @@ -8113,6 +8281,32 @@ __metadata: languageName: node linkType: hard +"pac-proxy-agent@npm:^7.1.0": + version: 7.2.0 + resolution: "pac-proxy-agent@npm:7.2.0" + dependencies: + "@tootallnate/quickjs-emscripten": ^0.23.0 + agent-base: ^7.1.2 + debug: ^4.3.4 + get-uri: ^6.0.1 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.6 + pac-resolver: ^7.0.1 + socks-proxy-agent: ^8.0.5 + checksum: 099c1bc8944da6a98e8b7de1fbf23e4014bc3063f66a7c29478bd852c1162e1d086a4f80f874f40961ebd5c516e736aed25852db97b79360cbdcc9db38086981 + languageName: node + linkType: hard + +"pac-resolver@npm:^7.0.1": + version: 7.0.1 + resolution: "pac-resolver@npm:7.0.1" + dependencies: + degenerator: ^5.0.0 + netmask: ^2.0.2 + checksum: 839134328781b80d49f9684eae1f5c74f50a1d4482076d44c84fc2f3ca93da66fa11245a4725a057231e06b311c20c989fd0681e662a0792d17f644d8fe62a5e + languageName: node + linkType: hard + "package-json-from-dist@npm:^1.0.0": version: 1.0.0 resolution: "package-json-from-dist@npm:1.0.0" @@ -8271,7 +8465,7 @@ __metadata: languageName: node linkType: hard -"pkg-dir@npm:4.2.0, pkg-dir@npm:^4.2.0": +"pkg-dir@npm:^4.2.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" dependencies: @@ -8376,14 +8570,7 @@ __metadata: languageName: node linkType: hard -"progress@npm:2.0.1": - version: 2.0.1 - resolution: "progress@npm:2.0.1" - checksum: 46d1f5a5df9c331f6402d856a4239f90a8fde8f9fcff0426ceb4edca7a7a3b4256d83adcfb3d4176a1dd239536a43e547bd0f325f5e8c4ac2881169361028426 - languageName: node - linkType: hard - -"progress@npm:^2.0.0": +"progress@npm:^2.0.0, progress@npm:^2.0.3": version: 2.0.3 resolution: "progress@npm:2.0.3" checksum: f67403fe7b34912148d9252cb7481266a354bd99ce82c835f79070643bb3c6583d10dbcfda4d41e04bbc1d8437e9af0fb1e1f2135727878f5308682a579429b7 @@ -8431,7 +8618,23 @@ __metadata: languageName: node linkType: hard -"proxy-from-env@npm:1.1.0": +"proxy-agent@npm:^6.5.0": + version: 6.5.0 + resolution: "proxy-agent@npm:6.5.0" + dependencies: + agent-base: ^7.1.2 + debug: ^4.3.4 + http-proxy-agent: ^7.0.1 + https-proxy-agent: ^7.0.6 + lru-cache: ^7.14.1 + pac-proxy-agent: ^7.1.0 + proxy-from-env: ^1.1.0 + socks-proxy-agent: ^8.0.5 + checksum: d03ad2d171c2768280ade7ea6a7c5b1d0746215d70c0a16e02780c26e1d347edd27b3f48374661ae54ec0f7b41e6e45175b687baf333b36b1fd109a525154806 + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 @@ -8462,23 +8665,33 @@ __metadata: languageName: node linkType: hard -"puppeteer@npm:^10.4.0": - version: 10.4.0 - resolution: "puppeteer@npm:10.4.0" +"puppeteer-core@npm:24.6.0": + version: 24.6.0 + resolution: "puppeteer-core@npm:24.6.0" + dependencies: + "@puppeteer/browsers": 2.9.0 + chromium-bidi: 3.0.0 + debug: ^4.4.0 + devtools-protocol: 0.0.1425554 + typed-query-selector: ^2.12.0 + ws: ^8.18.1 + checksum: e517133ea9650469727d9af0ae167a42400bb4c7ecae685b20937d37febc6cbd5f76edf5616246561c5a86322abef6386f36e4b2fae3586a6d3b8248ccb542c5 + languageName: node + linkType: hard + +"puppeteer@npm:^24.4.0": + version: 24.6.0 + resolution: "puppeteer@npm:24.6.0" dependencies: - debug: 4.3.1 - devtools-protocol: 0.0.901419 - extract-zip: 2.0.1 - https-proxy-agent: 5.0.0 - node-fetch: 2.6.1 - pkg-dir: 4.2.0 - progress: 2.0.1 - proxy-from-env: 1.1.0 - rimraf: 3.0.2 - tar-fs: 2.0.0 - unbzip2-stream: 1.3.3 - ws: 7.4.6 - checksum: 3b7b628f07b3e1f960110691363c1eb07a485fa2f24b5a083558a56841cc46bfcac7a3ab8ae5c687f39621972b35327ce934ea731c831dcd8b75d897920bdc26 + "@puppeteer/browsers": 2.9.0 + chromium-bidi: 3.0.0 + cosmiconfig: ^9.0.0 + devtools-protocol: 0.0.1425554 + puppeteer-core: 24.6.0 + typed-query-selector: ^2.12.0 + bin: + puppeteer: lib/cjs/puppeteer/node/cli.js + checksum: 3cf6efb500fc9ab7d8acb1efb2a9e1b7bb1db0bf82243c0791f876b206328b28a15afacfde8ed4122507b17ba135c57c2daf29fb833dd13d3ddf23e578293083 languageName: node linkType: hard @@ -8634,7 +8847,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0": +"readable-stream@npm:^3.0.6": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -8910,7 +9123,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:3.0.2, rimraf@npm:^3.0.2": +"rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" dependencies: @@ -9110,6 +9323,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.7.1": + version: 7.7.1 + resolution: "semver@npm:7.7.1" + bin: + semver: bin/semver.js + checksum: 586b825d36874007c9382d9e1ad8f93888d8670040add24a28e06a910aeebd673a2eb9e3bf169c6679d9245e66efb9057e0852e70d9daa6c27372aab1dda7104 + languageName: node + linkType: hard + "send@npm:0.18.0": version: 0.18.0 resolution: "send@npm:0.18.0" @@ -9383,6 +9605,17 @@ __metadata: languageName: node linkType: hard +"socks-proxy-agent@npm:^8.0.5": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" + dependencies: + agent-base: ^7.1.2 + debug: ^4.3.4 + socks: ^2.8.3 + checksum: b4fbcdb7ad2d6eec445926e255a1fb95c975db0020543fbac8dfa6c47aecc6b3b619b7fb9c60a3f82c9b2969912a5e7e174a056ae4d98cb5322f3524d6036e1d + languageName: node + linkType: hard + "socks@npm:^2.8.3": version: 2.8.3 resolution: "socks@npm:2.8.3" @@ -9555,6 +9788,20 @@ __metadata: languageName: node linkType: hard +"streamx@npm:^2.15.0, streamx@npm:^2.21.0": + version: 2.22.0 + resolution: "streamx@npm:2.22.0" + dependencies: + bare-events: ^2.2.0 + fast-fifo: ^1.3.2 + text-decoder: ^1.1.0 + dependenciesMeta: + bare-events: + optional: true + checksum: 9b2772a084281129d402f298bddf8d5f3c09b6b3d9b5c93df942e886b0b963c742a89736415cc53ffb8fc1f6f5b0b3ea171ed0ba86f1b31cde6ed35db5e07f6d + languageName: node + linkType: hard + "string-length@npm:^4.0.1": version: 4.0.2 resolution: "string-length@npm:4.0.2" @@ -9792,28 +10039,31 @@ __metadata: languageName: node linkType: hard -"tar-fs@npm:2.0.0": - version: 2.0.0 - resolution: "tar-fs@npm:2.0.0" +"tar-fs@npm:^3.0.8": + version: 3.0.8 + resolution: "tar-fs@npm:3.0.8" dependencies: - chownr: ^1.1.1 - mkdirp: ^0.5.1 + bare-fs: ^4.0.1 + bare-path: ^3.0.0 pump: ^3.0.0 - tar-stream: ^2.0.0 - checksum: f15079cd7e5b38b7982d3a1c2f0cf0eac58e1c622f0191b12d90440a4e97ea0f63bf31467f6ad9cb5ffdd47d9fc251682f9456e36c6d5e2488f49f14a9d28a75 + tar-stream: ^3.1.5 + dependenciesMeta: + bare-fs: + optional: true + bare-path: + optional: true + checksum: 5bebadd68e7a10cc3aa9c30b579c295e158cef7b1f42a73ee1bb1992925027aa8ef6cbcdb0d03e202e7f3850799391de30adf2585f7f240b606faa65df1a6b68 languageName: node linkType: hard -"tar-stream@npm:^2.0.0": - version: 2.2.0 - resolution: "tar-stream@npm:2.2.0" +"tar-stream@npm:^3.1.5": + version: 3.1.7 + resolution: "tar-stream@npm:3.1.7" dependencies: - bl: ^4.0.3 - end-of-stream: ^1.4.1 - fs-constants: ^1.0.0 - inherits: ^2.0.3 - readable-stream: ^3.1.1 - checksum: 699831a8b97666ef50021c767f84924cfee21c142c2eb0e79c63254e140e6408d6d55a065a2992548e72b06de39237ef2b802b99e3ece93ca3904a37622a66f3 + b4a: ^1.6.4 + fast-fifo: ^1.2.0 + streamx: ^2.15.0 + checksum: 6393a6c19082b17b8dcc8e7fd349352bb29b4b8bfe1075912b91b01743ba6bb4298f5ff0b499a3bbaf82121830e96a1a59d4f21a43c0df339e54b01789cb8cc6 languageName: node linkType: hard @@ -9878,6 +10128,15 @@ __metadata: languageName: node linkType: hard +"text-decoder@npm:^1.1.0": + version: 1.2.3 + resolution: "text-decoder@npm:1.2.3" + dependencies: + b4a: ^1.6.4 + checksum: d7642a61f9d72330eac52ff6b6e8d34dea03ebbb1e82749a8734e7892e246cf262ed70730d20c4351c5dc5334297b9cc6c0b6a8725a204a63a197d7728bb35e5 + languageName: node + linkType: hard + "text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" @@ -9885,13 +10144,6 @@ __metadata: languageName: node linkType: hard -"through@npm:^2.3.8": - version: 2.3.8 - resolution: "through@npm:2.3.8" - checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd - languageName: node - linkType: hard - "thunky@npm:^1.0.2": version: 1.1.0 resolution: "thunky@npm:1.1.0" @@ -10061,6 +10313,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.0.1": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a + languageName: node + linkType: hard + "tslib@npm:^2.0.3": version: 2.6.3 resolution: "tslib@npm:2.6.3" @@ -10171,6 +10430,13 @@ __metadata: languageName: node linkType: hard +"typed-query-selector@npm:^2.12.0": + version: 2.12.0 + resolution: "typed-query-selector@npm:2.12.0" + checksum: c4652f2eec16112d69e0da30c2effab3f03d1710f9559da1e1209bbfc9a20990d5de4ba97890c11f9d17d85c8ae3310953a86c198166599d4c36abc63664f169 + languageName: node + linkType: hard + "typedarray-to-buffer@npm:^3.1.5": version: 3.1.5 resolution: "typedarray-to-buffer@npm:3.1.5" @@ -10221,16 +10487,6 @@ __metadata: languageName: node linkType: hard -"unbzip2-stream@npm:1.3.3": - version: 1.3.3 - resolution: "unbzip2-stream@npm:1.3.3" - dependencies: - buffer: ^5.2.1 - through: ^2.3.8 - checksum: 5ae179e60971023c1ee2be2d3f02dd81e4dae8c506fe2367f63a2c126073c2f08c101005d328c34b13cb1d691627e4c6c528d1e273ea3a3dda15d906bac66391 - languageName: node - linkType: hard - "undici-types@npm:~6.19.2": version: 6.19.8 resolution: "undici-types@npm:6.19.8" @@ -10818,24 +11074,24 @@ __metadata: languageName: node linkType: hard -"ws@npm:7.4.6": - version: 7.4.6 - resolution: "ws@npm:7.4.6" +"ws@npm:^8.11.0, ws@npm:^8.13.0": + version: 8.18.0 + resolution: "ws@npm:8.18.0" peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + utf-8-validate: ">=5.0.2" peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true - checksum: 3a990b32ed08c72070d5e8913e14dfcd831919205be52a3ff0b4cdd998c8d554f167c9df3841605cde8b11d607768cacab3e823c58c96a5c08c987e093eb767a + checksum: 91d4d35bc99ff6df483bdf029b9ea4bfd7af1f16fc91231a96777a63d263e1eabf486e13a2353970efc534f9faa43bdbf9ee76525af22f4752cbc5ebda333975 languageName: node linkType: hard -"ws@npm:^8.11.0, ws@npm:^8.13.0": - version: 8.18.0 - resolution: "ws@npm:8.18.0" +"ws@npm:^8.18.1": + version: 8.18.1 + resolution: "ws@npm:8.18.1" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -10844,7 +11100,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 91d4d35bc99ff6df483bdf029b9ea4bfd7af1f16fc91231a96777a63d263e1eabf486e13a2353970efc534f9faa43bdbf9ee76525af22f4752cbc5ebda333975 + checksum: 4658357185d891bc45cc2d42a84f9e192d047e8476fb5cba25b604f7d75ca87ca0dd54cd0b2cc49aeee57c79045a741cb7d0b14501953ac60c790cd105c42f23 languageName: node linkType: hard @@ -10890,7 +11146,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.3.1": +"yargs@npm:^17.3.1, yargs@npm:^17.7.2": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: @@ -10928,3 +11184,10 @@ __metadata: checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 languageName: node linkType: hard + +"zod@npm:^3.24.1": + version: 3.24.2 + resolution: "zod@npm:3.24.2" + checksum: c02455c09678c5055c636d64f9fcda2424fea0aa46ac7d9681e7f41990bc55f488bcd84b9d7cfef0f6e906f51f55b245239d92a9f726248aa74c5b84edf00c2d + languageName: node + linkType: hard From 36660525f9963e3ae8711a913b89aa3b983dad27 Mon Sep 17 00:00:00 2001 From: Victor Conner Date: Wed, 12 Mar 2025 11:38:07 +0100 Subject: [PATCH 75/88] Update the useSharedFacet typing (#145) Co-authored-by: Paulo Ragonha --- packages/@react-facet/shared-facet/src/context.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/@react-facet/shared-facet/src/context.ts b/packages/@react-facet/shared-facet/src/context.ts index 0c3cb092..eb44fb62 100644 --- a/packages/@react-facet/shared-facet/src/context.ts +++ b/packages/@react-facet/shared-facet/src/context.ts @@ -8,6 +8,8 @@ export const sharedFacetDriverContext = createContext(dummyCo export const SharedFacetDriverProvider = sharedFacetDriverContext.Provider -export const useSharedFacet = (sharedFacet: SharedFacet): Facet => { - return sharedFacet(useContext(sharedFacetDriverContext)) +type InferFacet = T extends SharedFacet ? Facet : never + +export const useSharedFacet = >(sharedFacet: T): InferFacet => { + return sharedFacet(useContext(sharedFacetDriverContext)) as InferFacet } From ef7450bd7a5ae36d438a60c319336760fcfbcca8 Mon Sep 17 00:00:00 2001 From: Marlon Date: Wed, 2 Apr 2025 13:33:44 +0200 Subject: [PATCH 76/88] Correctly export fireEvent from renderer.ts (#143) * Update renderer.ts to export fireEvent correctly * Approach to export testing library while overriding fireEvent * Export with disabled rules. --- .../@react-facet/dom-fiber-testing-library/src/renderer.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts b/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts index 47d3fe78..e58c627e 100644 --- a/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts +++ b/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts @@ -240,4 +240,7 @@ const environment = setup() export const act = environment.act export const render = environment.render export const cleanup = environment.cleanup +// eslint-disable-next-line import/export export * from '@testing-library/dom' +// eslint-disable-next-line import/export +export const fireEvent = environment.fireEvent From acf37ae1f1b1da1adacf6df9728f4933d98ec807 Mon Sep 17 00:00:00 2001 From: Omar ElGaml Date: Tue, 8 Jul 2025 16:32:12 +0200 Subject: [PATCH 77/88] Re-worked useFacetUnwrap to initialize the facet before creating the state, thereby having a value on initial render instead of NO_VALUE. --- .../core/src/hooks/useFacetUnwrap.ts | 89 ++++++++++--------- 1 file changed, 49 insertions(+), 40 deletions(-) diff --git a/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts b/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts index 5b3e1c4b..f414efa9 100644 --- a/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts +++ b/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react' +import { useLayoutEffect, useMemo, useState } from 'react' import { FacetProp, isFacet, Value, NoValue, EqualityCheck, NO_VALUE } from '../types' import { defaultEqualityCheck } from '../equalityChecks' @@ -12,6 +12,11 @@ export function useFacetUnwrap( prop: FacetProp, equalityCheck: EqualityCheck = defaultEqualityCheck, ): T | NoValue { + const initializationCleanup = useMemo(() => { + if (!isFacet(prop)) return () => {} + return prop.observe(() => {}) + }, [prop]) + const [state, setState] = useState<{ value: T | NoValue }>(() => { if (!isFacet(prop)) return { value: prop } @@ -20,55 +25,59 @@ export function useFacetUnwrap( } }) - useEffect(() => { - if (!isFacet(prop)) return + useLayoutEffect(() => { + if (isFacet(prop)) { + // Initialize the equalityCheck + const isEqual = equalityCheck() + const startValue = prop.get() + if (startValue !== NO_VALUE) { + isEqual(startValue) + } - // Initialize the equalityCheck - const isEqual = equalityCheck() - const startValue = prop.get() - if (startValue !== NO_VALUE) { - isEqual(startValue) - } + const cleanup = prop.observe((value) => { + setState((previousState) => { + const { value: previousValue } = previousState - return prop.observe((value) => { - setState((previousState) => { - const { value: previousValue } = previousState + /** + * Performs this equality check locally to prevent triggering two consecutive renderings + * for facets that have immutable values (unfortunately we can't handle mutable values). + * + * The two renderings might happen for the same state value if the Facet has a value on mount. + * + * The unwrap will get the value: + * - Once on initialization of the useState above + * - And another time on this observe initialization + */ + if (equalityCheck === defaultEqualityCheck) { + const typeofValue = typeof previousValue - /** - * Performs this equality check locally to prevent triggering two consecutive renderings - * for facets that have immutable values (unfortunately we can't handle mutable values). - * - * The two renderings might happen for the same state value if the Facet has a value on mount. - * - * The unwrap will get the value: - * - Once on initialization of the useState above - * - And another time on this observe initialization - */ - if (equalityCheck === defaultEqualityCheck) { - const typeofValue = typeof previousValue + if ( + (typeofValue === 'number' || + typeofValue === 'string' || + typeofValue === 'boolean' || + value === undefined || + value === null) && + value === previousValue + ) { + return previousState + } + + return { value } + } - if ( - (typeofValue === 'number' || - typeofValue === 'string' || - typeofValue === 'boolean' || - value === undefined || - value === null) && - value === previousValue - ) { + if (previousValue !== NO_VALUE && isEqual(value)) { return previousState } return { value } - } + }) + }) - if (previousValue !== NO_VALUE && isEqual(value)) { - return previousState - } + initializationCleanup() - return { value } - }) - }) - }, [prop, equalityCheck]) + return cleanup + } + }, [prop, equalityCheck, initializationCleanup]) return isFacet(prop) ? state.value : prop } From d605cf05d9d756a7eac4e18eb5a63c809979452a Mon Sep 17 00:00:00 2001 From: Marlon Huber-Smith Date: Thu, 22 May 2025 12:17:52 +0200 Subject: [PATCH 78/88] Fix issue where equality checker was not initialising if the underlying facet value had an initial value. --- .../core/src/components/Map.spec.tsx | 2 +- .../core/src/facet/createFacet.ts | 9 + .../core/src/hooks/useFacetMap.spec.tsx | 4 +- .../core/src/hooks/useFacetMemo.spec.tsx | 32 +++ .../core/src/mapFacets/mapFacetArrayCached.ts | 4 +- .../src/mapFacets/mapFacetSingleCached.ts | 4 +- .../mapFacets/mapFacetSingleLightweight.ts | 17 +- .../src/mapFacets/mapIntoObserveArray.spec.ts | 24 ++ .../core/src/mapFacets/mapIntoObserveArray.ts | 43 +++- .../mapFacets/mapIntoObserveSingle.spec.ts | 219 ++++++++++-------- .../src/mapFacets/mapIntoObserveSingle.ts | 104 ++++++--- 11 files changed, 307 insertions(+), 155 deletions(-) diff --git a/packages/@react-facet/core/src/components/Map.spec.tsx b/packages/@react-facet/core/src/components/Map.spec.tsx index 84e2e543..97dfdc3b 100644 --- a/packages/@react-facet/core/src/components/Map.spec.tsx +++ b/packages/@react-facet/core/src/components/Map.spec.tsx @@ -138,7 +138,7 @@ it('updates only items that have changed', () => { // This would ideally only be called 5 times. // There is a future fix planned: https://github.com/Mojang/ore-ui/commit/66bc36336322970c16f663eea0259dd53970621b - expect(mock).toHaveBeenCalledTimes(10) + expect(mock).toHaveBeenCalledTimes(5) mock.mockClear() diff --git a/packages/@react-facet/core/src/facet/createFacet.ts b/packages/@react-facet/core/src/facet/createFacet.ts index 971c06c6..978616af 100644 --- a/packages/@react-facet/core/src/facet/createFacet.ts +++ b/packages/@react-facet/core/src/facet/createFacet.ts @@ -21,6 +21,15 @@ export function createFacet({ const checker = equalityCheck?.() + // Run the checker once to initialize the known value + if (initialValue !== NO_VALUE) { + if (equalityCheck === defaultEqualityCheck) { + currentValue = initialValue + } else { + checker(initialValue) + } + } + const update = (newValue: V) => { if (equalityCheck !== undefined) { // we optimize for the most common scenario of using the defaultEqualityCheck (by inline its implementation) diff --git a/packages/@react-facet/core/src/hooks/useFacetMap.spec.tsx b/packages/@react-facet/core/src/hooks/useFacetMap.spec.tsx index 86f78c93..1ed7942e 100644 --- a/packages/@react-facet/core/src/hooks/useFacetMap.spec.tsx +++ b/packages/@react-facet/core/src/hooks/useFacetMap.spec.tsx @@ -23,7 +23,9 @@ it('triggers the map once for each multiple consumers', () => { render() - expect(mapFn).toHaveBeenCalledTimes(2) + // It will be called once on initialize for each consumer (as valueFacet has an initial value) + // and then another time for each consumer when the facet is observed and emits its initial value + expect(mapFn).toHaveBeenCalledTimes(4) }) describe('multiple dependencies', () => { diff --git a/packages/@react-facet/core/src/hooks/useFacetMemo.spec.tsx b/packages/@react-facet/core/src/hooks/useFacetMemo.spec.tsx index 9427f632..0d0f0b82 100644 --- a/packages/@react-facet/core/src/hooks/useFacetMemo.spec.tsx +++ b/packages/@react-facet/core/src/hooks/useFacetMemo.spec.tsx @@ -265,6 +265,38 @@ describe('multiple dependencies', () => { expect(mock).not.toHaveBeenCalled() }) + + // This test will not pass, because the listener is called twice. This is due to + // `createFacet.observe` calls the listener twice: once when observe is run, and subsequently + // when the `startSubscription` call is made. Usually developers will not hit this issue as they + // will likely have an object equality check in place, but it could be nice to avoid this extra call regardless. + it.skip('only fires onces if both facets have initial values, and returned value is non-primitive', () => { + const facetA = createFacet({ initialValue: 4 }) + const facetB = createFacet({ initialValue: 5 }) + const facetC = createFacet({ initialValue: 6 }) + + const mock = jest.fn() + + const ComponentWithFacetEffect = () => { + const adaptValue = useFacetMemo((a, b, c) => ({ foo: a + b + c }), [], [facetA, facetB, facetC]) + + useFacetEffect( + (value) => { + mock(value) + }, + [], + [adaptValue], + ) + + return null + } + + render() + expect(mock).toHaveBeenCalledWith({ foo: 4 + 5 + 6 }) + expect(mock).toHaveBeenCalledTimes(1) + + mock.mockClear() + }) }) describe('single dependency', () => { diff --git a/packages/@react-facet/core/src/mapFacets/mapFacetArrayCached.ts b/packages/@react-facet/core/src/mapFacets/mapFacetArrayCached.ts index 964cc9a3..deed6df2 100644 --- a/packages/@react-facet/core/src/mapFacets/mapFacetArrayCached.ts +++ b/packages/@react-facet/core/src/mapFacets/mapFacetArrayCached.ts @@ -10,8 +10,8 @@ export function mapFacetArrayCached( const initialValues = facets.map((facet) => facet.get()) const hasAllValues = initialValues.reduce((prev, curr) => prev && curr !== NO_VALUE, true) const cachedFacet = createFacet({ - // pass the equalityCheck to the mapIntoObserveArray to prevent even triggering the observable - startSubscription: mapIntoObserveArray(facets, fn, equalityCheck), + equalityCheck, + startSubscription: mapIntoObserveArray(facets, fn), initialValue: hasAllValues ? fn(...initialValues) : NO_VALUE, }) diff --git a/packages/@react-facet/core/src/mapFacets/mapFacetSingleCached.ts b/packages/@react-facet/core/src/mapFacets/mapFacetSingleCached.ts index 0e65cf4e..5faa6a8a 100644 --- a/packages/@react-facet/core/src/mapFacets/mapFacetSingleCached.ts +++ b/packages/@react-facet/core/src/mapFacets/mapFacetSingleCached.ts @@ -9,8 +9,8 @@ export function mapFacetSingleCached( ): Facet { const initialValue = facet.get() const cachedFacet = createFacet({ - // pass the equalityCheck to the mapIntoObserveSingle to prevent even triggering the observable - startSubscription: mapIntoObserveSingle(facet, fn, equalityCheck), + equalityCheck, + startSubscription: mapIntoObserveSingle(facet, fn), initialValue: initialValue !== NO_VALUE ? fn(initialValue) : NO_VALUE, }) diff --git a/packages/@react-facet/core/src/mapFacets/mapFacetSingleLightweight.ts b/packages/@react-facet/core/src/mapFacets/mapFacetSingleLightweight.ts index d313f5ef..ee6990fc 100644 --- a/packages/@react-facet/core/src/mapFacets/mapFacetSingleLightweight.ts +++ b/packages/@react-facet/core/src/mapFacets/mapFacetSingleLightweight.ts @@ -1,5 +1,10 @@ +import { defaultEqualityCheck } from '../equalityChecks' import { EqualityCheck, Facet, NO_VALUE, NoValue } from '../types' -import { mapIntoObserveSingle } from './mapIntoObserveSingle' +import { + mapIntoObserveSingle, + mapIntoObserveSingleCustomEqualityCheck, + mapIntoObserveSingleDefaultEqualityCheck, +} from './mapIntoObserveSingle' export function mapFacetSingleLightweight( facet: Facet, @@ -14,6 +19,14 @@ export function mapFacetSingleLightweight( return fn(dependencyValue) }, - observe: mapIntoObserveSingle(facet, fn, equalityCheck), + observe: + // Most common scenario is not having any equality check + equalityCheck === undefined + ? mapIntoObserveSingle(facet, fn) + : // Then we optimize for the second most common scenario of using the defaultEqualityCheck (by inline its implementation) + equalityCheck === defaultEqualityCheck + ? mapIntoObserveSingleDefaultEqualityCheck(facet, fn) + : // Otherwise we use the custom equality check + mapIntoObserveSingleCustomEqualityCheck(facet, fn, equalityCheck), } } diff --git a/packages/@react-facet/core/src/mapFacets/mapIntoObserveArray.spec.ts b/packages/@react-facet/core/src/mapFacets/mapIntoObserveArray.spec.ts index 6c10a079..fc3cdde5 100644 --- a/packages/@react-facet/core/src/mapFacets/mapIntoObserveArray.spec.ts +++ b/packages/@react-facet/core/src/mapFacets/mapIntoObserveArray.spec.ts @@ -2,6 +2,30 @@ import { defaultEqualityCheck } from '../equalityChecks' import { NO_VALUE } from '../types' import { mapIntoObserveArray } from './mapIntoObserveArray' +it.only('only calls listener once if initial values are provided', () => { + const sourceA = { observe: jest.fn(), get: jest.fn() } + const sourceB = { observe: jest.fn(), get: jest.fn() } + + const observe = mapIntoObserveArray([sourceA, sourceB], (valueA: number, valueB: number) => { + return valueA + valueB + }) + const listener = jest.fn() + + observe(listener) + + expect(sourceA.observe).toBeCalled() + expect(sourceB.observe).toBeCalled() + + // trigger an update on one dependency and check it wasn't called + sourceA.observe.mock.calls[0][0](10) + expect(listener).not.toBeCalled() + + // trigger an update on the other dependency and check it was called + listener.mockClear() + sourceB.observe.mock.calls[0][0](10) + expect(listener).toBeCalledTimes(1) +}) + it('checks equality of primitives when passing defaultEqualityCheck', () => { const sourceA = { observe: jest.fn(), get: jest.fn() } const sourceB = { observe: jest.fn(), get: jest.fn() } diff --git a/packages/@react-facet/core/src/mapFacets/mapIntoObserveArray.ts b/packages/@react-facet/core/src/mapFacets/mapIntoObserveArray.ts index a367355c..54ba4d13 100644 --- a/packages/@react-facet/core/src/mapFacets/mapIntoObserveArray.ts +++ b/packages/@react-facet/core/src/mapFacets/mapIntoObserveArray.ts @@ -11,6 +11,7 @@ export function mapIntoObserveArray( return (listener: Listener) => { let currentValue: Option = NO_VALUE const checker = equalityCheck?.() + let isFirstTimeRunning = true const dependencyValues: Option[] = facets.map(() => NO_VALUE) let hasAllDependencies = false @@ -32,20 +33,28 @@ export function mapIntoObserveArray( if (!hasAllDependencies) return const result = fn(...dependencyValues) - if (result === NO_VALUE) return + + if (isFirstTimeRunning) { + isFirstTimeRunning = false + if (result !== NO_VALUE) { + // Save the initial value on first run + currentValue = result + listener(result) + return + } + } const typeofValue = typeof currentValue + const isValuePrimitive = + typeofValue === 'number' || + typeofValue === 'string' || + typeofValue === 'boolean' || + currentValue === null || + currentValue === undefined + const isResultMatchingCurrentValue = currentValue === result - if ( - (typeofValue === 'number' || - typeofValue === 'string' || - typeofValue === 'boolean' || - currentValue === null || - currentValue === undefined) && - currentValue === result - ) { - return - } + if (result === NO_VALUE) return + if (isValuePrimitive && isResultMatchingCurrentValue) return currentValue = result @@ -56,6 +65,18 @@ export function mapIntoObserveArray( if (!hasAllDependencies) return const result = fn(...dependencyValues) + + if (isFirstTimeRunning) { + isFirstTimeRunning = false + if (result !== NO_VALUE) { + // Run the checker to save the initial value on first run + if (!checker(result)) { + listener(result) + } + return + } + } + if (result === NO_VALUE) return if (checker(result)) return diff --git a/packages/@react-facet/core/src/mapFacets/mapIntoObserveSingle.spec.ts b/packages/@react-facet/core/src/mapFacets/mapIntoObserveSingle.spec.ts index d7c7f560..cf4551b9 100644 --- a/packages/@react-facet/core/src/mapFacets/mapIntoObserveSingle.spec.ts +++ b/packages/@react-facet/core/src/mapFacets/mapIntoObserveSingle.spec.ts @@ -1,131 +1,139 @@ -import { defaultEqualityCheck } from '../equalityChecks' import { NO_VALUE } from '../types' -import { mapIntoObserveSingle } from './mapIntoObserveSingle' +import { + mapIntoObserveSingle, + mapIntoObserveSingleCustomEqualityCheck, + mapIntoObserveSingleDefaultEqualityCheck, +} from './mapIntoObserveSingle' + +describe('mapIntoObserveSingle', () => { + it('does not check the equality of primitives', () => { + const source = { observe: jest.fn(), get: jest.fn() } -it('checks equality of primitives when passing defaultEqualityCheck', () => { - const source = { observe: jest.fn(), get: jest.fn() } + const observe = mapIntoObserveSingle(source, (value) => value) + const listener = jest.fn() - const observe = mapIntoObserveSingle(source, (value) => value, defaultEqualityCheck) - const listener = jest.fn() + observe(listener) - observe(listener) + expect(source.observe).toBeCalled() - expect(source.observe).toBeCalled() + // trigger an update and check it was called + source.observe.mock.calls[0][0](10) + expect(listener).toBeCalledTimes(1) + expect(listener).toBeCalledWith(10) - // trigger an update and check it was called - source.observe.mock.calls[0][0](10) - expect(listener).toBeCalledTimes(1) - expect(listener).toBeCalledWith(10) + // trigger an update (with the same value) and check it was called + listener.mockClear() + source.observe.mock.calls[0][0](10) + expect(listener).toBeCalledTimes(1) + expect(listener).toBeCalledWith(10) + }) - // trigger an update (with the same value) and check it wasn't called - listener.mockClear() - source.observe.mock.calls[0][0](10) - expect(listener).toBeCalledTimes(0) + it('mapping to NO_VALUE stops propagation', () => { + const source = { observe: jest.fn(), get: jest.fn() } - // trigger an update (with a new value) and check it was called - listener.mockClear() - source.observe.mock.calls[0][0](20) - expect(listener).toBeCalledTimes(1) - expect(listener).toBeCalledWith(20) -}) + const observe = mapIntoObserveSingle(source, () => NO_VALUE) + const listener = jest.fn() -it('checks equality of undefined when passing defaultEqualityCheck', () => { - const source = { observe: jest.fn(), get: jest.fn() } + observe(listener) - const observe = mapIntoObserveSingle( - source, - (value) => value, - defaultEqualityCheck, - ) - const listener = jest.fn() + expect(source.observe).toBeCalled() - observe(listener) + // trigger an update and check listener was NOT called + source.observe.mock.calls[0][0](10) + expect(listener).toBeCalledTimes(0) + }) +}) - expect(source.observe).toBeCalled() +describe('mapIntoObserveSingleDefaultEqualityCheck', () => { + it('checks equality of primitives', () => { + const source = { observe: jest.fn(), get: jest.fn() } - // trigger an update and check it was called - source.observe.mock.calls[0][0](undefined) - expect(listener).toBeCalledTimes(1) - expect(listener).toBeCalledWith(undefined) + const observe = mapIntoObserveSingleDefaultEqualityCheck(source, (value) => value) + const listener = jest.fn() - // trigger an update (with the same value) and check it wasn't called - listener.mockClear() - source.observe.mock.calls[0][0](undefined) - expect(listener).toBeCalledTimes(0) + observe(listener) - // trigger an update (with a new value) and check it was called - listener.mockClear() - source.observe.mock.calls[0][0](20) - expect(listener).toBeCalledTimes(1) - expect(listener).toBeCalledWith(20) -}) + expect(source.observe).toBeCalled() -it('does not checks equality of primitives by default', () => { - const source = { observe: jest.fn(), get: jest.fn() } + // expect the listener to be called once with the initial value + expect(listener).toBeCalledTimes(1) - const observe = mapIntoObserveSingle(source, (value) => value) - const listener = jest.fn() + // trigger an update and check it was called + source.observe.mock.calls[0][0](10) + expect(listener).toBeCalledTimes(2) + expect(listener).toBeCalledWith(10) - observe(listener) + // trigger an update (with the same value) and check it wasn't called + listener.mockClear() + source.observe.mock.calls[0][0](10) + expect(listener).toBeCalledTimes(0) - expect(source.observe).toBeCalled() + // trigger an update (with a new value) and check it was called + listener.mockClear() + source.observe.mock.calls[0][0](20) + expect(listener).toBeCalledTimes(1) + expect(listener).toBeCalledWith(20) + }) - // trigger an update and check it was called - source.observe.mock.calls[0][0](10) - expect(listener).toBeCalledTimes(1) - expect(listener).toBeCalledWith(10) + it('checks equality of undefined', () => { + const source = { observe: jest.fn(), get: jest.fn() } - // trigger an update (with the same value) and check it was called - listener.mockClear() - source.observe.mock.calls[0][0](10) - expect(listener).toBeCalledTimes(1) - expect(listener).toBeCalledWith(10) -}) + const observe = mapIntoObserveSingleDefaultEqualityCheck( + source, + (value) => value, + ) + const listener = jest.fn() -it('keeps equality checks per observe', () => { - const source = { observe: jest.fn(), get: jest.fn() } + observe(listener) - const observe = mapIntoObserveSingle(source, (value) => value, defaultEqualityCheck) - const listenerC = jest.fn() - const listenerD = jest.fn() + expect(source.observe).toBeCalled() - observe(listenerC) - observe(listenerD) + // trigger an update and check it was called + source.observe.mock.calls[0][0](undefined) + expect(listener).toBeCalledTimes(1) + expect(listener).toBeCalledWith(undefined) - // trigger an update for each listener - source.observe.mock.calls[0][0](10) - source.observe.mock.calls[1][0](10) + // trigger an update (with the same value) and check it wasn't called + listener.mockClear() + source.observe.mock.calls[0][0](undefined) + expect(listener).toBeCalledTimes(0) - expect(listenerC).toBeCalledTimes(1) - expect(listenerC).toBeCalledWith(10) - expect(listenerD).toBeCalledTimes(1) - expect(listenerD).toBeCalledWith(10) -}) + // trigger an update (with a new value) and check it was called + listener.mockClear() + source.observe.mock.calls[0][0](20) + expect(listener).toBeCalledTimes(1) + expect(listener).toBeCalledWith(20) + }) -it('supports custom equality checks', () => { - const source = { observe: jest.fn(), get: jest.fn() } + it('keeps equality checks per observe', () => { + const source = { observe: jest.fn(), get: jest.fn() } - // always equals, should prevent updates - const customEqualityCheck = () => () => true + const observe = mapIntoObserveSingleDefaultEqualityCheck(source, (value) => value) + const listenerC = jest.fn() + const listenerD = jest.fn() - const observe = mapIntoObserveSingle(source, (value) => value, customEqualityCheck) - const listener = jest.fn() + observe(listenerC) + observe(listenerD) - observe(listener) + // expect the listeners to be called once with the initial value + expect(listenerC).toBeCalledTimes(1) + expect(listenerD).toBeCalledTimes(1) - expect(source.observe).toBeCalled() + // trigger an update for each listener + source.observe.mock.calls[0][0](10) + source.observe.mock.calls[1][0](10) - // trigger an update and check it wasn't called - listener.mockClear() - source.observe.mock.calls[0][0](10) - expect(listener).toBeCalledTimes(0) -}) + // expect the listeners to be called a second time with the new value + expect(listenerC).toBeCalledTimes(2) + expect(listenerC).toBeCalledWith(10) + expect(listenerD).toBeCalledTimes(2) + expect(listenerD).toBeCalledWith(10) + }) -describe('mapping to NO_VALUE', () => { - it('stops propagation when no equalityCheck is provided', () => { + it('mapping to NO_VALUE stops propagation', () => { const source = { observe: jest.fn(), get: jest.fn() } - const observe = mapIntoObserveSingle(source, () => NO_VALUE) + const observe = mapIntoObserveSingleDefaultEqualityCheck(source, () => NO_VALUE) const listener = jest.fn() observe(listener) @@ -136,29 +144,44 @@ describe('mapping to NO_VALUE', () => { source.observe.mock.calls[0][0](10) expect(listener).toBeCalledTimes(0) }) +}) - it('stops propagation when defaultEqualityCheck is provided', () => { +describe('mapIntoObserveSingleCustomEqualityCheck', () => { + it('supports custom equality checks', () => { const source = { observe: jest.fn(), get: jest.fn() } - const observe = mapIntoObserveSingle(source, () => NO_VALUE, defaultEqualityCheck) + // always equals, should prevent updates + const customEqualityCheck = () => () => true + + const observe = mapIntoObserveSingleCustomEqualityCheck( + source, + (value) => value, + customEqualityCheck, + ) const listener = jest.fn() observe(listener) expect(source.observe).toBeCalled() - // trigger an update and check listener was NOT called + // trigger an update and check it wasn't called + listener.mockClear() + source.observe.mock.calls[0][0](10) + expect(listener).toBeCalledTimes(0) + + // trigger an update and check it wasn't called + listener.mockClear() source.observe.mock.calls[0][0](10) expect(listener).toBeCalledTimes(0) }) - it('stops propagation when a custom equalityCheck is provided', () => { + it('mapping to NO_VALUE stops propagation', () => { const source = { observe: jest.fn(), get: jest.fn() } // is never equal const customEqualityCheck = () => () => false - const observe = mapIntoObserveSingle(source, () => NO_VALUE, customEqualityCheck) + const observe = mapIntoObserveSingleCustomEqualityCheck(source, () => NO_VALUE, customEqualityCheck) const listener = jest.fn() observe(listener) diff --git a/packages/@react-facet/core/src/mapFacets/mapIntoObserveSingle.ts b/packages/@react-facet/core/src/mapFacets/mapIntoObserveSingle.ts index 3b756730..1a499491 100644 --- a/packages/@react-facet/core/src/mapFacets/mapIntoObserveSingle.ts +++ b/packages/@react-facet/core/src/mapFacets/mapIntoObserveSingle.ts @@ -1,58 +1,86 @@ -import { defaultEqualityCheck } from '../equalityChecks' import { EqualityCheck, Listener, NO_VALUE, Observe, Facet, NoValue } from '../types' -export function mapIntoObserveSingle( +export function mapIntoObserveSingle(facet: Facet, fn: (value: T) => M | NoValue): Observe { + return (listener: Listener) => { + return facet.observe((value: T) => { + const result = fn(value) + if (result === NO_VALUE) return + + listener(result) + }) + } +} + +// The default equality checker is inlined here as an +// optimization for the most common equality checker +export function mapIntoObserveSingleDefaultEqualityCheck( facet: Facet, fn: (value: T) => M | NoValue, - equalityCheck?: EqualityCheck, ): Observe { - // Most common scenario is not having any equality check - if (equalityCheck === undefined) { - return (listener: Listener) => { - return facet.observe((value: T) => { - const result = fn(value) - if (result === NO_VALUE) return - - listener(result) - }) + return (listener: Listener) => { + let currentValue: M | typeof NO_VALUE = NO_VALUE + + // Check if we have an initial value + const initialFacetValue = facet.get() + if (initialFacetValue !== NO_VALUE) { + const initialResult = fn(initialFacetValue) + if (initialResult !== NO_VALUE) { + // Save the initial value on first run + currentValue = initialResult + listener(initialResult) + } } - } - // Then we optimize for the second most common scenario of using the defaultEqualityCheck (by inline its implementation) - if (equalityCheck === defaultEqualityCheck) { - return (listener: Listener) => { - let currentValue: M | typeof NO_VALUE = NO_VALUE - - return facet.observe((value: T) => { - const result = fn(value) - if (result === NO_VALUE) return - - const typeofValue = typeof currentValue - - if ( - (typeofValue === 'number' || - typeofValue === 'string' || - typeofValue === 'boolean' || - currentValue === null || - currentValue === undefined) && - currentValue === result - ) { - return - } + return facet.observe((value: T) => { + const result = fn(value) - currentValue = result + if (result === NO_VALUE) return - listener(result) - }) - } + const typeofValue = typeof currentValue + + if ( + (typeofValue === 'number' || + typeofValue === 'string' || + typeofValue === 'boolean' || + currentValue === null || + currentValue === undefined) && + currentValue === result + ) { + return + } + + currentValue = result + + listener(result) + }) } +} +export function mapIntoObserveSingleCustomEqualityCheck( + facet: Facet, + fn: (value: T) => M | NoValue, + equalityCheck: EqualityCheck, +): Observe { // Finally we use the custom equality check return (listener: Listener) => { const checker = equalityCheck() + // Check if we have an initial value + const initialFacetValue = facet.get() + + if (initialFacetValue !== NO_VALUE) { + const initialResult = fn(initialFacetValue) + if (initialResult !== NO_VALUE) { + // Run the checker to save the initial value on first run + if (!checker(initialResult)) { + listener(initialResult) + } + } + } + return facet.observe((value: T) => { const result = fn(value) + if (result === NO_VALUE) return if (checker(result)) return From c7ada1d3b779ffb27143f9007560d7cdc36664f8 Mon Sep 17 00:00:00 2001 From: Paulo Date: Sun, 31 Aug 2025 11:09:27 +0200 Subject: [PATCH 79/88] Ensures setState is not called if not needed --- .../core/src/hooks/useFacetUnwrap.ts | 66 ++++++++++--------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts b/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts index f414efa9..2f57127c 100644 --- a/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts +++ b/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts @@ -1,4 +1,4 @@ -import { useLayoutEffect, useMemo, useState } from 'react' +import { useLayoutEffect, useMemo, useRef, useState } from 'react' import { FacetProp, isFacet, Value, NoValue, EqualityCheck, NO_VALUE } from '../types' import { defaultEqualityCheck } from '../equalityChecks' @@ -25,6 +25,10 @@ export function useFacetUnwrap( } }) + // Creates a ref, and keep it updated (used for equality check within the effect) + const previousStateRef = useRef(state) + previousStateRef.current = state + useLayoutEffect(() => { if (isFacet(prop)) { // Initialize the equalityCheck @@ -35,42 +39,40 @@ export function useFacetUnwrap( } const cleanup = prop.observe((value) => { - setState((previousState) => { - const { value: previousValue } = previousState - - /** - * Performs this equality check locally to prevent triggering two consecutive renderings - * for facets that have immutable values (unfortunately we can't handle mutable values). - * - * The two renderings might happen for the same state value if the Facet has a value on mount. - * - * The unwrap will get the value: - * - Once on initialization of the useState above - * - And another time on this observe initialization - */ - if (equalityCheck === defaultEqualityCheck) { - const typeofValue = typeof previousValue + const { value: previousValue } = previousStateRef.current - if ( - (typeofValue === 'number' || - typeofValue === 'string' || - typeofValue === 'boolean' || - value === undefined || - value === null) && - value === previousValue - ) { - return previousState - } + /** + * Performs this equality check locally to prevent triggering two consecutive renderings + * for facets that have immutable values (unfortunately we can't handle mutable values). + * + * The two renderings might happen for the same state value if the Facet has a value on mount. + * + * The unwrap will get the value: + * - Once on initialization of the useState above + * - And another time on this observe initialization + */ + if (equalityCheck === defaultEqualityCheck) { + const typeofValue = typeof previousValue - return { value } + if ( + (typeofValue === 'number' || + typeofValue === 'string' || + typeofValue === 'boolean' || + value === undefined || + value === null) && + value === previousValue + ) { + return } - if (previousValue !== NO_VALUE && isEqual(value)) { - return previousState - } + return setState({ value }) + } + + if (previousValue !== NO_VALUE && isEqual(value)) { + return + } - return { value } - }) + return setState({ value }) }) initializationCleanup() From 80b10658d0cd5d4af12f58960d2b9370aaa98069 Mon Sep 17 00:00:00 2001 From: Paulo Date: Sun, 31 Aug 2025 11:10:31 +0200 Subject: [PATCH 80/88] Deprecate dom-components package --- packages/@react-facet/dom-components/LICENSE | 21 ----- .../@react-facet/dom-components/README.md | 3 - .../dom-components/jest.config.js | 10 --- .../@react-facet/dom-components/package.json | 59 ------------- .../@react-facet/dom-components/src/Div.tsx | 38 --------- .../@react-facet/dom-components/src/Img.tsx | 37 -------- .../@react-facet/dom-components/src/Input.tsx | 84 ------------------- .../dom-components/src/Paragraph.tsx | 36 -------- .../@react-facet/dom-components/src/Span.tsx | 38 --------- .../@react-facet/dom-components/src/Text.tsx | 58 ------------- .../dom-components/src/TextArea.tsx | 82 ------------------ .../src/__snapshots__/index.spec.tsx.snap | 53 ------------ .../dom-components/src/index.spec.tsx | 75 ----------------- .../@react-facet/dom-components/src/index.ts | 17 ---- .../@react-facet/dom-components/src/types.ts | 29 ------- .../dom-components/src/useSetProp.ts | 14 ---- .../dom-components/src/useSetStyle.ts | 57 ------------- .../@react-facet/dom-components/tsconfig.json | 7 -- yarn.lock | 20 ----- 19 files changed, 738 deletions(-) delete mode 100644 packages/@react-facet/dom-components/LICENSE delete mode 100644 packages/@react-facet/dom-components/README.md delete mode 100644 packages/@react-facet/dom-components/jest.config.js delete mode 100644 packages/@react-facet/dom-components/package.json delete mode 100644 packages/@react-facet/dom-components/src/Div.tsx delete mode 100644 packages/@react-facet/dom-components/src/Img.tsx delete mode 100644 packages/@react-facet/dom-components/src/Input.tsx delete mode 100644 packages/@react-facet/dom-components/src/Paragraph.tsx delete mode 100644 packages/@react-facet/dom-components/src/Span.tsx delete mode 100644 packages/@react-facet/dom-components/src/Text.tsx delete mode 100644 packages/@react-facet/dom-components/src/TextArea.tsx delete mode 100644 packages/@react-facet/dom-components/src/__snapshots__/index.spec.tsx.snap delete mode 100644 packages/@react-facet/dom-components/src/index.spec.tsx delete mode 100644 packages/@react-facet/dom-components/src/index.ts delete mode 100644 packages/@react-facet/dom-components/src/types.ts delete mode 100644 packages/@react-facet/dom-components/src/useSetProp.ts delete mode 100644 packages/@react-facet/dom-components/src/useSetStyle.ts delete mode 100644 packages/@react-facet/dom-components/tsconfig.json diff --git a/packages/@react-facet/dom-components/LICENSE b/packages/@react-facet/dom-components/LICENSE deleted file mode 100644 index b2f52a2b..00000000 --- a/packages/@react-facet/dom-components/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) Microsoft Corporation. - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/@react-facet/dom-components/README.md b/packages/@react-facet/dom-components/README.md deleted file mode 100644 index 03d8c6d8..00000000 --- a/packages/@react-facet/dom-components/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# @react-facet/dom-components - -React Facet is a state management for performant game UIs. For more information on how to use this package check the official documentation available at https://react-facet.mojang.com/. diff --git a/packages/@react-facet/dom-components/jest.config.js b/packages/@react-facet/dom-components/jest.config.js deleted file mode 100644 index 93714085..00000000 --- a/packages/@react-facet/dom-components/jest.config.js +++ /dev/null @@ -1,10 +0,0 @@ -/* eslint-env node */ - -const baseConfig = require('../../../jest.base.config') -const projectName = require('./package.json').name - -module.exports = { - ...baseConfig, - displayName: projectName, - rootDir: './', -} diff --git a/packages/@react-facet/dom-components/package.json b/packages/@react-facet/dom-components/package.json deleted file mode 100644 index 24792599..00000000 --- a/packages/@react-facet/dom-components/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "@react-facet/dom-components", - "repository": { - "type": "git", - "url": "https://github.com/Mojang/ore-ui.git", - "directory": "packages/@react-facet/dom-components" - }, - "author": { - "name": "Paulo Ragonha", - "email": "paulo@ragonha.me" - }, - "contributors": [ - { - "name": "Danila Dergachev", - "email": "dderg@protonmail.com" - }, - { - "name": "Fernando Via Canel", - "email": "fernando.via@gmail.com" - }, - { - "name": "Marlon Huber-Smith", - "email": "marlonhubersmith@gmail.com" - } - ], - "files": [ - "dist/**/*" - ], - "homepage": "https://react-facet.mojang.com/", - "bugs": "https://github.com/Mojang/ore-ui/issues", - "license": "MIT", - "version": "0.6.1", - "main": "src/index.tsx", - "publishConfig": { - "main": "dist/index.js", - "types": "dist/index.d.ts" - }, - "sideEffects": false, - "scripts": { - "build": "rimraf dist && tsc", - "prepublish": "yarn build" - }, - "peerDependencies": { - "@react-facet/core": "0.6.1", - "react": "^18.2.0" - }, - "devDependencies": { - "@react-facet/core": "0.6.1", - "@react-facet/dom-fiber-testing-library": "0.6.1", - "@testing-library/jest-dom": "^5.16.5", - "@types/react": "^18.2.0", - "@types/rimraf": "^3", - "cross-env": "^7.0.3", - "react": "18.2.0", - "react-dom": "^18.2.0", - "rimraf": "^3.0.2", - "typescript": "^4.8.2" - } -} diff --git a/packages/@react-facet/dom-components/src/Div.tsx b/packages/@react-facet/dom-components/src/Div.tsx deleted file mode 100644 index ef1088a4..00000000 --- a/packages/@react-facet/dom-components/src/Div.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import React, { useRef, RefObject, ReactNode } from 'react' -import { FacetCSSStyleDeclaration, FacetProp } from '@react-facet/core' -import { FocusEvents, KeyboardEvents, PointerEvents } from './types' -import { useSetProp } from './useSetProp' -import { useSetStyle } from './useSetStyle' - -export type DivProps = PointerEvents & - KeyboardEvents & - FocusEvents & { - className?: FacetProp - id?: FacetProp - style?: FacetCSSStyleDeclaration - children?: ReactNode - innerRef?: RefObject - } - -export const Div = ({ style, className, id, children, innerRef, ...handlers }: DivProps) => { - const defaultRef = useRef(null) - const ref = innerRef ?? defaultRef - - useSetProp(className, (value) => { - if (ref.current === null) return - ref.current.className = value ?? '' - }) - - useSetProp(id, (value) => { - if (ref.current === null) return - ref.current.id = value ?? '' - }) - - useSetStyle(style, ref) - - return ( -
- {children} -
- ) -} diff --git a/packages/@react-facet/dom-components/src/Img.tsx b/packages/@react-facet/dom-components/src/Img.tsx deleted file mode 100644 index ba08c741..00000000 --- a/packages/@react-facet/dom-components/src/Img.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React, { RefObject, useRef } from 'react' -import { FacetCSSStyleDeclaration, FacetProp } from '@react-facet/core' -import { PointerEvents } from './types' -import { useSetProp } from './useSetProp' -import { useSetStyle } from './useSetStyle' - -export interface ImgProps extends PointerEvents { - className?: FacetProp - id?: FacetProp - style?: FacetCSSStyleDeclaration - src: FacetProp - innerRef?: RefObject -} - -export const Img = ({ style, className, id, src, innerRef, ...handlers }: ImgProps) => { - const defaultRef = useRef(null) - const ref = innerRef ?? defaultRef - - useSetProp(className, (value) => { - if (ref.current === null) return - ref.current.className = value ?? '' - }) - - useSetProp(id, (value) => { - if (ref.current === null) return - ref.current.id = value ?? '' - }) - - useSetProp(src, (value) => { - if (ref.current === null) return - ref.current.setAttribute('src', value ?? '') - }) - - useSetStyle(style, ref) - - return -} diff --git a/packages/@react-facet/dom-components/src/Input.tsx b/packages/@react-facet/dom-components/src/Input.tsx deleted file mode 100644 index d86e0845..00000000 --- a/packages/@react-facet/dom-components/src/Input.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import React, { useRef, RefObject } from 'react' -import { FacetCSSStyleDeclaration, FacetProp } from '@react-facet/core' -import { useSetProp } from './useSetProp' -import { useSetStyle } from './useSetStyle' -import { PointerEvents, FocusEvents, KeyboardEvents } from './types' - -export type InputType = 'text' | 'button' | 'password' | 'checkbox' | 'radio' | 'number' - -export type InputProps = { - className?: FacetProp - id?: FacetProp - style?: FacetCSSStyleDeclaration - value?: FacetProp - disabled?: FacetProp - maxLength?: FacetProp - type?: FacetProp - innerRef?: RefObject -} & FocusEvents & - KeyboardEvents & - PointerEvents - -export const Input = ({ - style, - className, - id, - value, - maxLength, - disabled, - innerRef, - type, - ...handlers -}: InputProps) => { - const defaultRef = useRef(null) - const ref = innerRef ?? defaultRef - - useSetProp(className, (value) => { - if (ref.current === null) return - ref.current.className = value ?? '' - }) - - useSetProp(id, (value) => { - if (ref.current === null) return - ref.current.id = value ?? '' - }) - - useSetProp(value, (value) => { - if (ref.current === null) return - const element = ref.current - element.value = value ?? '' - element.setAttribute('value', value ?? '') - }) - - useSetProp(disabled, (value) => { - if (ref.current === null) return - if (value === undefined || value === false) { - ref.current.removeAttribute('disabled') - } else { - ref.current.setAttribute('disabled', '') - } - }) - - useSetProp(maxLength, (value) => { - if (ref.current === null) return - - if (value !== undefined) { - ref.current.maxLength = value - } else { - ref.current.removeAttribute('maxlength') - } - }) - - useSetProp(type, (value) => { - if (ref.current === null) return - if (value !== undefined) { - ref.current.setAttribute('type', value) - } else { - ref.current.removeAttribute('type') - } - }) - - useSetStyle(style, ref) - - return -} diff --git a/packages/@react-facet/dom-components/src/Paragraph.tsx b/packages/@react-facet/dom-components/src/Paragraph.tsx deleted file mode 100644 index de4ec174..00000000 --- a/packages/@react-facet/dom-components/src/Paragraph.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import React, { ReactNode, RefObject, useRef } from 'react' -import { FacetCSSStyleDeclaration, FacetProp } from '@react-facet/core' -import { PointerEvents } from './types' -import { useSetProp } from './useSetProp' -import { useSetStyle } from './useSetStyle' - -export interface ParagraphProps extends PointerEvents { - className?: FacetProp - id?: FacetProp - style?: FacetCSSStyleDeclaration - children?: ReactNode - innerRef?: RefObject -} - -export const Paragraph = ({ style, className, children, id, innerRef, ...handlers }: ParagraphProps) => { - const defaultRef = useRef(null) - const ref = innerRef ?? defaultRef - - useSetProp(className, (value) => { - if (ref.current === null) return - ref.current.className = value ?? '' - }) - - useSetProp(id, (value) => { - if (ref.current === null) return - ref.current.id = value ?? '' - }) - - useSetStyle(style, ref) - - return ( -

- {children} -

- ) -} diff --git a/packages/@react-facet/dom-components/src/Span.tsx b/packages/@react-facet/dom-components/src/Span.tsx deleted file mode 100644 index bd60df80..00000000 --- a/packages/@react-facet/dom-components/src/Span.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import React, { ReactNode, RefObject, useRef } from 'react' -import { FacetCSSStyleDeclaration, FacetProp } from '@react-facet/core' -import { FocusEvents, KeyboardEvents, PointerEvents } from './types' -import { useSetProp } from './useSetProp' -import { useSetStyle } from './useSetStyle' - -export type SpanProps = PointerEvents & - KeyboardEvents & - FocusEvents & { - className?: FacetProp - id?: FacetProp - style?: FacetCSSStyleDeclaration - children?: ReactNode - innerRef?: RefObject - } - -export const Span = ({ style, className, children, id, innerRef, ...handlers }: SpanProps) => { - const defaultRef = useRef(null) - const ref = innerRef ?? defaultRef - - useSetProp(className, (value) => { - if (ref.current === null) return - ref.current.className = value ?? '' - }) - - useSetProp(id, (value) => { - if (ref.current === null) return - ref.current.id = value ?? '' - }) - - useSetStyle(style, ref) - - return ( - - {children} - - ) -} diff --git a/packages/@react-facet/dom-components/src/Text.tsx b/packages/@react-facet/dom-components/src/Text.tsx deleted file mode 100644 index 648746da..00000000 --- a/packages/@react-facet/dom-components/src/Text.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import React, { RefObject, useRef } from 'react' -import { FacetCSSStyleDeclaration, FacetProp } from '@react-facet/core' -import { useSetProp } from './useSetProp' -import { useSetStyle } from './useSetStyle' - -interface TextBaseProps { - className?: FacetProp - id?: FacetProp - style?: FacetCSSStyleDeclaration - text: FacetProp -} - -export type TextDivProps = TextBaseProps & { - innerRef?: RefObject - tag: 'div' -} - -export type TextSpanProps = TextBaseProps & { - innerRef?: RefObject - tag?: 'span' -} - -export type TextParagraphProps = TextBaseProps & { - innerRef?: RefObject - tag: 'p' -} - -export type TextProps = TextDivProps | TextSpanProps | TextParagraphProps - -export const Text = ({ style, className, id, text, innerRef, tag = 'span' }: TextProps) => { - const defaultRef: typeof innerRef = useRef(null) - const ref = innerRef ?? defaultRef - - useSetProp(className, (value) => { - if (ref.current === null) return - ref.current.className = value ?? '' - }) - - useSetProp(id, (value) => { - if (ref.current === null) return - ref.current.id = value ?? '' - }) - - useSetProp(text, (value) => { - if (ref.current === null) return - ref.current.textContent = (value as string) ?? '' - }) - - useSetStyle(style, ref) - - if (tag === 'span') { - return - } else if (tag === 'div') { - return
} /> - } else { - return

} /> - } -} diff --git a/packages/@react-facet/dom-components/src/TextArea.tsx b/packages/@react-facet/dom-components/src/TextArea.tsx deleted file mode 100644 index 687f8675..00000000 --- a/packages/@react-facet/dom-components/src/TextArea.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import React, { useRef, RefObject } from 'react' -import { FacetCSSStyleDeclaration, FacetProp } from '@react-facet/core' -import { useSetProp } from './useSetProp' -import { useSetStyle } from './useSetStyle' -import { PointerEvents, FocusEvents, KeyboardEvents } from './types' - -export type TextAreaProps = { - className?: FacetProp - id?: FacetProp - style?: FacetCSSStyleDeclaration - value?: FacetProp - disabled?: FacetProp - maxLength?: FacetProp - rows?: FacetProp - innerRef?: RefObject -} & FocusEvents & - KeyboardEvents & - PointerEvents - -export const TextArea = ({ - style, - className, - id, - value, - maxLength, - disabled, - innerRef, - rows, - ...handlers -}: TextAreaProps) => { - const defaultRef = useRef(null) - const ref = innerRef ?? defaultRef - - useSetProp(className, (value) => { - if (ref.current === null) return - ref.current.className = value ?? '' - }) - - useSetProp(id, (value) => { - if (ref.current === null) return - ref.current.id = value ?? '' - }) - - useSetProp(value, (value) => { - if (ref.current === null) return - const element = ref.current - element.value = value ?? '' - element.setAttribute('value', value ?? '') - }) - - useSetProp(disabled, (value) => { - if (ref.current === null) return - if (value === undefined && value === false) { - ref.current.removeAttribute('disabled') - } else { - ref.current.setAttribute('disabled', '') - } - }) - - useSetProp(maxLength, (value) => { - if (ref.current === null) return - - if (value !== undefined) { - ref.current.maxLength = value - } else { - ref.current.removeAttribute('maxlength') - } - }) - - useSetProp(rows, (value) => { - if (ref.current === null) return - if (value !== undefined) { - ref.current.rows = value - } else { - ref.current.removeAttribute('rows') - } - }) - - useSetStyle(style, ref) - - return