From 039f72e41583a496a7843a4772fea3db7cb80f3e Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Mon, 26 Feb 2024 21:08:50 +0100 Subject: [PATCH 01/31] Remove LocalStorage support, simplify code --- .../evolu-common-web/src/DbWorker.worker.ts | 21 +++++- packages/evolu-common-web/src/DbWorkerLive.ts | 72 +++++-------------- packages/evolu-common-web/src/PlatformLive.ts | 31 +------- .../evolu-common-web/src/SyncWorker.worker.ts | 4 +- .../src/{DbWorker.ts => SyncWorkerLive.ts} | 21 +----- packages/evolu-common/src/DbWorker.ts | 2 +- packages/evolu-common/src/Evolu.ts | 1 - packages/evolu-common/src/Platform.ts | 6 +- packages/evolu-common/src/SyncWorker.ts | 2 +- packages/evolu-react-native/src/index.ts | 8 +-- 10 files changed, 51 insertions(+), 117 deletions(-) rename packages/evolu-common-web/src/{DbWorker.ts => SyncWorkerLive.ts} (53%) diff --git a/packages/evolu-common-web/src/DbWorker.worker.ts b/packages/evolu-common-web/src/DbWorker.worker.ts index 6f4f660bc..3301f209a 100644 --- a/packages/evolu-common-web/src/DbWorker.worker.ts +++ b/packages/evolu-common-web/src/DbWorker.worker.ts @@ -1,5 +1,22 @@ -import { DbWorkerInput } from "@evolu/common"; -import { dbWorker } from "./DbWorker.js"; +import { + DbWorker, + DbWorkerInput, + DbWorkerCommonLive, + NanoIdLive, +} from "@evolu/common"; +import * as Effect from "effect/Effect"; +import * as Layer from "effect/Layer"; +import { Bip39Live } from "./PlatformLive.js"; +import { SqliteLive } from "./SqliteLive.js"; +import { SyncWorkerLive } from "./SyncWorkerLive.js"; + +const dbWorker = Effect.provide( + DbWorker, + Layer.provide( + DbWorkerCommonLive, + Layer.mergeAll(SqliteLive, Bip39Live, NanoIdLive, SyncWorkerLive), + ), +).pipe(Effect.runSync); dbWorker.onMessage = (output): void => { postMessage(output); diff --git a/packages/evolu-common-web/src/DbWorkerLive.ts b/packages/evolu-common-web/src/DbWorkerLive.ts index 053cda9ec..992b329fe 100644 --- a/packages/evolu-common-web/src/DbWorkerLive.ts +++ b/packages/evolu-common-web/src/DbWorkerLive.ts @@ -1,9 +1,4 @@ -import { - DbWorker, - DbWorkerOutput, - PlatformName, - makeUnexpectedError, -} from "@evolu/common"; +import { DbWorker, DbWorkerOutput, PlatformName } from "@evolu/common"; import * as Effect from "effect/Effect"; import * as Function from "effect/Function"; import * as Layer from "effect/Layer"; @@ -13,56 +8,27 @@ export const DbWorkerLive = Layer.effect( Effect.gen(function* (_) { const platformName = yield* _(PlatformName); - if (platformName === "web-with-opfs") { - const worker = new Worker( - new URL("DbWorker.worker.js", import.meta.url), - { type: "module" }, - ); - worker.onmessage = (e: MessageEvent): void => { - dbWorker.onMessage(e.data); - }; - const dbWorker: DbWorker = { - postMessage: (input) => { - worker.postMessage(input); - }, + // no-op for SSR + if (platformName === "server") + return DbWorker.of({ + postMessage: Function.constVoid, onMessage: Function.constVoid, - }; - return dbWorker; - } + }); - if (platformName === "web-without-opfs") { - const promise = Effect.promise(() => import("./DbWorker.js")).pipe( - Effect.map(({ dbWorker: importedDbWorker }) => { - importedDbWorker.onMessage = dbWorker.onMessage; - return importedDbWorker.postMessage; - }), - Effect.runPromise, - ); - const dbWorker: DbWorker = { - postMessage: (input) => { - promise.then( - (postMessage) => { - postMessage(input); - }, - (reason: unknown) => { - dbWorker.onMessage({ - _tag: "onError", - error: { - _tag: "UnexpectedError", - error: makeUnexpectedError(reason).pipe(Effect.runSync), - }, - }); - }, - ); - }, - onMessage: Function.constVoid, - }; - return dbWorker; - } + const worker = new Worker(new URL("DbWorker.worker.js", import.meta.url), { + type: "module", + }); + worker.onmessage = (e: MessageEvent): void => { + dbWorker.onMessage(e.data); + }; - return DbWorker.of({ - postMessage: Function.constVoid, + const dbWorker: DbWorker = { + postMessage: (input) => { + worker.postMessage(input); + }, onMessage: Function.constVoid, - }); + }; + + return dbWorker; }), ); diff --git a/packages/evolu-common-web/src/PlatformLive.ts b/packages/evolu-common-web/src/PlatformLive.ts index c29100f45..1a7d47bbc 100644 --- a/packages/evolu-common-web/src/PlatformLive.ts +++ b/packages/evolu-common-web/src/PlatformLive.ts @@ -12,39 +12,12 @@ import * as Effect from "effect/Effect"; import * as Function from "effect/Function"; import * as Layer from "effect/Layer"; -const isChromeWithOpfs = (): boolean => - navigator.userAgentData != null && - navigator.userAgentData.brands.find( - ({ brand, version }) => - // Chrome or Chromium - brand.includes("Chrom") && Number(version) >= 109, - ) != null; - -const isFirefoxWithOpfs = (): boolean => { - const userAgent = navigator.userAgent.toLowerCase(); - if (userAgent.indexOf("firefox") === -1) return false; - const matches = userAgent.match(/firefox\/([0-9]+\.*[0-9]*)/); - if (matches == null) return false; - return Number(matches[1]) >= 111; -}; - -const isSafariWithOpfs = (): boolean => { - const userAgent = navigator.userAgent.toLowerCase(); - if (userAgent.indexOf("safari") === -1) return false; - const matches = userAgent.match(/version\/([0-9]+)/); - if (matches == null) return false; - return Number(matches[1]) >= 17; -}; - export const PlatformNameLive = Layer.succeed( PlatformName, - canUseDom - ? isChromeWithOpfs() || isFirefoxWithOpfs() || isSafariWithOpfs() - ? "web-with-opfs" - : "web-without-opfs" - : "server", + canUseDom ? "web" : "server", ); +// TODO: Probably remove and simplify code. export const SyncLockLive = Layer.effect( SyncLock, Effect.sync(() => { diff --git a/packages/evolu-common-web/src/SyncWorker.worker.ts b/packages/evolu-common-web/src/SyncWorker.worker.ts index f82809d9a..34e68a634 100644 --- a/packages/evolu-common-web/src/SyncWorker.worker.ts +++ b/packages/evolu-common-web/src/SyncWorker.worker.ts @@ -3,7 +3,7 @@ import { SecretBoxLive, SyncWorker, SyncWorkerInput, - SyncWorkerLive, + SyncWorkerCommonLive, } from "@evolu/common"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; @@ -13,7 +13,7 @@ import { SyncLockLive } from "./PlatformLive.js"; const syncWorker = Effect.provide( SyncWorker, Layer.provide( - SyncWorkerLive, + SyncWorkerCommonLive, Layer.mergeAll(SyncLockLive, FetchLive, SecretBoxLive), ), ).pipe(Effect.runSync); diff --git a/packages/evolu-common-web/src/DbWorker.ts b/packages/evolu-common-web/src/SyncWorkerLive.ts similarity index 53% rename from packages/evolu-common-web/src/DbWorker.ts rename to packages/evolu-common-web/src/SyncWorkerLive.ts index 634676c3c..32326b94d 100644 --- a/packages/evolu-common-web/src/DbWorker.ts +++ b/packages/evolu-common-web/src/SyncWorkerLive.ts @@ -1,17 +1,9 @@ -import { - DbWorker, - DbWorkerLive, - NanoIdLive, - SyncWorker, - SyncWorkerOutput, -} from "@evolu/common"; +import { SyncWorker, SyncWorkerOutput } from "@evolu/common"; import * as Effect from "effect/Effect"; import * as Function from "effect/Function"; import * as Layer from "effect/Layer"; -import { Bip39Live } from "./PlatformLive.js"; -import { SqliteLive } from "./SqliteLive.js"; -const SyncWorkerLive = Layer.effect( +export const SyncWorkerLive = Layer.effect( SyncWorker, Effect.sync(() => { const worker = new Worker( @@ -30,12 +22,3 @@ const SyncWorkerLive = Layer.effect( return syncWorker; }), ); - -// It's a separated because it's imported dynamically and by Web Worker. -export const dbWorker = Effect.provide( - DbWorker, - Layer.provide( - DbWorkerLive, - Layer.mergeAll(SqliteLive, Bip39Live, NanoIdLive, SyncWorkerLive), - ), -).pipe(Effect.runSync); diff --git a/packages/evolu-common/src/DbWorker.ts b/packages/evolu-common/src/DbWorker.ts index 58a497579..00d2ae7f4 100644 --- a/packages/evolu-common/src/DbWorker.ts +++ b/packages/evolu-common/src/DbWorker.ts @@ -575,7 +575,7 @@ const reset = ( onMessage({ _tag: "onResetOrRestore" }); }); -export const DbWorkerLive = Layer.effect( +export const DbWorkerCommonLive = Layer.effect( DbWorker, Effect.gen(function* (_) { const syncWorker = yield* _(SyncWorker); diff --git a/packages/evolu-common/src/Evolu.ts b/packages/evolu-common/src/Evolu.ts index 23f107f6b..ecb96041a 100644 --- a/packages/evolu-common/src/Evolu.ts +++ b/packages/evolu-common/src/Evolu.ts @@ -785,7 +785,6 @@ const EvoluCommon = Layer.effect( Layer.provide(Layer.merge(RowsStoreLive, OnCompletesLive)), ); -/** EvoluCommonLive has only platform independent side-effects. */ export const EvoluCommonLive = EvoluCommon.pipe( Layer.provide(Layer.merge(TimeLive, NanoIdLive)), ); diff --git a/packages/evolu-common/src/Platform.ts b/packages/evolu-common/src/Platform.ts index bd7dc7d18..4e35190b9 100644 --- a/packages/evolu-common/src/Platform.ts +++ b/packages/evolu-common/src/Platform.ts @@ -2,11 +2,7 @@ import * as Context from "effect/Context"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; -export type PlatformName = - | "server" - | "web-with-opfs" - | "web-without-opfs" - | "react-native"; +export type PlatformName = "server" | "web" | "react-native"; export const PlatformName = Context.GenericTag( "@services/PlatformName", diff --git a/packages/evolu-common/src/SyncWorker.ts b/packages/evolu-common/src/SyncWorker.ts index 16b777c03..cfdc15f0d 100644 --- a/packages/evolu-common/src/SyncWorker.ts +++ b/packages/evolu-common/src/SyncWorker.ts @@ -325,7 +325,7 @@ const sync = ( ); }); -export const SyncWorkerLive = Layer.effect( +export const SyncWorkerCommonLive = Layer.effect( SyncWorker, Effect.gen(function* (_) { const syncLock = yield* _(SyncLock); diff --git a/packages/evolu-react-native/src/index.ts b/packages/evolu-react-native/src/index.ts index 9c905bb27..6a5bc23e9 100644 --- a/packages/evolu-react-native/src/index.ts +++ b/packages/evolu-react-native/src/index.ts @@ -1,6 +1,6 @@ import { Bip39, - DbWorkerLive, + DbWorkerCommonLive, EvoluCommonLive, FetchLive, FlushSyncDefaultLive, @@ -8,7 +8,7 @@ import { Mnemonic, NanoIdLive, SecretBoxLive, - SyncWorkerLive, + SyncWorkerCommonLive, makeCreateEvolu, } from "@evolu/common"; import * as Effect from "effect/Effect"; @@ -68,12 +68,12 @@ export const createEvolu = makeCreateEvolu( Layer.mergeAll( FlushSyncDefaultLive, AppStateLive, - DbWorkerLive, + DbWorkerCommonLive, PlatformNameLive, ), ), Layer.provide( - Layer.mergeAll(Bip39Live, NanoIdLive, SqliteLive, SyncWorkerLive), + Layer.mergeAll(Bip39Live, NanoIdLive, SqliteLive, SyncWorkerCommonLive), ), Layer.provide(Layer.mergeAll(SecretBoxLive, SyncLockLive, FetchLive)), ), From 29fa2378b128117ddbc9dface50c2b015ca254bf Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Tue, 27 Feb 2024 18:24:33 +0100 Subject: [PATCH 02/31] Use OpfsSAHPoolDb for SQLite --- packages/evolu-common-web/src/SqliteLive.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/evolu-common-web/src/SqliteLive.ts b/packages/evolu-common-web/src/SqliteLive.ts index 139434317..a90721d6c 100644 --- a/packages/evolu-common-web/src/SqliteLive.ts +++ b/packages/evolu-common-web/src/SqliteLive.ts @@ -1,7 +1,6 @@ import { Sqlite, SqliteRow, - canUseDom, ensureSqliteQuery, maybeParseJson, valuesToSqliteValues, @@ -11,9 +10,11 @@ import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; const sqlitePromise = sqlite3InitModule().then((sqlite3) => - canUseDom - ? new sqlite3.oo1.JsStorageDb("local") - : new sqlite3.oo1.OpfsDb("/evolu/evolu1.db", "c"), + sqlite3 + .installOpfsSAHPoolVfs({ + // TODO: Use name to allow Evolu apps co-exist in the same HTTP origin. + }) + .then((PoolUtil) => new PoolUtil.OpfsSAHPoolDb("/evolu1")), ); const exec: Sqlite["exec"] = (arg) => From 7c59a79845c637dbb776b589b71f51e8563e1f63 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Wed, 28 Feb 2024 20:39:31 +0100 Subject: [PATCH 03/31] Update deps --- apps/native/package.json | 4 +- apps/web/package.json | 2 +- packages/eslint-config-evolu/package.json | 4 +- packages/evolu-common-react/package.json | 4 +- pnpm-lock.yaml | 1596 ++++++++++----------- 5 files changed, 805 insertions(+), 805 deletions(-) diff --git a/apps/native/package.json b/apps/native/package.json index e893b9d04..9cee14b8e 100644 --- a/apps/native/package.json +++ b/apps/native/package.json @@ -12,9 +12,9 @@ }, "dependencies": { "@effect/schema": "^0.63.0", - "@evolu/react-native": "workspace:*", "@evolu/common": "workspace:*", "@evolu/common-react": "workspace:*", + "@evolu/react-native": "workspace:*", "@react-native-community/netinfo": "11.1.0", "babel-plugin-module-resolver": "^5.0.0", "buffer": "^6.0.3", @@ -35,7 +35,7 @@ "@babel/core": "^7.23.3", "@babel/plugin-proposal-dynamic-import": "^7.18.6", "@babel/plugin-transform-private-methods": "^7.23.3", - "@types/react": "^18.2.58", + "@types/react": "^18.2.60", "eslint": "^8.57.0", "eslint-config-evolu": "workspace:*", "prettier": "^3.2.5", diff --git a/apps/web/package.json b/apps/web/package.json index a9bb0ee1e..b8c701b4c 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -24,7 +24,7 @@ "devDependencies": { "@evolu/tsconfig": "workspace:*", "@types/node": "^20.11.20", - "@types/react": "^18.2.58", + "@types/react": "^18.2.60", "@types/react-dom": "^18.2.19", "autoprefixer": "^10.4.17", "eslint": "^8.57.0", diff --git a/packages/eslint-config-evolu/package.json b/packages/eslint-config-evolu/package.json index 4fc805a86..5ebac0b79 100644 --- a/packages/eslint-config-evolu/package.json +++ b/packages/eslint-config-evolu/package.json @@ -7,8 +7,8 @@ "clean": "rm -rf node_modules" }, "dependencies": { - "@typescript-eslint/eslint-plugin": "^7.0.2", - "@typescript-eslint/parser": "^7.0.2", + "@typescript-eslint/eslint-plugin": "^7.1.0", + "@typescript-eslint/parser": "^7.1.0", "eslint-config-next": "14.1.0", "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^1.12.4", diff --git a/packages/evolu-common-react/package.json b/packages/evolu-common-react/package.json index 7c04e84e2..1a6580fee 100644 --- a/packages/evolu-common-react/package.json +++ b/packages/evolu-common-react/package.json @@ -41,7 +41,7 @@ "devDependencies": { "@evolu/common": "workspace:*", "@evolu/tsconfig": "workspace:*", - "@types/react": "^18.2.58", + "@types/react": "^18.2.60", "eslint": "^8.57.0", "eslint-config-evolu": "workspace:*", "react": "^18.2.0", @@ -50,7 +50,7 @@ }, "peerDependencies": { "@evolu/common": "^3.1.7", - "@types/react": "^18.2.58", + "@types/react": "^18.2.60", "react": "^18.2.0" }, "publishConfig": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d755e37b3..4f302f6ec 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,7 +34,7 @@ importers: dependencies: '@effect/schema': specifier: ^0.63.0 - version: 0.63.0(effect@2.4.0)(fast-check@3.15.1) + version: 0.63.1(effect@2.4.0)(fast-check@3.15.1) '@evolu/common': specifier: workspace:* version: link:../../packages/evolu-common @@ -64,7 +64,7 @@ importers: version: 3.3.0 expo: specifier: ^50.0.7 - version: 50.0.7(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + version: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) expo-sqlite: specifier: ~13.2.2 version: 13.2.2(expo@50.0.7) @@ -79,7 +79,7 @@ importers: version: 18.2.0 react-native: specifier: 0.73.4 - version: 0.73.4(@babel/core@7.23.9)(react@18.2.0) + version: 0.73.4(@babel/core@7.24.0)(react@18.2.0) react-native-get-random-values: specifier: ~1.8.0 version: 1.8.0(react-native@0.73.4) @@ -92,16 +92,16 @@ importers: devDependencies: '@babel/core': specifier: ^7.23.3 - version: 7.23.9 + version: 7.24.0 '@babel/plugin-proposal-dynamic-import': specifier: ^7.18.6 - version: 7.18.6(@babel/core@7.23.9) + version: 7.18.6(@babel/core@7.24.0) '@babel/plugin-transform-private-methods': specifier: ^7.23.3 - version: 7.23.3(@babel/core@7.23.9) + version: 7.23.3(@babel/core@7.24.0) '@types/react': - specifier: ^18.2.58 - version: 18.2.58 + specifier: ^18.2.60 + version: 18.2.60 eslint: specifier: ^8.57.0 version: 8.57.0 @@ -126,10 +126,10 @@ importers: version: link:../../packages/evolu-tsconfig '@types/node': specifier: ^20.11.20 - version: 20.11.20 + version: 20.11.22 ts-node: specifier: ^10.9.1 - version: 10.9.2(@types/node@20.11.20)(typescript@5.3.3) + version: 10.9.2(@types/node@20.11.22)(typescript@5.3.3) typescript: specifier: ^5.3.3 version: 5.3.3 @@ -138,7 +138,7 @@ importers: dependencies: '@effect/schema': specifier: ^0.63.0 - version: 0.63.0(effect@2.4.0)(fast-check@3.15.1) + version: 0.63.1(effect@2.4.0)(fast-check@3.15.1) '@evolu/common': specifier: workspace:* version: link:../../packages/evolu-common @@ -172,10 +172,10 @@ importers: version: link:../../packages/evolu-tsconfig '@types/node': specifier: ^20.11.20 - version: 20.11.20 + version: 20.11.22 '@types/react': - specifier: ^18.2.58 - version: 18.2.58 + specifier: ^18.2.60 + version: 18.2.60 '@types/react-dom': specifier: ^18.2.19 version: 18.2.19 @@ -207,11 +207,11 @@ importers: packages/eslint-config-evolu: dependencies: '@typescript-eslint/eslint-plugin': - specifier: ^7.0.2 - version: 7.0.2(@typescript-eslint/parser@7.0.2)(eslint@8.57.0)(typescript@5.3.3) + specifier: ^7.1.0 + version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3) '@typescript-eslint/parser': - specifier: ^7.0.2 - version: 7.0.2(eslint@8.57.0)(typescript@5.3.3) + specifier: ^7.1.0 + version: 7.1.0(eslint@8.57.0)(typescript@5.3.3) eslint-config-next: specifier: 14.1.0 version: 14.1.0(eslint@8.57.0)(typescript@5.3.3) @@ -267,7 +267,7 @@ importers: devDependencies: '@effect/schema': specifier: ^0.63.0 - version: 0.63.0(effect@2.4.0)(fast-check@3.15.1) + version: 0.63.1(effect@2.4.0)(fast-check@3.15.1) '@evolu/tsconfig': specifier: workspace:* version: link:../evolu-tsconfig @@ -294,7 +294,7 @@ importers: version: 5.3.3 vitest: specifier: ^1.3.1 - version: 1.3.1(@types/node@20.11.20) + version: 1.3.1(@types/node@20.11.22) packages/evolu-common-react: devDependencies: @@ -305,8 +305,8 @@ importers: specifier: workspace:* version: link:../evolu-tsconfig '@types/react': - specifier: ^18.2.58 - version: 18.2.58 + specifier: ^18.2.60 + version: 18.2.60 eslint: specifier: ^8.57.0 version: 8.57.0 @@ -321,7 +321,7 @@ importers: version: 5.3.3 vitest: specifier: ^1.3.1 - version: 1.3.1(@types/node@20.11.20) + version: 1.3.1(@types/node@20.11.22) packages/evolu-common-web: devDependencies: @@ -351,7 +351,7 @@ importers: version: 0.4.2 vitest: specifier: ^1.3.1 - version: 1.3.1(@types/node@20.11.20) + version: 1.3.1(@types/node@20.11.22) packages/evolu-react: devDependencies: @@ -384,7 +384,7 @@ importers: version: 5.3.3 vitest: specifier: ^1.3.1 - version: 1.3.1(@types/node@20.11.20) + version: 1.3.1(@types/node@20.11.22) packages/evolu-react-native: dependencies: @@ -409,19 +409,19 @@ importers: version: link:../eslint-config-evolu expo: specifier: ^50.0.7 - version: 50.0.7(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + version: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) expo-sqlite: specifier: ~13.2.2 version: 13.2.2(expo@50.0.7) react-native: specifier: 0.73.4 - version: 0.73.4(@babel/core@7.23.9)(react@18.2.0) + version: 0.73.4(@babel/core@7.24.0)(react@18.2.0) typescript: specifier: ^5.3.3 version: 5.3.3 vitest: specifier: ^1.3.1 - version: 1.3.1(@types/node@20.11.20) + version: 1.3.1(@types/node@20.11.22) packages/evolu-server: dependencies: @@ -464,7 +464,7 @@ importers: version: 4.17.21 '@types/node': specifier: ^20.11.20 - version: 20.11.20 + version: 20.11.22 eslint: specifier: ^8.57.0 version: 8.57.0 @@ -476,7 +476,7 @@ importers: version: 5.3.3 vitest: specifier: ^1.3.1 - version: 1.3.1(@types/node@20.11.20) + version: 1.3.1(@types/node@20.11.22) packages/evolu-tsconfig: {} @@ -514,20 +514,20 @@ packages: resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} - /@babel/core@7.23.9: - resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==} + /@babel/core@7.24.0: + resolution: {integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.23.5 '@babel/generator': 7.23.6 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helpers': 7.23.9 - '@babel/parser': 7.23.9 - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) + '@babel/helpers': 7.24.0 + '@babel/parser': 7.24.0 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.0 + '@babel/types': 7.24.0 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -540,7 +540,7 @@ packages: resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 '@jridgewell/gen-mapping': 0.3.4 '@jridgewell/trace-mapping': 0.3.23 jsesc: 2.5.2 @@ -549,13 +549,13 @@ packages: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 /@babel/helper-compilation-targets@7.23.6: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} @@ -567,8 +567,8 @@ packages: lru-cache: 5.1.1 semver: 6.3.1 - /@babel/helper-create-class-features-plugin@7.23.10(@babel/core@7.23.9): - resolution: {integrity: sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==} + /@babel/helper-create-class-features-plugin@7.24.0(@babel/core@7.24.0): + resolution: {integrity: sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -576,18 +576,18 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.24.0) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.9): + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.0): resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: @@ -596,12 +596,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 - /@babel/helper-define-polyfill-provider@0.5.0(@babel/core@7.23.9): + /@babel/helper-define-polyfill-provider@0.5.0(@babel/core@7.24.0): resolution: {integrity: sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -609,9 +609,9 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.8 @@ -626,28 +626,28 @@ packages: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.23.9 - '@babel/types': 7.23.9 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 /@babel/helper-member-expression-to-functions@7.23.0: resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9): + /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -656,7 +656,7 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.22.15 '@babel/helper-simple-access': 7.22.5 @@ -667,13 +667,13 @@ packages: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + /@babel/helper-plugin-utils@7.24.0: + resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} engines: {node: '>=6.9.0'} - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.9): + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.0): resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -682,12 +682,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.9): + /@babel/helper-replace-supers@7.22.20(@babel/core@7.24.0): resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -696,7 +696,7 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 @@ -705,19 +705,19 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 /@babel/helper-string-parser@7.23.4: resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} @@ -736,16 +736,16 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.23.9 - '@babel/types': 7.23.9 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 - /@babel/helpers@7.23.9: - resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==} + /@babel/helpers@7.24.0: + resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.0 + '@babel/types': 7.24.0 transitivePeerDependencies: - supports-color @@ -757,14 +757,14 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser@7.23.9: - resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} + /@babel/parser@7.24.0: + resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.9): + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -773,10 +773,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.9): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -785,12 +785,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.24.0) - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.23.9): + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.24.0): resolution: {integrity: sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -799,11 +799,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.23.9): + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.24.0): resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. @@ -813,13 +813,13 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.9) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.0) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.0) - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.9): + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.0): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. @@ -829,12 +829,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-proposal-decorators@7.23.9(@babel/core@7.23.9): - resolution: {integrity: sha512-hJhBCb0+NnTWybvWq2WpbCYDOcflSbx0t+BYP65e5R9GVnukiDTi+on5bFkk4p7QGuv190H6KfNiV9Knf/3cZA==} + /@babel/plugin-proposal-decorators@7.24.0(@babel/core@7.24.0): + resolution: {integrity: sha512-LiT1RqZWeij7X+wGxCoYh3/3b8nVOX6/7BZ9wiQgAIyjoeQWdROaodJCgT+dwtbjHaz0r7bEbHJzjSbVfcOyjQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -842,12 +842,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-decorators': 7.23.3(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-decorators': 7.24.0(@babel/core@7.24.0) - /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.23.9): + /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.24.0): resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead. @@ -857,12 +857,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.0) dev: true - /@babel/plugin-proposal-export-default-from@7.23.3(@babel/core@7.23.9): + /@babel/plugin-proposal-export-default-from@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-Q23MpLZfSGZL1kU7fWqV262q65svLSCIP5kZ/JCW/rKTCm/FrLjpvEd2kfUYMVeHh4QhV/xzyoRAHWrAZJrE3Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -871,11 +871,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-default-from': 7.23.3(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-export-default-from': 7.23.3(@babel/core@7.24.0) - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.23.9): + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.24.0): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. @@ -885,11 +885,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.0) - /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.23.9): + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.24.0): resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. @@ -899,11 +899,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.0) - /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.23.9): + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.24.0): resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. @@ -914,13 +914,13 @@ packages: optional: true dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.24.0) - /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.23.9): + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.24.0): resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead. @@ -930,11 +930,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.0) - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.23.9): + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.24.0): resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. @@ -944,12 +944,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.0) - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.9): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.0): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: @@ -958,9 +958,9 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.9): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.0): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -968,10 +968,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.9): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.0): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -979,10 +979,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.9): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.0): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -991,11 +991,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-decorators@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==} + /@babel/plugin-syntax-decorators@7.24.0(@babel/core@7.24.0): + resolution: {integrity: sha512-MXW3pQCu9gUiVGzqkGqsgiINDVYXoAnrY8FYF/rmb+OfufNF0zHMpHPN4ulRrinxYT8Vk/aZJxYqOKsDECjKAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1003,10 +1003,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.0): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1014,10 +1014,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-export-default-from@7.23.3(@babel/core@7.23.9): + /@babel/plugin-syntax-export-default-from@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-KeENO5ck1IeZ/l2lFZNy+mpobV3D2Zy5C1YFnWm+YuY5mQiAWc4yAp13dqgguwsBsFVLh4LPCEqCa5qW13N+hw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1026,10 +1026,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.0): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1037,10 +1037,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.23.9): + /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1049,10 +1049,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.9): + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1061,10 +1061,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.9): + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1073,10 +1073,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.9): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.0): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1084,10 +1084,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.0): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1095,10 +1095,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.9): + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1107,10 +1107,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.9): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.0): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1118,10 +1118,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.0): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1129,10 +1129,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.9): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.0): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1140,10 +1140,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.0): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1151,10 +1151,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.0): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1162,10 +1162,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.0): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1173,10 +1173,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.9): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.0): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1185,10 +1185,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.9): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.0): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1197,10 +1197,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.9): + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1209,10 +1209,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.9): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.0): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1221,11 +1221,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1234,10 +1234,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-async-generator-functions@7.23.9(@babel/core@7.23.9): + /@babel/plugin-transform-async-generator-functions@7.23.9(@babel/core@7.24.0): resolution: {integrity: sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1246,13 +1246,13 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.9) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.0) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.0) - /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1261,12 +1261,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.0) - /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1275,10 +1275,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1287,10 +1287,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1299,11 +1299,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1312,12 +1312,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.0) - /@babel/plugin-transform-classes@7.23.8(@babel/core@7.23.9): + /@babel/plugin-transform-classes@7.23.8(@babel/core@7.24.0): resolution: {integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1326,17 +1326,17 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.24.0) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 - /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1345,11 +1345,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.23.9 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/template': 7.24.0 - /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1358,10 +1358,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1370,11 +1370,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1383,10 +1383,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1395,11 +1395,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.0) - /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1408,11 +1408,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1421,11 +1421,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.0) - /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1434,11 +1434,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.24.0) - /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.9): + /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.24.0): resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1447,11 +1447,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1460,12 +1460,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1474,11 +1474,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.0) - /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1487,10 +1487,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1499,11 +1499,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.0) - /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1512,10 +1512,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1524,11 +1524,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1537,12 +1537,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-simple-access': 7.22.5 - /@babel/plugin-transform-modules-systemjs@7.23.9(@babel/core@7.23.9): + /@babel/plugin-transform-modules-systemjs@7.23.9(@babel/core@7.24.0): resolution: {integrity: sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1551,13 +1551,13 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-identifier': 7.22.20 - /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1566,11 +1566,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.9): + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.0): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1579,11 +1579,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1592,10 +1592,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1604,11 +1604,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.0) - /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1617,12 +1617,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.0) - /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} + /@babel/plugin-transform-object-rest-spread@7.24.0(@babel/core@7.24.0): + resolution: {integrity: sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1631,13 +1631,13 @@ packages: optional: true dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.24.0) - /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1646,11 +1646,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.24.0) - /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1659,11 +1659,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.0) - /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1672,12 +1672,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.0) - /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1686,10 +1686,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1698,11 +1698,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1711,13 +1711,13 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.9) + '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.0) - /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1726,10 +1726,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1738,10 +1738,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.9): + /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.24.0): resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1750,10 +1750,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.0) - /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1762,10 +1762,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1774,10 +1774,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.9): + /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0): resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1786,14 +1786,14 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) - '@babel/types': 7.23.9 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.0) + '@babel/types': 7.24.0 - /@babel/plugin-transform-react-pure-annotations@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-react-pure-annotations@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1802,11 +1802,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1815,11 +1815,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 regenerator-transform: 0.15.2 - /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1828,11 +1828,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-runtime@7.23.9(@babel/core@7.23.9): - resolution: {integrity: sha512-A7clW3a0aSjm3ONU9o2HAILSegJCYlEZmOhmBRReVtIpY/Z/p7yIZ+wR41Z+UipwdGuqwtID/V/dOdZXjwi9gQ==} + /@babel/plugin-transform-runtime@7.24.0(@babel/core@7.24.0): + resolution: {integrity: sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1840,17 +1840,17 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.23.9) - babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.23.9) - babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.24.0 + babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.24.0) + babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.24.0) + babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.24.0) semver: 6.3.1 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1859,10 +1859,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1871,11 +1871,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1884,10 +1884,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1896,10 +1896,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1908,10 +1908,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.9): + /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.24.0): resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1920,13 +1920,13 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.9) + '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.0) - /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1935,10 +1935,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1947,11 +1947,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1960,11 +1960,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 - /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.9): + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1973,12 +1973,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) + '@babel/helper-plugin-utils': 7.24.0 - /@babel/preset-env@7.23.9(@babel/core@7.23.9): - resolution: {integrity: sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==} + /@babel/preset-env@7.24.0(@babel/core@7.24.0): + resolution: {integrity: sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1987,91 +1987,91 @@ packages: optional: true dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.23.9) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.9) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.9) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.9) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.9) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.9) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-async-generator-functions': 7.23.9(@babel/core@7.23.9) - '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.9) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.9) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-systemjs': 7.23.9(@babel/core@7.23.9) - '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.9) - '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.9) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.9) - babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.23.9) - babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.23.9) - babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.23.9) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.24.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.0) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.0) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.0) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.0) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-async-generator-functions': 7.23.9(@babel/core@7.24.0) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.24.0) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.24.0) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-modules-systemjs': 7.23.9(@babel/core@7.24.0) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.0) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-object-rest-spread': 7.24.0(@babel/core@7.24.0) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.24.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.0) + babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.24.0) + babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.24.0) + babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.24.0) core-js-compat: 3.36.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - /@babel/preset-flow@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==} + /@babel/preset-flow@7.24.0(@babel/core@7.24.0): + resolution: {integrity: sha512-cum/nSi82cDaSJ21I4PgLTVlj0OXovFk6GRguJYe/IKg6y6JHLTbJhybtX4k35WT9wdeJfEVjycTixMhBHd0Dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2079,12 +2079,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.24.0) - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.9): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.0): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 @@ -2092,12 +2092,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/types': 7.23.9 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/types': 7.24.0 esutils: 2.0.3 - /@babel/preset-react@7.23.3(@babel/core@7.23.9): + /@babel/preset-react@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==} engines: {node: '>=6.9.0'} peerDependencies: @@ -2106,15 +2106,15 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.9) - '@babel/plugin-transform-react-pure-annotations': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.24.0) + '@babel/plugin-transform-react-pure-annotations': 7.23.3(@babel/core@7.24.0) - /@babel/preset-typescript@7.23.3(@babel/core@7.23.9): + /@babel/preset-typescript@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -2123,14 +2123,14 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.9) + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.24.0) - /@babel/register@7.23.7(@babel/core@7.23.9): + /@babel/register@7.23.7(@babel/core@7.24.0): resolution: {integrity: sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -2139,7 +2139,7 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 @@ -2149,22 +2149,22 @@ packages: /@babel/regjsgen@0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - /@babel/runtime@7.23.9: - resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} + /@babel/runtime@7.24.0: + resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 - /@babel/template@7.23.9: - resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} + /@babel/template@7.24.0: + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 - /@babel/traverse@7.23.9: - resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} + /@babel/traverse@7.24.0: + resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.23.5 @@ -2173,15 +2173,15 @@ packages: '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/types@7.23.9: - resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} + /@babel/types@7.24.0: + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.23.4 @@ -2195,7 +2195,7 @@ packages: /@changesets/apply-release-plan@7.0.0: resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 '@changesets/config': 3.0.0 '@changesets/get-version-range-type': 0.4.0 '@changesets/git': 3.0.0 @@ -2213,7 +2213,7 @@ packages: /@changesets/assemble-release-plan@6.0.0: resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.0.0 '@changesets/types': 6.0.0 @@ -2231,7 +2231,7 @@ packages: resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} hasBin: true dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 '@changesets/apply-release-plan': 7.0.0 '@changesets/assemble-release-plan': 6.0.0 '@changesets/changelog-git': 0.2.0 @@ -2296,7 +2296,7 @@ packages: /@changesets/get-release-plan@4.0.0: resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 '@changesets/assemble-release-plan': 6.0.0 '@changesets/config': 3.0.0 '@changesets/pre': 2.0.0 @@ -2312,7 +2312,7 @@ packages: /@changesets/git@3.0.0: resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 @@ -2337,7 +2337,7 @@ packages: /@changesets/pre@2.0.0: resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 @@ -2347,7 +2347,7 @@ packages: /@changesets/read@0.6.0: resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 '@changesets/git': 3.0.0 '@changesets/logger': 0.1.0 '@changesets/parse': 0.4.0 @@ -2368,7 +2368,7 @@ packages: /@changesets/write@0.3.0: resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 '@changesets/types': 6.0.0 fs-extra: 7.0.1 human-id: 1.0.2 @@ -2382,8 +2382,8 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@effect/schema@0.63.0(effect@2.4.0)(fast-check@3.15.1): - resolution: {integrity: sha512-z+QTqCUexkh/qyEz5WMHVV/dDLr5jN2eOMUsXzgxzmtBFiBy1L8xunbt+/JgGBhPLOBqLzDysLlnL56edzTNzQ==} + /@effect/schema@0.63.1(effect@2.4.0)(fast-check@3.15.1): + resolution: {integrity: sha512-Vs7g72qbPTLWXZ4jcaPzprfbY1ODZxwqfOTrMhwvSUc6kgt1i2KP88LxFy7dFLJasx3CYPz8MTvP0x8mbBCftw==} peerDependencies: effect: ^2.4.0 fast-check: ^3.13.2 @@ -2653,7 +2653,7 @@ packages: resolution: {integrity: sha512-9cMquL/5bBfV73CbZcWipk3KZSo8mBqdgvkoWCtEtnnlm/879ayxzMWjVIgT5yV4w+X7+N6KkBSUIIj4t9Xqew==} hasBin: true dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 '@expo/code-signing-certificates': 0.0.5 '@expo/config': 8.5.4 '@expo/config-plugins': 7.8.4 @@ -2859,16 +2859,16 @@ packages: peerDependencies: '@react-native/babel-preset': '*' dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/generator': 7.23.6 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 '@expo/config': 8.5.4 '@expo/env': 0.2.1 '@expo/json-file': 8.3.0 '@expo/spawn-async': 1.7.2 - '@react-native/babel-preset': 0.73.21(@babel/core@7.23.9)(@babel/preset-env@7.23.9) - babel-preset-fbjs: 3.4.0(@babel/core@7.23.9) + '@react-native/babel-preset': 0.73.21(@babel/core@7.24.0)(@babel/preset-env@7.24.0) + babel-preset-fbjs: 3.4.0(@babel/core@7.24.0) chalk: 4.1.2 debug: 4.3.4 find-yarn-workspace-root: 2.0.0 @@ -3011,7 +3011,7 @@ packages: react: ^16 || ^17 || ^18 react-dom: ^16 || ^17 || ^18 dependencies: - '@tanstack/react-virtual': 3.1.2(react-dom@18.2.0)(react@18.2.0) + '@tanstack/react-virtual': 3.1.3(react-dom@18.2.0)(react@18.2.0) client-only: 0.0.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -3061,7 +3061,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.20 + '@types/node': 20.11.22 jest-mock: 29.7.0 /@jest/fake-timers@29.7.0: @@ -3070,7 +3070,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.11.20 + '@types/node': 20.11.22 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -3087,7 +3087,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.11.20 + '@types/node': 20.11.22 '@types/yargs': 15.0.19 chalk: 4.1.2 @@ -3098,7 +3098,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.11.20 + '@types/node': 20.11.22 '@types/yargs': 17.0.32 chalk: 4.1.2 @@ -3143,7 +3143,7 @@ packages: /@manypkg/find-root@1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 @@ -3152,7 +3152,7 @@ packages: /@manypkg/get-packages@1.1.3: resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -3190,7 +3190,7 @@ packages: react: '>=16' dependencies: '@types/mdx': 2.0.11 - '@types/react': 18.2.58 + '@types/react': 18.2.60 react: 18.2.0 dev: false @@ -3646,7 +3646,7 @@ packages: peerDependencies: react-native: '>=0.59' dependencies: - react-native: 0.73.4(@babel/core@7.23.9)(react@18.2.0) + react-native: 0.73.4(@babel/core@7.24.0)(react@18.2.0) dev: false /@react-native-picker/picker@2.6.1(react-native@0.73.4)(react@18.2.0): @@ -3656,23 +3656,23 @@ packages: react-native: '>=0.57' dependencies: react: 18.2.0 - react-native: 0.73.4(@babel/core@7.23.9)(react@18.2.0) + react-native: 0.73.4(@babel/core@7.24.0)(react@18.2.0) dev: false /@react-native/assets-registry@0.73.1: resolution: {integrity: sha512-2FgAbU7uKM5SbbW9QptPPZx8N9Ke2L7bsHb+EhAanZjFZunA9PaYtyjUQ1s7HD+zDVqOQIvjkpXSv7Kejd2tqg==} engines: {node: '>=18'} - /@react-native/babel-plugin-codegen@0.73.4(@babel/preset-env@7.23.9): + /@react-native/babel-plugin-codegen@0.73.4(@babel/preset-env@7.24.0): resolution: {integrity: sha512-XzRd8MJGo4Zc5KsphDHBYJzS1ryOHg8I2gOZDAUCGcwLFhdyGu1zBNDJYH2GFyDrInn9TzAbRIf3d4O+eltXQQ==} engines: {node: '>=18'} dependencies: - '@react-native/codegen': 0.73.3(@babel/preset-env@7.23.9) + '@react-native/codegen': 0.73.3(@babel/preset-env@7.24.0) transitivePeerDependencies: - '@babel/preset-env' - supports-color - /@react-native/babel-preset@0.73.21(@babel/core@7.23.9)(@babel/preset-env@7.23.9): + /@react-native/babel-preset@0.73.21(@babel/core@7.24.0)(@babel/preset-env@7.24.0): resolution: {integrity: sha512-WlFttNnySKQMeujN09fRmrdWqh46QyJluM5jdtDNrkl/2Hx6N4XeDUGhABvConeK95OidVO7sFFf7sNebVXogA==} engines: {node: '>=18'} peerDependencies: @@ -3681,53 +3681,53 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.23.9) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.9) - '@babel/plugin-proposal-export-default-from': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.9) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.23.9) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.23.9) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.23.9) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.9) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-export-default-from': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.9) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.9) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-runtime': 7.23.9(@babel/core@7.23.9) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.9) - '@babel/template': 7.23.9 - '@react-native/babel-plugin-codegen': 0.73.4(@babel/preset-env@7.23.9) - babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.24.0) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.0) + '@babel/plugin-proposal-export-default-from': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.24.0) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.24.0) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.24.0) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.24.0) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.24.0) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-export-default-from': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.24.0) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.0) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-runtime': 7.24.0(@babel/core@7.24.0) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.24.0) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.24.0) + '@babel/template': 7.24.0 + '@react-native/babel-plugin-codegen': 0.73.4(@babel/preset-env@7.24.0) + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.24.0) react-refresh: 0.14.0 transitivePeerDependencies: - '@babel/preset-env' - supports-color - /@react-native/codegen@0.73.3(@babel/preset-env@7.23.9): + /@react-native/codegen@0.73.3(@babel/preset-env@7.24.0): resolution: {integrity: sha512-sxslCAAb8kM06vGy9Jyh4TtvjhcP36k/rvj2QE2Jdhdm61KvfafCATSIsOfc0QvnduWFcpXUPvAVyYwuv7PYDg==} engines: {node: '>=18'} peerDependencies: @@ -3736,25 +3736,25 @@ packages: '@babel/preset-env': optional: true dependencies: - '@babel/parser': 7.23.9 - '@babel/preset-env': 7.23.9(@babel/core@7.23.9) + '@babel/parser': 7.24.0 + '@babel/preset-env': 7.24.0(@babel/core@7.24.0) flow-parser: 0.206.0 glob: 7.2.3 invariant: 2.2.4 - jscodeshift: 0.14.0(@babel/preset-env@7.23.9) + jscodeshift: 0.14.0(@babel/preset-env@7.24.0) mkdirp: 0.5.6 nullthrows: 1.1.1 transitivePeerDependencies: - supports-color - /@react-native/community-cli-plugin@0.73.16(@babel/core@7.23.9): + /@react-native/community-cli-plugin@0.73.16(@babel/core@7.24.0): resolution: {integrity: sha512-eNH3v3qJJF6f0n/Dck90qfC9gVOR4coAXMTdYECO33GfgjTi+73vf/SBqlXw9HICH/RNZYGPM3wca4FRF7TYeQ==} engines: {node: '>=18'} dependencies: '@react-native-community/cli-server-api': 12.3.2 '@react-native-community/cli-tools': 12.3.2 '@react-native/dev-middleware': 0.73.7 - '@react-native/metro-babel-transformer': 0.73.15(@babel/core@7.23.9) + '@react-native/metro-babel-transformer': 0.73.15(@babel/core@7.24.0) chalk: 4.1.2 execa: 5.1.1 metro: 0.80.6 @@ -3821,7 +3821,7 @@ packages: resolution: {integrity: sha512-ewMwGcumrilnF87H4jjrnvGZEaPFCAC4ebraEK+CurDDmwST/bIicI4hrOAv+0Z0F7DEK4O4H7r8q9vH7IbN4g==} engines: {node: '>=18'} - /@react-native/metro-babel-transformer@0.73.15(@babel/core@7.23.9): + /@react-native/metro-babel-transformer@0.73.15(@babel/core@7.24.0): resolution: {integrity: sha512-LlkSGaXCz+xdxc9819plmpsl4P4gZndoFtpjN3GMBIu6f7TBV0GVbyJAU4GE8fuAWPVSVL5ArOcdkWKSbI1klw==} engines: {node: '>=18'} peerDependencies: @@ -3830,8 +3830,8 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@react-native/babel-preset': 0.73.21(@babel/core@7.23.9)(@babel/preset-env@7.23.9) + '@babel/core': 7.24.0 + '@react-native/babel-preset': 0.73.21(@babel/core@7.24.0)(@babel/preset-env@7.24.0) hermes-parser: 0.15.0 nullthrows: 1.1.1 transitivePeerDependencies: @@ -3852,7 +3852,7 @@ packages: dependencies: invariant: 2.2.4 nullthrows: 1.1.1 - react-native: 0.73.4(@babel/core@7.23.9)(react@18.2.0) + react-native: 0.73.4(@babel/core@7.24.0)(react@18.2.0) /@rollup/rollup-android-arm-eabi@4.12.0: resolution: {integrity: sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==} @@ -4014,19 +4014,19 @@ packages: tslib: 2.6.2 dev: false - /@tanstack/react-virtual@3.1.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-qibmxtctgOZo2I+3Rw5GR9kXgaa15U5r3/idDY1ItUKW15UK7GhCfyIfE6qYuJ1fxQF6dJDsD8SbpPyuJgpxuA==} + /@tanstack/react-virtual@3.1.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-YCzcbF/Ws/uZ0q3Z6fagH+JVhx4JLvbSflgldMgLsuvB8aXjZLLb3HvrEVxY480F9wFlBiXlvQxOyXb5ENPrNA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@tanstack/virtual-core': 3.1.2 + '@tanstack/virtual-core': 3.1.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@tanstack/virtual-core@3.1.2: - resolution: {integrity: sha512-DATZJs8iejkIUqXZe6ruDAnjFo78BKnIIgqQZrc7CmEFqfLEN/TPD91n4hRfo6hpRB6xC00bwKxv7vdjFNEmOg==} + /@tanstack/virtual-core@3.1.3: + resolution: {integrity: sha512-Y5B4EYyv1j9V8LzeAoOVeTg0LI7Fo5InYKgAjkY1Pu9GjtUwX/EKxNcU7ng3sKr99WEf+bPTcktAeybyMOYo+g==} dev: false /@theguild/remark-mermaid@0.0.5(react@18.2.0): @@ -4073,26 +4073,26 @@ packages: /@types/better-sqlite3@7.6.9: resolution: {integrity: sha512-FvktcujPDj9XKMJQWFcl2vVl7OdRIqsSRX9b0acWwTmwLK9CF2eqo/FRcmMLNpugKoX/avA6pb7TorDLmpgTnQ==} dependencies: - '@types/node': 20.11.20 + '@types/node': 20.11.22 dev: true /@types/body-parser@1.19.5: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 20.11.20 + '@types/node': 20.11.22 dev: true /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.11.20 + '@types/node': 20.11.22 dev: true /@types/cors@2.8.17: resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} dependencies: - '@types/node': 20.11.20 + '@types/node': 20.11.22 dev: true /@types/d3-scale-chromatic@3.0.3: @@ -4126,8 +4126,8 @@ packages: /@types/express-serve-static-core@4.17.43: resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==} dependencies: - '@types/node': 20.11.20 - '@types/qs': 6.9.11 + '@types/node': 20.11.22 + '@types/qs': 6.9.12 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 dev: true @@ -4137,7 +4137,7 @@ packages: dependencies: '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 4.17.43 - '@types/qs': 6.9.11 + '@types/qs': 6.9.12 '@types/serve-static': 1.15.5 dev: true @@ -4220,8 +4220,8 @@ packages: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: true - /@types/node@20.11.20: - resolution: {integrity: sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==} + /@types/node@20.11.22: + resolution: {integrity: sha512-/G+IxWxma6V3E+pqK1tSl2Fo1kl41pK1yeCyDsgkF9WlVAme4j5ISYM2zR11bgLFJGLN5sVK40T4RJNuiZbEjA==} dependencies: undici-types: 5.26.5 @@ -4232,8 +4232,8 @@ packages: /@types/prop-types@15.7.11: resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} - /@types/qs@6.9.11: - resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} + /@types/qs@6.9.12: + resolution: {integrity: sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg==} dev: true /@types/range-parser@1.2.7: @@ -4243,11 +4243,11 @@ packages: /@types/react-dom@18.2.19: resolution: {integrity: sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==} dependencies: - '@types/react': 18.2.58 + '@types/react': 18.2.60 dev: true - /@types/react@18.2.58: - resolution: {integrity: sha512-TaGvMNhxvG2Q0K0aYxiKfNDS5m5ZsoIBBbtfUorxdH4NGSXIlYvZxLJI+9Dd3KjeB3780bciLyAb7ylO8pLhPw==} + /@types/react@18.2.60: + resolution: {integrity: sha512-dfiPj9+k20jJrLGOu9Nf6eqxm2EyJRrq2NvwOFsfbb7sFExZ9WELPs67UImHj3Ayxg8ruTtKtNnbjaF8olPq0A==} dependencies: '@types/prop-types': 15.7.11 '@types/scheduler': 0.16.8 @@ -4263,7 +4263,7 @@ packages: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 20.11.20 + '@types/node': 20.11.22 dev: true /@types/serve-static@1.15.5: @@ -4271,7 +4271,7 @@ packages: dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 20.11.20 + '@types/node': 20.11.22 dev: true /@types/stack-utils@2.0.3: @@ -4301,8 +4301,8 @@ packages: dependencies: '@types/yargs-parser': 21.0.3 - /@typescript-eslint/eslint-plugin@7.0.2(@typescript-eslint/parser@7.0.2)(eslint@8.57.0)(typescript@5.3.3): - resolution: {integrity: sha512-/XtVZJtbaphtdrWjr+CJclaCVGPtOdBpFEnvtNf/jRV0IiEemRrL0qABex/nEt8isYcnFacm3nPHYQwL+Wb7qg==} + /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3): + resolution: {integrity: sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -4313,11 +4313,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.0.2(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 7.0.2 - '@typescript-eslint/type-utils': 7.0.2(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 7.0.2(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 7.0.2 + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 7.1.0 + '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 eslint: 8.57.0 graphemer: 1.4.0 @@ -4351,8 +4351,8 @@ packages: - supports-color dev: false - /@typescript-eslint/parser@7.0.2(eslint@8.57.0)(typescript@5.3.3): - resolution: {integrity: sha512-GdwfDglCxSmU+QTS9vhz2Sop46ebNCXpPPvsByK7hu0rFGRHL+AusKQJ7SoN+LbLh6APFpQwHKmDSwN35Z700Q==} + /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3): + resolution: {integrity: sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^8.56.0 @@ -4361,10 +4361,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 7.0.2 - '@typescript-eslint/types': 7.0.2 - '@typescript-eslint/typescript-estree': 7.0.2(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 7.0.2 + '@typescript-eslint/scope-manager': 7.1.0 + '@typescript-eslint/types': 7.1.0 + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 eslint: 8.57.0 typescript: 5.3.3 @@ -4380,16 +4380,16 @@ packages: '@typescript-eslint/visitor-keys': 6.21.0 dev: false - /@typescript-eslint/scope-manager@7.0.2: - resolution: {integrity: sha512-l6sa2jF3h+qgN2qUMjVR3uCNGjWw4ahGfzIYsCtFrQJCjhbrDPdiihYT8FnnqFwsWX+20hK592yX9I2rxKTP4g==} + /@typescript-eslint/scope-manager@7.1.0: + resolution: {integrity: sha512-6TmN4OJiohHfoOdGZ3huuLhpiUgOGTpgXNUPJgeZOZR3DnIpdSgtt83RS35OYNNXxM4TScVlpVKC9jyQSETR1A==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 7.0.2 - '@typescript-eslint/visitor-keys': 7.0.2 + '@typescript-eslint/types': 7.1.0 + '@typescript-eslint/visitor-keys': 7.1.0 dev: false - /@typescript-eslint/type-utils@7.0.2(eslint@8.57.0)(typescript@5.3.3): - resolution: {integrity: sha512-IKKDcFsKAYlk8Rs4wiFfEwJTQlHcdn8CLwLaxwd6zb8HNiMcQIFX9sWax2k4Cjj7l7mGS5N1zl7RCHOVwHq2VQ==} + /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): + resolution: {integrity: sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^8.56.0 @@ -4398,8 +4398,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.0.2(typescript@5.3.3) - '@typescript-eslint/utils': 7.0.2(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) debug: 4.3.4 eslint: 8.57.0 ts-api-utils: 1.2.1(typescript@5.3.3) @@ -4413,8 +4413,8 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: false - /@typescript-eslint/types@7.0.2: - resolution: {integrity: sha512-ZzcCQHj4JaXFjdOql6adYV4B/oFOFjPOC9XYwCaZFRvqN8Llfvv4gSxrkQkd2u4Ci62i2c6W6gkDwQJDaRc4nA==} + /@typescript-eslint/types@7.1.0: + resolution: {integrity: sha512-qTWjWieJ1tRJkxgZYXx6WUYtWlBc48YRxgY2JN1aGeVpkhmnopq+SUC8UEVGNXIvWH7XyuTjwALfG6bFEgCkQA==} engines: {node: ^16.0.0 || >=18.0.0} dev: false @@ -4440,8 +4440,8 @@ packages: - supports-color dev: false - /@typescript-eslint/typescript-estree@7.0.2(typescript@5.3.3): - resolution: {integrity: sha512-3AMc8khTcELFWcKcPc0xiLviEvvfzATpdPj/DXuOGIdQIIFybf4DMT1vKRbuAEOFMwhWt7NFLXRkbjsvKZQyvw==} + /@typescript-eslint/typescript-estree@7.1.0(typescript@5.3.3): + resolution: {integrity: sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -4449,8 +4449,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 7.0.2 - '@typescript-eslint/visitor-keys': 7.0.2 + '@typescript-eslint/types': 7.1.0 + '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -4462,8 +4462,8 @@ packages: - supports-color dev: false - /@typescript-eslint/utils@7.0.2(eslint@8.57.0)(typescript@5.3.3): - resolution: {integrity: sha512-PZPIONBIB/X684bhT1XlrkjNZJIEevwkKDsdwfiu1WeqBxYEEdIgVDgm8/bbKHVu+6YOpeRqcfImTdImx/4Bsw==} + /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): + resolution: {integrity: sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^8.56.0 @@ -4471,9 +4471,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.0.2 - '@typescript-eslint/types': 7.0.2 - '@typescript-eslint/typescript-estree': 7.0.2(typescript@5.3.3) + '@typescript-eslint/scope-manager': 7.1.0 + '@typescript-eslint/types': 7.1.0 + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: @@ -4489,11 +4489,11 @@ packages: eslint-visitor-keys: 3.4.3 dev: false - /@typescript-eslint/visitor-keys@7.0.2: - resolution: {integrity: sha512-8Y+YiBmqPighbm5xA2k4wKTxRzx9EkBu7Rlw+WHqMvRJ3RPz/BMBO9b2ru0LUNmXg120PHUXD5+SWFy2R8DqlQ==} + /@typescript-eslint/visitor-keys@7.1.0: + resolution: {integrity: sha512-FhUqNWluiGNzlvnDZiXad4mZRhtghdoKW6e98GoEOYSu5cND+E39rG5KwJMUzeENwm1ztYBRqof8wMLP+wNPIA==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 7.0.2 + '@typescript-eslint/types': 7.1.0 eslint-visitor-keys: 3.4.3 dev: false @@ -4891,7 +4891,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001589 + caniuse-lite: 1.0.30001591 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -4916,7 +4916,7 @@ packages: dequal: 2.0.3 dev: false - /babel-core@7.0.0-bridge.0(@babel/core@7.23.9): + /babel-core@7.0.0-bridge.0(@babel/core@7.24.0): resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4924,7 +4924,7 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 /babel-plugin-module-resolver@5.0.0: resolution: {integrity: sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q==} @@ -4937,7 +4937,7 @@ packages: resolve: 1.22.8 dev: false - /babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.23.9): + /babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.24.0): resolution: {integrity: sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -4946,13 +4946,13 @@ packages: optional: true dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.9 - '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.24.0) semver: 6.3.1 transitivePeerDependencies: - supports-color - /babel-plugin-polyfill-corejs3@0.9.0(@babel/core@7.23.9): + /babel-plugin-polyfill-corejs3@0.9.0(@babel/core@7.24.0): resolution: {integrity: sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -4960,13 +4960,13 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.24.0) core-js-compat: 3.36.0 transitivePeerDependencies: - supports-color - /babel-plugin-polyfill-regenerator@0.5.5(@babel/core@7.23.9): + /babel-plugin-polyfill-regenerator@0.5.5(@babel/core@7.24.0): resolution: {integrity: sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -4974,8 +4974,8 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.24.0) transitivePeerDependencies: - supports-color @@ -4985,30 +4985,30 @@ packages: /babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} - /babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.23.9): + /babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.24.0): resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==} dependencies: - '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.24.0) transitivePeerDependencies: - '@babel/core' - /babel-preset-expo@10.0.1(@babel/core@7.23.9): + /babel-preset-expo@10.0.1(@babel/core@7.24.0): resolution: {integrity: sha512-uWIGmLfbP3dS5+8nesxaW6mQs41d4iP7X82ZwRdisB/wAhKQmuJM9Y1jQe4006uNYkw6Phf2TT03ykLVro7KuQ==} dependencies: - '@babel/plugin-proposal-decorators': 7.23.9(@babel/core@7.23.9) - '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) - '@babel/preset-env': 7.23.9(@babel/core@7.23.9) - '@babel/preset-react': 7.23.3(@babel/core@7.23.9) - '@react-native/babel-preset': 0.73.21(@babel/core@7.23.9)(@babel/preset-env@7.23.9) + '@babel/plugin-proposal-decorators': 7.24.0(@babel/core@7.24.0) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-object-rest-spread': 7.24.0(@babel/core@7.24.0) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.24.0) + '@babel/preset-env': 7.24.0(@babel/core@7.24.0) + '@babel/preset-react': 7.23.3(@babel/core@7.24.0) + '@react-native/babel-preset': 0.73.21(@babel/core@7.24.0)(@babel/preset-env@7.24.0) babel-plugin-react-native-web: 0.18.12 react-refresh: 0.14.0 transitivePeerDependencies: - '@babel/core' - supports-color - /babel-preset-fbjs@3.4.0(@babel/core@7.23.9): + /babel-preset-fbjs@3.4.0(@babel/core@7.24.0): resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} peerDependencies: '@babel/core': ^7.0.0 @@ -5016,33 +5016,33 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.9) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.23.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.9) - '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.9) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.9) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.0) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.24.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.0) + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.24.0) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.24.0) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.24.0) babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 /bail@2.0.2: @@ -5252,8 +5252,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001589 - electron-to-chromium: 1.4.681 + caniuse-lite: 1.0.30001591 + electron-to-chromium: 1.4.685 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) @@ -5400,8 +5400,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - /caniuse-lite@1.0.30001589: - resolution: {integrity: sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg==} + /caniuse-lite@1.0.30001591: + resolution: {integrity: sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==} /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -5500,7 +5500,7 @@ packages: engines: {node: '>=12.13.0'} hasBin: true dependencies: - '@types/node': 20.11.20 + '@types/node': 20.11.22 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -5510,7 +5510,7 @@ packages: /chromium-edge-launcher@1.0.0: resolution: {integrity: sha512-pgtgjNKZ7i5U++1g1PWv75umkHvhVTDOQIZ+sjeUX9483S7Y6MUvO0lrd7ShGlQlFHMN4SwKTCq/X8hWrbv2KA==} dependencies: - '@types/node': 20.11.20 + '@types/node': 20.11.22 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -6433,8 +6433,8 @@ packages: /effect@2.4.0: resolution: {integrity: sha512-HAtFVAbAGYDzfGbrSrX1gzMzXym15zk1+ps72X8W1wdZY0vxq+u23w8u9DhAZjiJPHT4W9ZYL7QWQqpP4t+dSg==} - /electron-to-chromium@1.4.681: - resolution: {integrity: sha512-1PpuqJUFWoXZ1E54m8bsLPVYwIVCRzvaL+n5cjigGga4z854abDnFRc+cTa2th4S79kyGqya/1xoR7h+Y5G5lg==} + /electron-to-chromium@1.4.685: + resolution: {integrity: sha512-yDYeobbTEe4TNooEzOQO6xFqg9XnAkVy2Lod1C1B2it8u47JNLYvl9nLDWBamqUakWB8Jc1hhS1uHUNYTNQdfw==} /elkjs@0.9.2: resolution: {integrity: sha512-2Y/RaA1pdgSHpY0YG4TYuYCD2wh97CRvu22eLG3Kz0pgQ/6KbIFTxsTnDc4MH/6hFlg2L/9qXrDMG0nMjP63iw==} @@ -6471,8 +6471,8 @@ packages: dependencies: once: 1.4.0 - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + /enhanced-resolve@5.15.1: + resolution: {integrity: sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 @@ -6693,7 +6693,7 @@ packages: eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.0.2)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.1.0)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-react: 7.33.2(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) @@ -6739,10 +6739,10 @@ packages: eslint-plugin-import: '*' dependencies: debug: 4.3.4 - enhanced-resolve: 5.15.0 + enhanced-resolve: 5.15.1 eslint: 8.57.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.0.2)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.1.0)(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -6754,8 +6754,8 @@ packages: - supports-color dev: false - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + /eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -6784,8 +6784,8 @@ packages: - supports-color dev: false - /eslint-module-utils@2.8.0(@typescript-eslint/parser@7.0.2)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.1.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -6805,7 +6805,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.0.2(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -6824,7 +6824,7 @@ packages: regexpp: 3.2.0 dev: false - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.0.2)(eslint@8.57.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.1.0)(eslint@8.57.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -6834,7 +6834,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.0.2(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.4 array.prototype.flat: 1.3.2 @@ -6843,7 +6843,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.0.2)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.1.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.1 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -6885,7 +6885,7 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 aria-query: 5.3.0 array-includes: 3.1.7 array.prototype.flatmap: 1.3.2 @@ -7210,7 +7210,7 @@ packages: expo: '*' dependencies: '@expo/config': 8.5.4 - expo: 50.0.7(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) transitivePeerDependencies: - supports-color @@ -7223,14 +7223,14 @@ packages: peerDependencies: expo: '*' dependencies: - expo: 50.0.7(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) /expo-font@11.10.3(expo@50.0.7): resolution: {integrity: sha512-q1Td2zUvmLbCA9GV4OG4nLPw5gJuNY1VrPycsnemN1m8XWTzzs8nyECQQqrcBhgulCgcKZZJJ6U0kC2iuSoQHQ==} peerDependencies: expo: '*' dependencies: - expo: 50.0.7(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) fontfaceobserver: 2.3.0 /expo-json-utils@0.12.3: @@ -7242,7 +7242,7 @@ packages: peerDependencies: expo: '*' dependencies: - expo: 50.0.7(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) /expo-manifests@0.13.2(expo@50.0.7): resolution: {integrity: sha512-l0Sia1WmLULx8V41K8RzGLsFoTe4qqthPRGpHjItsYn8ZB6lRrdTBM9OYp2McIflgqN1HAimUCQMFIwJyH+UmA==} @@ -7250,7 +7250,7 @@ packages: expo: '*' dependencies: '@expo/config': 8.5.4 - expo: 50.0.7(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) expo-json-utils: 0.12.3 transitivePeerDependencies: - supports-color @@ -7280,7 +7280,7 @@ packages: expo: '*' dependencies: '@expo/websql': 1.0.1 - expo: 50.0.7(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) /expo-status-bar@1.11.1: resolution: {integrity: sha512-ddQEtCOgYHTLlFUe/yH67dDBIoct5VIULthyT3LRJbEwdpzAgueKsX2FYK02ldh440V87PWKCamh7R9evk1rrg==} @@ -7295,7 +7295,7 @@ packages: peerDependencies: expo: '*' dependencies: - expo: 50.0.7(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) dev: false /expo-updates@0.24.11(expo@50.0.7): @@ -7309,7 +7309,7 @@ packages: '@expo/config-plugins': 7.8.4 arg: 4.1.0 chalk: 4.1.2 - expo: 50.0.7(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21) + expo: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) expo-eas-client: 0.11.2 expo-manifests: 0.13.2(expo@50.0.7) expo-structured-headers: 3.7.2 @@ -7321,17 +7321,17 @@ packages: - supports-color dev: false - /expo@50.0.7(@babel/core@7.23.9)(@react-native/babel-preset@0.73.21): + /expo@50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21): resolution: {integrity: sha512-lTqIrKOUTKHLdTuAaJzZihi1v7F8Ix1dOXVWMpToDy9zPC/s+fet0fbyXdFUxYsCUyuEDIB9tvejrTYZk8Hm0Q==} hasBin: true dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 '@expo/cli': 0.17.5(@react-native/babel-preset@0.73.21)(expo-modules-autolinking@1.10.3) '@expo/config': 8.5.4 '@expo/config-plugins': 7.8.4 '@expo/metro-config': 0.17.4(@react-native/babel-preset@0.73.21) '@expo/vector-icons': 14.0.0 - babel-preset-expo: 10.0.1(@babel/core@7.23.9) + babel-preset-expo: 10.0.1(@babel/core@7.24.0) expo-asset: 9.0.2(expo@50.0.7) expo-file-system: 16.0.6(expo@50.0.7) expo-font: 11.10.3(expo@50.0.7) @@ -8673,7 +8673,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.20 + '@types/node': 20.11.22 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -8700,7 +8700,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.20 + '@types/node': 20.11.22 jest-util: 29.7.0 /jest-util@29.7.0: @@ -8708,7 +8708,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.20 + '@types/node': 20.11.22 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -8729,7 +8729,7 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.11.20 + '@types/node': 20.11.22 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -8780,7 +8780,7 @@ packages: /jsc-safe-url@0.2.4: resolution: {integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==} - /jscodeshift@0.14.0(@babel/preset-env@7.23.9): + /jscodeshift@0.14.0(@babel/preset-env@7.24.0): resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==} hasBin: true peerDependencies: @@ -8789,17 +8789,17 @@ packages: '@babel/preset-env': optional: true dependencies: - '@babel/core': 7.23.9 - '@babel/parser': 7.23.9 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.9) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.9) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.9) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9) - '@babel/preset-env': 7.23.9(@babel/core@7.23.9) - '@babel/preset-flow': 7.23.3(@babel/core@7.23.9) - '@babel/preset-typescript': 7.23.3(@babel/core@7.23.9) - '@babel/register': 7.23.7(@babel/core@7.23.9) - babel-core: 7.0.0-bridge.0(@babel/core@7.23.9) + '@babel/core': 7.24.0 + '@babel/parser': 7.24.0 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.0) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.24.0) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.24.0) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.24.0) + '@babel/preset-env': 7.24.0(@babel/core@7.24.0) + '@babel/preset-flow': 7.24.0(@babel/core@7.24.0) + '@babel/preset-typescript': 7.23.3(@babel/core@7.24.0) + '@babel/register': 7.23.7(@babel/core@7.24.0) + babel-core: 7.0.0-bridge.0(@babel/core@7.24.0) chalk: 4.1.2 flow-parser: 0.206.0 graceful-fs: 4.2.11 @@ -9222,7 +9222,7 @@ packages: /match-sorter@6.3.4: resolution: {integrity: sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg==} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 remove-accents: 0.5.0 dev: false @@ -9565,7 +9565,7 @@ packages: resolution: {integrity: sha512-ssuoVC4OzqaOt3LpwfUbDfBlFGRu9v1Yf2JJnKPz0ROYHNjSBws4aUesqQQ/Ea8DbiH7TK4j4cJmm+XjdHmgqA==} engines: {node: '>=18'} dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 hermes-parser: 0.19.1 nullthrows: 1.1.1 transitivePeerDependencies: @@ -9639,14 +9639,14 @@ packages: resolution: {integrity: sha512-21GQVd0pp2nACoK0C2PL8mBsEhIFUFFntYrWRlYNHtPQoqDzddrPEIgkyaABGXGued+dZoBlFQl+LASlmmfkvw==} engines: {node: '>=18'} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 /metro-source-map@0.80.6: resolution: {integrity: sha512-lqDuSLctWy9Qccu4Zl0YB1PzItpsqcKGb1nK0aDY+lzJ26X65OCib2VzHlj+xj7e4PiIKOfsvDCczCBz4cnxdg==} engines: {node: '>=18'} dependencies: - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 + '@babel/traverse': 7.24.0 + '@babel/types': 7.24.0 invariant: 2.2.4 metro-symbolicate: 0.80.6 nullthrows: 1.1.1 @@ -9674,10 +9674,10 @@ packages: resolution: {integrity: sha512-e04tdTC5Fy1vOQrTTXb5biao0t7nR/h+b1IaBTlM5UaHaAJZr658uVOoZhkRxKjbhF2mIwJ/8DdorD2CA15BCg==} engines: {node: '>=18'} dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/generator': 7.23.6 - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.0 nullthrows: 1.1.1 transitivePeerDependencies: - supports-color @@ -9686,10 +9686,10 @@ packages: resolution: {integrity: sha512-jV+VgCLiCj5jQadW/h09qJaqDreL6XcBRY52STCoz2xWn6WWLLMB5nXzQtvFNPmnIOps+Xu8+d5hiPcBNOhYmA==} engines: {node: '>=18'} dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/generator': 7.23.6 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 metro: 0.80.6 metro-babel-transformer: 0.80.6 metro-cache: 0.80.6 @@ -9710,12 +9710,12 @@ packages: hasBin: true dependencies: '@babel/code-frame': 7.23.5 - '@babel/core': 7.23.9 + '@babel/core': 7.24.0 '@babel/generator': 7.23.6 - '@babel/parser': 7.23.9 - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.0 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.0 + '@babel/types': 7.24.0 accepts: 1.3.8 chalk: 4.1.2 ci-info: 2.0.0 @@ -10562,7 +10562,7 @@ packages: '@next/env': 14.1.0 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001589 + caniuse-lite: 1.0.30001591 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.2.0 @@ -11631,7 +11631,7 @@ packages: react-native: '>=0.56' dependencies: fast-base64-decode: 1.0.0 - react-native: 0.73.4(@babel/core@7.23.9)(react@18.2.0) + react-native: 0.73.4(@babel/core@7.24.0)(react@18.2.0) dev: false /react-native-picker-select@9.0.1(@react-native-picker/picker@2.6.1): @@ -11643,7 +11643,7 @@ packages: lodash.isequal: 4.5.0 dev: false - /react-native@0.73.4(@babel/core@7.23.9)(react@18.2.0): + /react-native@0.73.4(@babel/core@7.24.0)(react@18.2.0): resolution: {integrity: sha512-VtS+Yr6OOTIuJGDECIYWzNU8QpJjASQYvMtfa/Hvm/2/h5GdB6W9H9TOmh13x07Lj4AOhNMx3XSsz6TdrO4jIg==} engines: {node: '>=18'} hasBin: true @@ -11655,8 +11655,8 @@ packages: '@react-native-community/cli-platform-android': 12.3.2 '@react-native-community/cli-platform-ios': 12.3.2 '@react-native/assets-registry': 0.73.1 - '@react-native/codegen': 0.73.3(@babel/preset-env@7.23.9) - '@react-native/community-cli-plugin': 0.73.16(@babel/core@7.23.9) + '@react-native/codegen': 0.73.3(@babel/preset-env@7.24.0) + '@react-native/community-cli-plugin': 0.73.16(@babel/core@7.24.0) '@react-native/gradle-plugin': 0.73.4 '@react-native/js-polyfills': 0.73.1 '@react-native/normalize-colors': 0.73.2 @@ -11832,7 +11832,7 @@ packages: /regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 /regexp.prototype.flags@1.5.2: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} @@ -12996,7 +12996,7 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - /ts-node@10.9.2(@types/node@20.11.20)(typescript@5.3.3): + /ts-node@10.9.2(@types/node@20.11.22)(typescript@5.3.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -13017,7 +13017,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.11.20 + '@types/node': 20.11.22 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 @@ -13558,7 +13558,7 @@ packages: vfile-message: 4.0.2 dev: false - /vite-node@1.3.1(@types/node@20.11.20): + /vite-node@1.3.1(@types/node@20.11.22): resolution: {integrity: sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -13567,7 +13567,7 @@ packages: debug: 4.3.4 pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.1.4(@types/node@20.11.20) + vite: 5.1.4(@types/node@20.11.22) transitivePeerDependencies: - '@types/node' - less @@ -13579,7 +13579,7 @@ packages: - terser dev: true - /vite@5.1.4(@types/node@20.11.20): + /vite@5.1.4(@types/node@20.11.22): resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -13607,7 +13607,7 @@ packages: terser: optional: true dependencies: - '@types/node': 20.11.20 + '@types/node': 20.11.22 esbuild: 0.19.12 postcss: 8.4.35 rollup: 4.12.0 @@ -13615,7 +13615,7 @@ packages: fsevents: 2.3.3 dev: true - /vitest@1.3.1(@types/node@20.11.20): + /vitest@1.3.1(@types/node@20.11.22): resolution: {integrity: sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -13640,7 +13640,7 @@ packages: jsdom: optional: true dependencies: - '@types/node': 20.11.20 + '@types/node': 20.11.22 '@vitest/expect': 1.3.1 '@vitest/runner': 1.3.1 '@vitest/snapshot': 1.3.1 @@ -13658,8 +13658,8 @@ packages: strip-literal: 2.0.0 tinybench: 2.6.0 tinypool: 0.8.2 - vite: 5.1.4(@types/node@20.11.20) - vite-node: 1.3.1(@types/node@20.11.20) + vite: 5.1.4(@types/node@20.11.22) + vite-node: 1.3.1(@types/node@20.11.22) why-is-node-running: 2.2.2 transitivePeerDependencies: - less From 789c66e3907c4b299f30c0fdeb6b4c8978719427 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Wed, 28 Feb 2024 20:55:42 +0100 Subject: [PATCH 04/31] Add Messaging interface for WebWorker and BroadcastChannel --- packages/evolu-common-web/src/DbWorker.worker.ts | 2 +- packages/evolu-common-web/src/DbWorkerLive.ts | 1 + packages/evolu-common-web/src/SyncWorker.worker.ts | 3 +-- packages/evolu-common/src/DbWorker.ts | 7 ++----- packages/evolu-common/src/SyncWorker.ts | 8 +++----- packages/evolu-common/src/Types.ts | 11 +++++++++++ 6 files changed, 19 insertions(+), 13 deletions(-) create mode 100644 packages/evolu-common/src/Types.ts diff --git a/packages/evolu-common-web/src/DbWorker.worker.ts b/packages/evolu-common-web/src/DbWorker.worker.ts index 3301f209a..755574549 100644 --- a/packages/evolu-common-web/src/DbWorker.worker.ts +++ b/packages/evolu-common-web/src/DbWorker.worker.ts @@ -1,7 +1,7 @@ import { DbWorker, - DbWorkerInput, DbWorkerCommonLive, + DbWorkerInput, NanoIdLive, } from "@evolu/common"; import * as Effect from "effect/Effect"; diff --git a/packages/evolu-common-web/src/DbWorkerLive.ts b/packages/evolu-common-web/src/DbWorkerLive.ts index 992b329fe..fe4eed0a4 100644 --- a/packages/evolu-common-web/src/DbWorkerLive.ts +++ b/packages/evolu-common-web/src/DbWorkerLive.ts @@ -18,6 +18,7 @@ export const DbWorkerLive = Layer.effect( const worker = new Worker(new URL("DbWorker.worker.js", import.meta.url), { type: "module", }); + worker.onmessage = (e: MessageEvent): void => { dbWorker.onMessage(e.data); }; diff --git a/packages/evolu-common-web/src/SyncWorker.worker.ts b/packages/evolu-common-web/src/SyncWorker.worker.ts index 34e68a634..e09d85bec 100644 --- a/packages/evolu-common-web/src/SyncWorker.worker.ts +++ b/packages/evolu-common-web/src/SyncWorker.worker.ts @@ -2,12 +2,11 @@ import { FetchLive, SecretBoxLive, SyncWorker, - SyncWorkerInput, SyncWorkerCommonLive, + SyncWorkerInput, } from "@evolu/common"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; - import { SyncLockLive } from "./PlatformLive.js"; const syncWorker = Effect.provide( diff --git a/packages/evolu-common/src/DbWorker.ts b/packages/evolu-common/src/DbWorker.ts index 00d2ae7f4..843aa95e4 100644 --- a/packages/evolu-common/src/DbWorker.ts +++ b/packages/evolu-common/src/DbWorker.ts @@ -58,12 +58,9 @@ import { SyncWorkerOutputSyncResponse, SyncWorkerPostMessage, } from "./SyncWorker.js"; +import { Messaging } from "./Types.js"; -export interface DbWorker { - readonly postMessage: (input: DbWorkerInput) => void; - onMessage: (output: DbWorkerOutput) => void; -} - +export interface DbWorker extends Messaging {} export const DbWorker = Context.GenericTag("@services/DbWorker"); export type DbWorkerInput = diff --git a/packages/evolu-common/src/SyncWorker.ts b/packages/evolu-common/src/SyncWorker.ts index cfdc15f0d..2079d6b8f 100644 --- a/packages/evolu-common/src/SyncWorker.ts +++ b/packages/evolu-common/src/SyncWorker.ts @@ -31,12 +31,10 @@ import { SyncResponse, } from "./Protobuf.js"; import { JsonObjectOrArray, Value } from "./Sqlite.js"; +import { Messaging } from "./Types.js"; -export interface SyncWorker { - readonly postMessage: (input: SyncWorkerInput) => void; - onMessage: (output: SyncWorkerOutput) => void; -} - +export interface SyncWorker + extends Messaging {} export const SyncWorker = Context.GenericTag( "@services/SyncWorker", ); diff --git a/packages/evolu-common/src/Types.ts b/packages/evolu-common/src/Types.ts new file mode 100644 index 000000000..6d9a6825e --- /dev/null +++ b/packages/evolu-common/src/Types.ts @@ -0,0 +1,11 @@ +/** + * Add types for WebWorker and BroadcastChannel. Messages must have a `_tag` + * property. + */ +export interface Messaging< + Input extends { _tag: string }, + Output extends { _tag: string }, +> { + readonly postMessage: (input: Input) => void; + onMessage: (output: Output) => void; +} From 527689cf1d696a6bb54b9ec9527c58a0b140220c Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Fri, 1 Mar 2024 10:30:14 +0100 Subject: [PATCH 05/31] Rename NanoId to NanoIdGenerator, add NanoId type --- .../evolu-common-web/src/DbWorker.worker.ts | 8 ++++---- packages/evolu-common-web/src/PlatformLive.ts | 1 - packages/evolu-common/src/Crdt.ts | 4 ++-- packages/evolu-common/src/Crypto.ts | 18 +++++++++++------- packages/evolu-common/src/Db.ts | 4 ++-- packages/evolu-common/src/DbWorker.ts | 13 +++++++++---- packages/evolu-common/src/Evolu.ts | 8 ++++---- packages/evolu-common/src/OnCompletes.ts | 8 ++++---- packages/evolu-common/test/Crdt.test.ts | 8 ++++---- packages/evolu-react-native/src/index.ts | 9 +++++++-- 10 files changed, 47 insertions(+), 34 deletions(-) diff --git a/packages/evolu-common-web/src/DbWorker.worker.ts b/packages/evolu-common-web/src/DbWorker.worker.ts index 755574549..40a5e4a71 100644 --- a/packages/evolu-common-web/src/DbWorker.worker.ts +++ b/packages/evolu-common-web/src/DbWorker.worker.ts @@ -2,7 +2,7 @@ import { DbWorker, DbWorkerCommonLive, DbWorkerInput, - NanoIdLive, + NanoIdGeneratorLive, } from "@evolu/common"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; @@ -12,9 +12,9 @@ import { SyncWorkerLive } from "./SyncWorkerLive.js"; const dbWorker = Effect.provide( DbWorker, - Layer.provide( - DbWorkerCommonLive, - Layer.mergeAll(SqliteLive, Bip39Live, NanoIdLive, SyncWorkerLive), + DbWorkerCommonLive.pipe( + Layer.provide(Layer.mergeAll(SqliteLive, Bip39Live, SyncWorkerLive)), + Layer.provide(NanoIdGeneratorLive), ), ).pipe(Effect.runSync); diff --git a/packages/evolu-common-web/src/PlatformLive.ts b/packages/evolu-common-web/src/PlatformLive.ts index 1a7d47bbc..cf05ee5e7 100644 --- a/packages/evolu-common-web/src/PlatformLive.ts +++ b/packages/evolu-common-web/src/PlatformLive.ts @@ -17,7 +17,6 @@ export const PlatformNameLive = Layer.succeed( canUseDom ? "web" : "server", ); -// TODO: Probably remove and simplify code. export const SyncLockLive = Layer.effect( SyncLock, Effect.sync(() => { diff --git a/packages/evolu-common/src/Crdt.ts b/packages/evolu-common/src/Crdt.ts index 6c9657c97..0136b6238 100644 --- a/packages/evolu-common/src/Crdt.ts +++ b/packages/evolu-common/src/Crdt.ts @@ -10,7 +10,7 @@ import * as Option from "effect/Option"; import * as ReadonlyArray from "effect/ReadonlyArray"; import * as String from "effect/String"; import { Config } from "./Config.js"; -import { NanoId, NodeId } from "./Crypto.js"; +import { NanoIdGenerator, NodeId } from "./Crypto.js"; import { murmurhash } from "./Murmurhash.js"; // https://muratbuffalo.blogspot.com/2014/07/hybrid-logical-clocks.html @@ -86,7 +86,7 @@ export const makeSyncTimestamp = ( node: syncNodeId, }); -export const makeInitialTimestamp = NanoId.pipe( +export const makeInitialTimestamp = NanoIdGenerator.pipe( Effect.flatMap(({ nanoidAsNodeId }) => nanoidAsNodeId), Effect.map( (node): Timestamp => ({ diff --git a/packages/evolu-common/src/Crypto.ts b/packages/evolu-common/src/Crypto.ts index 26fc05bc2..617baa418 100644 --- a/packages/evolu-common/src/Crypto.ts +++ b/packages/evolu-common/src/Crypto.ts @@ -36,12 +36,16 @@ export interface InvalidMnemonicError { */ export type Mnemonic = string & Brand.Brand<"Mnemonic">; -export interface NanoId { - readonly nanoid: Effect.Effect; +export interface NanoIdGenerator { + readonly nanoid: Effect.Effect; readonly nanoidAsNodeId: Effect.Effect; } -export const NanoId = Context.GenericTag("@services/NanoId"); +export const NanoIdGenerator = Context.GenericTag( + "@services/NanoIdGenerator", +); + +export type NanoId = string & Brand.Brand<"NanoId">; export const NodeId = S.string.pipe( S.pattern(/^[\w-]{16}$/), @@ -51,10 +55,10 @@ export type NodeId = S.Schema.To; const nanoidForNodeId = customAlphabet("0123456789abcdef", 16); -export const NanoIdLive = Layer.succeed( - NanoId, - NanoId.of({ - nanoid: Effect.sync(() => nanoid()), +export const NanoIdGeneratorLive = Layer.succeed( + NanoIdGenerator, + NanoIdGenerator.of({ + nanoid: Effect.sync(() => nanoid() as NanoId), nanoidAsNodeId: Effect.sync(() => nanoidForNodeId() as NodeId), }), ); diff --git a/packages/evolu-common/src/Db.ts b/packages/evolu-common/src/Db.ts index 4db3361c1..712c079d5 100644 --- a/packages/evolu-common/src/Db.ts +++ b/packages/evolu-common/src/Db.ts @@ -21,7 +21,7 @@ import { merkleTreeToString, timestampToString, } from "./Crdt.js"; -import { Bip39, Mnemonic, NanoId } from "./Crypto.js"; +import { Bip39, Mnemonic, NanoIdGenerator } from "./Crypto.js"; import { EvoluTypeError } from "./ErrorStore.js"; import { Id, SqliteBoolean, SqliteDate } from "./Model.js"; import { Owner, makeOwner } from "./Owner.js"; @@ -323,7 +323,7 @@ export const someDefectToNoSuchTableOrColumnError = Effect.catchSomeDefect( export const lazyInit = ( mnemonic?: Mnemonic, -): Effect.Effect => +): Effect.Effect => Effect.gen(function* (_) { const [owner, sqlite, initialTimestampString] = yield* _( Effect.all([makeOwner(mnemonic), Sqlite, makeInitialTimestamp], { diff --git a/packages/evolu-common/src/DbWorker.ts b/packages/evolu-common/src/DbWorker.ts index 843aa95e4..fec7eeefb 100644 --- a/packages/evolu-common/src/DbWorker.ts +++ b/packages/evolu-common/src/DbWorker.ts @@ -28,7 +28,7 @@ import { timestampToString, unsafeTimestampFromString, } from "./Crdt.js"; -import { Bip39, Mnemonic, NanoId } from "./Crypto.js"; +import { Bip39, Mnemonic, NanoIdGenerator } from "./Crypto.js"; import { Queries, Query, @@ -547,7 +547,11 @@ const sync = ({ const reset = ( input: DbWorkerInputReset, -): Effect.Effect => +): Effect.Effect< + void, + never, + Sqlite | Bip39 | NanoIdGenerator | DbWorkerOnMessage +> => Effect.gen(function* (_) { const sqlite = yield* _(Sqlite); @@ -598,7 +602,7 @@ export const DbWorkerCommonLive = Layer.effect( const runContext = Context.empty().pipe( Context.add(Sqlite, yield* _(Sqlite)), Context.add(Bip39, yield* _(Bip39)), - Context.add(NanoId, yield* _(NanoId)), + Context.add(NanoIdGenerator, yield* _(NanoIdGenerator)), Context.add(DbWorkerOnMessage, (output) => { dbWorker.onMessage(output); }), @@ -608,7 +612,7 @@ export const DbWorkerCommonLive = Layer.effect( effect: Effect.Effect< void, EvoluError, - Sqlite | Bip39 | NanoId | DbWorkerOnMessage + Sqlite | Bip39 | NanoIdGenerator | DbWorkerOnMessage >, ): Promise => effect.pipe( @@ -676,6 +680,7 @@ export const DbWorkerCommonLive = Layer.effect( let messageQueue: Promise = Promise.resolve(undefined); const postMessage: DbWorker["postMessage"] = (input) => { + // TODO: Use Web Locks to enforce DbWorker transaction across tabs. messageQueue = messageQueue.then(() => write(input)); }; diff --git a/packages/evolu-common/src/Evolu.ts b/packages/evolu-common/src/Evolu.ts index ecb96041a..05487d27f 100644 --- a/packages/evolu-common/src/Evolu.ts +++ b/packages/evolu-common/src/Evolu.ts @@ -11,7 +11,7 @@ import * as ReadonlyArray from "effect/ReadonlyArray"; import * as Kysely from "kysely"; import { Config, ConfigLive } from "./Config.js"; import { Time, TimeLive } from "./Crdt.js"; -import { Mnemonic, NanoId, NanoIdLive } from "./Crypto.js"; +import { Mnemonic, NanoIdGenerator, NanoIdGeneratorLive } from "./Crypto.js"; import { DatabaseSchema, Queries, @@ -643,7 +643,7 @@ type Castable = { const MutateLive = Layer.effect( Mutate, Effect.gen(function* (_) { - const nanoid = yield* _(NanoId); + const { nanoid } = yield* _(NanoIdGenerator); const onCompletes = yield* _(OnCompletes); const time = yield* _(Time); const subscribedQueries = yield* _(SubscribedQueries); @@ -653,7 +653,7 @@ const MutateLive = Layer.effect( return Mutate.of((table, { id, ...values }, onComplete) => { const isInsert = id == null; - if (isInsert) id = Effect.runSync(nanoid.nanoid) as never; + if (isInsert) id = Effect.runSync(nanoid) as never; const onCompleteId = onComplete ? onCompletes.add(onComplete).pipe(Effect.runSync) @@ -786,7 +786,7 @@ const EvoluCommon = Layer.effect( ); export const EvoluCommonLive = EvoluCommon.pipe( - Layer.provide(Layer.merge(TimeLive, NanoIdLive)), + Layer.provide(Layer.merge(TimeLive, NanoIdGeneratorLive)), ); /** diff --git a/packages/evolu-common/src/OnCompletes.ts b/packages/evolu-common/src/OnCompletes.ts index 0203fa1ad..5279cbba6 100644 --- a/packages/evolu-common/src/OnCompletes.ts +++ b/packages/evolu-common/src/OnCompletes.ts @@ -4,7 +4,7 @@ import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; import * as Option from "effect/Option"; import * as ReadonlyArray from "effect/ReadonlyArray"; -import { NanoId } from "./Crypto.js"; +import { NanoId, NanoIdGenerator } from "./Crypto.js"; export interface OnCompletes { readonly add: (onComplete: OnComplete) => Effect.Effect; @@ -16,7 +16,7 @@ export interface OnCompletes { export type OnComplete = () => void; -export type OnCompleteId = string & Brand.Brand<"OnCompleteId">; +export type OnCompleteId = NanoId & Brand.Brand<"OnCompleteId">; export const OnCompletes = Context.GenericTag( "@services/OnCompletes", @@ -25,12 +25,12 @@ export const OnCompletes = Context.GenericTag( export const OnCompletesLive = Layer.effect( OnCompletes, Effect.gen(function* (_) { - const nanoid = yield* _(NanoId); + const { nanoid } = yield* _(NanoIdGenerator); const map = new Map(); return OnCompletes.of({ add: (onComplete) => - nanoid.nanoid.pipe( + nanoid.pipe( Effect.map((nanoid) => { const id = nanoid as OnCompleteId; map.set(id, onComplete); diff --git a/packages/evolu-common/test/Crdt.test.ts b/packages/evolu-common/test/Crdt.test.ts index 2b3750a05..edb0be2b1 100644 --- a/packages/evolu-common/test/Crdt.test.ts +++ b/packages/evolu-common/test/Crdt.test.ts @@ -24,15 +24,15 @@ import { timestampToString, unsafeTimestampFromString, } from "../src/Crdt.js"; -import { NanoId, NodeId } from "../src/Crypto.js"; +import { NanoId, NanoIdGenerator, NodeId } from "../src/Crypto.js"; import { makeNode1Timestamp, makeNode2Timestamp } from "./utils.js"; test("InitialTimestampLive", () => { const timestamp = makeInitialTimestamp.pipe( Effect.provideService( - NanoId, - NanoId.of({ - nanoid: Effect.succeed("nanoid"), + NanoIdGenerator, + NanoIdGenerator.of({ + nanoid: Effect.succeed("nanoid" as NanoId), nanoidAsNodeId: Effect.succeed("nanoidAsNodeId" as NodeId), }), ), diff --git a/packages/evolu-react-native/src/index.ts b/packages/evolu-react-native/src/index.ts index 6a5bc23e9..d58e7be58 100644 --- a/packages/evolu-react-native/src/index.ts +++ b/packages/evolu-react-native/src/index.ts @@ -6,7 +6,7 @@ import { FlushSyncDefaultLive, InvalidMnemonicError, Mnemonic, - NanoIdLive, + NanoIdGeneratorLive, SecretBoxLive, SyncWorkerCommonLive, makeCreateEvolu, @@ -73,7 +73,12 @@ export const createEvolu = makeCreateEvolu( ), ), Layer.provide( - Layer.mergeAll(Bip39Live, NanoIdLive, SqliteLive, SyncWorkerCommonLive), + Layer.mergeAll( + Bip39Live, + NanoIdGeneratorLive, + SqliteLive, + SyncWorkerCommonLive, + ), ), Layer.provide(Layer.mergeAll(SecretBoxLive, SyncLockLive, FetchLive)), ), From 8d86a8f572576bbdde370775234051abf5864b50 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Fri, 1 Mar 2024 10:30:31 +0100 Subject: [PATCH 06/31] Export SqliteExecResult --- packages/evolu-common/src/Sqlite.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/evolu-common/src/Sqlite.ts b/packages/evolu-common/src/Sqlite.ts index 3de447c08..ef7e0baba 100644 --- a/packages/evolu-common/src/Sqlite.ts +++ b/packages/evolu-common/src/Sqlite.ts @@ -3,7 +3,7 @@ import * as Effect from "effect/Effect"; import * as Predicate from "effect/Predicate"; export interface Sqlite { - readonly exec: (arg: string | SqliteQuery) => Effect.Effect; + readonly exec: (arg: string | SqliteQuery) => Effect.Effect; } export const Sqlite = Context.GenericTag("@services/Sqlite"); @@ -21,7 +21,7 @@ type JsonArray = ReadonlyArray; type JsonPrimitive = string | number | boolean | null; type Json = JsonPrimitive | JsonObject | JsonArray; -interface ExecResult { +export interface SqliteExecResult { readonly rows: SqliteRow[]; readonly changes: number; } From cab5358592cf7dff6d0d5666da653136ce32fa55 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Fri, 1 Mar 2024 20:22:49 +0100 Subject: [PATCH 07/31] Update deps --- apps/native/package.json | 4 +- apps/web/package.json | 12 +- packages/eslint-config-evolu/package.json | 4 +- packages/evolu-common/package.json | 8 +- packages/evolu-server/package.json | 4 +- pnpm-lock.yaml | 484 ++++++++++------------ 6 files changed, 243 insertions(+), 273 deletions(-) diff --git a/apps/native/package.json b/apps/native/package.json index 9cee14b8e..e2fb96420 100644 --- a/apps/native/package.json +++ b/apps/native/package.json @@ -11,7 +11,7 @@ "clean": "rm -rf .turbo .expo node_modules dist" }, "dependencies": { - "@effect/schema": "^0.63.0", + "@effect/schema": "^0.63.2", "@evolu/common": "workspace:*", "@evolu/common-react": "workspace:*", "@evolu/react-native": "workspace:*", @@ -19,7 +19,7 @@ "babel-plugin-module-resolver": "^5.0.0", "buffer": "^6.0.3", "crypto-browserify": "^3.12.0", - "effect": "2.4.0", + "effect": "2.4.1", "events": "^3.3.0", "expo": "^50.0.7", "expo-sqlite": "~13.2.2", diff --git a/apps/web/package.json b/apps/web/package.json index b8c701b4c..79cdb58a1 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -10,14 +10,14 @@ "clean": "rm -rf .turbo .next node_modules" }, "dependencies": { - "@effect/schema": "^0.63.0", + "@effect/schema": "^0.63.2", "@evolu/common": "workspace:*", "@evolu/react": "workspace:*", "clsx": "^2.1.0", - "effect": "2.4.0", - "next": "14.1.0", - "nextra": "^2.13.3", - "nextra-theme-docs": "^2.13.3", + "effect": "2.4.1", + "next": "14.1.1", + "nextra": "^2.13.4", + "nextra-theme-docs": "^2.13.4", "react": "^18.2.0", "react-dom": "^18.2.0" }, @@ -26,7 +26,7 @@ "@types/node": "^20.11.20", "@types/react": "^18.2.60", "@types/react-dom": "^18.2.19", - "autoprefixer": "^10.4.17", + "autoprefixer": "^10.4.18", "eslint": "^8.57.0", "eslint-config-evolu": "workspace:*", "postcss": "^8.4.35", diff --git a/packages/eslint-config-evolu/package.json b/packages/eslint-config-evolu/package.json index 5ebac0b79..adbec7a9e 100644 --- a/packages/eslint-config-evolu/package.json +++ b/packages/eslint-config-evolu/package.json @@ -9,12 +9,12 @@ "dependencies": { "@typescript-eslint/eslint-plugin": "^7.1.0", "@typescript-eslint/parser": "^7.1.0", - "eslint-config-next": "14.1.0", + "eslint-config-next": "14.1.1", "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^1.12.4", "eslint-plugin-jsdoc": "^48.2.0", "eslint-plugin-node": "^11.1.0", - "next": "14.1.0", + "next": "14.1.1", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/packages/evolu-common/package.json b/packages/evolu-common/package.json index a12a2e578..43910be56 100644 --- a/packages/evolu-common/package.json +++ b/packages/evolu-common/package.json @@ -61,20 +61,20 @@ "nanoid": "^5.0.6" }, "devDependencies": { - "@effect/schema": "^0.63.0", + "@effect/schema": "^0.63.2", "@evolu/tsconfig": "workspace:*", "@protobuf-ts/plugin": "^2.9.3", "@protobuf-ts/protoc": "^2.9.3", "array-shuffle": "^3.0.0", - "effect": "2.4.0", + "effect": "2.4.1", "eslint": "^8.57.0", "eslint-config-evolu": "workspace:*", "typescript": "^5.3.3", "vitest": "^1.3.1" }, "peerDependencies": { - "@effect/schema": "^0.63.0", - "effect": "2.4.0" + "@effect/schema": "^0.63.2", + "effect": "2.4.1" }, "publishConfig": { "access": "public" diff --git a/packages/evolu-server/package.json b/packages/evolu-server/package.json index 666ae84e0..fe9994eff 100644 --- a/packages/evolu-server/package.json +++ b/packages/evolu-server/package.json @@ -31,8 +31,8 @@ "better-sqlite3": "^9.4.3", "body-parser": "^1.20.2", "cors": "^2.8.5", - "effect": "2.4.0", - "express": "^4.18.2", + "effect": "2.4.1", + "express": "^4.18.3", "kysely": "^0.27.0" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4f302f6ec..ef8cf7ec2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,8 +33,8 @@ importers: apps/native: dependencies: '@effect/schema': - specifier: ^0.63.0 - version: 0.63.1(effect@2.4.0)(fast-check@3.15.1) + specifier: ^0.63.2 + version: 0.63.2(effect@2.4.1)(fast-check@3.15.1) '@evolu/common': specifier: workspace:* version: link:../../packages/evolu-common @@ -57,17 +57,17 @@ importers: specifier: ^3.12.0 version: 3.12.0 effect: - specifier: 2.4.0 - version: 2.4.0 + specifier: 2.4.1 + version: 2.4.1 events: specifier: ^3.3.0 version: 3.3.0 expo: specifier: ^50.0.7 - version: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) + version: 50.0.8(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) expo-sqlite: specifier: ~13.2.2 - version: 13.2.2(expo@50.0.7) + version: 13.2.2(expo@50.0.8) expo-status-bar: specifier: ~1.11.1 version: 1.11.1 @@ -101,7 +101,7 @@ importers: version: 7.23.3(@babel/core@7.24.0) '@types/react': specifier: ^18.2.60 - version: 18.2.60 + version: 18.2.61 eslint: specifier: ^8.57.0 version: 8.57.0 @@ -126,10 +126,10 @@ importers: version: link:../../packages/evolu-tsconfig '@types/node': specifier: ^20.11.20 - version: 20.11.22 + version: 20.11.24 ts-node: specifier: ^10.9.1 - version: 10.9.2(@types/node@20.11.22)(typescript@5.3.3) + version: 10.9.2(@types/node@20.11.24)(typescript@5.3.3) typescript: specifier: ^5.3.3 version: 5.3.3 @@ -137,8 +137,8 @@ importers: apps/web: dependencies: '@effect/schema': - specifier: ^0.63.0 - version: 0.63.1(effect@2.4.0)(fast-check@3.15.1) + specifier: ^0.63.2 + version: 0.63.2(effect@2.4.1)(fast-check@3.15.1) '@evolu/common': specifier: workspace:* version: link:../../packages/evolu-common @@ -149,17 +149,17 @@ importers: specifier: ^2.1.0 version: 2.1.0 effect: - specifier: 2.4.0 - version: 2.4.0 + specifier: 2.4.1 + version: 2.4.1 next: - specifier: 14.1.0 - version: 14.1.0(react-dom@18.2.0)(react@18.2.0) + specifier: 14.1.1 + version: 14.1.1(react-dom@18.2.0)(react@18.2.0) nextra: - specifier: ^2.13.3 - version: 2.13.3(next@14.1.0)(react-dom@18.2.0)(react@18.2.0) + specifier: ^2.13.4 + version: 2.13.4(next@14.1.1)(react-dom@18.2.0)(react@18.2.0) nextra-theme-docs: - specifier: ^2.13.3 - version: 2.13.3(next@14.1.0)(nextra@2.13.3)(react-dom@18.2.0)(react@18.2.0) + specifier: ^2.13.4 + version: 2.13.4(next@14.1.1)(nextra@2.13.4)(react-dom@18.2.0)(react@18.2.0) react: specifier: ^18.2.0 version: 18.2.0 @@ -172,16 +172,16 @@ importers: version: link:../../packages/evolu-tsconfig '@types/node': specifier: ^20.11.20 - version: 20.11.22 + version: 20.11.24 '@types/react': specifier: ^18.2.60 - version: 18.2.60 + version: 18.2.61 '@types/react-dom': specifier: ^18.2.19 version: 18.2.19 autoprefixer: - specifier: ^10.4.17 - version: 10.4.17(postcss@8.4.35) + specifier: ^10.4.18 + version: 10.4.18(postcss@8.4.35) eslint: specifier: ^8.57.0 version: 8.57.0 @@ -213,8 +213,8 @@ importers: specifier: ^7.1.0 version: 7.1.0(eslint@8.57.0)(typescript@5.3.3) eslint-config-next: - specifier: 14.1.0 - version: 14.1.0(eslint@8.57.0)(typescript@5.3.3) + specifier: 14.1.1 + version: 14.1.1(eslint@8.57.0)(typescript@5.3.3) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) @@ -228,8 +228,8 @@ importers: specifier: ^11.1.0 version: 11.1.0(eslint@8.57.0) next: - specifier: 14.1.0 - version: 14.1.0(react-dom@18.2.0)(react@18.2.0) + specifier: 14.1.1 + version: 14.1.1(react-dom@18.2.0)(react@18.2.0) react: specifier: ^18.2.0 version: 18.2.0 @@ -266,8 +266,8 @@ importers: version: 5.0.6 devDependencies: '@effect/schema': - specifier: ^0.63.0 - version: 0.63.1(effect@2.4.0)(fast-check@3.15.1) + specifier: ^0.63.2 + version: 0.63.2(effect@2.4.1)(fast-check@3.15.1) '@evolu/tsconfig': specifier: workspace:* version: link:../evolu-tsconfig @@ -281,8 +281,8 @@ importers: specifier: ^3.0.0 version: 3.0.0 effect: - specifier: 2.4.0 - version: 2.4.0 + specifier: 2.4.1 + version: 2.4.1 eslint: specifier: ^8.57.0 version: 8.57.0 @@ -294,7 +294,7 @@ importers: version: 5.3.3 vitest: specifier: ^1.3.1 - version: 1.3.1(@types/node@20.11.22) + version: 1.3.1(@types/node@20.11.24) packages/evolu-common-react: devDependencies: @@ -306,7 +306,7 @@ importers: version: link:../evolu-tsconfig '@types/react': specifier: ^18.2.60 - version: 18.2.60 + version: 18.2.61 eslint: specifier: ^8.57.0 version: 8.57.0 @@ -321,7 +321,7 @@ importers: version: 5.3.3 vitest: specifier: ^1.3.1 - version: 1.3.1(@types/node@20.11.22) + version: 1.3.1(@types/node@20.11.24) packages/evolu-common-web: devDependencies: @@ -351,7 +351,7 @@ importers: version: 0.4.2 vitest: specifier: ^1.3.1 - version: 1.3.1(@types/node@20.11.22) + version: 1.3.1(@types/node@20.11.24) packages/evolu-react: devDependencies: @@ -384,13 +384,13 @@ importers: version: 5.3.3 vitest: specifier: ^1.3.1 - version: 1.3.1(@types/node@20.11.22) + version: 1.3.1(@types/node@20.11.24) packages/evolu-react-native: dependencies: expo-updates: specifier: ^0.24.11 - version: 0.24.11(expo@50.0.7) + version: 0.24.11(expo@50.0.8) devDependencies: '@evolu/common': specifier: workspace:* @@ -409,10 +409,10 @@ importers: version: link:../eslint-config-evolu expo: specifier: ^50.0.7 - version: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) + version: 50.0.8(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) expo-sqlite: specifier: ~13.2.2 - version: 13.2.2(expo@50.0.7) + version: 13.2.2(expo@50.0.8) react-native: specifier: 0.73.4 version: 0.73.4(@babel/core@7.24.0)(react@18.2.0) @@ -421,7 +421,7 @@ importers: version: 5.3.3 vitest: specifier: ^1.3.1 - version: 1.3.1(@types/node@20.11.22) + version: 1.3.1(@types/node@20.11.24) packages/evolu-server: dependencies: @@ -438,11 +438,11 @@ importers: specifier: ^2.8.5 version: 2.8.5 effect: - specifier: 2.4.0 - version: 2.4.0 + specifier: 2.4.1 + version: 2.4.1 express: - specifier: ^4.18.2 - version: 4.18.2 + specifier: ^4.18.3 + version: 4.18.3 kysely: specifier: ^0.27.0 version: 0.27.2 @@ -464,7 +464,7 @@ importers: version: 4.17.21 '@types/node': specifier: ^20.11.20 - version: 20.11.22 + version: 20.11.24 eslint: specifier: ^8.57.0 version: 8.57.0 @@ -476,7 +476,7 @@ importers: version: 5.3.3 vitest: specifier: ^1.3.1 - version: 1.3.1(@types/node@20.11.22) + version: 1.3.1(@types/node@20.11.24) packages/evolu-tsconfig: {} @@ -491,12 +491,12 @@ packages: engines: {node: '>=10'} dev: true - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.4 - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.24 /@babel/code-frame@7.10.4: resolution: {integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==} @@ -518,7 +518,7 @@ packages: resolution: {integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.1 + '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.23.5 '@babel/generator': 7.23.6 '@babel/helper-compilation-targets': 7.23.6 @@ -541,8 +541,8 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.0 - '@jridgewell/gen-mapping': 0.3.4 - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.24 jsesc: 2.5.2 /@babel/helper-annotate-as-pure@7.22.5: @@ -2382,13 +2382,13 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@effect/schema@0.63.1(effect@2.4.0)(fast-check@3.15.1): - resolution: {integrity: sha512-Vs7g72qbPTLWXZ4jcaPzprfbY1ODZxwqfOTrMhwvSUc6kgt1i2KP88LxFy7dFLJasx3CYPz8MTvP0x8mbBCftw==} + /@effect/schema@0.63.2(effect@2.4.1)(fast-check@3.15.1): + resolution: {integrity: sha512-piS+6dlGmcX8sAPGXdY4T6QmBbY2YXVnYjUguXpClk6FL7lQ9u2aIDib5kjCpciawJjil2VwltmPnMj0NJKKQQ==} peerDependencies: - effect: ^2.4.0 + effect: ^2.4.1 fast-check: ^3.13.2 dependencies: - effect: 2.4.0 + effect: 2.4.1 fast-check: 3.15.1 /@es-joy/jsdoccomment@0.42.0: @@ -2649,8 +2649,8 @@ packages: mv: 2.1.1 safe-json-stringify: 1.2.0 - /@expo/cli@0.17.5(@react-native/babel-preset@0.73.21)(expo-modules-autolinking@1.10.3): - resolution: {integrity: sha512-9cMquL/5bBfV73CbZcWipk3KZSo8mBqdgvkoWCtEtnnlm/879ayxzMWjVIgT5yV4w+X7+N6KkBSUIIj4t9Xqew==} + /@expo/cli@0.17.6(@react-native/babel-preset@0.73.21)(expo-modules-autolinking@1.10.3): + resolution: {integrity: sha512-vpwQOyhkqQ5Ao96AGaFntRf6dX7h7/e9T7oKZ5KfJiaLRgfmNa/yHFu5cpXG76T2R7Q6aiU4ik0KU3P7nFMzEw==} hasBin: true dependencies: '@babel/runtime': 7.24.0 @@ -2661,7 +2661,7 @@ packages: '@expo/env': 0.2.1 '@expo/image-utils': 0.4.1 '@expo/json-file': 8.3.0 - '@expo/metro-config': 0.17.4(@react-native/babel-preset@0.73.21) + '@expo/metro-config': 0.17.5(@react-native/babel-preset@0.73.21) '@expo/osascript': 2.1.0 '@expo/package-manager': 1.4.2 '@expo/plist': 0.1.0 @@ -2854,8 +2854,8 @@ packages: json5: 2.2.3 write-file-atomic: 2.4.3 - /@expo/metro-config@0.17.4(@react-native/babel-preset@0.73.21): - resolution: {integrity: sha512-PxqDMuVjXQeboa6Aj8kNj4iTxIpwpfoYlF803qOjf1LE1ePlREnWNwqy65ESCBnCmekYIO5hhm1Nksa+xCvuyg==} + /@expo/metro-config@0.17.5(@react-native/babel-preset@0.73.21): + resolution: {integrity: sha512-2YUebeIwr6gFxcIRSVAjWK5D8YSaXBzQoRRl3muJWsH8AC8a+T60xbA3cGhsEICD2zKS5zwnL2yobgs41Ur7nQ==} peerDependencies: '@react-native/babel-preset': '*' dependencies: @@ -3061,7 +3061,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.22 + '@types/node': 20.11.24 jest-mock: 29.7.0 /@jest/fake-timers@29.7.0: @@ -3070,7 +3070,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.11.22 + '@types/node': 20.11.24 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -3087,7 +3087,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.11.22 + '@types/node': 20.11.24 '@types/yargs': 15.0.19 chalk: 4.1.2 @@ -3098,37 +3098,37 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.11.22 + '@types/node': 20.11.24 '@types/yargs': 17.0.32 chalk: 4.1.2 - /@jridgewell/gen-mapping@0.3.4: - resolution: {integrity: sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==} + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.2 + '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/trace-mapping': 0.3.24 /@jridgewell/resolve-uri@3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} /@jridgewell/source-map@0.3.5: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: - '@jridgewell/gen-mapping': 0.3.4 - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.24 /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.23: - resolution: {integrity: sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==} + /@jridgewell/trace-mapping@0.3.24: + resolution: {integrity: sha512-+VaWXDa6+l6MhflBvVXjIEAzb59nQ2JUK3bwRp2zRpPtU+8TFRy9Gg/5oIcNlkEL5PGlBFGfemUVvIgLnTzq7Q==} dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 @@ -3190,7 +3190,7 @@ packages: react: '>=16' dependencies: '@types/mdx': 2.0.11 - '@types/react': 18.2.60 + '@types/react': 18.2.61 react: 18.2.0 dev: false @@ -3310,18 +3310,18 @@ packages: '@napi-rs/simple-git-win32-x64-msvc': 0.1.16 dev: false - /@next/env@14.1.0: - resolution: {integrity: sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==} + /@next/env@14.1.1: + resolution: {integrity: sha512-7CnQyD5G8shHxQIIg3c7/pSeYFeMhsNbpU/bmvH7ZnDql7mNRgg8O2JZrhrc/soFnfBnKP4/xXNiiSIPn2w8gA==} dev: false - /@next/eslint-plugin-next@14.1.0: - resolution: {integrity: sha512-x4FavbNEeXx/baD/zC/SdrvkjSby8nBn8KcCREqk6UuwvwoAPZmaV8TFCAuo/cpovBRTIY67mHhe86MQQm/68Q==} + /@next/eslint-plugin-next@14.1.1: + resolution: {integrity: sha512-NP1WoGFnFLpqqCWgGFjnn/sTwUExdPyjeFKRdQP1X/bL/tjAQ/TXDmYqw6vzGaP5NaZ2u6xzg+N/0nd7fOPOGQ==} dependencies: glob: 10.3.10 dev: false - /@next/swc-darwin-arm64@14.1.0: - resolution: {integrity: sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==} + /@next/swc-darwin-arm64@14.1.1: + resolution: {integrity: sha512-yDjSFKQKTIjyT7cFv+DqQfW5jsD+tVxXTckSe1KIouKk75t1qZmj/mV3wzdmFb0XHVGtyRjDMulfVG8uCKemOQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -3329,8 +3329,8 @@ packages: dev: false optional: true - /@next/swc-darwin-x64@14.1.0: - resolution: {integrity: sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==} + /@next/swc-darwin-x64@14.1.1: + resolution: {integrity: sha512-KCQmBL0CmFmN8D64FHIZVD9I4ugQsDBBEJKiblXGgwn7wBCSe8N4Dx47sdzl4JAg39IkSN5NNrr8AniXLMb3aw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -3338,8 +3338,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-gnu@14.1.0: - resolution: {integrity: sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==} + /@next/swc-linux-arm64-gnu@14.1.1: + resolution: {integrity: sha512-YDQfbWyW0JMKhJf/T4eyFr4b3tceTorQ5w2n7I0mNVTFOvu6CGEzfwT3RSAQGTi/FFMTFcuspPec/7dFHuP7Eg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -3347,8 +3347,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-musl@14.1.0: - resolution: {integrity: sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==} + /@next/swc-linux-arm64-musl@14.1.1: + resolution: {integrity: sha512-fiuN/OG6sNGRN/bRFxRvV5LyzLB8gaL8cbDH5o3mEiVwfcMzyE5T//ilMmaTrnA8HLMS6hoz4cHOu6Qcp9vxgQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -3356,8 +3356,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-gnu@14.1.0: - resolution: {integrity: sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==} + /@next/swc-linux-x64-gnu@14.1.1: + resolution: {integrity: sha512-rv6AAdEXoezjbdfp3ouMuVqeLjE1Bin0AuE6qxE6V9g3Giz5/R3xpocHoAi7CufRR+lnkuUjRBn05SYJ83oKNQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -3365,8 +3365,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-musl@14.1.0: - resolution: {integrity: sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==} + /@next/swc-linux-x64-musl@14.1.1: + resolution: {integrity: sha512-YAZLGsaNeChSrpz/G7MxO3TIBLaMN8QWMr3X8bt6rCvKovwU7GqQlDu99WdvF33kI8ZahvcdbFsy4jAFzFX7og==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -3374,8 +3374,8 @@ packages: dev: false optional: true - /@next/swc-win32-arm64-msvc@14.1.0: - resolution: {integrity: sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==} + /@next/swc-win32-arm64-msvc@14.1.1: + resolution: {integrity: sha512-1L4mUYPBMvVDMZg1inUYyPvFSduot0g73hgfD9CODgbr4xiTYe0VOMTZzaRqYJYBA9mana0x4eaAaypmWo1r5A==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -3383,8 +3383,8 @@ packages: dev: false optional: true - /@next/swc-win32-ia32-msvc@14.1.0: - resolution: {integrity: sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==} + /@next/swc-win32-ia32-msvc@14.1.1: + resolution: {integrity: sha512-jvIE9tsuj9vpbbXlR5YxrghRfMuG0Qm/nZ/1KDHc+y6FpnZ/apsgh+G6t15vefU0zp3WSpTMIdXRUsNl/7RSuw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -3392,8 +3392,8 @@ packages: dev: false optional: true - /@next/swc-win32-x64-msvc@14.1.0: - resolution: {integrity: sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==} + /@next/swc-win32-x64-msvc@14.1.1: + resolution: {integrity: sha512-S6K6EHDU5+1KrBDLko7/c1MNy/Ya73pIAmvKeFwsF4RmBFJSO7/7YeD4FnZ4iBdzE69PpQ4sOMU9ORKeNuxe8A==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -4073,26 +4073,26 @@ packages: /@types/better-sqlite3@7.6.9: resolution: {integrity: sha512-FvktcujPDj9XKMJQWFcl2vVl7OdRIqsSRX9b0acWwTmwLK9CF2eqo/FRcmMLNpugKoX/avA6pb7TorDLmpgTnQ==} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true /@types/body-parser@1.19.5: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true /@types/cors@2.8.17: resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true /@types/d3-scale-chromatic@3.0.3: @@ -4126,7 +4126,7 @@ packages: /@types/express-serve-static-core@4.17.43: resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 '@types/qs': 6.9.12 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -4220,8 +4220,8 @@ packages: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: true - /@types/node@20.11.22: - resolution: {integrity: sha512-/G+IxWxma6V3E+pqK1tSl2Fo1kl41pK1yeCyDsgkF9WlVAme4j5ISYM2zR11bgLFJGLN5sVK40T4RJNuiZbEjA==} + /@types/node@20.11.24: + resolution: {integrity: sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==} dependencies: undici-types: 5.26.5 @@ -4243,11 +4243,11 @@ packages: /@types/react-dom@18.2.19: resolution: {integrity: sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==} dependencies: - '@types/react': 18.2.60 + '@types/react': 18.2.61 dev: true - /@types/react@18.2.60: - resolution: {integrity: sha512-dfiPj9+k20jJrLGOu9Nf6eqxm2EyJRrq2NvwOFsfbb7sFExZ9WELPs67UImHj3Ayxg8ruTtKtNnbjaF8olPq0A==} + /@types/react@18.2.61: + resolution: {integrity: sha512-NURTN0qNnJa7O/k4XUkEW2yfygA+NxS0V5h1+kp9jPwhzZy95q3ADoGMP0+JypMhrZBTTgjKAUlTctde1zzeQA==} dependencies: '@types/prop-types': 15.7.11 '@types/scheduler': 0.16.8 @@ -4263,7 +4263,7 @@ packages: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true /@types/serve-static@1.15.5: @@ -4271,7 +4271,7 @@ packages: dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true /@types/stack-utils@2.0.3: @@ -4749,7 +4749,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 get-intrinsic: 1.2.4 is-string: 1.0.7 dev: false @@ -4769,7 +4769,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-array-method-boxes-properly: 1.0.0 is-string: 1.0.7 dev: false @@ -4780,7 +4780,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 dev: false @@ -4791,7 +4791,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-shim-unscopables: 1.0.2 /array.prototype.flatmap@1.3.2: @@ -4800,7 +4800,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-shim-unscopables: 1.0.2 dev: false @@ -4809,7 +4809,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 dev: false @@ -4821,7 +4821,7 @@ packages: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-errors: 1.3.0 get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 @@ -4883,8 +4883,8 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - /autoprefixer@10.4.17(postcss@8.4.35): - resolution: {integrity: sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==} + /autoprefixer@10.4.18(postcss@8.4.35): + resolution: {integrity: sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -5073,7 +5073,7 @@ packages: requiresBuild: true dependencies: bindings: 1.5.0 - prebuild-install: 7.1.1 + prebuild-install: 7.1.2 dev: false /big-integer@1.6.52: @@ -5113,26 +5113,6 @@ packages: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} dev: false - /body-parser@1.20.1: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.1 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: false - /body-parser@1.20.2: resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -5253,7 +5233,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001591 - electron-to-chromium: 1.4.685 + electron-to-chromium: 1.4.690 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) @@ -5500,7 +5480,7 @@ packages: engines: {node: '>=12.13.0'} hasBin: true dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -5510,7 +5490,7 @@ packages: /chromium-edge-launcher@1.0.0: resolution: {integrity: sha512-pgtgjNKZ7i5U++1g1PWv75umkHvhVTDOQIZ+sjeUX9483S7Y6MUvO0lrd7ShGlQlFHMN4SwKTCq/X8hWrbv2KA==} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -6430,11 +6410,11 @@ packages: /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - /effect@2.4.0: - resolution: {integrity: sha512-HAtFVAbAGYDzfGbrSrX1gzMzXym15zk1+ps72X8W1wdZY0vxq+u23w8u9DhAZjiJPHT4W9ZYL7QWQqpP4t+dSg==} + /effect@2.4.1: + resolution: {integrity: sha512-YsoMB/EGCohGKFyTPYqaFe2B7UCU2MM303dkoowF8DNOdks/4q/00cyhTbBUmM/0FMDoUPmUi/AJ0Aj3E7vO1A==} - /electron-to-chromium@1.4.685: - resolution: {integrity: sha512-yDYeobbTEe4TNooEzOQO6xFqg9XnAkVy2Lod1C1B2it8u47JNLYvl9nLDWBamqUakWB8Jc1hhS1uHUNYTNQdfw==} + /electron-to-chromium@1.4.690: + resolution: {integrity: sha512-+2OAGjUx68xElQhydpcbqH50hE8Vs2K6TkAeLhICYfndb67CVH0UsZaijmRUE3rHlIxU1u0jxwhgVe6fK3YANA==} /elkjs@0.9.2: resolution: {integrity: sha512-2Y/RaA1pdgSHpY0YG4TYuYCD2wh97CRvu22eLG3Kz0pgQ/6KbIFTxsTnDc4MH/6hFlg2L/9qXrDMG0nMjP63iw==} @@ -6521,8 +6501,8 @@ packages: accepts: 1.3.8 escape-html: 1.0.3 - /es-abstract@1.22.4: - resolution: {integrity: sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==} + /es-abstract@1.22.5: + resolution: {integrity: sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.1 @@ -6588,7 +6568,7 @@ packages: asynciterator.prototype: 1.0.0 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-errors: 1.3.0 es-set-tostringtag: 2.0.3 function-bind: 1.1.2 @@ -6678,8 +6658,8 @@ packages: engines: {node: '>=12'} dev: false - /eslint-config-next@14.1.0(eslint@8.57.0)(typescript@5.3.3): - resolution: {integrity: sha512-SBX2ed7DoRFXC6CQSLc/SbLY9Ut6HxNB2wPTcoIWjUMd7aF7O/SIE7111L8FdZ9TXsNV4pulUDnfthpyPtbFUg==} + /eslint-config-next@14.1.1(eslint@8.57.0)(typescript@5.3.3): + resolution: {integrity: sha512-OLyw2oHzwE0M0EODGYMbjksDQKSshQWBzYY+Nkoxoe3+Q5G0lpb9EkekyDk7Foz9BMfotbYShJrgYoBEAVqU4Q==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 typescript: '>=3.3.1' @@ -6687,7 +6667,7 @@ packages: typescript: optional: true dependencies: - '@next/eslint-plugin-next': 14.1.0 + '@next/eslint-plugin-next': 14.1.1 '@rushstack/eslint-patch': 1.7.2 '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.3.3) eslint: 8.57.0 @@ -7191,26 +7171,26 @@ packages: engines: {node: '>=6'} dev: false - /expo-asset@9.0.2(expo@50.0.7): + /expo-asset@9.0.2(expo@50.0.8): resolution: {integrity: sha512-PzYKME1MgUOoUvwtdzhAyXkjXOXGiSYqGKG/MsXwWr0Ef5wlBaBm2DCO9V6KYbng5tBPFu6hTjoRNil1tBOSow==} dependencies: '@react-native/assets-registry': 0.73.1 blueimp-md5: 2.19.0 - expo-constants: 15.4.5(expo@50.0.7) - expo-file-system: 16.0.6(expo@50.0.7) + expo-constants: 15.4.5(expo@50.0.8) + expo-file-system: 16.0.7(expo@50.0.8) invariant: 2.2.4 md5-file: 3.2.3 transitivePeerDependencies: - expo - supports-color - /expo-constants@15.4.5(expo@50.0.7): + /expo-constants@15.4.5(expo@50.0.8): resolution: {integrity: sha512-1pVVjwk733hbbIjtQcvUFCme540v4gFemdNlaxM2UXKbfRCOh2hzgKN5joHMOysoXQe736TTUrRj7UaZI5Yyhg==} peerDependencies: expo: '*' dependencies: '@expo/config': 8.5.4 - expo: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) + expo: 50.0.8(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) transitivePeerDependencies: - supports-color @@ -7218,39 +7198,39 @@ packages: resolution: {integrity: sha512-SY7rVFxb4ut/OMTgR7A39Jg+8+hXwQNRpZd+RBpB+B5XV2STj/pWXHnGFhBayEF4umI4SxrOvisY90rlPWVO9Q==} dev: false - /expo-file-system@16.0.6(expo@50.0.7): - resolution: {integrity: sha512-ATCHL7nEg2WwKeamW/SDTR9jBEqM5wncFq594ftKS5QFmhKIrX48d9jyPFGnNq+6h8AGPg4QKh2KCA4OY49L4g==} + /expo-file-system@16.0.7(expo@50.0.8): + resolution: {integrity: sha512-BELr1Agj6WK0PKVMcD0rqC3fP5unKfp2KW8/sNhtTHgdzQ/F0Pylq9pTk9u7KEu0ZbEdTpk5EMarLMPwffi3og==} peerDependencies: expo: '*' dependencies: - expo: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) + expo: 50.0.8(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) - /expo-font@11.10.3(expo@50.0.7): + /expo-font@11.10.3(expo@50.0.8): resolution: {integrity: sha512-q1Td2zUvmLbCA9GV4OG4nLPw5gJuNY1VrPycsnemN1m8XWTzzs8nyECQQqrcBhgulCgcKZZJJ6U0kC2iuSoQHQ==} peerDependencies: expo: '*' dependencies: - expo: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) + expo: 50.0.8(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) fontfaceobserver: 2.3.0 /expo-json-utils@0.12.3: resolution: {integrity: sha512-4pypQdinpNc6XY9wsZk56njvzDh+B/9mISr7FPP3CVk1QGB1nSLh883/BCDSgnsephATZkC5HG+cdE60kCAR6A==} dev: false - /expo-keep-awake@12.8.2(expo@50.0.7): + /expo-keep-awake@12.8.2(expo@50.0.8): resolution: {integrity: sha512-uiQdGbSX24Pt8nGbnmBtrKq6xL/Tm3+DuDRGBk/3ZE/HlizzNosGRIufIMJ/4B4FRw4dw8KU81h2RLuTjbay6g==} peerDependencies: expo: '*' dependencies: - expo: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) + expo: 50.0.8(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) - /expo-manifests@0.13.2(expo@50.0.7): + /expo-manifests@0.13.2(expo@50.0.8): resolution: {integrity: sha512-l0Sia1WmLULx8V41K8RzGLsFoTe4qqthPRGpHjItsYn8ZB6lRrdTBM9OYp2McIflgqN1HAimUCQMFIwJyH+UmA==} peerDependencies: expo: '*' dependencies: '@expo/config': 8.5.4 - expo: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) + expo: 50.0.8(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) expo-json-utils: 0.12.3 transitivePeerDependencies: - supports-color @@ -7274,13 +7254,13 @@ packages: dependencies: invariant: 2.2.4 - /expo-sqlite@13.2.2(expo@50.0.7): + /expo-sqlite@13.2.2(expo@50.0.8): resolution: {integrity: sha512-aad52QL0Nbe5+KTlwNPEaSro9l39H5dWtGrykwWRvnUbAC9FMP+6ixSKtcNGNTEb7BHKx5AfuFVy+vxKVAOX1Q==} peerDependencies: expo: '*' dependencies: '@expo/websql': 1.0.1 - expo: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) + expo: 50.0.8(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) /expo-status-bar@1.11.1: resolution: {integrity: sha512-ddQEtCOgYHTLlFUe/yH67dDBIoct5VIULthyT3LRJbEwdpzAgueKsX2FYK02ldh440V87PWKCamh7R9evk1rrg==} @@ -7290,15 +7270,15 @@ packages: resolution: {integrity: sha512-/nGOyeWUXSUy4aIYKJTwQOznRNs0yKqKPAyEE6jtwvOl9qvfDWx9xskNtShioggBhFAssFkV6RBbPn+xZMQtvw==} dev: false - /expo-updates-interface@0.15.3(expo@50.0.7): + /expo-updates-interface@0.15.3(expo@50.0.8): resolution: {integrity: sha512-uLvsbaCmUsXgJqeen8rYH/jPr874ZUCXEvWpKHxrCv5/XATPlYEaDuecbNSGQ+cu78i6MdtB4BHOwZmoH2d47A==} peerDependencies: expo: '*' dependencies: - expo: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) + expo: 50.0.8(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) dev: false - /expo-updates@0.24.11(expo@50.0.7): + /expo-updates@0.24.11(expo@50.0.8): resolution: {integrity: sha512-SWpjZj7VGWBZJtbVj0gbGY7uZYrE7b+sRRoj/K1ma2ckHwXtAAB8gYI95Zp0joBdRNAbEtoMHYXP66Nrj5l8Ng==} hasBin: true peerDependencies: @@ -7309,11 +7289,11 @@ packages: '@expo/config-plugins': 7.8.4 arg: 4.1.0 chalk: 4.1.2 - expo: 50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) + expo: 50.0.8(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21) expo-eas-client: 0.11.2 - expo-manifests: 0.13.2(expo@50.0.7) + expo-manifests: 0.13.2(expo@50.0.8) expo-structured-headers: 3.7.2 - expo-updates-interface: 0.15.3(expo@50.0.7) + expo-updates-interface: 0.15.3(expo@50.0.8) fbemitter: 3.0.0 resolve-from: 5.0.0 transitivePeerDependencies: @@ -7321,21 +7301,21 @@ packages: - supports-color dev: false - /expo@50.0.7(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21): - resolution: {integrity: sha512-lTqIrKOUTKHLdTuAaJzZihi1v7F8Ix1dOXVWMpToDy9zPC/s+fet0fbyXdFUxYsCUyuEDIB9tvejrTYZk8Hm0Q==} + /expo@50.0.8(@babel/core@7.24.0)(@react-native/babel-preset@0.73.21): + resolution: {integrity: sha512-8yXsoMbFRjWyEDNuFRtH0vTFvEjFnnwP+LceS6xmXGp+IW1hKdN1X6Bj1EUocFtepH0ruHDPCof1KvPoWfUWkw==} hasBin: true dependencies: '@babel/runtime': 7.24.0 - '@expo/cli': 0.17.5(@react-native/babel-preset@0.73.21)(expo-modules-autolinking@1.10.3) + '@expo/cli': 0.17.6(@react-native/babel-preset@0.73.21)(expo-modules-autolinking@1.10.3) '@expo/config': 8.5.4 '@expo/config-plugins': 7.8.4 - '@expo/metro-config': 0.17.4(@react-native/babel-preset@0.73.21) + '@expo/metro-config': 0.17.5(@react-native/babel-preset@0.73.21) '@expo/vector-icons': 14.0.0 babel-preset-expo: 10.0.1(@babel/core@7.24.0) - expo-asset: 9.0.2(expo@50.0.7) - expo-file-system: 16.0.6(expo@50.0.7) - expo-font: 11.10.3(expo@50.0.7) - expo-keep-awake: 12.8.2(expo@50.0.7) + expo-asset: 9.0.2(expo@50.0.8) + expo-file-system: 16.0.7(expo@50.0.8) + expo-font: 11.10.3(expo@50.0.8) + expo-keep-awake: 12.8.2(expo@50.0.8) expo-modules-autolinking: 1.10.3 expo-modules-core: 1.11.9 fbemitter: 3.0.0 @@ -7349,13 +7329,13 @@ packages: - supports-color - utf-8-validate - /express@4.18.2: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + /express@4.18.3: + resolution: {integrity: sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==} engines: {node: '>= 0.10.0'} dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.1 + body-parser: 1.20.2 content-disposition: 0.5.4 content-type: 1.0.5 cookie: 0.5.0 @@ -7710,7 +7690,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 functions-have-names: 1.2.3 /functions-have-names@1.2.3: @@ -8294,7 +8274,7 @@ packages: dependencies: es-errors: 1.3.0 hasown: 2.0.1 - side-channel: 1.0.5 + side-channel: 1.0.6 /internmap@1.0.1: resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} @@ -8673,7 +8653,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.22 + '@types/node': 20.11.24 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -8700,7 +8680,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.22 + '@types/node': 20.11.24 jest-util: 29.7.0 /jest-util@29.7.0: @@ -8708,7 +8688,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.22 + '@types/node': 20.11.24 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -8729,7 +8709,7 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -10520,32 +10500,32 @@ packages: - supports-color dev: false - /next-seo@6.5.0(next@14.1.0)(react-dom@18.2.0)(react@18.2.0): + /next-seo@6.5.0(next@14.1.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-MfzUeWTN/x/rsKp/1n0213eojO97lIl0unxqbeCY+6pAucViHDA8GSLRRcXpgjsSmBxfCFdfpu7LXbt4ANQoNQ==} peerDependencies: next: ^8.1.1-canary.54 || >=9.0.0 react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - next: 14.1.0(react-dom@18.2.0)(react@18.2.0) + next: 14.1.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /next-themes@0.2.1(next@14.1.0)(react-dom@18.2.0)(react@18.2.0): + /next-themes@0.2.1(next@14.1.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==} peerDependencies: next: '*' react: '*' react-dom: '*' dependencies: - next: 14.1.0(react-dom@18.2.0)(react@18.2.0) + next: 14.1.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /next@14.1.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==} + /next@14.1.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-McrGJqlGSHeaz2yTRPkEucxQKe5Zq7uPwyeHNmJaZNY4wx9E9QdxmTp310agFRoMuIYgQrCrT3petg13fSVOww==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: @@ -10559,7 +10539,7 @@ packages: sass: optional: true dependencies: - '@next/env': 14.1.0 + '@next/env': 14.1.1 '@swc/helpers': 0.5.2 busboy: 1.6.0 caniuse-lite: 1.0.30001591 @@ -10569,25 +10549,25 @@ packages: react-dom: 18.2.0(react@18.2.0) styled-jsx: 5.1.1(react@18.2.0) optionalDependencies: - '@next/swc-darwin-arm64': 14.1.0 - '@next/swc-darwin-x64': 14.1.0 - '@next/swc-linux-arm64-gnu': 14.1.0 - '@next/swc-linux-arm64-musl': 14.1.0 - '@next/swc-linux-x64-gnu': 14.1.0 - '@next/swc-linux-x64-musl': 14.1.0 - '@next/swc-win32-arm64-msvc': 14.1.0 - '@next/swc-win32-ia32-msvc': 14.1.0 - '@next/swc-win32-x64-msvc': 14.1.0 + '@next/swc-darwin-arm64': 14.1.1 + '@next/swc-darwin-x64': 14.1.1 + '@next/swc-linux-arm64-gnu': 14.1.1 + '@next/swc-linux-arm64-musl': 14.1.1 + '@next/swc-linux-x64-gnu': 14.1.1 + '@next/swc-linux-x64-musl': 14.1.1 + '@next/swc-win32-arm64-msvc': 14.1.1 + '@next/swc-win32-ia32-msvc': 14.1.1 + '@next/swc-win32-x64-msvc': 14.1.1 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros dev: false - /nextra-theme-docs@2.13.3(next@14.1.0)(nextra@2.13.3)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-B6xrnR86Gg4GzV56AomSwtmvSyAvnJz1xKOGGav1XKxkwvC8QeI17jdt/CqiKyIObJ+5bLqSFiKhaAZ5DYQP3g==} + /nextra-theme-docs@2.13.4(next@14.1.1)(nextra@2.13.4)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-2XOoMfwBCTYBt8ds4ZHftt9Wyf2XsykiNo02eir/XEYB+sGeUoE77kzqfidjEOKCSzOHYbK9BDMcg2+B/2vYRw==} peerDependencies: next: '>=9.5.3' - nextra: 2.13.3 + nextra: 2.13.4 react: '>=16.13.1' react-dom: '>=16.13.1' dependencies: @@ -10600,18 +10580,18 @@ packages: git-url-parse: 13.1.1 intersection-observer: 0.12.2 match-sorter: 6.3.4 - next: 14.1.0(react-dom@18.2.0)(react@18.2.0) - next-seo: 6.5.0(next@14.1.0)(react-dom@18.2.0)(react@18.2.0) - next-themes: 0.2.1(next@14.1.0)(react-dom@18.2.0)(react@18.2.0) - nextra: 2.13.3(next@14.1.0)(react-dom@18.2.0)(react@18.2.0) + next: 14.1.1(react-dom@18.2.0)(react@18.2.0) + next-seo: 6.5.0(next@14.1.1)(react-dom@18.2.0)(react@18.2.0) + next-themes: 0.2.1(next@14.1.1)(react-dom@18.2.0)(react@18.2.0) + nextra: 2.13.4(next@14.1.1)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) scroll-into-view-if-needed: 3.1.0 zod: 3.22.4 dev: false - /nextra@2.13.3(next@14.1.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-OBVuyQKh+oqrbVt0AosgNYnuReWuNrtJVEN7q18b/oEg2wEpuiq3UJfmIvGgOdNYc3zv3OYrzbcq7IhwtdHHEw==} + /nextra@2.13.4(next@14.1.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-7of2rSBxuUa3+lbMmZwG9cqgftcoNOVQLTT6Rxf3EhBR9t1EI7b43dted8YoqSNaigdE3j1CoyNkX8N/ZzlEpw==} engines: {node: '>=16'} peerDependencies: next: '>=9.5.3' @@ -10630,7 +10610,7 @@ packages: gray-matter: 4.0.3 katex: 0.16.9 lodash.get: 4.4.2 - next: 14.1.0(react-dom@18.2.0)(react@18.2.0) + next: 14.1.1(react-dom@18.2.0)(react@18.2.0) next-mdx-remote: 4.4.1(react-dom@18.2.0)(react@18.2.0) p-limit: 3.1.0 react: 18.2.0 @@ -10794,7 +10774,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 dev: false /object.fromentries@2.0.7: @@ -10803,7 +10783,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 dev: false /object.groupby@1.0.2: @@ -10812,7 +10792,7 @@ packages: array.prototype.filter: 1.0.3 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-errors: 1.3.0 dev: false @@ -10820,7 +10800,7 @@ packages: resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} dependencies: define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 dev: false /object.values@1.1.7: @@ -10829,7 +10809,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 dev: false /on-finished@2.3.0: @@ -11313,8 +11293,8 @@ packages: /pouchdb-collections@1.0.1: resolution: {integrity: sha512-31db6JRg4+4D5Yzc2nqsRqsA2oOkZS8DpFav3jf/qVNBxusKa2ClkEIZ2bJNpaDbMfWtnuSq59p6Bn+CipPMdg==} - /prebuild-install@7.1.1: - resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} + /prebuild-install@7.1.2: + resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} engines: {node: '>=10'} hasBin: true dependencies: @@ -11536,7 +11516,7 @@ packages: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.5 + side-channel: 1.0.6 dev: false /queue-microtask@1.2.3: @@ -11569,16 +11549,6 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} - /raw-body@2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - dev: false - /raw-body@2.5.2: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} @@ -11807,7 +11777,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-errors: 1.3.0 get-intrinsic: 1.2.4 globalthis: 1.0.3 @@ -12315,8 +12285,8 @@ packages: vscode-textmate: 8.0.0 dev: false - /side-channel@1.0.5: - resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 @@ -12540,13 +12510,13 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 get-intrinsic: 1.2.4 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.5 + side-channel: 1.0.6 dev: false /string.prototype.trim@1.2.8: @@ -12555,21 +12525,21 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 /string.prototype.trimend@1.0.7: resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -12687,7 +12657,7 @@ packages: engines: {node: '>=8'} hasBin: true dependencies: - '@jridgewell/gen-mapping': 0.3.4 + '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 glob: 7.1.6 lines-and-columns: 1.2.4 @@ -12700,7 +12670,7 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: - '@jridgewell/gen-mapping': 0.3.4 + '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 glob: 10.3.10 lines-and-columns: 1.2.4 @@ -12996,7 +12966,7 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - /ts-node@10.9.2(@types/node@20.11.22)(typescript@5.3.3): + /ts-node@10.9.2(@types/node@20.11.24)(typescript@5.3.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -13017,7 +12987,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.11.22 + '@types/node': 20.11.24 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 @@ -13558,7 +13528,7 @@ packages: vfile-message: 4.0.2 dev: false - /vite-node@1.3.1(@types/node@20.11.22): + /vite-node@1.3.1(@types/node@20.11.24): resolution: {integrity: sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -13567,7 +13537,7 @@ packages: debug: 4.3.4 pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.1.4(@types/node@20.11.22) + vite: 5.1.4(@types/node@20.11.24) transitivePeerDependencies: - '@types/node' - less @@ -13579,7 +13549,7 @@ packages: - terser dev: true - /vite@5.1.4(@types/node@20.11.22): + /vite@5.1.4(@types/node@20.11.24): resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -13607,7 +13577,7 @@ packages: terser: optional: true dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 esbuild: 0.19.12 postcss: 8.4.35 rollup: 4.12.0 @@ -13615,7 +13585,7 @@ packages: fsevents: 2.3.3 dev: true - /vitest@1.3.1(@types/node@20.11.22): + /vitest@1.3.1(@types/node@20.11.24): resolution: {integrity: sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -13640,7 +13610,7 @@ packages: jsdom: optional: true dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 '@vitest/expect': 1.3.1 '@vitest/runner': 1.3.1 '@vitest/snapshot': 1.3.1 @@ -13658,8 +13628,8 @@ packages: strip-literal: 2.0.0 tinybench: 2.6.0 tinypool: 0.8.2 - vite: 5.1.4(@types/node@20.11.22) - vite-node: 1.3.1(@types/node@20.11.22) + vite: 5.1.4(@types/node@20.11.24) + vite-node: 1.3.1(@types/node@20.11.24) why-is-node-running: 2.2.2 transitivePeerDependencies: - less From da6d7fafac5e473510cf531f78f128bc284db3b2 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Fri, 1 Mar 2024 20:41:55 +0100 Subject: [PATCH 08/31] Rename Write to HandleInput --- packages/evolu-common/src/DbWorker.ts | 33 ++++++++++++++------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/packages/evolu-common/src/DbWorker.ts b/packages/evolu-common/src/DbWorker.ts index fec7eeefb..f66eb1194 100644 --- a/packages/evolu-common/src/DbWorker.ts +++ b/packages/evolu-common/src/DbWorker.ts @@ -534,8 +534,8 @@ const sync = ({ > => Effect.gen(function* (_) { if (queries.length > 0) yield* _(query({ queries })); - - (yield* _(SyncWorkerPostMessage))({ + const syncWorkerPostMessage = yield* _(SyncWorkerPostMessage); + syncWorkerPostMessage({ _tag: "sync", ...(yield* _(readTimestampAndMerkleTree)), syncUrl: (yield* _(Config)).syncUrl, @@ -592,7 +592,7 @@ export const DbWorkerCommonLive = Layer.effect( onError(output).pipe(Effect.runSync); break; case "SyncWorkerOutputSyncResponse": - postMessage(output); + dbWorker.postMessage(output); break; default: dbWorker.onMessage({ _tag: "onSyncState", state: output }); @@ -623,15 +623,18 @@ export const DbWorkerCommonLive = Layer.effect( Effect.runPromise, ); - type Write = (input: DbWorkerInput) => Promise; + type HandleInput = (input: DbWorkerInput) => Promise; - // Write for reset only in case init fails. - const writeForInitFail: Write = (input): Promise => { + /** If init fails, we have to allow reset at least. */ + const handleInputForInitFail: HandleInput = (input): Promise => { if (input._tag !== "reset") return Promise.resolve(undefined); return reset(input).pipe(run); }; - const makeWriteForInitSuccess = (config: Config, owner: Owner): Write => { + const makeHandleInputForInitSuccess = ( + config: Config, + owner: Owner, + ): HandleInput => { let skipAllBecauseOfReset = false; const layer = Layer.mergeAll( @@ -664,14 +667,14 @@ export const DbWorkerCommonLive = Layer.effect( }; }; - let write: Write = (input) => { + let handleInput: HandleInput = (input) => { if (input._tag !== "init") return run(makeUnexpectedError(new Error("init must be called first"))); - write = writeForInitFail; + handleInput = handleInputForInitFail; return init.pipe( Effect.map((owner) => { dbWorker.onMessage({ _tag: "onOwner", owner }); - write = makeWriteForInitSuccess(input.config, owner); + handleInput = makeHandleInputForInitSuccess(input.config, owner); }), run, ); @@ -679,13 +682,11 @@ export const DbWorkerCommonLive = Layer.effect( let messageQueue: Promise = Promise.resolve(undefined); - const postMessage: DbWorker["postMessage"] = (input) => { - // TODO: Use Web Locks to enforce DbWorker transaction across tabs. - messageQueue = messageQueue.then(() => write(input)); - }; - const dbWorker: DbWorker = { - postMessage, + postMessage: (input) => { + // TODO: Use Web Locks to enforce DbWorker transaction across tabs. + messageQueue = messageQueue.then(() => handleInput(input)); + }, onMessage: Function.constVoid, }; From 93784288c9f3a1f0e9ca94494d8849eb9fdfb4aa Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Fri, 1 Mar 2024 21:47:25 +0100 Subject: [PATCH 09/31] Add DbWorkerLock for multi-context transactions --- packages/evolu-common-web/src/DbWorker.worker.ts | 6 ++++-- packages/evolu-common-web/src/PlatformLive.ts | 5 +++++ packages/evolu-common/src/DbWorker.ts | 6 +++--- packages/evolu-common/src/Platform.ts | 5 +++++ packages/evolu-react-native/src/PlatformLive.ts | 11 +++++++++++ packages/evolu-react-native/src/index.ts | 2 ++ 6 files changed, 30 insertions(+), 5 deletions(-) diff --git a/packages/evolu-common-web/src/DbWorker.worker.ts b/packages/evolu-common-web/src/DbWorker.worker.ts index 40a5e4a71..657644442 100644 --- a/packages/evolu-common-web/src/DbWorker.worker.ts +++ b/packages/evolu-common-web/src/DbWorker.worker.ts @@ -6,14 +6,16 @@ import { } from "@evolu/common"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; -import { Bip39Live } from "./PlatformLive.js"; +import { Bip39Live, DbWorkerLockLive } from "./PlatformLive.js"; import { SqliteLive } from "./SqliteLive.js"; import { SyncWorkerLive } from "./SyncWorkerLive.js"; const dbWorker = Effect.provide( DbWorker, DbWorkerCommonLive.pipe( - Layer.provide(Layer.mergeAll(SqliteLive, Bip39Live, SyncWorkerLive)), + Layer.provide( + Layer.mergeAll(SqliteLive, Bip39Live, SyncWorkerLive, DbWorkerLockLive), + ), Layer.provide(NanoIdGeneratorLive), ), ).pipe(Effect.runSync); diff --git a/packages/evolu-common-web/src/PlatformLive.ts b/packages/evolu-common-web/src/PlatformLive.ts index cf05ee5e7..dc28d5843 100644 --- a/packages/evolu-common-web/src/PlatformLive.ts +++ b/packages/evolu-common-web/src/PlatformLive.ts @@ -1,3 +1,4 @@ +import { DbWorkerLock } from "@evolu/common"; import { AppState, Bip39, @@ -52,6 +53,10 @@ export const SyncLockLive = Layer.effect( }), ); +export const DbWorkerLockLive = Layer.succeed(DbWorkerLock, (callback) => { + navigator.locks.request("evolu:DbWorker", callback); +}); + export const AppStateLive = Layer.effect( AppState, Effect.gen(function* (_) { diff --git a/packages/evolu-common/src/DbWorker.ts b/packages/evolu-common/src/DbWorker.ts index f66eb1194..8ba4efabf 100644 --- a/packages/evolu-common/src/DbWorker.ts +++ b/packages/evolu-common/src/DbWorker.ts @@ -59,6 +59,7 @@ import { SyncWorkerPostMessage, } from "./SyncWorker.js"; import { Messaging } from "./Types.js"; +import { DbWorkerLock } from "./Platform.js"; export interface DbWorker extends Messaging {} export const DbWorker = Context.GenericTag("@services/DbWorker"); @@ -680,12 +681,11 @@ export const DbWorkerCommonLive = Layer.effect( ); }; - let messageQueue: Promise = Promise.resolve(undefined); + const dbWorkerLock = yield* _(DbWorkerLock); const dbWorker: DbWorker = { postMessage: (input) => { - // TODO: Use Web Locks to enforce DbWorker transaction across tabs. - messageQueue = messageQueue.then(() => handleInput(input)); + dbWorkerLock(() => handleInput(input)); }, onMessage: Function.constVoid, }; diff --git a/packages/evolu-common/src/Platform.ts b/packages/evolu-common/src/Platform.ts index 4e35190b9..e30ceeb34 100644 --- a/packages/evolu-common/src/Platform.ts +++ b/packages/evolu-common/src/Platform.ts @@ -36,6 +36,11 @@ export interface SyncLock { export const SyncLock = Context.GenericTag("@services/SyncLock"); +export type DbWorkerLock = (callback: () => Promise) => void; +export const DbWorkerLock = Context.GenericTag( + "@services/DbWorkerLock", +); + export type Fetch = ( url: string, body: Uint8Array, diff --git a/packages/evolu-react-native/src/PlatformLive.ts b/packages/evolu-react-native/src/PlatformLive.ts index 572891f03..333dc541f 100644 --- a/packages/evolu-react-native/src/PlatformLive.ts +++ b/packages/evolu-react-native/src/PlatformLive.ts @@ -1,6 +1,7 @@ import { AppState, Bip39, + DbWorkerLock, InvalidMnemonicError, Mnemonic, PlatformName, @@ -37,6 +38,16 @@ export const SyncLockLive = Layer.effect( }), ); +export const DbWorkerLockLive = Layer.effect( + DbWorkerLock, + Effect.sync(() => { + let queue: Promise = Promise.resolve(undefined); + return DbWorkerLock.of((callback) => { + queue = queue.then(callback); + }); + }), +); + export const AppStateLive = Layer.succeed( AppState, AppState.of({ diff --git a/packages/evolu-react-native/src/index.ts b/packages/evolu-react-native/src/index.ts index d58e7be58..df6713a51 100644 --- a/packages/evolu-react-native/src/index.ts +++ b/packages/evolu-react-native/src/index.ts @@ -16,6 +16,7 @@ import * as Layer from "effect/Layer"; import { AppStateLive, Bip39Live, + DbWorkerLockLive, PlatformNameLive, SyncLockLive, } from "./PlatformLive.js"; @@ -78,6 +79,7 @@ export const createEvolu = makeCreateEvolu( NanoIdGeneratorLive, SqliteLive, SyncWorkerCommonLive, + DbWorkerLockLive, ), ), Layer.provide(Layer.mergeAll(SecretBoxLive, SyncLockLive, FetchLive)), From 707bdde839d38d3d1791132ceb598e35f74acd86 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Fri, 1 Mar 2024 23:07:41 +0100 Subject: [PATCH 10/31] Incomplete but working multitab support --- packages/evolu-common-web/src/SqliteLive.ts | 201 ++++++++++++++++++-- 1 file changed, 181 insertions(+), 20 deletions(-) diff --git a/packages/evolu-common-web/src/SqliteLive.ts b/packages/evolu-common-web/src/SqliteLive.ts index a90721d6c..d1df78f66 100644 --- a/packages/evolu-common-web/src/SqliteLive.ts +++ b/packages/evolu-common-web/src/SqliteLive.ts @@ -1,5 +1,9 @@ import { + NanoId, + NanoIdGenerator, Sqlite, + SqliteExecResult, + SqliteQuery, SqliteRow, ensureSqliteQuery, maybeParseJson, @@ -7,27 +11,184 @@ import { } from "@evolu/common"; import sqlite3InitModule from "@sqlite.org/sqlite-wasm"; import * as Effect from "effect/Effect"; +import * as Function from "effect/Function"; import * as Layer from "effect/Layer"; +import * as ReadonlyArray from "effect/ReadonlyArray"; -const sqlitePromise = sqlite3InitModule().then((sqlite3) => - sqlite3 - .installOpfsSAHPoolVfs({ - // TODO: Use name to allow Evolu apps co-exist in the same HTTP origin. - }) - .then((PoolUtil) => new PoolUtil.OpfsSAHPoolDb("/evolu1")), -); +/** + * "opfs-sahpool" does not support multiple simultaneous connections, and it can + * be instantiated only within a web worker and only within one tab of the same + * origin. We use Web Locks and BroadcastChannel to enable multiple tabs + * functionality. + * + * - https://sqlite.org/wasm/doc/trunk/persistence.md + * + * There is a sophisticated workaround by the great rhashimoto: + * https://github.com/rhashimoto/wa-sqlite/discussions/81 + * + * I decided not to use it because we can't use SharedWorker in Chrome Android, + * and I don't want to use ServiceWorker because it's slower and harder to + * grasp. + * + * This implementation doesn't need SharedWorker or ServiceWorker and does not + * use dedicated broadcast channels to keep code as simple as possible. Browsers + * are updating OPFS rapidly, so we may not need this workaround at all in the + * near future. + */ + +/** A typed wrapper. Every SqliteChannelMessage is sent to all tabs. */ +interface SqliteChannel { + readonly postMessage: (message: SqliteChannelMessage) => void; + onMessage: (message: SqliteChannelMessage) => void; +} + +type SqliteChannelMessage = + | SqliteChannelMessageExec + | SqliteChannelMessageResult; + +type SqliteChannelMessageExec = { + readonly _tag: "exec"; + readonly id: NanoId; + readonly query: SqliteQuery; +}; + +type SqliteChannelMessageResult = { + readonly _tag: "execResult"; + readonly id: NanoId; + readonly result: SqliteExecResult; +}; -const exec: Sqlite["exec"] = (arg) => +const createSqliteChannel = (): SqliteChannel => { + const channel = new BroadcastChannel("sqlite"); + const sqliteChannel: SqliteChannel = { + postMessage: (message): void => { + channel.postMessage(message); + // Send to itself as well. + sqliteChannel.onMessage(message); + }, + onMessage: Function.constVoid, + }; + channel.onmessage = (e: MessageEvent): void => { + sqliteChannel.onMessage(e.data); + }; + return sqliteChannel; +}; + +export const SqliteLive = Layer.effect( + Sqlite, Effect.gen(function* (_) { - const sqlite = yield* _(Effect.promise(() => sqlitePromise)); - const sqliteQuery = ensureSqliteQuery(arg); - const rows = sqlite.exec(sqliteQuery.sql, { - returnValue: "resultRows", - rowMode: "object", - bind: valuesToSqliteValues(sqliteQuery.parameters), - }) as SqliteRow[]; - maybeParseJson(rows); - return { rows, changes: sqlite.changes() }; - }); - -export const SqliteLive = Layer.succeed(Sqlite, { exec }); + const nanoIdGenerator = yield* _(NanoIdGenerator); + const channel = createSqliteChannel(); + + /** + * We don't know which tab will be elected leader, and messages are + * dispatched before initialization, so we must store them. + */ + let execsBeforeDbInit: ReadonlyArray = []; + + type ResolvePromise = (result: SqliteExecResult) => void; + const resolvePromises = new Map(); + + const maybeResolveExecResult = ( + result: SqliteChannelMessageResult, + ): void => { + const resolvePromise = resolvePromises.get(result.id); + if (resolvePromise == null) return; + resolvePromises.delete(result.id); + resolvePromise(result.result); + }; + + /** Handle incoming messages for a tab without initialized DB. */ + channel.onMessage = (message): void => { + switch (message._tag) { + case "exec": { + execsBeforeDbInit = [...execsBeforeDbInit, message]; + break; + } + case "execResult": { + /** Remove already handled exec so the other tabs will not process it. */ + execsBeforeDbInit = ReadonlyArray.filter( + execsBeforeDbInit, + (m) => m.id !== message.id, + ); + maybeResolveExecResult(message); + break; + } + default: + Function.absurd(message); + } + }; + + const initDb = (): void => { + sqlite3InitModule().then((sqlite3) => + sqlite3 + .installOpfsSAHPoolVfs({ + // TODO: Use name to allow Evolu apps co-exist in the same HTTP origin. + }) + .then((poolUtil) => { + const sqlite = new poolUtil.OpfsSAHPoolDb("/evolu1"); + + const exec = (sqliteQuery: SqliteQuery, id: NanoId): void => { + // console.log(sqliteQuery); + // TODO: Try + const rows = sqlite.exec(sqliteQuery.sql, { + returnValue: "resultRows", + rowMode: "object", + bind: valuesToSqliteValues(sqliteQuery.parameters), + }) as SqliteRow[]; + maybeParseJson(rows); + const result = { rows, changes: sqlite.changes() }; + // For the race conditions testing + // setTimeout(() => { + channel.postMessage({ _tag: "execResult", id, result }); + // }, 100); + }; + + channel.onMessage = (message): void => { + switch (message._tag) { + /** A tab was elected so it can start processing. */ + case "exec": + exec(message.query, message.id); + break; + case "execResult": + maybeResolveExecResult(message); + break; + default: + Function.absurd(message); + } + }; + + /** Handle execs arrived before Db was initialized. */ + execsBeforeDbInit.forEach((message) => { + exec(message.query, message.id); + }); + execsBeforeDbInit = []; + }), + ); + }; + + navigator.locks.request( + "sqliteFilename", // TODO: filename + () => + /** + * This promise prevents other tabs from acquiring the lock because it's + * never resolved or rejected. The next SQLite instance is created when + * the previous lock is released (a tab is reloaded or closed). + */ + new Promise(initDb), + ); + + return Sqlite.of({ + exec: (arg) => + Effect.gen(function* (_) { + const id = yield* _(nanoIdGenerator.nanoid); + const promise = new Promise((resolve) => { + resolvePromises.set(id, resolve); + }); + const query = ensureSqliteQuery(arg); + channel.postMessage({ _tag: "exec", id, query }); + return yield* _(Effect.promise(() => promise)); + }), + }); + }), +); From 05be671a6997af1db2e6decf83c2f8f6cb8a5fa4 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Sat, 2 Mar 2024 15:47:12 +0100 Subject: [PATCH 11/31] Update pnpm-lock.yaml --- pnpm-lock.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ef8cf7ec2..fbfd4867c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -496,7 +496,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.24 + '@jridgewell/trace-mapping': 0.3.25 /@babel/code-frame@7.10.4: resolution: {integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==} @@ -542,7 +542,7 @@ packages: dependencies: '@babel/types': 7.24.0 '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.24 + '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 /@babel/helper-annotate-as-pure@7.22.5: @@ -3108,7 +3108,7 @@ packages: dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.24 + '@jridgewell/trace-mapping': 0.3.25 /@jridgewell/resolve-uri@3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} @@ -3122,13 +3122,13 @@ packages: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.24 + '@jridgewell/trace-mapping': 0.3.25 /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.24: - resolution: {integrity: sha512-+VaWXDa6+l6MhflBvVXjIEAzb59nQ2JUK3bwRp2zRpPtU+8TFRy9Gg/5oIcNlkEL5PGlBFGfemUVvIgLnTzq7Q==} + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 From 5938fe60281dc6e6b9d4a9b1905874fa1c071157 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Sat, 2 Mar 2024 15:47:35 +0100 Subject: [PATCH 12/31] Sort imports --- packages/evolu-common/src/DbWorker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/evolu-common/src/DbWorker.ts b/packages/evolu-common/src/DbWorker.ts index 8ba4efabf..b49b8c917 100644 --- a/packages/evolu-common/src/DbWorker.ts +++ b/packages/evolu-common/src/DbWorker.ts @@ -47,6 +47,7 @@ import { EvoluError, makeUnexpectedError } from "./ErrorStore.js"; import { Id, SqliteDate, cast } from "./Model.js"; import { OnCompleteId } from "./OnCompletes.js"; import { Owner, OwnerId } from "./Owner.js"; +import { DbWorkerLock } from "./Platform.js"; import * as Sql from "./Sql.js"; import { Sqlite, Value } from "./Sqlite.js"; import { @@ -59,7 +60,6 @@ import { SyncWorkerPostMessage, } from "./SyncWorker.js"; import { Messaging } from "./Types.js"; -import { DbWorkerLock } from "./Platform.js"; export interface DbWorker extends Messaging {} export const DbWorker = Context.GenericTag("@services/DbWorker"); From eaa20480828dc93a2c0ddd32fa2bf8f08fdb3175 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Sat, 2 Mar 2024 15:47:54 +0100 Subject: [PATCH 13/31] Handle SQLite errors --- packages/evolu-common-web/src/SqliteLive.ts | 179 +++++++++++--------- 1 file changed, 101 insertions(+), 78 deletions(-) diff --git a/packages/evolu-common-web/src/SqliteLive.ts b/packages/evolu-common-web/src/SqliteLive.ts index d1df78f66..ac07e887a 100644 --- a/packages/evolu-common-web/src/SqliteLive.ts +++ b/packages/evolu-common-web/src/SqliteLive.ts @@ -5,11 +5,13 @@ import { SqliteExecResult, SqliteQuery, SqliteRow, + UnexpectedError, ensureSqliteQuery, + makeUnexpectedError, maybeParseJson, valuesToSqliteValues, } from "@evolu/common"; -import sqlite3InitModule from "@sqlite.org/sqlite-wasm"; +import sqlite3InitModule, { SAHPoolUtil } from "@sqlite.org/sqlite-wasm"; import * as Effect from "effect/Effect"; import * as Function from "effect/Function"; import * as Layer from "effect/Layer"; @@ -27,8 +29,7 @@ import * as ReadonlyArray from "effect/ReadonlyArray"; * https://github.com/rhashimoto/wa-sqlite/discussions/81 * * I decided not to use it because we can't use SharedWorker in Chrome Android, - * and I don't want to use ServiceWorker because it's slower and harder to - * grasp. + * and I don't want to use ServiceWorker because it's slower and tricky. * * This implementation doesn't need SharedWorker or ServiceWorker and does not * use dedicated broadcast channels to keep code as simple as possible. Browsers @@ -42,22 +43,26 @@ interface SqliteChannel { onMessage: (message: SqliteChannelMessage) => void; } -type SqliteChannelMessage = - | SqliteChannelMessageExec - | SqliteChannelMessageResult; +type SqliteChannelMessage = MessageExec | MessageExecSuccess | MessageExecError; -type SqliteChannelMessageExec = { - readonly _tag: "exec"; +type MessageExec = { + readonly _tag: "Exec"; readonly id: NanoId; readonly query: SqliteQuery; }; -type SqliteChannelMessageResult = { - readonly _tag: "execResult"; +type MessageExecSuccess = { + readonly _tag: "ExecSuccess"; readonly id: NanoId; readonly result: SqliteExecResult; }; +type MessageExecError = { + readonly _tag: "ExecError"; + readonly id: NanoId; + readonly error: UnexpectedError; +}; + const createSqliteChannel = (): SqliteChannel => { const channel = new BroadcastChannel("sqlite"); const sqliteChannel: SqliteChannel = { @@ -84,34 +89,37 @@ export const SqliteLive = Layer.effect( * We don't know which tab will be elected leader, and messages are * dispatched before initialization, so we must store them. */ - let execsBeforeDbInit: ReadonlyArray = []; + let execsBeforeSqliteInit: ReadonlyArray = []; - type ResolvePromise = (result: SqliteExecResult) => void; - const resolvePromises = new Map(); + const promiseResolves = new Map< + NanoId, + (message: MessageExecSuccess | MessageExecError) => void + >(); - const maybeResolveExecResult = ( - result: SqliteChannelMessageResult, + const maybeResolvePromise = ( + message: MessageExecSuccess | MessageExecError, ): void => { - const resolvePromise = resolvePromises.get(result.id); - if (resolvePromise == null) return; - resolvePromises.delete(result.id); - resolvePromise(result.result); + const resolve = promiseResolves.get(message.id); + if (resolve == null) return; + promiseResolves.delete(message.id); + resolve(message); }; - /** Handle incoming messages for a tab without initialized DB. */ + /** Handle incoming messages for a tab without initialized Sqlite. */ channel.onMessage = (message): void => { switch (message._tag) { - case "exec": { - execsBeforeDbInit = [...execsBeforeDbInit, message]; + case "Exec": { + execsBeforeSqliteInit = [...execsBeforeSqliteInit, message]; break; } - case "execResult": { + case "ExecError": + case "ExecSuccess": { /** Remove already handled exec so the other tabs will not process it. */ - execsBeforeDbInit = ReadonlyArray.filter( - execsBeforeDbInit, + execsBeforeSqliteInit = ReadonlyArray.filter( + execsBeforeSqliteInit, (m) => m.id !== message.id, ); - maybeResolveExecResult(message); + maybeResolvePromise(message); break; } default: @@ -119,52 +127,48 @@ export const SqliteLive = Layer.effect( } }; - const initDb = (): void => { - sqlite3InitModule().then((sqlite3) => - sqlite3 - .installOpfsSAHPoolVfs({ - // TODO: Use name to allow Evolu apps co-exist in the same HTTP origin. - }) - .then((poolUtil) => { - const sqlite = new poolUtil.OpfsSAHPoolDb("/evolu1"); - - const exec = (sqliteQuery: SqliteQuery, id: NanoId): void => { - // console.log(sqliteQuery); - // TODO: Try - const rows = sqlite.exec(sqliteQuery.sql, { - returnValue: "resultRows", - rowMode: "object", - bind: valuesToSqliteValues(sqliteQuery.parameters), - }) as SqliteRow[]; - maybeParseJson(rows); - const result = { rows, changes: sqlite.changes() }; - // For the race conditions testing - // setTimeout(() => { - channel.postMessage({ _tag: "execResult", id, result }); - // }, 100); - }; - - channel.onMessage = (message): void => { - switch (message._tag) { - /** A tab was elected so it can start processing. */ - case "exec": - exec(message.query, message.id); - break; - case "execResult": - maybeResolveExecResult(message); - break; - default: - Function.absurd(message); - } - }; - - /** Handle execs arrived before Db was initialized. */ - execsBeforeDbInit.forEach((message) => { - exec(message.query, message.id); - }); - execsBeforeDbInit = []; - }), - ); + const initSqlite = (poolUtil: SAHPoolUtil): void => { + const sqlite = new poolUtil.OpfsSAHPoolDb("/evolu1"); + + const exec = (sqliteQuery: SqliteQuery, id: NanoId): void => { + try { + const rows = sqlite.exec(sqliteQuery.sql, { + returnValue: "resultRows", + rowMode: "object", + bind: valuesToSqliteValues(sqliteQuery.parameters), + }) as SqliteRow[]; + maybeParseJson(rows); + const result = { rows, changes: sqlite.changes() }; + channel.postMessage({ _tag: "ExecSuccess", id, result }); + } catch (error) { + channel.postMessage({ + _tag: "ExecError", + id, + error: makeUnexpectedError(error).pipe(Effect.runSync), + }); + } + }; + + channel.onMessage = (message): void => { + switch (message._tag) { + /** A tab was elected so it can start processing. */ + case "Exec": + exec(message.query, message.id); + break; + case "ExecSuccess": + case "ExecError": + maybeResolvePromise(message); + break; + default: + Function.absurd(message); + } + }; + + /** Handle execs arrived before Sqlite was initialized. */ + execsBeforeSqliteInit.forEach((message) => { + exec(message.query, message.id); + }); + execsBeforeSqliteInit = []; }; navigator.locks.request( @@ -175,19 +179,38 @@ export const SqliteLive = Layer.effect( * never resolved or rejected. The next SQLite instance is created when * the previous lock is released (a tab is reloaded or closed). */ - new Promise(initDb), + new Promise((): void => { + sqlite3InitModule().then((sqlite3) => + sqlite3 + // TODO: Use name to allow Evolu apps co-exist in the same HTTP origin. + .installOpfsSAHPoolVfs({}) + .then(initSqlite), + ); + }), ); return Sqlite.of({ exec: (arg) => Effect.gen(function* (_) { const id = yield* _(nanoIdGenerator.nanoid); - const promise = new Promise((resolve) => { - resolvePromises.set(id, resolve); - }); const query = ensureSqliteQuery(arg); - channel.postMessage({ _tag: "exec", id, query }); - return yield* _(Effect.promise(() => promise)); + + const promise = new Promise( + (resolve) => { + promiseResolves.set(id, resolve); + }, + ); + + channel.postMessage({ _tag: "Exec", id, query }); + + return yield* _( + Effect.promise(() => promise), + Effect.map((message) => { + if (message._tag === "ExecSuccess") return message.result; + // This throw will be catched as UnexpectedError. + throw new Error(message.error.error.message); + }), + ); }), }); }), From 257a790bf3aab952b6d8815962bec28cfc0e4483 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Sat, 2 Mar 2024 19:48:45 +0100 Subject: [PATCH 14/31] Remove workaround for previous Expo SQLite --- packages/evolu-common/src/Db.ts | 4 +--- packages/evolu-common/src/DbWorker.ts | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/evolu-common/src/Db.ts b/packages/evolu-common/src/Db.ts index 712c079d5..ba6aa2370 100644 --- a/packages/evolu-common/src/Db.ts +++ b/packages/evolu-common/src/Db.ts @@ -1,7 +1,6 @@ import * as AST from "@effect/schema/AST"; import * as S from "@effect/schema/Schema"; import { make } from "@effect/schema/Schema"; -import { bytesToHex } from "@noble/ciphers/utils"; import * as Brand from "effect/Brand"; import * as Context from "effect/Context"; import * as Effect from "effect/Effect"; @@ -341,8 +340,7 @@ export const lazyInit = ( parameters: [ owner.id, owner.mnemonic, - // expo-sqlite 11.3.2 doesn't support Uint8Array - bytesToHex(owner.encryptionKey), + owner.encryptionKey, timestampToString(initialTimestampString), merkleTreeToString(initialMerkleTree), ], diff --git a/packages/evolu-common/src/DbWorker.ts b/packages/evolu-common/src/DbWorker.ts index b49b8c917..61603a5a9 100644 --- a/packages/evolu-common/src/DbWorker.ts +++ b/packages/evolu-common/src/DbWorker.ts @@ -1,4 +1,3 @@ -import { hexToBytes } from "@noble/ciphers/utils"; import * as Context from "effect/Context"; import * as Effect from "effect/Effect"; import * as Function from "effect/Function"; @@ -168,8 +167,7 @@ const init = Effect.gen(function* (_) { ({ rows: [row] }): Owner => ({ id: row.id as OwnerId, mnemonic: row.mnemonic as Mnemonic, - // expo-sqlite 11.3.2 doesn't support Uint8Array - encryptionKey: hexToBytes(row.encryptionKey as string), + encryptionKey: row.encryptionKey as Uint8Array, }), ), someDefectToNoSuchTableOrColumnError, From 90185c20efec57b5c5025037a6065ef269e43046 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Sat, 2 Mar 2024 20:15:27 +0100 Subject: [PATCH 15/31] Remove unnecessary Effect.map --- packages/evolu-common/src/DbWorker.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/evolu-common/src/DbWorker.ts b/packages/evolu-common/src/DbWorker.ts index 61603a5a9..8acccd202 100644 --- a/packages/evolu-common/src/DbWorker.ts +++ b/packages/evolu-common/src/DbWorker.ts @@ -218,9 +218,8 @@ const readTimestampAndMerkleTree = Sqlite.pipe( Effect.flatMap((sqlite) => sqlite.exec(Sql.selectOwnerTimestampAndMerkleTree), ), - Effect.map((result) => result.rows), Effect.map( - ([{ timestamp, merkleTree }]): TimestampAndMerkleTree => ({ + ({ rows: [{ timestamp, merkleTree }] }): TimestampAndMerkleTree => ({ timestamp: unsafeTimestampFromString(timestamp as TimestampString), merkleTree: merkleTree as MerkleTree, }), From eae1daeac924c39a7c1ecc39d7231bdda843f096 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Sat, 2 Mar 2024 21:23:51 +0100 Subject: [PATCH 16/31] Remove unnecessary headers --- apps/web/next.config.js | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/apps/web/next.config.js b/apps/web/next.config.js index 5fa888ae9..984243a8a 100644 --- a/apps/web/next.config.js +++ b/apps/web/next.config.js @@ -16,23 +16,6 @@ const nextConfig = { experimental: { optimizePackageImports: ["effect", "@effect/schema", "kysely"], }, - async headers() { - return [ - { - source: "/(.*?)", - headers: [ - { - key: "cross-origin-embedder-policy", - value: "require-corp", - }, - { - key: "cross-origin-opener-policy", - value: "same-origin", - }, - ], - }, - ]; - }, }; module.exports = withNextra(nextConfig); From 5d9543a29607d90cdd90d17192d42003da137608 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Sun, 3 Mar 2024 13:05:06 +0100 Subject: [PATCH 17/31] Silent SQLite dev warning --- packages/evolu-common-web/src/SqliteLive.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/evolu-common-web/src/SqliteLive.ts b/packages/evolu-common-web/src/SqliteLive.ts index ac07e887a..6571a731a 100644 --- a/packages/evolu-common-web/src/SqliteLive.ts +++ b/packages/evolu-common-web/src/SqliteLive.ts @@ -79,6 +79,12 @@ const createSqliteChannel = (): SqliteChannel => { return sqliteChannel; }; +// https://github.com/sqlite/sqlite-wasm/issues/62 +// @ts-expect-error Missing types. +globalThis.sqlite3ApiConfig = { + warn: Function.constVoid, +}; + export const SqliteLive = Layer.effect( Sqlite, Effect.gen(function* (_) { From 6dd05e196135bcb9868bd34e54475963ae910991 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Sun, 3 Mar 2024 20:31:22 +0100 Subject: [PATCH 18/31] 2x faster updates and sync createdAt and updatedAt automatic columns are inferred from the message timestamp, so they are not messages anymore. --- packages/evolu-common/src/DbWorker.ts | 34 +++++++++++++-------- packages/evolu-common/src/Evolu.ts | 15 +++++---- packages/evolu-common/src/Sql.ts | 7 +++-- packages/evolu-common/test/DbWorker.test.ts | 12 +++++--- 4 files changed, 41 insertions(+), 27 deletions(-) diff --git a/packages/evolu-common/src/DbWorker.ts b/packages/evolu-common/src/DbWorker.ts index 8acccd202..453e4338b 100644 --- a/packages/evolu-common/src/DbWorker.ts +++ b/packages/evolu-common/src/DbWorker.ts @@ -10,6 +10,7 @@ import * as ReadonlyRecord from "effect/ReadonlyRecord"; import { Config, ConfigLive } from "./Config.js"; import { MerkleTree, + Millis, Time, TimeLive, Timestamp, @@ -43,7 +44,7 @@ import { } from "./Db.js"; import { QueryPatches, makePatches } from "./Diff.js"; import { EvoluError, makeUnexpectedError } from "./ErrorStore.js"; -import { Id, SqliteDate, cast } from "./Model.js"; +import { Id, cast } from "./Model.js"; import { OnCompleteId } from "./OnCompletes.js"; import { Owner, OwnerId } from "./Owner.js"; import { DbWorkerLock } from "./Platform.js"; @@ -154,7 +155,6 @@ export interface Mutation { Value | Date | boolean | undefined >; readonly isInsert: boolean; - readonly now: SqliteDate; readonly onCompleteId: OnCompleteId | null; } @@ -231,9 +231,10 @@ export const mutationsToNewMessages = ( ): ReadonlyArray => pipe( mutations, - ReadonlyArray.map(({ id, isInsert, now, table, values }) => + ReadonlyArray.map(({ id, isInsert, table, values }) => pipe( Object.entries(values), + // Filter values. ReadonlyArray.filterMap(([key, value]) => // The value can be undefined if exactOptionalPropertyTypes isn't true. // Don't insert nulls because null is the default value. @@ -241,6 +242,7 @@ export const mutationsToNewMessages = ( ? Option.none() : Option.some([key, value] as const), ), + // Cast values. ReadonlyArray.map( ([key, value]) => [ @@ -252,7 +254,6 @@ export const mutationsToNewMessages = ( : value, ] as const, ), - ReadonlyArray.append([isInsert ? "createdAt" : "updatedAt", now]), ReadonlyArray.map( ([key, value]): NewMessage => ({ table, @@ -293,13 +294,21 @@ const ensureSchemaByNewMessages = ( export const upsertValueIntoTableRowColumn = ( message: NewMessage, messages: ReadonlyArray, + millis: Millis, ): Effect.Effect => Effect.gen(function* (_) { const sqlite = yield* _(Sqlite); - + const createdAtOrUpdatedAt = cast(new Date(millis)); const insert = sqlite.exec({ sql: Sql.upsertValueIntoTableRowColumn(message.table, message.column), - parameters: [message.row, message.value, message.value], + parameters: [ + message.row, + message.value, + createdAtOrUpdatedAt, + createdAtOrUpdatedAt, + message.value, + createdAtOrUpdatedAt, + ], }); yield* _( @@ -335,7 +344,8 @@ const applyMessages = ({ ); if (timestamp == null || timestamp < message.timestamp) { - yield* _(upsertValueIntoTableRowColumn(message, messages)); + const { millis } = unsafeTimestampFromString(message.timestamp); + yield* _(upsertValueIntoTableRowColumn(message, messages, millis)); } if (timestamp == null || timestamp !== message.timestamp) { @@ -401,11 +411,11 @@ const mutate = ({ ), ).map(mutationsToNewMessages); - yield* _( - Effect.forEach(toUpsert, (message) => - upsertValueIntoTableRowColumn(message, toUpsert), - ), - ); + const time = yield* _(Time); + for (const messageToUpsert of toUpsert) { + const now = yield* _(time.now); + yield* _(upsertValueIntoTableRowColumn(messageToUpsert, toUpsert, now)); + } const { exec } = yield* _(Sqlite); yield* _( diff --git a/packages/evolu-common/src/Evolu.ts b/packages/evolu-common/src/Evolu.ts index 05487d27f..93acede84 100644 --- a/packages/evolu-common/src/Evolu.ts +++ b/packages/evolu-common/src/Evolu.ts @@ -10,7 +10,6 @@ import * as Number from "effect/Number"; import * as ReadonlyArray from "effect/ReadonlyArray"; import * as Kysely from "kysely"; import { Config, ConfigLive } from "./Config.js"; -import { Time, TimeLive } from "./Crdt.js"; import { Mnemonic, NanoIdGenerator, NanoIdGeneratorLive } from "./Crypto.js"; import { DatabaseSchema, @@ -29,7 +28,7 @@ import { import { DbWorker, DbWorkerOutputOnQuery, Mutation } from "./DbWorker.js"; import { applyPatches } from "./Diff.js"; import { EvoluError, makeErrorStore } from "./ErrorStore.js"; -import { SqliteBoolean, SqliteDate, cast } from "./Model.js"; +import { SqliteBoolean, SqliteDate } from "./Model.js"; import { OnCompletes, OnCompletesLive } from "./OnCompletes.js"; import { Owner } from "./Owner.js"; import { AppState, FlushSync, PlatformName } from "./Platform.js"; @@ -323,13 +322,15 @@ type QueryCallback = ( ) => Kysely.SelectQueryBuilder; type QuerySchema = { - readonly [Table in keyof S]: NullableExceptId<{ + readonly [Table in keyof S]: NullableExceptForIdAndAutomaticColumns<{ readonly [Column in keyof S[Table]]: S[Table][Column]; }>; }; -type NullableExceptId = { - readonly [K in keyof T]: K extends "id" ? T[K] : T[K] | null; +type NullableExceptForIdAndAutomaticColumns = { + readonly [K in keyof T]: K extends "id" | "createdAt" | "updatedAt" + ? T[K] + : T[K] | null; }; const kysely = new Kysely.Kysely>({ @@ -645,7 +646,6 @@ const MutateLive = Layer.effect( Effect.gen(function* (_) { const { nanoid } = yield* _(NanoIdGenerator); const onCompletes = yield* _(OnCompletes); - const time = yield* _(Time); const subscribedQueries = yield* _(SubscribedQueries); const loadingPromises = yield* _(LoadingPromises); const dbWorker = yield* _(DbWorker); @@ -666,7 +666,6 @@ const MutateLive = Layer.effect( id, values, isInsert, - now: cast(new Date(Effect.runSync(time.now))), onCompleteId, }, ]; @@ -786,7 +785,7 @@ const EvoluCommon = Layer.effect( ); export const EvoluCommonLive = EvoluCommon.pipe( - Layer.provide(Layer.merge(TimeLive, NanoIdGeneratorLive)), + Layer.provide(NanoIdGeneratorLive), ); /** diff --git a/packages/evolu-common/src/Sql.ts b/packages/evolu-common/src/Sql.ts index 93670d539..69cb3d5d9 100644 --- a/packages/evolu-common/src/Sql.ts +++ b/packages/evolu-common/src/Sql.ts @@ -80,11 +80,12 @@ export const upsertValueIntoTableRowColumn = ( column: string, ): string => ` INSERT INTO - "${table}" ("id", "${column}") + "${table}" ("id", "${column}", "createdAt", "updatedAt") VALUES - (?, ?) + (?, ?, ?, ?) ON CONFLICT DO UPDATE SET - "${column}" = ? + "${column}" = ?, + "updatedAt" = ? `; export const deleteTableRow = (table: string): string => ` diff --git a/packages/evolu-common/test/DbWorker.test.ts b/packages/evolu-common/test/DbWorker.test.ts index 9858ebe87..e53bf92e6 100644 --- a/packages/evolu-common/test/DbWorker.test.ts +++ b/packages/evolu-common/test/DbWorker.test.ts @@ -1,12 +1,12 @@ import { Effect } from "effect"; import { expect, test } from "vitest"; -import { timestampToString } from "../src/Crdt.js"; +import { timestampToString, unsafeTimestampFromString } from "../src/Crdt.js"; import { Mutation, mutationsToNewMessages, upsertValueIntoTableRowColumn, } from "../src/DbWorker.js"; -import { Id, cast } from "../src/Model.js"; +import { Id } from "../src/Model.js"; import { OnCompleteId } from "../src/OnCompletes.js"; import { Sqlite } from "../src/Sqlite.js"; import { Message } from "../src/SyncWorker.js"; @@ -18,7 +18,6 @@ test("mutationsToNewMessages should dedupe", () => { id: "id" as Id, values: { a: 1, b: true }, isInsert: true, - now: cast(new Date()), onCompleteId: "onCompleteId" as OnCompleteId, }; const length = mutationsToNewMessages([mutation, mutation]).length; @@ -33,8 +32,13 @@ test("upsertValueIntoTableRowColumn should ensure schema", () => { value: "d", timestamp: timestampToString(makeNode1Timestamp()), }; + const { millis } = unsafeTimestampFromString(message.timestamp); - const rows = upsertValueIntoTableRowColumn(message, [message, message]).pipe( + const rows = upsertValueIntoTableRowColumn( + message, + [message, message], + millis, + ).pipe( Effect.zipRight(Sqlite), Effect.flatMap(({ exec }) => exec("select * from a")), Effect.provide(SqliteTest), From 10773e8326233f2ea26adda1a8e6dfffd9eaf8f1 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Mon, 4 Mar 2024 21:37:24 +0100 Subject: [PATCH 19/31] Update deps --- apps/native/package.json | 2 +- apps/web/package.json | 2 +- packages/eslint-config-evolu/package.json | 4 +- packages/evolu-common-react/package.json | 4 +- pnpm-lock.yaml | 172 ++++++++++++---------- 5 files changed, 103 insertions(+), 81 deletions(-) diff --git a/apps/native/package.json b/apps/native/package.json index e2fb96420..a5c00d816 100644 --- a/apps/native/package.json +++ b/apps/native/package.json @@ -35,7 +35,7 @@ "@babel/core": "^7.23.3", "@babel/plugin-proposal-dynamic-import": "^7.18.6", "@babel/plugin-transform-private-methods": "^7.23.3", - "@types/react": "^18.2.60", + "@types/react": "^18.2.62", "eslint": "^8.57.0", "eslint-config-evolu": "workspace:*", "prettier": "^3.2.5", diff --git a/apps/web/package.json b/apps/web/package.json index 79cdb58a1..a560ef99a 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -24,7 +24,7 @@ "devDependencies": { "@evolu/tsconfig": "workspace:*", "@types/node": "^20.11.20", - "@types/react": "^18.2.60", + "@types/react": "^18.2.62", "@types/react-dom": "^18.2.19", "autoprefixer": "^10.4.18", "eslint": "^8.57.0", diff --git a/packages/eslint-config-evolu/package.json b/packages/eslint-config-evolu/package.json index adbec7a9e..a4666e0f8 100644 --- a/packages/eslint-config-evolu/package.json +++ b/packages/eslint-config-evolu/package.json @@ -7,8 +7,8 @@ "clean": "rm -rf node_modules" }, "dependencies": { - "@typescript-eslint/eslint-plugin": "^7.1.0", - "@typescript-eslint/parser": "^7.1.0", + "@typescript-eslint/eslint-plugin": "^7.1.1", + "@typescript-eslint/parser": "^7.1.1", "eslint-config-next": "14.1.1", "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^1.12.4", diff --git a/packages/evolu-common-react/package.json b/packages/evolu-common-react/package.json index 1a6580fee..a7b5cdecd 100644 --- a/packages/evolu-common-react/package.json +++ b/packages/evolu-common-react/package.json @@ -41,7 +41,7 @@ "devDependencies": { "@evolu/common": "workspace:*", "@evolu/tsconfig": "workspace:*", - "@types/react": "^18.2.60", + "@types/react": "^18.2.62", "eslint": "^8.57.0", "eslint-config-evolu": "workspace:*", "react": "^18.2.0", @@ -50,7 +50,7 @@ }, "peerDependencies": { "@evolu/common": "^3.1.7", - "@types/react": "^18.2.60", + "@types/react": "^18.2.62", "react": "^18.2.0" }, "publishConfig": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fbfd4867c..cd9d6783a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,7 +34,7 @@ importers: dependencies: '@effect/schema': specifier: ^0.63.2 - version: 0.63.2(effect@2.4.1)(fast-check@3.15.1) + version: 0.63.2(effect@2.4.1)(fast-check@3.16.0) '@evolu/common': specifier: workspace:* version: link:../../packages/evolu-common @@ -100,8 +100,8 @@ importers: specifier: ^7.23.3 version: 7.23.3(@babel/core@7.24.0) '@types/react': - specifier: ^18.2.60 - version: 18.2.61 + specifier: ^18.2.62 + version: 18.2.62 eslint: specifier: ^8.57.0 version: 8.57.0 @@ -138,7 +138,7 @@ importers: dependencies: '@effect/schema': specifier: ^0.63.2 - version: 0.63.2(effect@2.4.1)(fast-check@3.15.1) + version: 0.63.2(effect@2.4.1)(fast-check@3.16.0) '@evolu/common': specifier: workspace:* version: link:../../packages/evolu-common @@ -174,8 +174,8 @@ importers: specifier: ^20.11.20 version: 20.11.24 '@types/react': - specifier: ^18.2.60 - version: 18.2.61 + specifier: ^18.2.62 + version: 18.2.62 '@types/react-dom': specifier: ^18.2.19 version: 18.2.19 @@ -207,11 +207,11 @@ importers: packages/eslint-config-evolu: dependencies: '@typescript-eslint/eslint-plugin': - specifier: ^7.1.0 - version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3) + specifier: ^7.1.1 + version: 7.1.1(@typescript-eslint/parser@7.1.1)(eslint@8.57.0)(typescript@5.3.3) '@typescript-eslint/parser': - specifier: ^7.1.0 - version: 7.1.0(eslint@8.57.0)(typescript@5.3.3) + specifier: ^7.1.1 + version: 7.1.1(eslint@8.57.0)(typescript@5.3.3) eslint-config-next: specifier: 14.1.1 version: 14.1.1(eslint@8.57.0)(typescript@5.3.3) @@ -267,7 +267,7 @@ importers: devDependencies: '@effect/schema': specifier: ^0.63.2 - version: 0.63.2(effect@2.4.1)(fast-check@3.15.1) + version: 0.63.2(effect@2.4.1)(fast-check@3.16.0) '@evolu/tsconfig': specifier: workspace:* version: link:../evolu-tsconfig @@ -305,8 +305,8 @@ importers: specifier: workspace:* version: link:../evolu-tsconfig '@types/react': - specifier: ^18.2.60 - version: 18.2.61 + specifier: ^18.2.62 + version: 18.2.62 eslint: specifier: ^8.57.0 version: 8.57.0 @@ -2382,14 +2382,14 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@effect/schema@0.63.2(effect@2.4.1)(fast-check@3.15.1): + /@effect/schema@0.63.2(effect@2.4.1)(fast-check@3.16.0): resolution: {integrity: sha512-piS+6dlGmcX8sAPGXdY4T6QmBbY2YXVnYjUguXpClk6FL7lQ9u2aIDib5kjCpciawJjil2VwltmPnMj0NJKKQQ==} peerDependencies: effect: ^2.4.1 fast-check: ^3.13.2 dependencies: effect: 2.4.1 - fast-check: 3.15.1 + fast-check: 3.16.0 /@es-joy/jsdoccomment@0.42.0: resolution: {integrity: sha512-R1w57YlVA6+YE01wch3GPYn6bCsrOV3YW/5oGGE2tmX6JcL9Nr+b5IikrjMPF+v9CV3ay+obImEdsDhovhJrzw==} @@ -3190,7 +3190,7 @@ packages: react: '>=16' dependencies: '@types/mdx': 2.0.11 - '@types/react': 18.2.61 + '@types/react': 18.2.62 react: 18.2.0 dev: false @@ -4243,11 +4243,11 @@ packages: /@types/react-dom@18.2.19: resolution: {integrity: sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==} dependencies: - '@types/react': 18.2.61 + '@types/react': 18.2.62 dev: true - /@types/react@18.2.61: - resolution: {integrity: sha512-NURTN0qNnJa7O/k4XUkEW2yfygA+NxS0V5h1+kp9jPwhzZy95q3ADoGMP0+JypMhrZBTTgjKAUlTctde1zzeQA==} + /@types/react@18.2.62: + resolution: {integrity: sha512-l3f57BbaEKP0xcFzf+5qRG8/PXykZiuVM6eEoPtqBPCp6dxO3HhDkLIgIyXPhPKNAeXn3KO2pEaNgzaEo/asaw==} dependencies: '@types/prop-types': 15.7.11 '@types/scheduler': 0.16.8 @@ -4301,8 +4301,8 @@ packages: dependencies: '@types/yargs-parser': 21.0.3 - /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3): - resolution: {integrity: sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==} + /@typescript-eslint/eslint-plugin@7.1.1(@typescript-eslint/parser@7.1.1)(eslint@8.57.0)(typescript@5.3.3): + resolution: {integrity: sha512-zioDz623d0RHNhvx0eesUmGfIjzrk18nSBC8xewepKXbBvN/7c1qImV7Hg8TI1URTxKax7/zxfxj3Uph8Chcuw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -4313,11 +4313,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 7.1.0 + '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 7.1.1 + '@typescript-eslint/type-utils': 7.1.1(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/utils': 7.1.1(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 7.1.1 debug: 4.3.4 eslint: 8.57.0 graphemer: 1.4.0 @@ -4351,8 +4351,8 @@ packages: - supports-color dev: false - /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3): - resolution: {integrity: sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w==} + /@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.3.3): + resolution: {integrity: sha512-ZWUFyL0z04R1nAEgr9e79YtV5LbafdOtN7yapNbn1ansMyaegl2D4bL7vHoJ4HPSc4CaLwuCVas8CVuneKzplQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^8.56.0 @@ -4361,10 +4361,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 7.1.0 + '@typescript-eslint/scope-manager': 7.1.1 + '@typescript-eslint/types': 7.1.1 + '@typescript-eslint/typescript-estree': 7.1.1(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 7.1.1 debug: 4.3.4 eslint: 8.57.0 typescript: 5.3.3 @@ -4380,16 +4380,16 @@ packages: '@typescript-eslint/visitor-keys': 6.21.0 dev: false - /@typescript-eslint/scope-manager@7.1.0: - resolution: {integrity: sha512-6TmN4OJiohHfoOdGZ3huuLhpiUgOGTpgXNUPJgeZOZR3DnIpdSgtt83RS35OYNNXxM4TScVlpVKC9jyQSETR1A==} + /@typescript-eslint/scope-manager@7.1.1: + resolution: {integrity: sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/visitor-keys': 7.1.0 + '@typescript-eslint/types': 7.1.1 + '@typescript-eslint/visitor-keys': 7.1.1 dev: false - /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): - resolution: {integrity: sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew==} + /@typescript-eslint/type-utils@7.1.1(eslint@8.57.0)(typescript@5.3.3): + resolution: {integrity: sha512-5r4RKze6XHEEhlZnJtR3GYeCh1IueUHdbrukV2KSlLXaTjuSfeVF8mZUVPLovidCuZfbVjfhi4c0DNSa/Rdg5g==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^8.56.0 @@ -4398,8 +4398,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 7.1.1(typescript@5.3.3) + '@typescript-eslint/utils': 7.1.1(eslint@8.57.0)(typescript@5.3.3) debug: 4.3.4 eslint: 8.57.0 ts-api-utils: 1.2.1(typescript@5.3.3) @@ -4413,8 +4413,8 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: false - /@typescript-eslint/types@7.1.0: - resolution: {integrity: sha512-qTWjWieJ1tRJkxgZYXx6WUYtWlBc48YRxgY2JN1aGeVpkhmnopq+SUC8UEVGNXIvWH7XyuTjwALfG6bFEgCkQA==} + /@typescript-eslint/types@7.1.1: + resolution: {integrity: sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q==} engines: {node: ^16.0.0 || >=18.0.0} dev: false @@ -4440,8 +4440,8 @@ packages: - supports-color dev: false - /@typescript-eslint/typescript-estree@7.1.0(typescript@5.3.3): - resolution: {integrity: sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ==} + /@typescript-eslint/typescript-estree@7.1.1(typescript@5.3.3): + resolution: {integrity: sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -4449,8 +4449,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/visitor-keys': 7.1.0 + '@typescript-eslint/types': 7.1.1 + '@typescript-eslint/visitor-keys': 7.1.1 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -4462,8 +4462,8 @@ packages: - supports-color dev: false - /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): - resolution: {integrity: sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw==} + /@typescript-eslint/utils@7.1.1(eslint@8.57.0)(typescript@5.3.3): + resolution: {integrity: sha512-thOXM89xA03xAE0lW7alstvnyoBUbBX38YtY+zAUcpRPcq9EIhXPuJ0YTv948MbzmKh6e1AUszn5cBFK49Umqg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^8.56.0 @@ -4471,9 +4471,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + '@typescript-eslint/scope-manager': 7.1.1 + '@typescript-eslint/types': 7.1.1 + '@typescript-eslint/typescript-estree': 7.1.1(typescript@5.3.3) eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: @@ -4489,11 +4489,11 @@ packages: eslint-visitor-keys: 3.4.3 dev: false - /@typescript-eslint/visitor-keys@7.1.0: - resolution: {integrity: sha512-FhUqNWluiGNzlvnDZiXad4mZRhtghdoKW6e98GoEOYSu5cND+E39rG5KwJMUzeENwm1ztYBRqof8wMLP+wNPIA==} + /@typescript-eslint/visitor-keys@7.1.1: + resolution: {integrity: sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 7.1.0 + '@typescript-eslint/types': 7.1.1 eslint-visitor-keys: 3.4.3 dev: false @@ -4537,7 +4537,7 @@ packages: /@vitest/snapshot@1.3.1: resolution: {integrity: sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ==} dependencies: - magic-string: 0.30.7 + magic-string: 0.30.8 pathe: 1.1.2 pretty-format: 29.7.0 dev: true @@ -4774,6 +4774,17 @@ packages: is-string: 1.0.7 dev: false + /array.prototype.findlast@1.2.4: + resolution: {integrity: sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + dev: false + /array.prototype.findlastindex@1.2.4: resolution: {integrity: sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==} engines: {node: '>= 0.4'} @@ -4804,6 +4815,15 @@ packages: es-shim-unscopables: 1.0.2 dev: false + /array.prototype.toreversed@1.1.2: + resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + es-shim-unscopables: 1.0.2 + dev: false + /array.prototype.tosorted@1.1.3: resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} dependencies: @@ -4891,7 +4911,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001591 + caniuse-lite: 1.0.30001593 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -5232,7 +5252,7 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001591 + caniuse-lite: 1.0.30001593 electron-to-chromium: 1.4.690 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) @@ -5380,8 +5400,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - /caniuse-lite@1.0.30001591: - resolution: {integrity: sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==} + /caniuse-lite@1.0.30001593: + resolution: {integrity: sha512-UWM1zlo3cZfkpBysd7AS+z+v007q9G1+fLTUU42rQnY6t2axoogPW/xol6T7juU5EUoOhML4WgBIdG+9yYqAjQ==} /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -6673,9 +6693,9 @@ packages: eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.1.0)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.1.1)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-react: 7.33.2(eslint@8.57.0) + eslint-plugin-react: 7.34.0(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) typescript: 5.3.3 transitivePeerDependencies: @@ -6722,7 +6742,7 @@ packages: enhanced-resolve: 5.15.1 eslint: 8.57.0 eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.1.0)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.1.1)(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -6764,7 +6784,7 @@ packages: - supports-color dev: false - /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.1.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.1.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} peerDependencies: @@ -6785,7 +6805,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.3.3) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -6804,7 +6824,7 @@ packages: regexpp: 3.2.0 dev: false - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.1.0)(eslint@8.57.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.1.1)(eslint@8.57.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -6814,7 +6834,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.4 array.prototype.flat: 1.3.2 @@ -6823,7 +6843,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.1.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.1.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.1 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -6908,14 +6928,16 @@ packages: eslint: 8.57.0 dev: false - /eslint-plugin-react@7.33.2(eslint@8.57.0): - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + /eslint-plugin-react@7.34.0(eslint@8.57.0): + resolution: {integrity: sha512-MeVXdReleBTdkz/bvcQMSnCXGi+c9kvy51IpinjnJgutl3YTHWsDdke7Z1ufZpGfDG8xduBDKyjtB9JH1eBKIQ==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: array-includes: 3.1.7 + array.prototype.findlast: 1.2.4 array.prototype.flatmap: 1.3.2 + array.prototype.toreversed: 1.1.2 array.prototype.tosorted: 1.1.3 doctrine: 2.1.0 es-iterator-helpers: 1.0.17 @@ -7396,8 +7418,8 @@ packages: resolution: {integrity: sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==} dev: false - /fast-check@3.15.1: - resolution: {integrity: sha512-GutOXZ+SCxGaFWfHe0Pbeq8PrkpGtPxA9/hdkI3s9YzqeMlrq5RdJ+QfYZ/S93jMX+tAyqgW0z5c9ppD+vkGUw==} + /fast-check@3.16.0: + resolution: {integrity: sha512-k8GtQHi4pJoRQ1gVDFQno+/FVkowo/ehiz/aCj9O/D7HRWb1sSFzNrw+iPVU8QlWtH+jNwbuN+dDVg3QkS56DQ==} engines: {node: '>=8.0.0'} dependencies: pure-rand: 6.0.4 @@ -9154,8 +9176,8 @@ packages: dependencies: yallist: 4.0.0 - /magic-string@0.30.7: - resolution: {integrity: sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==} + /magic-string@0.30.8: + resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 @@ -10542,7 +10564,7 @@ packages: '@next/env': 14.1.1 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001591 + caniuse-lite: 1.0.30001593 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.2.0 @@ -13621,7 +13643,7 @@ packages: debug: 4.3.4 execa: 8.0.1 local-pkg: 0.5.0 - magic-string: 0.30.7 + magic-string: 0.30.8 pathe: 1.1.2 picocolors: 1.0.0 std-env: 3.7.0 From 6af55b7adae16da00b18dda02e3f98be1bef3fce Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Mon, 4 Mar 2024 21:46:43 +0100 Subject: [PATCH 20/31] Close #149 --- .../evolu-common-web/src/DbWorker.worker.ts | 39 ++++++++---- packages/evolu-common-web/src/SqliteLive.ts | 13 ++-- packages/evolu-common/src/Config.ts | 8 +++ packages/evolu-react-native/src/SqliteLive.ts | 61 +++++++++++-------- 4 files changed, 77 insertions(+), 44 deletions(-) diff --git a/packages/evolu-common-web/src/DbWorker.worker.ts b/packages/evolu-common-web/src/DbWorker.worker.ts index 657644442..1e90519a7 100644 --- a/packages/evolu-common-web/src/DbWorker.worker.ts +++ b/packages/evolu-common-web/src/DbWorker.worker.ts @@ -1,4 +1,5 @@ import { + ConfigLive, DbWorker, DbWorkerCommonLive, DbWorkerInput, @@ -10,20 +11,32 @@ import { Bip39Live, DbWorkerLockLive } from "./PlatformLive.js"; import { SqliteLive } from "./SqliteLive.js"; import { SyncWorkerLive } from "./SyncWorkerLive.js"; -const dbWorker = Effect.provide( - DbWorker, - DbWorkerCommonLive.pipe( - Layer.provide( - Layer.mergeAll(SqliteLive, Bip39Live, SyncWorkerLive, DbWorkerLockLive), - ), - Layer.provide(NanoIdGeneratorLive), - ), -).pipe(Effect.runSync); - -dbWorker.onMessage = (output): void => { - postMessage(output); -}; +let dbWorker: DbWorker | null = null; onmessage = (e: MessageEvent): void => { + if (dbWorker == null) { + if (e.data._tag !== "init") throw new Error("init must be called first"); + dbWorker = Effect.provide( + DbWorker, + DbWorkerCommonLive.pipe( + Layer.provide( + Layer.mergeAll( + SqliteLive, + Bip39Live, + SyncWorkerLive, + DbWorkerLockLive, + ), + ), + Layer.provide( + Layer.merge(NanoIdGeneratorLive, ConfigLive(e.data.config)), + ), + ), + ).pipe(Effect.runSync); + + dbWorker.onMessage = (output): void => { + postMessage(output); + }; + } + dbWorker.postMessage(e.data); }; diff --git a/packages/evolu-common-web/src/SqliteLive.ts b/packages/evolu-common-web/src/SqliteLive.ts index 6571a731a..c2dbb8ce8 100644 --- a/packages/evolu-common-web/src/SqliteLive.ts +++ b/packages/evolu-common-web/src/SqliteLive.ts @@ -1,4 +1,5 @@ import { + Config, NanoId, NanoIdGenerator, Sqlite, @@ -88,6 +89,7 @@ globalThis.sqlite3ApiConfig = { export const SqliteLive = Layer.effect( Sqlite, Effect.gen(function* (_) { + const config = yield* _(Config); const nanoIdGenerator = yield* _(NanoIdGenerator); const channel = createSqliteChannel(); @@ -134,9 +136,10 @@ export const SqliteLive = Layer.effect( }; const initSqlite = (poolUtil: SAHPoolUtil): void => { - const sqlite = new poolUtil.OpfsSAHPoolDb("/evolu1"); + const sqlite = new poolUtil.OpfsSAHPoolDb("/evolu1.db"); const exec = (sqliteQuery: SqliteQuery, id: NanoId): void => { + // console.log(sqliteQuery.sql); try { const rows = sqlite.exec(sqliteQuery.sql, { returnValue: "resultRows", @@ -178,7 +181,7 @@ export const SqliteLive = Layer.effect( }; navigator.locks.request( - "sqliteFilename", // TODO: filename + config.name, () => /** * This promise prevents other tabs from acquiring the lock because it's @@ -189,7 +192,9 @@ export const SqliteLive = Layer.effect( sqlite3InitModule().then((sqlite3) => sqlite3 // TODO: Use name to allow Evolu apps co-exist in the same HTTP origin. - .installOpfsSAHPoolVfs({}) + .installOpfsSAHPoolVfs({ + name: config.name, + }) .then(initSqlite), ); }), @@ -213,7 +218,7 @@ export const SqliteLive = Layer.effect( Effect.promise(() => promise), Effect.map((message) => { if (message._tag === "ExecSuccess") return message.result; - // This throw will be catched as UnexpectedError. + // This throw will be caught as UnexpectedError. throw new Error(message.error.error.message); }), ); diff --git a/packages/evolu-common/src/Config.ts b/packages/evolu-common/src/Config.ts index 2176aebe7..4af660d4b 100644 --- a/packages/evolu-common/src/Config.ts +++ b/packages/evolu-common/src/Config.ts @@ -16,6 +16,13 @@ export interface Config { * 1000 (5 minutes). */ readonly maxDrift: number; + + /** + * Evolu application name. For now, this is only useful for localhost + * development, where we want each application to have its own database. The + * default value is: "Evolu". + */ + readonly name: string; } export const Config = Context.GenericTag("@services/Config"); @@ -27,6 +34,7 @@ export const ConfigLive = (config?: Partial): Layer.Layer => syncUrl: "https://evolu.world", maxDrift: 5 * 60 * 1000, reloadUrl: "/", + name: "Evolu", ...config, }), ); diff --git a/packages/evolu-react-native/src/SqliteLive.ts b/packages/evolu-react-native/src/SqliteLive.ts index a149b66d5..1d1406c3d 100644 --- a/packages/evolu-react-native/src/SqliteLive.ts +++ b/packages/evolu-react-native/src/SqliteLive.ts @@ -1,4 +1,5 @@ import { + Config, Sqlite, SqliteRow, ensureSqliteQuery, @@ -7,35 +8,41 @@ import { } from "@evolu/common"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; -import * as SQLite from "expo-sqlite/next.js"; +import * as ExpoSQLite from "expo-sqlite/next.js"; -const db = SQLite.openDatabaseSync("evolu1.db"); - -const exec: Sqlite["exec"] = (arg) => +export const SqliteLive = Layer.effect( + Sqlite, Effect.gen(function* (_) { - const sqliteQuery = ensureSqliteQuery(arg); - const query = { - sql: sqliteQuery.sql, - args: valuesToSqliteValues(sqliteQuery.parameters), - }; + const config = yield* _(Config); + const db = ExpoSQLite.openDatabaseSync(`evolu1-${config.name}.db`); - const isSelectOrPragma = - query.sql.trimStart().toLowerCase().startsWith("select") || - query.sql.trimStart().toLowerCase().startsWith("pragma"); - // Expo can log only strings. - // console.log(JSON.stringify(isSelect), sql); + return Sqlite.of({ + exec: (arg) => + Effect.gen(function* (_) { + const sqliteQuery = ensureSqliteQuery(arg); + const query = { + sql: sqliteQuery.sql, + args: valuesToSqliteValues(sqliteQuery.parameters), + }; - if (isSelectOrPragma) { - const rows = (yield* _( - Effect.promise(() => db.getAllAsync(query.sql, query.args)), - )) as SqliteRow[]; - maybeParseJson(rows); - return { rows, changes: 0 }; - } - const { changes } = yield* _( - Effect.promise(() => db.runAsync(query.sql, query.args)), - ); - return { rows: [], changes }; - }); + const isSelectOrPragma = + query.sql.trimStart().toLowerCase().startsWith("select") || + query.sql.trimStart().toLowerCase().startsWith("pragma"); + // Expo can log only strings. + // console.log(JSON.stringify(isSelect), sql); -export const SqliteLive = Layer.succeed(Sqlite, { exec }); + if (isSelectOrPragma) { + const rows = (yield* _( + Effect.promise(() => db.getAllAsync(query.sql, query.args)), + )) as SqliteRow[]; + maybeParseJson(rows); + return { rows, changes: 0 }; + } + const { changes } = yield* _( + Effect.promise(() => db.runAsync(query.sql, query.args)), + ); + return { rows: [], changes }; + }), + }); + }), +); From 80feddb189b354e81389d40d1139833acb9b1996 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Mon, 4 Mar 2024 23:04:03 +0100 Subject: [PATCH 21/31] Fix ensureSchemaByNewMessages --- packages/evolu-common/src/DbWorker.ts | 2 +- packages/evolu-common/test/DbWorker.test.ts | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/evolu-common/src/DbWorker.ts b/packages/evolu-common/src/DbWorker.ts index 453e4338b..0d5e01419 100644 --- a/packages/evolu-common/src/DbWorker.ts +++ b/packages/evolu-common/src/DbWorker.ts @@ -278,7 +278,7 @@ const ensureSchemaByNewMessages = ( if (table == null) { tablesMap.set(message.table, { name: message.table, - columns: [message.column], + columns: [message.column, "createdAt", "updatedAt"], }); return; } diff --git a/packages/evolu-common/test/DbWorker.test.ts b/packages/evolu-common/test/DbWorker.test.ts index e53bf92e6..e3c0f10be 100644 --- a/packages/evolu-common/test/DbWorker.test.ts +++ b/packages/evolu-common/test/DbWorker.test.ts @@ -21,7 +21,7 @@ test("mutationsToNewMessages should dedupe", () => { onCompleteId: "onCompleteId" as OnCompleteId, }; const length = mutationsToNewMessages([mutation, mutation]).length; - expect(length).toBe(3); + expect(length).toBe(2); }); test("upsertValueIntoTableRowColumn should ensure schema", () => { @@ -51,7 +51,9 @@ test("upsertValueIntoTableRowColumn should ensure schema", () => { "rows": [ { "c": "d", + "createdAt": "1997-04-13T12:27:00.000Z", "id": "b", + "updatedAt": "1997-04-13T12:27:00.000Z", }, ], } From a53efe9c20f84f00ee52573483e611cae96c5b41 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Mon, 4 Mar 2024 23:06:07 +0100 Subject: [PATCH 22/31] Update deps --- apps/web/package.json | 2 +- packages/eslint-config-evolu/package.json | 4 +- pnpm-lock.yaml | 126 +++++++++++----------- 3 files changed, 66 insertions(+), 66 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index a560ef99a..bb1067d48 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -15,7 +15,7 @@ "@evolu/react": "workspace:*", "clsx": "^2.1.0", "effect": "2.4.1", - "next": "14.1.1", + "next": "14.1.2", "nextra": "^2.13.4", "nextra-theme-docs": "^2.13.4", "react": "^18.2.0", diff --git a/packages/eslint-config-evolu/package.json b/packages/eslint-config-evolu/package.json index a4666e0f8..ab4fe8153 100644 --- a/packages/eslint-config-evolu/package.json +++ b/packages/eslint-config-evolu/package.json @@ -9,12 +9,12 @@ "dependencies": { "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", - "eslint-config-next": "14.1.1", + "eslint-config-next": "14.1.2", "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^1.12.4", "eslint-plugin-jsdoc": "^48.2.0", "eslint-plugin-node": "^11.1.0", - "next": "14.1.1", + "next": "14.1.2", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cd9d6783a..befe0c4de 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -152,14 +152,14 @@ importers: specifier: 2.4.1 version: 2.4.1 next: - specifier: 14.1.1 - version: 14.1.1(react-dom@18.2.0)(react@18.2.0) + specifier: 14.1.2 + version: 14.1.2(react-dom@18.2.0)(react@18.2.0) nextra: specifier: ^2.13.4 - version: 2.13.4(next@14.1.1)(react-dom@18.2.0)(react@18.2.0) + version: 2.13.4(next@14.1.2)(react-dom@18.2.0)(react@18.2.0) nextra-theme-docs: specifier: ^2.13.4 - version: 2.13.4(next@14.1.1)(nextra@2.13.4)(react-dom@18.2.0)(react@18.2.0) + version: 2.13.4(next@14.1.2)(nextra@2.13.4)(react-dom@18.2.0)(react@18.2.0) react: specifier: ^18.2.0 version: 18.2.0 @@ -213,8 +213,8 @@ importers: specifier: ^7.1.1 version: 7.1.1(eslint@8.57.0)(typescript@5.3.3) eslint-config-next: - specifier: 14.1.1 - version: 14.1.1(eslint@8.57.0)(typescript@5.3.3) + specifier: 14.1.2 + version: 14.1.2(eslint@8.57.0)(typescript@5.3.3) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) @@ -228,8 +228,8 @@ importers: specifier: ^11.1.0 version: 11.1.0(eslint@8.57.0) next: - specifier: 14.1.1 - version: 14.1.1(react-dom@18.2.0)(react@18.2.0) + specifier: 14.1.2 + version: 14.1.2(react-dom@18.2.0)(react@18.2.0) react: specifier: ^18.2.0 version: 18.2.0 @@ -3310,18 +3310,18 @@ packages: '@napi-rs/simple-git-win32-x64-msvc': 0.1.16 dev: false - /@next/env@14.1.1: - resolution: {integrity: sha512-7CnQyD5G8shHxQIIg3c7/pSeYFeMhsNbpU/bmvH7ZnDql7mNRgg8O2JZrhrc/soFnfBnKP4/xXNiiSIPn2w8gA==} + /@next/env@14.1.2: + resolution: {integrity: sha512-U0iEG+JF86j6qyu330sfPgsMmDVH8vWVmzZadl+an5EU3o5HqdNytOpM+HsFpl58PmhGBTKx3UmM9c+eoLK0mA==} dev: false - /@next/eslint-plugin-next@14.1.1: - resolution: {integrity: sha512-NP1WoGFnFLpqqCWgGFjnn/sTwUExdPyjeFKRdQP1X/bL/tjAQ/TXDmYqw6vzGaP5NaZ2u6xzg+N/0nd7fOPOGQ==} + /@next/eslint-plugin-next@14.1.2: + resolution: {integrity: sha512-k9h9NfR1joJI48uwdQd/DuOV1mBgcjlmWaX45eAXCFGT96oc+/6SMjO3s7naVtTXqSKjFAgk2GDlW6Hv41ROXQ==} dependencies: glob: 10.3.10 dev: false - /@next/swc-darwin-arm64@14.1.1: - resolution: {integrity: sha512-yDjSFKQKTIjyT7cFv+DqQfW5jsD+tVxXTckSe1KIouKk75t1qZmj/mV3wzdmFb0XHVGtyRjDMulfVG8uCKemOQ==} + /@next/swc-darwin-arm64@14.1.2: + resolution: {integrity: sha512-E4/clgk0ZrYMo9eMRwP/4IO/cvXF1yEYSnGcdGfH+NYTR8bNFy76TSlc1Vb2rK3oaQY4BVHRpx8f/sMN/D5gNw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -3329,8 +3329,8 @@ packages: dev: false optional: true - /@next/swc-darwin-x64@14.1.1: - resolution: {integrity: sha512-KCQmBL0CmFmN8D64FHIZVD9I4ugQsDBBEJKiblXGgwn7wBCSe8N4Dx47sdzl4JAg39IkSN5NNrr8AniXLMb3aw==} + /@next/swc-darwin-x64@14.1.2: + resolution: {integrity: sha512-j8mEOI+ZM0tU9B/L/OGa6F7d9FXYMkog5OWWuhTWzz3iZ91UKIGGpD/ojTNKuejainDMgbqOBTNnLg0jZywM/g==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -3338,8 +3338,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-gnu@14.1.1: - resolution: {integrity: sha512-YDQfbWyW0JMKhJf/T4eyFr4b3tceTorQ5w2n7I0mNVTFOvu6CGEzfwT3RSAQGTi/FFMTFcuspPec/7dFHuP7Eg==} + /@next/swc-linux-arm64-gnu@14.1.2: + resolution: {integrity: sha512-qpRrd5hl6BFTWiFLgHtJmqqQGRMs+ol0MN9pEp0SYoLs3j8OTErPiDMhbKWjMWHGdc2E3kg4RRBV3cSTZiePiQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -3347,8 +3347,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-musl@14.1.1: - resolution: {integrity: sha512-fiuN/OG6sNGRN/bRFxRvV5LyzLB8gaL8cbDH5o3mEiVwfcMzyE5T//ilMmaTrnA8HLMS6hoz4cHOu6Qcp9vxgQ==} + /@next/swc-linux-arm64-musl@14.1.2: + resolution: {integrity: sha512-HAhvVXAv+wnbj0wztT0YnpgJVoHtw1Mv4Y1R/JJcg5yXSU8FsP2uEGUwjQaqPoD76YSZjuKl32YbJlmPgQbLFw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -3356,8 +3356,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-gnu@14.1.1: - resolution: {integrity: sha512-rv6AAdEXoezjbdfp3ouMuVqeLjE1Bin0AuE6qxE6V9g3Giz5/R3xpocHoAi7CufRR+lnkuUjRBn05SYJ83oKNQ==} + /@next/swc-linux-x64-gnu@14.1.2: + resolution: {integrity: sha512-PCWC312woXLWOXiedi1E+fEw6B/ECP1fMiK1nSoGS2E43o56Z8kq4WeJLbJoufFQGVj5ZOKU3jIVyV//3CI4wQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -3365,8 +3365,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-musl@14.1.1: - resolution: {integrity: sha512-YAZLGsaNeChSrpz/G7MxO3TIBLaMN8QWMr3X8bt6rCvKovwU7GqQlDu99WdvF33kI8ZahvcdbFsy4jAFzFX7og==} + /@next/swc-linux-x64-musl@14.1.2: + resolution: {integrity: sha512-KQSKzdWPNrYZjeTPCsepEpagOzU8Nf3Zzu53X1cLsSY6QlOIkYcSgEihRjsMKyeQW4aSvc+nN5pIpC2pLWNSMA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -3374,8 +3374,8 @@ packages: dev: false optional: true - /@next/swc-win32-arm64-msvc@14.1.1: - resolution: {integrity: sha512-1L4mUYPBMvVDMZg1inUYyPvFSduot0g73hgfD9CODgbr4xiTYe0VOMTZzaRqYJYBA9mana0x4eaAaypmWo1r5A==} + /@next/swc-win32-arm64-msvc@14.1.2: + resolution: {integrity: sha512-3b0PouKd09Ulm2T1tjaRnwQj9+UwSsMO680d/sD4XAlm29KkNmVLAEIwWTfb3L+E11Qyw+jdcN3HtbDCg5+vYA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -3383,8 +3383,8 @@ packages: dev: false optional: true - /@next/swc-win32-ia32-msvc@14.1.1: - resolution: {integrity: sha512-jvIE9tsuj9vpbbXlR5YxrghRfMuG0Qm/nZ/1KDHc+y6FpnZ/apsgh+G6t15vefU0zp3WSpTMIdXRUsNl/7RSuw==} + /@next/swc-win32-ia32-msvc@14.1.2: + resolution: {integrity: sha512-CC1gaJY4h+wg6d5r2biggGM6nCFXh/6WEim2VOQI0WrA6easCQi2P2hzWyrU6moQ0g1GOiWzesGc6nn0a92Kgg==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -3392,8 +3392,8 @@ packages: dev: false optional: true - /@next/swc-win32-x64-msvc@14.1.1: - resolution: {integrity: sha512-S6K6EHDU5+1KrBDLko7/c1MNy/Ya73pIAmvKeFwsF4RmBFJSO7/7YeD4FnZ4iBdzE69PpQ4sOMU9ORKeNuxe8A==} + /@next/swc-win32-x64-msvc@14.1.2: + resolution: {integrity: sha512-pfASwanOd+yP3D80O63DuQffrBySZPuB7wRN0IGSRq/0rDm9p/MvvnLzzgP2kSiLOUklOrFYVax7P6AEzjGykQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -5253,7 +5253,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001593 - electron-to-chromium: 1.4.690 + electron-to-chromium: 1.4.691 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) @@ -6433,8 +6433,8 @@ packages: /effect@2.4.1: resolution: {integrity: sha512-YsoMB/EGCohGKFyTPYqaFe2B7UCU2MM303dkoowF8DNOdks/4q/00cyhTbBUmM/0FMDoUPmUi/AJ0Aj3E7vO1A==} - /electron-to-chromium@1.4.690: - resolution: {integrity: sha512-+2OAGjUx68xElQhydpcbqH50hE8Vs2K6TkAeLhICYfndb67CVH0UsZaijmRUE3rHlIxU1u0jxwhgVe6fK3YANA==} + /electron-to-chromium@1.4.691: + resolution: {integrity: sha512-vJ+/LmKja/St8Ofq4JGMFVZuwG7ECU6akjNSn2/g6nv8xbIBOWGlEs+WA8/3XaWkU0Nlyu0iFGgOxC4mpgFjgA==} /elkjs@0.9.2: resolution: {integrity: sha512-2Y/RaA1pdgSHpY0YG4TYuYCD2wh97CRvu22eLG3Kz0pgQ/6KbIFTxsTnDc4MH/6hFlg2L/9qXrDMG0nMjP63iw==} @@ -6678,8 +6678,8 @@ packages: engines: {node: '>=12'} dev: false - /eslint-config-next@14.1.1(eslint@8.57.0)(typescript@5.3.3): - resolution: {integrity: sha512-OLyw2oHzwE0M0EODGYMbjksDQKSshQWBzYY+Nkoxoe3+Q5G0lpb9EkekyDk7Foz9BMfotbYShJrgYoBEAVqU4Q==} + /eslint-config-next@14.1.2(eslint@8.57.0)(typescript@5.3.3): + resolution: {integrity: sha512-g46mlgWmHoWhHuDbaQS8PLNQtBkVkiQMnVLhFcqnPSXN2I+R4Obom3ihCIQuNLbjVUgiFFHqmEwwtDuWv1wYKA==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 typescript: '>=3.3.1' @@ -6687,7 +6687,7 @@ packages: typescript: optional: true dependencies: - '@next/eslint-plugin-next': 14.1.1 + '@next/eslint-plugin-next': 14.1.2 '@rushstack/eslint-patch': 1.7.2 '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.3.3) eslint: 8.57.0 @@ -10522,32 +10522,32 @@ packages: - supports-color dev: false - /next-seo@6.5.0(next@14.1.1)(react-dom@18.2.0)(react@18.2.0): + /next-seo@6.5.0(next@14.1.2)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-MfzUeWTN/x/rsKp/1n0213eojO97lIl0unxqbeCY+6pAucViHDA8GSLRRcXpgjsSmBxfCFdfpu7LXbt4ANQoNQ==} peerDependencies: next: ^8.1.1-canary.54 || >=9.0.0 react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - next: 14.1.1(react-dom@18.2.0)(react@18.2.0) + next: 14.1.2(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /next-themes@0.2.1(next@14.1.1)(react-dom@18.2.0)(react@18.2.0): + /next-themes@0.2.1(next@14.1.2)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==} peerDependencies: next: '*' react: '*' react-dom: '*' dependencies: - next: 14.1.1(react-dom@18.2.0)(react@18.2.0) + next: 14.1.2(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /next@14.1.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-McrGJqlGSHeaz2yTRPkEucxQKe5Zq7uPwyeHNmJaZNY4wx9E9QdxmTp310agFRoMuIYgQrCrT3petg13fSVOww==} + /next@14.1.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-p4RfNmopqkzRP1uUyBJnHii+qMg71f2udWhTTZopBB8b3T5QXNzn7yO+LCYHPWZG2kAvEn4l4neyJHqkXvo2wg==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: @@ -10561,7 +10561,7 @@ packages: sass: optional: true dependencies: - '@next/env': 14.1.1 + '@next/env': 14.1.2 '@swc/helpers': 0.5.2 busboy: 1.6.0 caniuse-lite: 1.0.30001593 @@ -10571,21 +10571,21 @@ packages: react-dom: 18.2.0(react@18.2.0) styled-jsx: 5.1.1(react@18.2.0) optionalDependencies: - '@next/swc-darwin-arm64': 14.1.1 - '@next/swc-darwin-x64': 14.1.1 - '@next/swc-linux-arm64-gnu': 14.1.1 - '@next/swc-linux-arm64-musl': 14.1.1 - '@next/swc-linux-x64-gnu': 14.1.1 - '@next/swc-linux-x64-musl': 14.1.1 - '@next/swc-win32-arm64-msvc': 14.1.1 - '@next/swc-win32-ia32-msvc': 14.1.1 - '@next/swc-win32-x64-msvc': 14.1.1 + '@next/swc-darwin-arm64': 14.1.2 + '@next/swc-darwin-x64': 14.1.2 + '@next/swc-linux-arm64-gnu': 14.1.2 + '@next/swc-linux-arm64-musl': 14.1.2 + '@next/swc-linux-x64-gnu': 14.1.2 + '@next/swc-linux-x64-musl': 14.1.2 + '@next/swc-win32-arm64-msvc': 14.1.2 + '@next/swc-win32-ia32-msvc': 14.1.2 + '@next/swc-win32-x64-msvc': 14.1.2 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros dev: false - /nextra-theme-docs@2.13.4(next@14.1.1)(nextra@2.13.4)(react-dom@18.2.0)(react@18.2.0): + /nextra-theme-docs@2.13.4(next@14.1.2)(nextra@2.13.4)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-2XOoMfwBCTYBt8ds4ZHftt9Wyf2XsykiNo02eir/XEYB+sGeUoE77kzqfidjEOKCSzOHYbK9BDMcg2+B/2vYRw==} peerDependencies: next: '>=9.5.3' @@ -10602,17 +10602,17 @@ packages: git-url-parse: 13.1.1 intersection-observer: 0.12.2 match-sorter: 6.3.4 - next: 14.1.1(react-dom@18.2.0)(react@18.2.0) - next-seo: 6.5.0(next@14.1.1)(react-dom@18.2.0)(react@18.2.0) - next-themes: 0.2.1(next@14.1.1)(react-dom@18.2.0)(react@18.2.0) - nextra: 2.13.4(next@14.1.1)(react-dom@18.2.0)(react@18.2.0) + next: 14.1.2(react-dom@18.2.0)(react@18.2.0) + next-seo: 6.5.0(next@14.1.2)(react-dom@18.2.0)(react@18.2.0) + next-themes: 0.2.1(next@14.1.2)(react-dom@18.2.0)(react@18.2.0) + nextra: 2.13.4(next@14.1.2)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) scroll-into-view-if-needed: 3.1.0 zod: 3.22.4 dev: false - /nextra@2.13.4(next@14.1.1)(react-dom@18.2.0)(react@18.2.0): + /nextra@2.13.4(next@14.1.2)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-7of2rSBxuUa3+lbMmZwG9cqgftcoNOVQLTT6Rxf3EhBR9t1EI7b43dted8YoqSNaigdE3j1CoyNkX8N/ZzlEpw==} engines: {node: '>=16'} peerDependencies: @@ -10632,7 +10632,7 @@ packages: gray-matter: 4.0.3 katex: 0.16.9 lodash.get: 4.4.2 - next: 14.1.1(react-dom@18.2.0)(react@18.2.0) + next: 14.1.2(react-dom@18.2.0)(react@18.2.0) next-mdx-remote: 4.4.1(react-dom@18.2.0)(react@18.2.0) p-limit: 3.1.0 react: 18.2.0 @@ -13559,7 +13559,7 @@ packages: debug: 4.3.4 pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.1.4(@types/node@20.11.24) + vite: 5.1.5(@types/node@20.11.24) transitivePeerDependencies: - '@types/node' - less @@ -13571,8 +13571,8 @@ packages: - terser dev: true - /vite@5.1.4(@types/node@20.11.24): - resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==} + /vite@5.1.5(@types/node@20.11.24): + resolution: {integrity: sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -13650,7 +13650,7 @@ packages: strip-literal: 2.0.0 tinybench: 2.6.0 tinypool: 0.8.2 - vite: 5.1.4(@types/node@20.11.24) + vite: 5.1.5(@types/node@20.11.24) vite-node: 1.3.1(@types/node@20.11.24) why-is-node-running: 2.2.2 transitivePeerDependencies: From a5011e27e2090aee3cac6546a7efcc4ec7d09458 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Mon, 4 Mar 2024 23:26:44 +0100 Subject: [PATCH 23/31] Create hungry-stingrays-explode.md --- .changeset/hungry-stingrays-explode.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/hungry-stingrays-explode.md diff --git a/.changeset/hungry-stingrays-explode.md b/.changeset/hungry-stingrays-explode.md new file mode 100644 index 000000000..4e06a05c6 --- /dev/null +++ b/.changeset/hungry-stingrays-explode.md @@ -0,0 +1,7 @@ +--- +"@evolu/react-native": major +--- + +The new SQLite database filename + +It's configurable by the Config name property now. From 70b4eb7a80d00990599ad3e966832ede1a9ae2bc Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Mon, 4 Mar 2024 23:33:45 +0100 Subject: [PATCH 24/31] Update peer dependencies --- .changeset/real-laws-stare.md | 5 +++++ packages/evolu-server/package.json | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 .changeset/real-laws-stare.md diff --git a/.changeset/real-laws-stare.md b/.changeset/real-laws-stare.md new file mode 100644 index 000000000..9f4e59645 --- /dev/null +++ b/.changeset/real-laws-stare.md @@ -0,0 +1,5 @@ +--- +"@evolu/server": patch +--- + +Update peer dependencies diff --git a/packages/evolu-server/package.json b/packages/evolu-server/package.json index fe9994eff..73dda9dea 100644 --- a/packages/evolu-server/package.json +++ b/packages/evolu-server/package.json @@ -48,7 +48,8 @@ "vitest": "^1.3.1" }, "peerDependencies": { - "@evolu/common": "^3.1.7" + "@evolu/common": "^3.1.7", + "effect": "2.4.1" }, "publishConfig": { "access": "public" From 8175b6fe943d4fd3a73cccd27fb72bfb9a6612e6 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Mon, 4 Mar 2024 23:33:49 +0100 Subject: [PATCH 25/31] Create green-brooms-sleep.md --- .changeset/green-brooms-sleep.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/green-brooms-sleep.md diff --git a/.changeset/green-brooms-sleep.md b/.changeset/green-brooms-sleep.md new file mode 100644 index 000000000..6a5af9230 --- /dev/null +++ b/.changeset/green-brooms-sleep.md @@ -0,0 +1,5 @@ +--- +"@evolu/common-react": patch +--- + +Update @types/react peer dependency From c29819482d2db25ad1d04b711e9473e7622abb92 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Mon, 4 Mar 2024 23:37:25 +0100 Subject: [PATCH 26/31] Update green-brooms-sleep.md --- .changeset/green-brooms-sleep.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/green-brooms-sleep.md b/.changeset/green-brooms-sleep.md index 6a5af9230..66223b1a5 100644 --- a/.changeset/green-brooms-sleep.md +++ b/.changeset/green-brooms-sleep.md @@ -2,4 +2,4 @@ "@evolu/common-react": patch --- -Update @types/react peer dependency +Update peer dependencies From 001acce01501b026d43519c31823431064a40b5e Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Mon, 4 Mar 2024 23:37:28 +0100 Subject: [PATCH 27/31] Update short-moons-end.md --- .changeset/short-moons-end.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/short-moons-end.md b/.changeset/short-moons-end.md index 92430ec2e..789d0b3a1 100644 --- a/.changeset/short-moons-end.md +++ b/.changeset/short-moons-end.md @@ -7,4 +7,4 @@ "@evolu/server": patch --- -Update peer deps +Update peer dependencies From 637b771bc5162137a9e77959dc52ec1da3d4d441 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Mon, 4 Mar 2024 23:59:44 +0100 Subject: [PATCH 28/31] Create lazy-sloths-matter.md --- .changeset/lazy-sloths-matter.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .changeset/lazy-sloths-matter.md diff --git a/.changeset/lazy-sloths-matter.md b/.changeset/lazy-sloths-matter.md new file mode 100644 index 000000000..8e6f14f84 --- /dev/null +++ b/.changeset/lazy-sloths-matter.md @@ -0,0 +1,13 @@ +--- +"@evolu/common-web": major +--- + +6x faster update, 2x faster sync, and no COOP/COEP headers + +Sync is 2x faster because Evolu doesn't create sync messages for createdAt and updatedAt columns anymore. They are inferred from the sync message timestamp instead. This change also made updates 2x faster. + +@evolu/common-web is roughly 3x faster because we switched from OPFS via sqlite3_vfs to OPFS SyncAccessHandle Pool VFS. + +The "opfs-sahpool" also does not require COOP/COEP HTTP headers (and associated restrictions), and it works on all major browsers released since March 2023. + +This change was challenging because, by default, the "opfs-sahpool" does not support multiple simultaneous connections and can be instantiated only within a web worker and only within one tab of the same origin. Evolu uses Web Locks and BroadcastChannel to re-enable multiple tabs functionality. From ab50aa67a9c3166c26944f6032bd265e9db15f2a Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Tue, 5 Mar 2024 00:02:14 +0100 Subject: [PATCH 29/31] Update lazy-sloths-matter.md --- .changeset/lazy-sloths-matter.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.changeset/lazy-sloths-matter.md b/.changeset/lazy-sloths-matter.md index 8e6f14f84..ce2ede8a0 100644 --- a/.changeset/lazy-sloths-matter.md +++ b/.changeset/lazy-sloths-matter.md @@ -11,3 +11,5 @@ Sync is 2x faster because Evolu doesn't create sync messages for createdAt and u The "opfs-sahpool" also does not require COOP/COEP HTTP headers (and associated restrictions), and it works on all major browsers released since March 2023. This change was challenging because, by default, the "opfs-sahpool" does not support multiple simultaneous connections and can be instantiated only within a web worker and only within one tab of the same origin. Evolu uses Web Locks and BroadcastChannel to re-enable multiple tabs functionality. + +It's a breaking change because we had to remove support for LocalStore. Fortunately, we don't need it anymore, and without LocalStorare, Evolu can support separated SQLite instances. From 2fe4e16d76e57c7991fed9f88f6f478712a1f2a1 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Tue, 5 Mar 2024 00:06:21 +0100 Subject: [PATCH 30/31] Create afraid-turkeys-switch.md --- .changeset/afraid-turkeys-switch.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/afraid-turkeys-switch.md diff --git a/.changeset/afraid-turkeys-switch.md b/.changeset/afraid-turkeys-switch.md new file mode 100644 index 000000000..b5f8bd78c --- /dev/null +++ b/.changeset/afraid-turkeys-switch.md @@ -0,0 +1,7 @@ +--- +"@evolu/common": major +--- + +Add Config name property and remove LocalStorage support. + +It's a breaking change only because PlatformName was restricted. There is no change in sync protocol so that all data can be safely restored. From bb60c82cb7567c745923e1b4ce19067fb973b8af Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Tue, 5 Mar 2024 00:19:04 +0100 Subject: [PATCH 31/31] Fix merge conflicts --- packages/evolu-common-react/package.json | 2 +- packages/evolu-server/package.json | 2 +- pnpm-lock.yaml | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/evolu-common-react/package.json b/packages/evolu-common-react/package.json index a7b5cdecd..0119b3724 100644 --- a/packages/evolu-common-react/package.json +++ b/packages/evolu-common-react/package.json @@ -49,7 +49,7 @@ "vitest": "^1.3.1" }, "peerDependencies": { - "@evolu/common": "^3.1.7", + "@evolu/common": "^3.1.8", "@types/react": "^18.2.62", "react": "^18.2.0" }, diff --git a/packages/evolu-server/package.json b/packages/evolu-server/package.json index 73dda9dea..6780f0c58 100644 --- a/packages/evolu-server/package.json +++ b/packages/evolu-server/package.json @@ -48,7 +48,7 @@ "vitest": "^1.3.1" }, "peerDependencies": { - "@evolu/common": "^3.1.7", + "@evolu/common": "^3.1.8", "effect": "2.4.1" }, "publishConfig": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index befe0c4de..fa3daa3e0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5253,7 +5253,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001593 - electron-to-chromium: 1.4.691 + electron-to-chromium: 1.4.692 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) @@ -6433,8 +6433,8 @@ packages: /effect@2.4.1: resolution: {integrity: sha512-YsoMB/EGCohGKFyTPYqaFe2B7UCU2MM303dkoowF8DNOdks/4q/00cyhTbBUmM/0FMDoUPmUi/AJ0Aj3E7vO1A==} - /electron-to-chromium@1.4.691: - resolution: {integrity: sha512-vJ+/LmKja/St8Ofq4JGMFVZuwG7ECU6akjNSn2/g6nv8xbIBOWGlEs+WA8/3XaWkU0Nlyu0iFGgOxC4mpgFjgA==} + /electron-to-chromium@1.4.692: + resolution: {integrity: sha512-d5rZRka9n2Y3MkWRN74IoAsxR0HK3yaAt7T50e3iT9VZmCCQDT3geXUO5ZRMhDToa1pkCeQXuNo+0g+NfDOVPA==} /elkjs@0.9.2: resolution: {integrity: sha512-2Y/RaA1pdgSHpY0YG4TYuYCD2wh97CRvu22eLG3Kz0pgQ/6KbIFTxsTnDc4MH/6hFlg2L/9qXrDMG0nMjP63iw==}