diff --git a/apps/tui/package.json b/apps/tui/package.json index b4e7356..20d3c4f 100644 --- a/apps/tui/package.json +++ b/apps/tui/package.json @@ -9,11 +9,14 @@ "react": "*" }, "dependencies": { + "@effect/platform": "^0.93.2", + "@effect/platform-bun": "^0.83.0", "@money/shared": "workspace:*", "@money/ui": "workspace:*", "@opentui/core": "^0.1.39", "@opentui/react": "^0.1.39", "@types/qrcode": "^1.5.6", + "effect": "^3.19.4", "qrcode": "^1.5.4", "react-native": "^0.82.1", "react-native-opentui": "workspace:*" diff --git a/apps/tui/src/auth.ts b/apps/tui/src/auth.ts new file mode 100644 index 0000000..603c0f3 --- /dev/null +++ b/apps/tui/src/auth.ts @@ -0,0 +1,136 @@ +import { Context, Data, Effect, Layer, Schema, Console, Schedule, Match, Ref, Duration } from "effect"; +import { FileSystem } from "@effect/platform"; +import { config } from "./config"; +import { AuthState } from "./schema"; +import { authClient } from "@/lib/auth-client"; +import type { BetterFetchResponse } from "@better-fetch/fetch"; + +const CLIENT_ID = "koon-family"; + +const getFromFromDisk = Effect.gen(function* () { + const fs = yield* FileSystem.FileSystem; + const content = yield* fs.readFileString(config.authPath); + return yield* Schema.decode(Schema.parseJson(AuthState))(content); +}); + + +class AuthClientErrorString extends Data.TaggedError("AuthClientErrorString")<{ + errorString: string, +}> {}; + + +type ErrorType = { [key in keyof ((E extends Record ? E : { + message?: string; +}) & { + status: number; + statusText: string; +})]: ((E extends Record ? E : { + message?: string; +}) & { + status: number; + statusText: string; +})[key]; }; + +class AuthClientError extends Data.TaggedError("AuthClientError")<{ + error: T, +}> {}; + +export class AuthClient extends Context.Tag("AuthClient")() {}; + +export interface AuthClientImpl { + use: ( + fn: (client: typeof authClient) => Promise>, + ) => Effect.Effect> | AuthClientErrorString, never> +} + + +export const make = () => + Effect.gen(function* () { + return AuthClient.of({ + use: (fn) => + Effect.gen(function* () { + const { data, error } = yield* Effect.tryPromise({ + try: () => fn(authClient), + catch: () => new AuthClientErrorString({ errorString: "Bad" }), + }); + if (error != null) return yield* Effect.fail(new AuthClientError({ error })); + if (data == null) return yield* Effect.fail(new AuthClientErrorString({ errorString: "No data" })); + return data; + }) + }) + }) + +export const layer = () => Layer.scoped(AuthClient, make()); + +const pollToken = ({ device_code }: { device_code: string }) => Effect.gen(function* () { + const auth = yield* AuthClient; + const intervalRef = yield* Ref.make(5); + + const tokenEffect = auth.use(client => { + Console.debug("Fetching"); + + return client.device.token({ + grant_type: "urn:ietf:params:oauth:grant-type:device_code", + device_code, + client_id: CLIENT_ID, + fetchOptions: { headers: { "user-agent": "CLI" } }, + }) + } + ); + + return yield* tokenEffect + .pipe( + Effect.tapError(error => + error._tag == "AuthClientError" && error.error.error == "slow_down" + ? Ref.update(intervalRef, current => { + Console.debug("updating delay to ", current + 5); + return current + 5 + }) + : Effect.void + ), + Effect.retry({ + schedule: Schedule.addDelayEffect( + Schedule.recurWhile>(error => + error._tag == "AuthClientError" && + (error.error.error == "authorization_pending" || error.error.error == "slow_down") + ), + () => Ref.get(intervalRef).pipe(Effect.map(Duration.seconds)) + ) + }) + + ); + +}); + +const requestAuth = Effect.gen(function* () { + const auth = yield* AuthClient; + const { device_code, user_code } = yield* auth.use(client => client.device.code({ + client_id: CLIENT_ID, + scope: "openid profile email", + })); + + console.log(`Please use the code: ${user_code}`); + + const { access_token } = yield* pollToken({ device_code }); + + const sessionData = yield* auth.use(client => client.getSession({ + fetchOptions: { + auth: { + type: "Bearer", + token: access_token, + } + } + })); + if (sessionData == null) return yield* Effect.fail("Session was null"); + + const fs = yield* FileSystem.FileSystem; + yield* fs.writeFileString(config.authPath, JSON.stringify(sessionData)); + + return sessionData; +}); + +export const getAuth = Effect.gen(function* () { + return yield* getFromFromDisk.pipe( + Effect.catchAll(() => requestAuth) + ); +}); diff --git a/apps/tui/src/auth.tsx b/apps/tui/src/auth.tsx deleted file mode 100644 index cfeebc3..0000000 --- a/apps/tui/src/auth.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import { authClient } from "@/lib/auth-client"; -import { use, useEffect, useState } from "react"; -import { AuthContext } from "./auth/context"; -import * as Code from "./auth/code"; - -const CLIENT_ID = "koon-family"; - -export function Auth() { - const { setAuth } = use(AuthContext); - - const [code, setCode] = useState(); - const [error, setError] = useState(); - - const pollForToken = async (code: string, interval = 5) => { - const { data, error } = await authClient.device.token({ - grant_type: "urn:ietf:params:oauth:grant-type:device_code", - device_code: code, - client_id: CLIENT_ID, - fetchOptions: { headers: { "user-agent": "My CLI" } }, - }); - - if (data?.access_token) { - const { data: sessionData, error } = await authClient.getSession({ - fetchOptions: { - auth: { - type: "Bearer", - token: data.access_token - } - } - }); - if (error) return setError(error.message); - if (!sessionData) return setError("No data"); - - setAuth({ - token: data.access_token, - auth: sessionData, - }); - } - - if (error) { - if (error.error === "authorization_pending") { - setTimeout(() => pollForToken(code, interval), interval * 1000); - } else if (error.error === "slow_down") { - setTimeout(() => pollForToken(code, interval + 5), (interval + 5) * 1000); - } else { - setError(`${error}`); - } - } - } - - async function getCode() { - try { - const { data, error } = await authClient.device.code({ - client_id: CLIENT_ID, - scope: "openid profile email", - }); - if (error) return setError(error.error_description); - if (!data) return setError("No data returned"); - - setCode(data.user_code); - - pollForToken(data?.device_code); - - } catch (e) { - setError(`${e}`); - } - } - - - useEffect(() => { - getCode(); - }, []); - - if (error) return - - return !code ? : ; -} - - diff --git a/apps/tui/src/auth/code.tsx b/apps/tui/src/auth/code.tsx deleted file mode 100644 index 56365ea..0000000 --- a/apps/tui/src/auth/code.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { QR } from "@/util/qr"; -import type { ReactNode } from "react"; - -function CodeDisplay({ children }: { children: ReactNode }) { - return ( - - - {children} - - - ); -} - - -export function Display({ code }: { code: string }) { - const URL = `https://money.koon.us/approve?code=${code}`; - - return - {QR(URL)} - - Welcome to Koon Money - Go to: {URL} - Code: {code} - - -} - -export function Loading() { - return - - - Welcome to Koon Money - You need to login first - Loading login information - - -} - -export function Error({ msg }: { msg: string }) { - return - - Could not login - {msg} - - -} - - diff --git a/apps/tui/src/auth/context.ts b/apps/tui/src/auth/context.ts deleted file mode 100644 index 5c54944..0000000 --- a/apps/tui/src/auth/context.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { type AuthData } from "@money/shared/auth"; -import { createContext } from "react"; - -export type AuthType = { - auth: AuthData; - token: string; -}; - -export type AuthContextType = { - auth: AuthType | null; - setAuth: (auth: AuthContextType['auth']) => void; -}; - -export const AuthContext = createContext({ - auth: null, - setAuth: () => {} -}); - - diff --git a/apps/tui/src/config.ts b/apps/tui/src/config.ts new file mode 100644 index 0000000..74bc9e8 --- /dev/null +++ b/apps/tui/src/config.ts @@ -0,0 +1,9 @@ +import { join } from "path"; +import { homedir } from "os"; + +const PATH = join(homedir(), ".local", "share", "money"); +const AUTH_PATH = join(PATH, "auth.json"); + +export const config = { + authPath: AUTH_PATH, +}; diff --git a/apps/tui/src/index.tsx b/apps/tui/src/index.tsx index 444ef90..f386c76 100644 --- a/apps/tui/src/index.tsx +++ b/apps/tui/src/index.tsx @@ -3,61 +3,36 @@ import { createRoot } from "@opentui/react"; import { App, type Route } from "@money/ui"; import { ZeroProvider } from "@rocicorp/zero/react"; import { schema } from '@money/shared'; -import { use, useState } from "react"; -import { writeFileSync, readFileSync, existsSync, rmSync, mkdirSync } from "fs"; -import { join } from "path"; -import { homedir } from "os"; -import { Auth } from "./auth"; -import { AuthContext, type AuthType } from "./auth/context"; +import { useState } from "react"; +import { AuthClient, getAuth, layer } from "./auth"; +import { Effect, Layer } from "effect"; +import { BunContext } from "@effect/platform-bun"; +import type { AuthData } from "./schema"; const userID = "anon"; const server = "http://laptop:4848"; -// const auth = undefined; -const PATH = join(homedir(), ".local", "share", "money"); - -function Main({ auth: initalAuth }: { auth: AuthType | null }) { - const [auth, setAuth] = useState(initalAuth); +function Main({ auth }: { auth: AuthData }) { + const [route, setRoute] = useState("/"); return ( - { - if (auth) { - mkdirSync(PATH, { recursive: true }); - writeFileSync(PATH + "/auth.json", JSON.stringify(auth)); - setAuth(auth); - } else { - rmSync(PATH + "token"); - } - } }}> - {auth ? : } - - ); -} - - - -function Authed() { - const { auth } = use(AuthContext); - return ( - - + + ); } -function Router() { - const { auth } = use(AuthContext); - const [route, setRoute] = useState("/"); - return ( - - ); -} +const auth = await Effect.runPromise( + getAuth.pipe( + Effect.provide(BunContext.layer), + Effect.provide(layer()), + ) +); const renderer = await createCliRenderer(); -const auth = existsSync(PATH + "/auth.json") ? JSON.parse(readFileSync(PATH + "/auth.json", 'utf8')) as AuthType : null; createRoot(renderer).render(
); diff --git a/apps/tui/src/schema.ts b/apps/tui/src/schema.ts new file mode 100644 index 0000000..8826b38 --- /dev/null +++ b/apps/tui/src/schema.ts @@ -0,0 +1,31 @@ +import { Schema } from "effect"; + +const SessionSchema = Schema.Struct({ + expiresAt: Schema.DateFromString, + token: Schema.String, + createdAt: Schema.DateFromString, + updatedAt: Schema.DateFromString, + ipAddress: Schema.optional(Schema.NullishOr(Schema.String)), + userAgent: Schema.optional(Schema.NullishOr(Schema.String)), + userId: Schema.String, + id: Schema.String, +}); + +const UserSchema = Schema.Struct({ + name: Schema.String, + email: Schema.String, + emailVerified: Schema.Boolean, + image: Schema.optional(Schema.NullishOr(Schema.String)), + createdAt: Schema.DateFromString, + updatedAt: Schema.DateFromString, + id: Schema.String, +}); + + +export const AuthState = Schema.Struct({ + session: SessionSchema, + user: UserSchema, +}); + +export type AuthData = typeof AuthState.Type; + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 402410c..6536ccf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -162,6 +162,12 @@ importers: apps/tui: dependencies: + '@effect/platform': + specifier: ^0.93.2 + version: 0.93.2(effect@3.19.4) + '@effect/platform-bun': + specifier: ^0.83.0 + version: 0.83.0(@effect/cluster@0.52.10(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/sql@0.48.0(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/workflow@0.12.5(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/sql@0.48.0(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(effect@3.19.4) '@money/shared': specifier: workspace:* version: link:../../packages/shared @@ -177,6 +183,9 @@ importers: '@types/qrcode': specifier: ^1.5.6 version: 1.5.6 + effect: + specifier: ^3.19.4 + version: 3.19.4 qrcode: specifier: ^1.5.4 version: 1.5.4 @@ -789,6 +798,72 @@ packages: peerDependencies: '@noble/ciphers': ^1.0.0 + '@effect/cluster@0.52.10': + resolution: {integrity: sha512-csmU+4h2MXdxsFKF5eY4N52LDcjdpQp//QivOKNL9yNySUBVz/UrBr1FRgvbfHk+sxY03SNcoTNgkcbUaIp2Pg==} + peerDependencies: + '@effect/platform': ^0.93.2 + '@effect/rpc': ^0.72.1 + '@effect/sql': ^0.48.0 + '@effect/workflow': ^0.12.5 + effect: ^3.19.4 + + '@effect/experimental@0.57.1': + resolution: {integrity: sha512-18UIT64L0F0Kd6MO+bJAIcHhZGiuNeTpiM0GwMwe206r+rmFdIB6v/fd4BIOkfYJ1EFxvm/lt4wRjTtSn+6kfw==} + peerDependencies: + '@effect/platform': ^0.93.1 + effect: ^3.19.3 + ioredis: ^5 + lmdb: ^3 + peerDependenciesMeta: + ioredis: + optional: true + lmdb: + optional: true + + '@effect/platform-bun@0.83.0': + resolution: {integrity: sha512-cjE4b0TRva/BXKDzYEB12h32AO0nidk6qN99j8IIOivfFlTUsuI2o36wKg8zxiMV6tdeylXIORxTD+Zvvz1XkQ==} + peerDependencies: + '@effect/cluster': ^0.52.0 + '@effect/platform': ^0.93.0 + '@effect/rpc': ^0.72.1 + '@effect/sql': ^0.48.0 + effect: ^3.19.0 + + '@effect/platform-node-shared@0.53.0': + resolution: {integrity: sha512-xqhYyUYotVUJi7Tqd/iM+tqEoNm6fVowcPm9naxKZCa6WPD6TnRfaogxjkB3yNBnPY63Ya/sIkfkeZXA3MwF3w==} + peerDependencies: + '@effect/cluster': ^0.52.0 + '@effect/platform': ^0.93.0 + '@effect/rpc': ^0.72.1 + '@effect/sql': ^0.48.0 + effect: ^3.19.0 + + '@effect/platform@0.93.2': + resolution: {integrity: sha512-IFWF2xuz37tZbyEsf3hwBlcYYqbqJho+ZM871CG92lWJSjcTgvmjCy77qnV0QhTWVdh9BMs12QKzQCMlqz4cJQ==} + peerDependencies: + effect: ^3.19.3 + + '@effect/rpc@0.72.1': + resolution: {integrity: sha512-crpiAxDvFxM/fGhLuAgB1V8JOtfCm8/6ZdOP4MIdkz14I/ff3LdLJpf8hHJpYIbwYXypglAeAaHpfuZOt5f+SA==} + peerDependencies: + '@effect/platform': ^0.93.0 + effect: ^3.19.0 + + '@effect/sql@0.48.0': + resolution: {integrity: sha512-tubdizHriDwzHUnER9UsZ/0TtF6O2WJckzeYDbVSRPeMkrpdpyEzEsoKctechTm65B3Bxy6JIixGPg2FszY72A==} + peerDependencies: + '@effect/experimental': ^0.57.0 + '@effect/platform': ^0.93.0 + effect: ^3.19.0 + + '@effect/workflow@0.12.5': + resolution: {integrity: sha512-9vsXqprb30FfWU84lwOi13bJpVXgl0q58hb5tpWb2uTDFmLHEoF8a/P3Io2dD47ZA/4VGf47NCkj+15QLIeGeQ==} + peerDependencies: + '@effect/experimental': ^0.57.1 + '@effect/platform': ^0.93.2 + '@effect/rpc': ^0.72.1 + effect: ^3.19.3 + '@egjs/hammerjs@2.0.17': resolution: {integrity: sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==} engines: {node: '>=0.8.0'} @@ -1670,6 +1745,36 @@ packages: '@levischuck/tiny-cbor@0.2.11': resolution: {integrity: sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow==} + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': + resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==} + cpu: [arm64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': + resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==} + cpu: [x64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': + resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==} + cpu: [arm64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': + resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==} + cpu: [arm] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': + resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==} + cpu: [x64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': + resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==} + cpu: [x64] + os: [win32] + '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} @@ -2234,6 +2339,88 @@ packages: peerDependencies: react: '>=19.0.0' + '@parcel/watcher-android-arm64@2.5.1': + resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.1': + resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.1': + resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.1': + resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.1': + resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.1': + resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.1': + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.1': + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.1': + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.5.1': + resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.1': + resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.1': + resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.1': + resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + engines: {node: '>= 10.0.0'} + '@peculiar/asn1-android@2.5.0': resolution: {integrity: sha512-t8A83hgghWQkcneRsgGs2ebAlRe54ns88p7ouv8PW2tzF1nAW4yHcL4uZKrFpIU+uszIRzTkcCuie37gpkId0A==} @@ -2776,6 +2963,9 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} @@ -3753,6 +3943,11 @@ packages: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -3920,6 +4115,9 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + effect@3.19.4: + resolution: {integrity: sha512-gApFffMwpDVgmw/FzCaYWt6zw4m0xAnQf5+cPS0+Sl85AxfeovJeEIsiEQVlk+ZvtBYcoPXxi65GIyruzanQ5g==} + electron-to-chromium@1.5.249: resolution: {integrity: sha512-5vcfL3BBe++qZ5kuFhD/p8WOM1N9m3nwvJPULJx+4xf2usSlZFJ0qoNYO2fOX4hi3ocuDcmDobtA+5SFr4OmBg==} @@ -4343,6 +4541,10 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + fast-check@3.23.2: + resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} + engines: {node: '>=8.0.0'} + fast-decode-uri-component@1.0.1: resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} @@ -4423,6 +4625,9 @@ packages: resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} engines: {node: '>= 0.8'} + find-my-way-ts@0.1.6: + resolution: {integrity: sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA==} + find-my-way@9.3.0: resolution: {integrity: sha512-eRoFWQw+Yv2tuYlK2pjFS2jGXSxSppAs3hSQjfxVKxM5amECzIgYYc1FEI8ZmhSh/Ig+FrKEz43NLRKJjYCZVg==} engines: {node: '>=20'} @@ -5381,6 +5586,16 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + msgpackr-extract@3.0.3: + resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} + hasBin: true + + msgpackr@1.11.5: + resolution: {integrity: sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA==} + + multipasta@0.2.7: + resolution: {integrity: sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA==} + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -5424,6 +5639,9 @@ packages: resolution: {integrity: sha512-LyPuZJcI9HVwzXK1GPxWNzrr+vr8Hp/3UqlmWxxh8p54U1ZbclOqbSog9lWHaCX+dBaiGi6n/hIX+mKu74GmPA==} engines: {node: '>=10'} + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -5437,6 +5655,10 @@ packages: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} + node-gyp-build-optional-packages@5.2.2: + resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} + hasBin: true + node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -5838,6 +6060,9 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + pvtsutils@1.3.6: resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} @@ -6746,6 +6971,10 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + uuid@7.0.3: resolution: {integrity: sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==} hasBin: true @@ -7666,6 +7895,74 @@ snapshots: dependencies: '@noble/ciphers': 1.3.0 + '@effect/cluster@0.52.10(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/sql@0.48.0(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/workflow@0.12.5(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(effect@3.19.4))(effect@3.19.4)': + dependencies: + '@effect/platform': 0.93.2(effect@3.19.4) + '@effect/rpc': 0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4) + '@effect/sql': 0.48.0(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4) + '@effect/workflow': 0.12.5(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(effect@3.19.4) + effect: 3.19.4 + + '@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4)': + dependencies: + '@effect/platform': 0.93.2(effect@3.19.4) + effect: 3.19.4 + uuid: 11.1.0 + + '@effect/platform-bun@0.83.0(@effect/cluster@0.52.10(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/sql@0.48.0(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/workflow@0.12.5(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/sql@0.48.0(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(effect@3.19.4)': + dependencies: + '@effect/cluster': 0.52.10(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/sql@0.48.0(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/workflow@0.12.5(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(effect@3.19.4))(effect@3.19.4) + '@effect/platform': 0.93.2(effect@3.19.4) + '@effect/platform-node-shared': 0.53.0(@effect/cluster@0.52.10(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/sql@0.48.0(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/workflow@0.12.5(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/sql@0.48.0(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(effect@3.19.4) + '@effect/rpc': 0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4) + '@effect/sql': 0.48.0(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4) + effect: 3.19.4 + multipasta: 0.2.7 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@effect/platform-node-shared@0.53.0(@effect/cluster@0.52.10(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/sql@0.48.0(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/workflow@0.12.5(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/sql@0.48.0(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(effect@3.19.4)': + dependencies: + '@effect/cluster': 0.52.10(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/sql@0.48.0(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/workflow@0.12.5(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(effect@3.19.4))(effect@3.19.4) + '@effect/platform': 0.93.2(effect@3.19.4) + '@effect/rpc': 0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4) + '@effect/sql': 0.48.0(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4) + '@parcel/watcher': 2.5.1 + effect: 3.19.4 + multipasta: 0.2.7 + ws: 8.18.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@effect/platform@0.93.2(effect@3.19.4)': + dependencies: + effect: 3.19.4 + find-my-way-ts: 0.1.6 + msgpackr: 1.11.5 + multipasta: 0.2.7 + + '@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4)': + dependencies: + '@effect/platform': 0.93.2(effect@3.19.4) + effect: 3.19.4 + msgpackr: 1.11.5 + + '@effect/sql@0.48.0(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4)': + dependencies: + '@effect/experimental': 0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4) + '@effect/platform': 0.93.2(effect@3.19.4) + effect: 3.19.4 + uuid: 11.1.0 + + '@effect/workflow@0.12.5(@effect/experimental@0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(@effect/platform@0.93.2(effect@3.19.4))(@effect/rpc@0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4))(effect@3.19.4)': + dependencies: + '@effect/experimental': 0.57.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4) + '@effect/platform': 0.93.2(effect@3.19.4) + '@effect/rpc': 0.72.1(@effect/platform@0.93.2(effect@3.19.4))(effect@3.19.4) + effect: 3.19.4 + '@egjs/hammerjs@2.0.17': dependencies: '@types/hammerjs': 2.0.46 @@ -8755,6 +9052,24 @@ snapshots: '@levischuck/tiny-cbor@0.2.11': {} + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': + optional: true + '@napi-rs/wasm-runtime@0.2.12': dependencies: '@emnapi/core': 1.7.0 @@ -9539,6 +9854,66 @@ snapshots: - typescript - web-tree-sitter + '@parcel/watcher-android-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-x64@2.5.1': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.1': + optional: true + + '@parcel/watcher-win32-arm64@2.5.1': + optional: true + + '@parcel/watcher-win32-ia32@2.5.1': + optional: true + + '@parcel/watcher-win32-x64@2.5.1': + optional: true + + '@parcel/watcher@2.5.1': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.1 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.1 + '@parcel/watcher-darwin-arm64': 2.5.1 + '@parcel/watcher-darwin-x64': 2.5.1 + '@parcel/watcher-freebsd-x64': 2.5.1 + '@parcel/watcher-linux-arm-glibc': 2.5.1 + '@parcel/watcher-linux-arm-musl': 2.5.1 + '@parcel/watcher-linux-arm64-glibc': 2.5.1 + '@parcel/watcher-linux-arm64-musl': 2.5.1 + '@parcel/watcher-linux-x64-glibc': 2.5.1 + '@parcel/watcher-linux-x64-musl': 2.5.1 + '@parcel/watcher-win32-arm64': 2.5.1 + '@parcel/watcher-win32-ia32': 2.5.1 + '@parcel/watcher-win32-x64': 2.5.1 + '@peculiar/asn1-android@2.5.0': dependencies: '@peculiar/asn1-schema': 2.5.0 @@ -10542,6 +10917,8 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 + '@standard-schema/spec@1.0.0': {} + '@tokenizer/token@0.3.0': {} '@ts-morph/common@0.28.1': @@ -11607,6 +11984,8 @@ snapshots: destroy@1.2.0: {} + detect-libc@1.0.3: {} + detect-libc@2.1.2: {} detect-node-es@1.1.0: {} @@ -11702,6 +12081,11 @@ snapshots: ee-first@1.1.1: {} + effect@3.19.4: + dependencies: + '@standard-schema/spec': 1.0.0 + fast-check: 3.23.2 + electron-to-chromium@1.5.249: {} emoji-regex@8.0.0: {} @@ -12483,6 +12867,10 @@ snapshots: extend@3.0.2: {} + fast-check@3.23.2: + dependencies: + pure-rand: 6.1.0 + fast-decode-uri-component@1.0.1: {} fast-deep-equal@3.1.3: {} @@ -12592,6 +12980,8 @@ snapshots: transitivePeerDependencies: - supports-color + find-my-way-ts@0.1.6: {} + find-my-way@9.3.0: dependencies: fast-deep-equal: 3.1.3 @@ -13781,6 +14171,24 @@ snapshots: ms@2.1.3: {} + msgpackr-extract@3.0.3: + dependencies: + node-gyp-build-optional-packages: 5.2.2 + optionalDependencies: + '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3 + optional: true + + msgpackr@1.11.5: + optionalDependencies: + msgpackr-extract: 3.0.3 + + multipasta@0.2.7: {} + mz@2.7.0: dependencies: any-promise: 1.3.0 @@ -13809,12 +14217,19 @@ snapshots: dependencies: semver: 7.7.3 + node-addon-api@7.1.1: {} + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 node-forge@1.3.1: {} + node-gyp-build-optional-packages@5.2.2: + dependencies: + detect-libc: 2.1.2 + optional: true + node-int64@0.4.0: {} node-releases@2.0.27: {} @@ -14213,6 +14628,8 @@ snapshots: punycode@2.3.1: {} + pure-rand@6.1.0: {} + pvtsutils@1.3.6: dependencies: tslib: 2.8.1 @@ -15466,6 +15883,8 @@ snapshots: utils-merge@1.0.1: {} + uuid@11.1.0: {} + uuid@7.0.3: {} uuid@8.3.2: {}