├── .gitignore ├── test ├── node.ts └── handlers.ts ├── src ├── errors.ts ├── PokemonCollection.ts ├── schemas.ts ├── +1 │ ├── encoding.ts │ ├── logging.ts │ └── platform.ts ├── PokeApiUrl.ts ├── BuildPokeApiUrl.ts ├── index.ts ├── index.test.ts └── PokeApi.ts ├── tsconfig.json ├── package.json ├── README.md └── pnpm-lock.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /test/node.ts: -------------------------------------------------------------------------------- 1 | import { setupServer } from "msw/node"; 2 | import { handlers } from "./handlers"; 3 | 4 | export const server = setupServer(...handlers); 5 | -------------------------------------------------------------------------------- /src/errors.ts: -------------------------------------------------------------------------------- 1 | import { Data } from "effect"; 2 | 3 | export class FetchError extends Data.TaggedError("FetchError")<{}> {} 4 | export class JsonError extends Data.TaggedError("JsonError")<{}> {} 5 | -------------------------------------------------------------------------------- /src/PokemonCollection.ts: -------------------------------------------------------------------------------- 1 | import { Effect } from "effect"; 2 | 3 | export class PokemonCollection extends Effect.Service()( 4 | "PokemonCollection", 5 | { succeed: ["staryu", "perrserker", "flaaffy"] } 6 | ) {} 7 | -------------------------------------------------------------------------------- /src/schemas.ts: -------------------------------------------------------------------------------- 1 | import { Schema } from "effect"; 2 | 3 | export class Pokemon extends Schema.Class("Pokemon")({ 4 | id: Schema.Number, 5 | order: Schema.Number, 6 | name: Schema.String, 7 | height: Schema.Number, 8 | weight: Schema.Number, 9 | }) {} 10 | -------------------------------------------------------------------------------- /src/+1/encoding.ts: -------------------------------------------------------------------------------- 1 | import { Schema } from "effect"; 2 | 3 | const Author = Schema.Struct({ 4 | name: Schema.String, 5 | age: Schema.NumberFromString, 6 | }); 7 | 8 | const authorDecoded = Schema.decodeSync(Author)({ age: "26", name: "Sandro" }); 9 | const authorEncoded = Schema.encodeSync(Author)(authorDecoded); 10 | -------------------------------------------------------------------------------- /src/+1/logging.ts: -------------------------------------------------------------------------------- 1 | import { Effect, Logger } from "effect"; 2 | 3 | const customLogger = Logger.make(({ logLevel, message }) => { 4 | globalThis.console.log(`[${logLevel.label}] ${message}`); 5 | }); 6 | 7 | const loggerLayer = Logger.add(customLogger); 8 | 9 | const main = Effect.logInfo("Hello world").pipe(Effect.provide(loggerLayer)); 10 | 11 | Effect.runSync(main); 12 | -------------------------------------------------------------------------------- /src/PokeApiUrl.ts: -------------------------------------------------------------------------------- 1 | import { Config, Context, Effect, Layer } from "effect"; 2 | 3 | export class PokeApiUrl extends Context.Tag("PokeApiUrl")< 4 | PokeApiUrl, 5 | string 6 | >() { 7 | static readonly Live = Layer.effect( 8 | this, 9 | Effect.gen(function* () { 10 | const baseUrl = yield* Config.string("BASE_URL"); 11 | return `${baseUrl}/api/v2/pokemon`; 12 | }) 13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /test/handlers.ts: -------------------------------------------------------------------------------- 1 | import { HttpResponse, http } from "msw"; 2 | import type { Pokemon } from "../src/schemas"; 3 | 4 | const mockPokemon: Pokemon = { 5 | id: 1, 6 | height: 10, 7 | weight: 10, 8 | order: 1, 9 | name: "myname", 10 | }; 11 | 12 | export const handlers = [ 13 | http.get("http://localhost:3000/api/v2/pokemon/*", () => { 14 | return HttpResponse.json(mockPokemon); 15 | }), 16 | ]; 17 | -------------------------------------------------------------------------------- /src/BuildPokeApiUrl.ts: -------------------------------------------------------------------------------- 1 | import { Effect } from "effect"; 2 | import { PokeApiUrl } from "./PokeApiUrl"; 3 | 4 | export class BuildPokeApiUrl extends Effect.Service()( 5 | "BuildPokeApiUrl", 6 | { 7 | dependencies: [PokeApiUrl.Live], 8 | effect: Effect.gen(function* () { 9 | const pokeApiUrl = yield* PokeApiUrl; 10 | return ({ name }: { name: string }) => `${pokeApiUrl}/${name}`; 11 | }), 12 | } 13 | ) {} 14 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "esModuleInterop": true, 4 | "skipLibCheck": true, 5 | "target": "es2022", 6 | "allowJs": true, 7 | "resolveJsonModule": true, 8 | "moduleDetection": "force", 9 | "isolatedModules": true, 10 | "verbatimModuleSyntax": true, 11 | "strict": true, 12 | "noUncheckedIndexedAccess": true, 13 | "noImplicitOverride": true, 14 | "module": "preserve", 15 | "noEmit": true, 16 | "lib": ["es2022"] 17 | }, 18 | "include": ["**/*.ts", "**/*.tsx"], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "effect-getting-started-course", 3 | "version": "1.0.0", 4 | "main": "src/index.js", 5 | "author": "Sandro Maglione", 6 | "license": "MIT", 7 | "scripts": { 8 | "dev": "BASE_URL=https://pokeapi.co tsx src/index.ts", 9 | "typecheck": "tsc", 10 | "test": "vitest" 11 | }, 12 | "devDependencies": { 13 | "@types/node": "^20.14.10", 14 | "msw": "^2.3.1", 15 | "tsx": "^4.16.2", 16 | "typescript": "^5.8.2", 17 | "vitest": "^2.0.2" 18 | }, 19 | "dependencies": { 20 | "@effect/platform": "^0.79.1", 21 | "effect": "^3.13.10" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { Effect, Layer, ManagedRuntime } from "effect"; 2 | import { PokeApi } from "./PokeApi"; 3 | 4 | const MainLayer = Layer.mergeAll(PokeApi.Default); 5 | 6 | const PokemonRuntime = ManagedRuntime.make(MainLayer); 7 | 8 | const program = Effect.gen(function* () { 9 | const pokeApi = yield* PokeApi; 10 | return yield* pokeApi.getPokemon; 11 | }); 12 | 13 | const main = program.pipe( 14 | Effect.catchTags({ 15 | FetchError: () => Effect.succeed("Fetch error"), 16 | JsonError: () => Effect.succeed("Json error"), 17 | ParseError: () => Effect.succeed("Parse error"), 18 | }) 19 | ); 20 | 21 | PokemonRuntime.runPromise(main).then(console.log); 22 | -------------------------------------------------------------------------------- /src/+1/platform.ts: -------------------------------------------------------------------------------- 1 | import { 2 | FetchHttpClient, 3 | HttpClient, 4 | HttpClientRequest, 5 | HttpClientResponse, 6 | } from "@effect/platform"; 7 | import { Effect, flow } from "effect"; 8 | import { Pokemon } from "../schemas"; 9 | 10 | export const main = Effect.gen(function* () { 11 | const baseClient = yield* HttpClient.HttpClient; 12 | const pokeApiClient = baseClient.pipe( 13 | HttpClient.mapRequest( 14 | flow( 15 | HttpClientRequest.acceptJson, 16 | HttpClientRequest.prependUrl("https://pokeapi.co/api/v2") 17 | ) 18 | ) 19 | ); 20 | 21 | return yield* pokeApiClient.get("/pokemon/squirtle"); 22 | }).pipe( 23 | Effect.flatMap(HttpClientResponse.schemaBodyJson(Pokemon)), 24 | Effect.scoped, 25 | Effect.provide(FetchHttpClient.layer) 26 | ); 27 | -------------------------------------------------------------------------------- /src/index.test.ts: -------------------------------------------------------------------------------- 1 | import { ConfigProvider, Effect, Layer, ManagedRuntime } from "effect"; 2 | import { afterAll, afterEach, beforeAll, expect, it } from "vitest"; 3 | import { server } from "../test/node"; 4 | import { PokeApi } from "./PokeApi"; 5 | 6 | beforeAll(() => server.listen()); 7 | afterEach(() => server.resetHandlers()); 8 | afterAll(() => server.close()); 9 | 10 | const TestConfigProvider = ConfigProvider.fromMap( 11 | new Map([["BASE_URL", "http://localhost:3000"]]) 12 | ); 13 | 14 | const ConfigProviderLayer = Layer.setConfigProvider(TestConfigProvider); 15 | const MainLayer = PokeApi.Default.pipe(Layer.provide(ConfigProviderLayer)); 16 | 17 | const TestingRuntime = ManagedRuntime.make(MainLayer); 18 | 19 | const program = Effect.gen(function* () { 20 | const pokeApi = yield* PokeApi; 21 | return yield* pokeApi.getPokemon; 22 | }); 23 | 24 | it("returns a valid pokemon", async () => { 25 | const response = await TestingRuntime.runPromise(program); 26 | expect(response).toEqual({ 27 | id: 1, 28 | height: 10, 29 | weight: 10, 30 | order: 1, 31 | name: "myname", 32 | }); 33 | }); 34 | -------------------------------------------------------------------------------- /src/PokeApi.ts: -------------------------------------------------------------------------------- 1 | import { Effect, Schema } from "effect"; 2 | import { BuildPokeApiUrl } from "./BuildPokeApiUrl"; 3 | import { FetchError, JsonError } from "./errors"; 4 | import { PokemonCollection } from "./PokemonCollection"; 5 | import { Pokemon } from "./schemas"; 6 | 7 | export class PokeApi extends Effect.Service()("PokeApi", { 8 | dependencies: [PokemonCollection.Default, BuildPokeApiUrl.Default], 9 | effect: Effect.gen(function* () { 10 | const pokemonCollection = yield* PokemonCollection; 11 | const buildPokeApiUrl = yield* BuildPokeApiUrl; 12 | 13 | return { 14 | getPokemon: Effect.gen(function* () { 15 | const requestUrl = buildPokeApiUrl({ name: pokemonCollection[0] }); 16 | 17 | const response = yield* Effect.tryPromise({ 18 | try: () => fetch(requestUrl), 19 | catch: () => new FetchError(), 20 | }); 21 | 22 | if (!response.ok) { 23 | return yield* new FetchError(); 24 | } 25 | 26 | const json = yield* Effect.tryPromise({ 27 | try: () => response.json(), 28 | catch: () => new JsonError(), 29 | }); 30 | 31 | return yield* Schema.decodeUnknown(Pokemon)(json); 32 | }), 33 | }; 34 | }), 35 | }) {} 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Effect: Beginners Complete Getting Started 2 | 3 | This repository contains all the code for the course [`Effect: Beginners Complete Getting Started`](https://www.typeonce.dev/course/effect-beginners-complete-getting-started). 4 | 5 | The app is implemented using typescript. You can get started by forking/cloning the repository and installing the dependencies: 6 | 7 | ```sh 8 | pnpm install 9 | ``` 10 | 11 | The project follows the implementation of the app in the course: 12 | - Entry point inside [index.ts](./src/index.ts) 13 | - All *Pascal Case* files in [src](./src/) are effect services 14 | - Testing inside [test](./test/) 15 | - [[+1]](./src/+1/) contains topic explained inside extra lessons in the course 16 | 17 | *** 18 | 19 | [`effect`](https://effect.website/) is the missing standard library for TypeScript. `effect` provides everything that you need to **build type-safe production typescript applications**. 20 | 21 | ## Course content 22 | 23 | This course will guide you from 0 knowledge of `effect` to build your first API with `Runtime`, `Layer`, `Config` and more. It shows you *how to implement a single API request* using `effect`. 24 | 25 | This may sound simple, but in reality you need to account for a lot of configurations and possible errors. `effect` makes everything type-safe, maintainable, testable: 26 | - Error handling 27 | - Configuration (environmental variables) 28 | - Mocking and testing (dependency injection) 29 | - Organizing and composing services 30 | 31 | ### How the course is organized 32 | 33 | The course is organized in small self-contained lessons. Each lesson introduces 1 single new concept. 34 | 35 | We will explore why using plain `fetch` and `Promise` is not enough. For each problem we explore the solution offered by `effect`, how it works, why it's needed, and how it integrates with the other modules to build a complete app. 36 | 37 | ## Course outline 38 | 39 | These are some of the concepts you will learn: 40 | - Creating and running effects (`Effect` type) 41 | - Type safe error handling 42 | - How to use `pipe` and `gen` to compose effects 43 | - How to use `@effect/schema` to parse request responses 44 | - Manage environmental variables with the `Config` module 45 | - Testing and mocking using dependency injection 46 | - Composing services using `Context` and `Layer` 47 | - How to build your custom runtime using `ManagedRuntime` 48 | 49 | We will learn these step by step. Every new module or API will be introduced only when required, specifically when implementing a missing feature of solving a problem with the app. 50 | 51 | *** 52 | 53 | ## Prerequisites 54 | The only prerequisite is knowing typescript. 55 | 56 | This does not require being advanced in the language. Nonetheless, the course assumes you know *what types are and how they work*. 57 | 58 | Here are some of the typescript concepts we are going to use: 59 | - Type inference 60 | - `typeof` 61 | - `never` 62 | - `interface`/`type` 63 | - `readonly` 64 | - `function*`/`yield*` 65 | 66 | We will briefly review some of these during the course to understand how and why they are used. 67 | 68 | ### Good to have 69 | Some patterns and APIs in `effect` derive from functional programming principles. 70 | 71 | Those are **not** required, but they may help you better understand some APIs used in `effect`: 72 | - Piping: `pipe` function in `effect` 73 | - Pure functions 74 | - Function composition 75 | - High-order functions 76 | - Pattern matching 77 | - Dependency injection 78 | 79 | > We are going to learn more about some of these principles during the course -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@effect/platform': 12 | specifier: ^0.79.1 13 | version: 0.79.1(effect@3.13.10) 14 | effect: 15 | specifier: ^3.13.10 16 | version: 3.13.10 17 | devDependencies: 18 | '@types/node': 19 | specifier: ^20.14.10 20 | version: 20.14.10 21 | msw: 22 | specifier: ^2.3.1 23 | version: 2.3.1(typescript@5.8.2) 24 | tsx: 25 | specifier: ^4.16.2 26 | version: 4.16.2 27 | typescript: 28 | specifier: ^5.8.2 29 | version: 5.8.2 30 | vitest: 31 | specifier: ^2.0.2 32 | version: 2.0.2(@types/node@20.14.10) 33 | 34 | packages: 35 | 36 | '@ampproject/remapping@2.3.0': 37 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 38 | engines: {node: '>=6.0.0'} 39 | 40 | '@bundled-es-modules/cookie@2.0.0': 41 | resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==} 42 | 43 | '@bundled-es-modules/statuses@1.0.1': 44 | resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} 45 | 46 | '@effect/platform@0.79.1': 47 | resolution: {integrity: sha512-kCoeBuQrdMuEigcuXk9eDoL9WiFIlLlLZeQZj/LapxC3kgnw/6BViJsRQm+Iqei7Z+zRr930suMpdX75CujCXA==} 48 | peerDependencies: 49 | effect: ^3.13.10 50 | 51 | '@esbuild/aix-ppc64@0.21.5': 52 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 53 | engines: {node: '>=12'} 54 | cpu: [ppc64] 55 | os: [aix] 56 | 57 | '@esbuild/android-arm64@0.21.5': 58 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 59 | engines: {node: '>=12'} 60 | cpu: [arm64] 61 | os: [android] 62 | 63 | '@esbuild/android-arm@0.21.5': 64 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 65 | engines: {node: '>=12'} 66 | cpu: [arm] 67 | os: [android] 68 | 69 | '@esbuild/android-x64@0.21.5': 70 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 71 | engines: {node: '>=12'} 72 | cpu: [x64] 73 | os: [android] 74 | 75 | '@esbuild/darwin-arm64@0.21.5': 76 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 77 | engines: {node: '>=12'} 78 | cpu: [arm64] 79 | os: [darwin] 80 | 81 | '@esbuild/darwin-x64@0.21.5': 82 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 83 | engines: {node: '>=12'} 84 | cpu: [x64] 85 | os: [darwin] 86 | 87 | '@esbuild/freebsd-arm64@0.21.5': 88 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 89 | engines: {node: '>=12'} 90 | cpu: [arm64] 91 | os: [freebsd] 92 | 93 | '@esbuild/freebsd-x64@0.21.5': 94 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 95 | engines: {node: '>=12'} 96 | cpu: [x64] 97 | os: [freebsd] 98 | 99 | '@esbuild/linux-arm64@0.21.5': 100 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 101 | engines: {node: '>=12'} 102 | cpu: [arm64] 103 | os: [linux] 104 | 105 | '@esbuild/linux-arm@0.21.5': 106 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 107 | engines: {node: '>=12'} 108 | cpu: [arm] 109 | os: [linux] 110 | 111 | '@esbuild/linux-ia32@0.21.5': 112 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 113 | engines: {node: '>=12'} 114 | cpu: [ia32] 115 | os: [linux] 116 | 117 | '@esbuild/linux-loong64@0.21.5': 118 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 119 | engines: {node: '>=12'} 120 | cpu: [loong64] 121 | os: [linux] 122 | 123 | '@esbuild/linux-mips64el@0.21.5': 124 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 125 | engines: {node: '>=12'} 126 | cpu: [mips64el] 127 | os: [linux] 128 | 129 | '@esbuild/linux-ppc64@0.21.5': 130 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 131 | engines: {node: '>=12'} 132 | cpu: [ppc64] 133 | os: [linux] 134 | 135 | '@esbuild/linux-riscv64@0.21.5': 136 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 137 | engines: {node: '>=12'} 138 | cpu: [riscv64] 139 | os: [linux] 140 | 141 | '@esbuild/linux-s390x@0.21.5': 142 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 143 | engines: {node: '>=12'} 144 | cpu: [s390x] 145 | os: [linux] 146 | 147 | '@esbuild/linux-x64@0.21.5': 148 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 149 | engines: {node: '>=12'} 150 | cpu: [x64] 151 | os: [linux] 152 | 153 | '@esbuild/netbsd-x64@0.21.5': 154 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 155 | engines: {node: '>=12'} 156 | cpu: [x64] 157 | os: [netbsd] 158 | 159 | '@esbuild/openbsd-x64@0.21.5': 160 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 161 | engines: {node: '>=12'} 162 | cpu: [x64] 163 | os: [openbsd] 164 | 165 | '@esbuild/sunos-x64@0.21.5': 166 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 167 | engines: {node: '>=12'} 168 | cpu: [x64] 169 | os: [sunos] 170 | 171 | '@esbuild/win32-arm64@0.21.5': 172 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 173 | engines: {node: '>=12'} 174 | cpu: [arm64] 175 | os: [win32] 176 | 177 | '@esbuild/win32-ia32@0.21.5': 178 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 179 | engines: {node: '>=12'} 180 | cpu: [ia32] 181 | os: [win32] 182 | 183 | '@esbuild/win32-x64@0.21.5': 184 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 185 | engines: {node: '>=12'} 186 | cpu: [x64] 187 | os: [win32] 188 | 189 | '@inquirer/confirm@3.1.14': 190 | resolution: {integrity: sha512-nbLSX37b2dGPtKWL3rPuR/5hOuD30S+pqJ/MuFiUEgN6GiMs8UMxiurKAMDzKt6C95ltjupa8zH6+3csXNHWpA==} 191 | engines: {node: '>=18'} 192 | 193 | '@inquirer/core@9.0.2': 194 | resolution: {integrity: sha512-nguvH3TZar3ACwbytZrraRTzGqyxJfYJwv+ZwqZNatAosdWQMP1GV8zvmkNlBe2JeZSaw0WYBHZk52pDpWC9qA==} 195 | engines: {node: '>=18'} 196 | 197 | '@inquirer/figures@1.0.3': 198 | resolution: {integrity: sha512-ErXXzENMH5pJt5/ssXV0DfWUZqly8nGzf0UcBV9xTnP+KyffE2mqyxIMBrZ8ijQck2nU0TQm40EQB53YreyWHw==} 199 | engines: {node: '>=18'} 200 | 201 | '@inquirer/type@1.4.0': 202 | resolution: {integrity: sha512-AjOqykVyjdJQvtfkNDGUyMYGF8xN50VUxftCQWsOyIo4DFRLr6VQhW0VItGI1JIyQGCGgIpKa7hMMwNhZb4OIw==} 203 | engines: {node: '>=18'} 204 | 205 | '@jridgewell/gen-mapping@0.3.5': 206 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 207 | engines: {node: '>=6.0.0'} 208 | 209 | '@jridgewell/resolve-uri@3.1.2': 210 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 211 | engines: {node: '>=6.0.0'} 212 | 213 | '@jridgewell/set-array@1.2.1': 214 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 215 | engines: {node: '>=6.0.0'} 216 | 217 | '@jridgewell/sourcemap-codec@1.5.0': 218 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 219 | 220 | '@jridgewell/trace-mapping@0.3.25': 221 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 222 | 223 | '@mswjs/cookies@1.1.1': 224 | resolution: {integrity: sha512-W68qOHEjx1iD+4VjQudlx26CPIoxmIAtK4ZCexU0/UJBG6jYhcuyzKJx+Iw8uhBIGd9eba64XgWVgo20it1qwA==} 225 | engines: {node: '>=18'} 226 | 227 | '@mswjs/interceptors@0.29.1': 228 | resolution: {integrity: sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==} 229 | engines: {node: '>=18'} 230 | 231 | '@open-draft/deferred-promise@2.2.0': 232 | resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} 233 | 234 | '@open-draft/logger@0.3.0': 235 | resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} 236 | 237 | '@open-draft/until@2.1.0': 238 | resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} 239 | 240 | '@rollup/rollup-android-arm-eabi@4.18.1': 241 | resolution: {integrity: sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==} 242 | cpu: [arm] 243 | os: [android] 244 | 245 | '@rollup/rollup-android-arm64@4.18.1': 246 | resolution: {integrity: sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==} 247 | cpu: [arm64] 248 | os: [android] 249 | 250 | '@rollup/rollup-darwin-arm64@4.18.1': 251 | resolution: {integrity: sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==} 252 | cpu: [arm64] 253 | os: [darwin] 254 | 255 | '@rollup/rollup-darwin-x64@4.18.1': 256 | resolution: {integrity: sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==} 257 | cpu: [x64] 258 | os: [darwin] 259 | 260 | '@rollup/rollup-linux-arm-gnueabihf@4.18.1': 261 | resolution: {integrity: sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==} 262 | cpu: [arm] 263 | os: [linux] 264 | 265 | '@rollup/rollup-linux-arm-musleabihf@4.18.1': 266 | resolution: {integrity: sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==} 267 | cpu: [arm] 268 | os: [linux] 269 | 270 | '@rollup/rollup-linux-arm64-gnu@4.18.1': 271 | resolution: {integrity: sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==} 272 | cpu: [arm64] 273 | os: [linux] 274 | 275 | '@rollup/rollup-linux-arm64-musl@4.18.1': 276 | resolution: {integrity: sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==} 277 | cpu: [arm64] 278 | os: [linux] 279 | 280 | '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': 281 | resolution: {integrity: sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==} 282 | cpu: [ppc64] 283 | os: [linux] 284 | 285 | '@rollup/rollup-linux-riscv64-gnu@4.18.1': 286 | resolution: {integrity: sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==} 287 | cpu: [riscv64] 288 | os: [linux] 289 | 290 | '@rollup/rollup-linux-s390x-gnu@4.18.1': 291 | resolution: {integrity: sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==} 292 | cpu: [s390x] 293 | os: [linux] 294 | 295 | '@rollup/rollup-linux-x64-gnu@4.18.1': 296 | resolution: {integrity: sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==} 297 | cpu: [x64] 298 | os: [linux] 299 | 300 | '@rollup/rollup-linux-x64-musl@4.18.1': 301 | resolution: {integrity: sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==} 302 | cpu: [x64] 303 | os: [linux] 304 | 305 | '@rollup/rollup-win32-arm64-msvc@4.18.1': 306 | resolution: {integrity: sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==} 307 | cpu: [arm64] 308 | os: [win32] 309 | 310 | '@rollup/rollup-win32-ia32-msvc@4.18.1': 311 | resolution: {integrity: sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==} 312 | cpu: [ia32] 313 | os: [win32] 314 | 315 | '@rollup/rollup-win32-x64-msvc@4.18.1': 316 | resolution: {integrity: sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==} 317 | cpu: [x64] 318 | os: [win32] 319 | 320 | '@standard-schema/spec@1.0.0': 321 | resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} 322 | 323 | '@types/cookie@0.6.0': 324 | resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} 325 | 326 | '@types/estree@1.0.5': 327 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 328 | 329 | '@types/mute-stream@0.0.4': 330 | resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} 331 | 332 | '@types/node@20.14.10': 333 | resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} 334 | 335 | '@types/statuses@2.0.5': 336 | resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} 337 | 338 | '@types/wrap-ansi@3.0.0': 339 | resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} 340 | 341 | '@vitest/expect@2.0.2': 342 | resolution: {integrity: sha512-nKAvxBYqcDugYZ4nJvnm5OR8eDJdgWjk4XM9owQKUjzW70q0icGV2HVnQOyYsp906xJaBDUXw0+9EHw2T8e0mQ==} 343 | 344 | '@vitest/pretty-format@2.0.2': 345 | resolution: {integrity: sha512-SBCyOXfGVvddRd9r2PwoVR0fonQjh9BMIcBMlSzbcNwFfGr6ZhOhvBzurjvi2F4ryut2HcqiFhNeDVGwru8tLg==} 346 | 347 | '@vitest/runner@2.0.2': 348 | resolution: {integrity: sha512-OCh437Vi8Wdbif1e0OvQcbfM3sW4s2lpmOjAE7qfLrpzJX2M7J1IQlNvEcb/fu6kaIB9n9n35wS0G2Q3en5kHg==} 349 | 350 | '@vitest/snapshot@2.0.2': 351 | resolution: {integrity: sha512-Yc2ewhhZhx+0f9cSUdfzPRcsM6PhIb+S43wxE7OG0kTxqgqzo8tHkXFuFlndXeDMp09G3sY/X5OAo/RfYydf1g==} 352 | 353 | '@vitest/spy@2.0.2': 354 | resolution: {integrity: sha512-MgwJ4AZtCgqyp2d7WcQVE8aNG5vQ9zu9qMPYQHjsld/QVsrvg78beNrXdO4HYkP0lDahCO3P4F27aagIag+SGQ==} 355 | 356 | '@vitest/utils@2.0.2': 357 | resolution: {integrity: sha512-pxCY1v7kmOCWYWjzc0zfjGTA3Wmn8PKnlPvSrsA643P1NHl1fOyXj2Q9SaNlrlFE+ivCsxM80Ov3AR82RmHCWQ==} 358 | 359 | ansi-escapes@4.3.2: 360 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} 361 | engines: {node: '>=8'} 362 | 363 | ansi-regex@5.0.1: 364 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 365 | engines: {node: '>=8'} 366 | 367 | ansi-styles@4.3.0: 368 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 369 | engines: {node: '>=8'} 370 | 371 | assertion-error@2.0.1: 372 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 373 | engines: {node: '>=12'} 374 | 375 | cac@6.7.14: 376 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 377 | engines: {node: '>=8'} 378 | 379 | chai@5.1.1: 380 | resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} 381 | engines: {node: '>=12'} 382 | 383 | chalk@4.1.2: 384 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 385 | engines: {node: '>=10'} 386 | 387 | check-error@2.1.1: 388 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 389 | engines: {node: '>= 16'} 390 | 391 | cli-spinners@2.9.2: 392 | resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} 393 | engines: {node: '>=6'} 394 | 395 | cli-width@4.1.0: 396 | resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} 397 | engines: {node: '>= 12'} 398 | 399 | cliui@8.0.1: 400 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 401 | engines: {node: '>=12'} 402 | 403 | color-convert@2.0.1: 404 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 405 | engines: {node: '>=7.0.0'} 406 | 407 | color-name@1.1.4: 408 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 409 | 410 | cookie@0.5.0: 411 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 412 | engines: {node: '>= 0.6'} 413 | 414 | cross-spawn@7.0.3: 415 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 416 | engines: {node: '>= 8'} 417 | 418 | debug@4.3.5: 419 | resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} 420 | engines: {node: '>=6.0'} 421 | peerDependencies: 422 | supports-color: '*' 423 | peerDependenciesMeta: 424 | supports-color: 425 | optional: true 426 | 427 | deep-eql@5.0.2: 428 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 429 | engines: {node: '>=6'} 430 | 431 | effect@3.13.10: 432 | resolution: {integrity: sha512-f2n51BJJ25G9rb/C1ClkgsVFXH6YTkCHmd6ebpu6cAkwQxfhnfbkVWKgkn3nyW9YnC9z4K8bGohRYaZ+HyWtLg==} 433 | 434 | emoji-regex@8.0.0: 435 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 436 | 437 | esbuild@0.21.5: 438 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 439 | engines: {node: '>=12'} 440 | hasBin: true 441 | 442 | escalade@3.1.2: 443 | resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} 444 | engines: {node: '>=6'} 445 | 446 | estree-walker@3.0.3: 447 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 448 | 449 | execa@8.0.1: 450 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} 451 | engines: {node: '>=16.17'} 452 | 453 | fast-check@3.23.2: 454 | resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} 455 | engines: {node: '>=8.0.0'} 456 | 457 | find-my-way-ts@0.1.5: 458 | resolution: {integrity: sha512-4GOTMrpGQVzsCH2ruUn2vmwzV/02zF4q+ybhCIrw/Rkt3L8KWcycdC6aJMctJzwN4fXD4SD5F/4B9Sksh5rE0A==} 459 | 460 | fsevents@2.3.3: 461 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 462 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 463 | os: [darwin] 464 | 465 | get-caller-file@2.0.5: 466 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 467 | engines: {node: 6.* || 8.* || >= 10.*} 468 | 469 | get-func-name@2.0.2: 470 | resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} 471 | 472 | get-stream@8.0.1: 473 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} 474 | engines: {node: '>=16'} 475 | 476 | get-tsconfig@4.7.5: 477 | resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} 478 | 479 | graphql@16.9.0: 480 | resolution: {integrity: sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==} 481 | engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} 482 | 483 | has-flag@4.0.0: 484 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 485 | engines: {node: '>=8'} 486 | 487 | headers-polyfill@4.0.3: 488 | resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} 489 | 490 | human-signals@5.0.0: 491 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} 492 | engines: {node: '>=16.17.0'} 493 | 494 | is-fullwidth-code-point@3.0.0: 495 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 496 | engines: {node: '>=8'} 497 | 498 | is-node-process@1.2.0: 499 | resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} 500 | 501 | is-stream@3.0.0: 502 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 503 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 504 | 505 | isexe@2.0.0: 506 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 507 | 508 | loupe@3.1.1: 509 | resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} 510 | 511 | magic-string@0.30.10: 512 | resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} 513 | 514 | merge-stream@2.0.0: 515 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 516 | 517 | mimic-fn@4.0.0: 518 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 519 | engines: {node: '>=12'} 520 | 521 | ms@2.1.2: 522 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 523 | 524 | msw@2.3.1: 525 | resolution: {integrity: sha512-ocgvBCLn/5l3jpl1lssIb3cniuACJLoOfZu01e3n5dbJrpA5PeeWn28jCLgQDNt6d7QT8tF2fYRzm9JoEHtiig==} 526 | engines: {node: '>=18'} 527 | hasBin: true 528 | peerDependencies: 529 | typescript: '>= 4.7.x' 530 | peerDependenciesMeta: 531 | typescript: 532 | optional: true 533 | 534 | multipasta@0.2.5: 535 | resolution: {integrity: sha512-c8eMDb1WwZcE02WVjHoOmUVk7fnKU/RmUcosHACglrWAuPQsEJv+E8430sXj6jNc1jHw0zrS16aCjQh4BcEb4A==} 536 | 537 | mute-stream@1.0.0: 538 | resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} 539 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 540 | 541 | nanoid@3.3.7: 542 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 543 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 544 | hasBin: true 545 | 546 | npm-run-path@5.3.0: 547 | resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} 548 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 549 | 550 | onetime@6.0.0: 551 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 552 | engines: {node: '>=12'} 553 | 554 | outvariant@1.4.3: 555 | resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} 556 | 557 | path-key@3.1.1: 558 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 559 | engines: {node: '>=8'} 560 | 561 | path-key@4.0.0: 562 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 563 | engines: {node: '>=12'} 564 | 565 | path-to-regexp@6.2.2: 566 | resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} 567 | 568 | pathe@1.1.2: 569 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} 570 | 571 | pathval@2.0.0: 572 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} 573 | engines: {node: '>= 14.16'} 574 | 575 | picocolors@1.0.1: 576 | resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} 577 | 578 | postcss@8.4.39: 579 | resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} 580 | engines: {node: ^10 || ^12 || >=14} 581 | 582 | pure-rand@6.1.0: 583 | resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} 584 | 585 | require-directory@2.1.1: 586 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 587 | engines: {node: '>=0.10.0'} 588 | 589 | resolve-pkg-maps@1.0.0: 590 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 591 | 592 | rollup@4.18.1: 593 | resolution: {integrity: sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==} 594 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 595 | hasBin: true 596 | 597 | shebang-command@2.0.0: 598 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 599 | engines: {node: '>=8'} 600 | 601 | shebang-regex@3.0.0: 602 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 603 | engines: {node: '>=8'} 604 | 605 | siginfo@2.0.0: 606 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 607 | 608 | signal-exit@4.1.0: 609 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 610 | engines: {node: '>=14'} 611 | 612 | source-map-js@1.2.0: 613 | resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} 614 | engines: {node: '>=0.10.0'} 615 | 616 | stackback@0.0.2: 617 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 618 | 619 | statuses@2.0.1: 620 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} 621 | engines: {node: '>= 0.8'} 622 | 623 | std-env@3.7.0: 624 | resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} 625 | 626 | strict-event-emitter@0.5.1: 627 | resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} 628 | 629 | string-width@4.2.3: 630 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 631 | engines: {node: '>=8'} 632 | 633 | strip-ansi@6.0.1: 634 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 635 | engines: {node: '>=8'} 636 | 637 | strip-final-newline@3.0.0: 638 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 639 | engines: {node: '>=12'} 640 | 641 | supports-color@7.2.0: 642 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 643 | engines: {node: '>=8'} 644 | 645 | tinybench@2.8.0: 646 | resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} 647 | 648 | tinypool@1.0.0: 649 | resolution: {integrity: sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==} 650 | engines: {node: ^18.0.0 || >=20.0.0} 651 | 652 | tinyrainbow@1.2.0: 653 | resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} 654 | engines: {node: '>=14.0.0'} 655 | 656 | tinyspy@3.0.0: 657 | resolution: {integrity: sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==} 658 | engines: {node: '>=14.0.0'} 659 | 660 | tsx@4.16.2: 661 | resolution: {integrity: sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ==} 662 | engines: {node: '>=18.0.0'} 663 | hasBin: true 664 | 665 | type-fest@0.21.3: 666 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} 667 | engines: {node: '>=10'} 668 | 669 | type-fest@4.21.0: 670 | resolution: {integrity: sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==} 671 | engines: {node: '>=16'} 672 | 673 | typescript@5.8.2: 674 | resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} 675 | engines: {node: '>=14.17'} 676 | hasBin: true 677 | 678 | undici-types@5.26.5: 679 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 680 | 681 | vite-node@2.0.2: 682 | resolution: {integrity: sha512-w4vkSz1Wo+NIQg8pjlEn0jQbcM/0D+xVaYjhw3cvarTanLLBh54oNiRbsT8PNK5GfuST0IlVXjsNRoNlqvY/fw==} 683 | engines: {node: ^18.0.0 || >=20.0.0} 684 | hasBin: true 685 | 686 | vite@5.3.3: 687 | resolution: {integrity: sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==} 688 | engines: {node: ^18.0.0 || >=20.0.0} 689 | hasBin: true 690 | peerDependencies: 691 | '@types/node': ^18.0.0 || >=20.0.0 692 | less: '*' 693 | lightningcss: ^1.21.0 694 | sass: '*' 695 | stylus: '*' 696 | sugarss: '*' 697 | terser: ^5.4.0 698 | peerDependenciesMeta: 699 | '@types/node': 700 | optional: true 701 | less: 702 | optional: true 703 | lightningcss: 704 | optional: true 705 | sass: 706 | optional: true 707 | stylus: 708 | optional: true 709 | sugarss: 710 | optional: true 711 | terser: 712 | optional: true 713 | 714 | vitest@2.0.2: 715 | resolution: {integrity: sha512-WlpZ9neRIjNBIOQwBYfBSr0+of5ZCbxT2TVGKW4Lv0c8+srCFIiRdsP7U009t8mMn821HQ4XKgkx5dVWpyoyLw==} 716 | engines: {node: ^18.0.0 || >=20.0.0} 717 | hasBin: true 718 | peerDependencies: 719 | '@edge-runtime/vm': '*' 720 | '@types/node': ^18.0.0 || >=20.0.0 721 | '@vitest/browser': 2.0.2 722 | '@vitest/ui': 2.0.2 723 | happy-dom: '*' 724 | jsdom: '*' 725 | peerDependenciesMeta: 726 | '@edge-runtime/vm': 727 | optional: true 728 | '@types/node': 729 | optional: true 730 | '@vitest/browser': 731 | optional: true 732 | '@vitest/ui': 733 | optional: true 734 | happy-dom: 735 | optional: true 736 | jsdom: 737 | optional: true 738 | 739 | which@2.0.2: 740 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 741 | engines: {node: '>= 8'} 742 | hasBin: true 743 | 744 | why-is-node-running@2.3.0: 745 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 746 | engines: {node: '>=8'} 747 | hasBin: true 748 | 749 | wrap-ansi@6.2.0: 750 | resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} 751 | engines: {node: '>=8'} 752 | 753 | wrap-ansi@7.0.0: 754 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 755 | engines: {node: '>=10'} 756 | 757 | y18n@5.0.8: 758 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 759 | engines: {node: '>=10'} 760 | 761 | yargs-parser@21.1.1: 762 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 763 | engines: {node: '>=12'} 764 | 765 | yargs@17.7.2: 766 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 767 | engines: {node: '>=12'} 768 | 769 | yoctocolors-cjs@2.1.2: 770 | resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} 771 | engines: {node: '>=18'} 772 | 773 | snapshots: 774 | 775 | '@ampproject/remapping@2.3.0': 776 | dependencies: 777 | '@jridgewell/gen-mapping': 0.3.5 778 | '@jridgewell/trace-mapping': 0.3.25 779 | 780 | '@bundled-es-modules/cookie@2.0.0': 781 | dependencies: 782 | cookie: 0.5.0 783 | 784 | '@bundled-es-modules/statuses@1.0.1': 785 | dependencies: 786 | statuses: 2.0.1 787 | 788 | '@effect/platform@0.79.1(effect@3.13.10)': 789 | dependencies: 790 | effect: 3.13.10 791 | find-my-way-ts: 0.1.5 792 | multipasta: 0.2.5 793 | 794 | '@esbuild/aix-ppc64@0.21.5': 795 | optional: true 796 | 797 | '@esbuild/android-arm64@0.21.5': 798 | optional: true 799 | 800 | '@esbuild/android-arm@0.21.5': 801 | optional: true 802 | 803 | '@esbuild/android-x64@0.21.5': 804 | optional: true 805 | 806 | '@esbuild/darwin-arm64@0.21.5': 807 | optional: true 808 | 809 | '@esbuild/darwin-x64@0.21.5': 810 | optional: true 811 | 812 | '@esbuild/freebsd-arm64@0.21.5': 813 | optional: true 814 | 815 | '@esbuild/freebsd-x64@0.21.5': 816 | optional: true 817 | 818 | '@esbuild/linux-arm64@0.21.5': 819 | optional: true 820 | 821 | '@esbuild/linux-arm@0.21.5': 822 | optional: true 823 | 824 | '@esbuild/linux-ia32@0.21.5': 825 | optional: true 826 | 827 | '@esbuild/linux-loong64@0.21.5': 828 | optional: true 829 | 830 | '@esbuild/linux-mips64el@0.21.5': 831 | optional: true 832 | 833 | '@esbuild/linux-ppc64@0.21.5': 834 | optional: true 835 | 836 | '@esbuild/linux-riscv64@0.21.5': 837 | optional: true 838 | 839 | '@esbuild/linux-s390x@0.21.5': 840 | optional: true 841 | 842 | '@esbuild/linux-x64@0.21.5': 843 | optional: true 844 | 845 | '@esbuild/netbsd-x64@0.21.5': 846 | optional: true 847 | 848 | '@esbuild/openbsd-x64@0.21.5': 849 | optional: true 850 | 851 | '@esbuild/sunos-x64@0.21.5': 852 | optional: true 853 | 854 | '@esbuild/win32-arm64@0.21.5': 855 | optional: true 856 | 857 | '@esbuild/win32-ia32@0.21.5': 858 | optional: true 859 | 860 | '@esbuild/win32-x64@0.21.5': 861 | optional: true 862 | 863 | '@inquirer/confirm@3.1.14': 864 | dependencies: 865 | '@inquirer/core': 9.0.2 866 | '@inquirer/type': 1.4.0 867 | 868 | '@inquirer/core@9.0.2': 869 | dependencies: 870 | '@inquirer/figures': 1.0.3 871 | '@inquirer/type': 1.4.0 872 | '@types/mute-stream': 0.0.4 873 | '@types/node': 20.14.10 874 | '@types/wrap-ansi': 3.0.0 875 | ansi-escapes: 4.3.2 876 | cli-spinners: 2.9.2 877 | cli-width: 4.1.0 878 | mute-stream: 1.0.0 879 | signal-exit: 4.1.0 880 | strip-ansi: 6.0.1 881 | wrap-ansi: 6.2.0 882 | yoctocolors-cjs: 2.1.2 883 | 884 | '@inquirer/figures@1.0.3': {} 885 | 886 | '@inquirer/type@1.4.0': 887 | dependencies: 888 | mute-stream: 1.0.0 889 | 890 | '@jridgewell/gen-mapping@0.3.5': 891 | dependencies: 892 | '@jridgewell/set-array': 1.2.1 893 | '@jridgewell/sourcemap-codec': 1.5.0 894 | '@jridgewell/trace-mapping': 0.3.25 895 | 896 | '@jridgewell/resolve-uri@3.1.2': {} 897 | 898 | '@jridgewell/set-array@1.2.1': {} 899 | 900 | '@jridgewell/sourcemap-codec@1.5.0': {} 901 | 902 | '@jridgewell/trace-mapping@0.3.25': 903 | dependencies: 904 | '@jridgewell/resolve-uri': 3.1.2 905 | '@jridgewell/sourcemap-codec': 1.5.0 906 | 907 | '@mswjs/cookies@1.1.1': {} 908 | 909 | '@mswjs/interceptors@0.29.1': 910 | dependencies: 911 | '@open-draft/deferred-promise': 2.2.0 912 | '@open-draft/logger': 0.3.0 913 | '@open-draft/until': 2.1.0 914 | is-node-process: 1.2.0 915 | outvariant: 1.4.3 916 | strict-event-emitter: 0.5.1 917 | 918 | '@open-draft/deferred-promise@2.2.0': {} 919 | 920 | '@open-draft/logger@0.3.0': 921 | dependencies: 922 | is-node-process: 1.2.0 923 | outvariant: 1.4.3 924 | 925 | '@open-draft/until@2.1.0': {} 926 | 927 | '@rollup/rollup-android-arm-eabi@4.18.1': 928 | optional: true 929 | 930 | '@rollup/rollup-android-arm64@4.18.1': 931 | optional: true 932 | 933 | '@rollup/rollup-darwin-arm64@4.18.1': 934 | optional: true 935 | 936 | '@rollup/rollup-darwin-x64@4.18.1': 937 | optional: true 938 | 939 | '@rollup/rollup-linux-arm-gnueabihf@4.18.1': 940 | optional: true 941 | 942 | '@rollup/rollup-linux-arm-musleabihf@4.18.1': 943 | optional: true 944 | 945 | '@rollup/rollup-linux-arm64-gnu@4.18.1': 946 | optional: true 947 | 948 | '@rollup/rollup-linux-arm64-musl@4.18.1': 949 | optional: true 950 | 951 | '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': 952 | optional: true 953 | 954 | '@rollup/rollup-linux-riscv64-gnu@4.18.1': 955 | optional: true 956 | 957 | '@rollup/rollup-linux-s390x-gnu@4.18.1': 958 | optional: true 959 | 960 | '@rollup/rollup-linux-x64-gnu@4.18.1': 961 | optional: true 962 | 963 | '@rollup/rollup-linux-x64-musl@4.18.1': 964 | optional: true 965 | 966 | '@rollup/rollup-win32-arm64-msvc@4.18.1': 967 | optional: true 968 | 969 | '@rollup/rollup-win32-ia32-msvc@4.18.1': 970 | optional: true 971 | 972 | '@rollup/rollup-win32-x64-msvc@4.18.1': 973 | optional: true 974 | 975 | '@standard-schema/spec@1.0.0': {} 976 | 977 | '@types/cookie@0.6.0': {} 978 | 979 | '@types/estree@1.0.5': {} 980 | 981 | '@types/mute-stream@0.0.4': 982 | dependencies: 983 | '@types/node': 20.14.10 984 | 985 | '@types/node@20.14.10': 986 | dependencies: 987 | undici-types: 5.26.5 988 | 989 | '@types/statuses@2.0.5': {} 990 | 991 | '@types/wrap-ansi@3.0.0': {} 992 | 993 | '@vitest/expect@2.0.2': 994 | dependencies: 995 | '@vitest/spy': 2.0.2 996 | '@vitest/utils': 2.0.2 997 | chai: 5.1.1 998 | tinyrainbow: 1.2.0 999 | 1000 | '@vitest/pretty-format@2.0.2': 1001 | dependencies: 1002 | tinyrainbow: 1.2.0 1003 | 1004 | '@vitest/runner@2.0.2': 1005 | dependencies: 1006 | '@vitest/utils': 2.0.2 1007 | pathe: 1.1.2 1008 | 1009 | '@vitest/snapshot@2.0.2': 1010 | dependencies: 1011 | '@vitest/pretty-format': 2.0.2 1012 | magic-string: 0.30.10 1013 | pathe: 1.1.2 1014 | 1015 | '@vitest/spy@2.0.2': 1016 | dependencies: 1017 | tinyspy: 3.0.0 1018 | 1019 | '@vitest/utils@2.0.2': 1020 | dependencies: 1021 | '@vitest/pretty-format': 2.0.2 1022 | estree-walker: 3.0.3 1023 | loupe: 3.1.1 1024 | tinyrainbow: 1.2.0 1025 | 1026 | ansi-escapes@4.3.2: 1027 | dependencies: 1028 | type-fest: 0.21.3 1029 | 1030 | ansi-regex@5.0.1: {} 1031 | 1032 | ansi-styles@4.3.0: 1033 | dependencies: 1034 | color-convert: 2.0.1 1035 | 1036 | assertion-error@2.0.1: {} 1037 | 1038 | cac@6.7.14: {} 1039 | 1040 | chai@5.1.1: 1041 | dependencies: 1042 | assertion-error: 2.0.1 1043 | check-error: 2.1.1 1044 | deep-eql: 5.0.2 1045 | loupe: 3.1.1 1046 | pathval: 2.0.0 1047 | 1048 | chalk@4.1.2: 1049 | dependencies: 1050 | ansi-styles: 4.3.0 1051 | supports-color: 7.2.0 1052 | 1053 | check-error@2.1.1: {} 1054 | 1055 | cli-spinners@2.9.2: {} 1056 | 1057 | cli-width@4.1.0: {} 1058 | 1059 | cliui@8.0.1: 1060 | dependencies: 1061 | string-width: 4.2.3 1062 | strip-ansi: 6.0.1 1063 | wrap-ansi: 7.0.0 1064 | 1065 | color-convert@2.0.1: 1066 | dependencies: 1067 | color-name: 1.1.4 1068 | 1069 | color-name@1.1.4: {} 1070 | 1071 | cookie@0.5.0: {} 1072 | 1073 | cross-spawn@7.0.3: 1074 | dependencies: 1075 | path-key: 3.1.1 1076 | shebang-command: 2.0.0 1077 | which: 2.0.2 1078 | 1079 | debug@4.3.5: 1080 | dependencies: 1081 | ms: 2.1.2 1082 | 1083 | deep-eql@5.0.2: {} 1084 | 1085 | effect@3.13.10: 1086 | dependencies: 1087 | '@standard-schema/spec': 1.0.0 1088 | fast-check: 3.23.2 1089 | 1090 | emoji-regex@8.0.0: {} 1091 | 1092 | esbuild@0.21.5: 1093 | optionalDependencies: 1094 | '@esbuild/aix-ppc64': 0.21.5 1095 | '@esbuild/android-arm': 0.21.5 1096 | '@esbuild/android-arm64': 0.21.5 1097 | '@esbuild/android-x64': 0.21.5 1098 | '@esbuild/darwin-arm64': 0.21.5 1099 | '@esbuild/darwin-x64': 0.21.5 1100 | '@esbuild/freebsd-arm64': 0.21.5 1101 | '@esbuild/freebsd-x64': 0.21.5 1102 | '@esbuild/linux-arm': 0.21.5 1103 | '@esbuild/linux-arm64': 0.21.5 1104 | '@esbuild/linux-ia32': 0.21.5 1105 | '@esbuild/linux-loong64': 0.21.5 1106 | '@esbuild/linux-mips64el': 0.21.5 1107 | '@esbuild/linux-ppc64': 0.21.5 1108 | '@esbuild/linux-riscv64': 0.21.5 1109 | '@esbuild/linux-s390x': 0.21.5 1110 | '@esbuild/linux-x64': 0.21.5 1111 | '@esbuild/netbsd-x64': 0.21.5 1112 | '@esbuild/openbsd-x64': 0.21.5 1113 | '@esbuild/sunos-x64': 0.21.5 1114 | '@esbuild/win32-arm64': 0.21.5 1115 | '@esbuild/win32-ia32': 0.21.5 1116 | '@esbuild/win32-x64': 0.21.5 1117 | 1118 | escalade@3.1.2: {} 1119 | 1120 | estree-walker@3.0.3: 1121 | dependencies: 1122 | '@types/estree': 1.0.5 1123 | 1124 | execa@8.0.1: 1125 | dependencies: 1126 | cross-spawn: 7.0.3 1127 | get-stream: 8.0.1 1128 | human-signals: 5.0.0 1129 | is-stream: 3.0.0 1130 | merge-stream: 2.0.0 1131 | npm-run-path: 5.3.0 1132 | onetime: 6.0.0 1133 | signal-exit: 4.1.0 1134 | strip-final-newline: 3.0.0 1135 | 1136 | fast-check@3.23.2: 1137 | dependencies: 1138 | pure-rand: 6.1.0 1139 | 1140 | find-my-way-ts@0.1.5: {} 1141 | 1142 | fsevents@2.3.3: 1143 | optional: true 1144 | 1145 | get-caller-file@2.0.5: {} 1146 | 1147 | get-func-name@2.0.2: {} 1148 | 1149 | get-stream@8.0.1: {} 1150 | 1151 | get-tsconfig@4.7.5: 1152 | dependencies: 1153 | resolve-pkg-maps: 1.0.0 1154 | 1155 | graphql@16.9.0: {} 1156 | 1157 | has-flag@4.0.0: {} 1158 | 1159 | headers-polyfill@4.0.3: {} 1160 | 1161 | human-signals@5.0.0: {} 1162 | 1163 | is-fullwidth-code-point@3.0.0: {} 1164 | 1165 | is-node-process@1.2.0: {} 1166 | 1167 | is-stream@3.0.0: {} 1168 | 1169 | isexe@2.0.0: {} 1170 | 1171 | loupe@3.1.1: 1172 | dependencies: 1173 | get-func-name: 2.0.2 1174 | 1175 | magic-string@0.30.10: 1176 | dependencies: 1177 | '@jridgewell/sourcemap-codec': 1.5.0 1178 | 1179 | merge-stream@2.0.0: {} 1180 | 1181 | mimic-fn@4.0.0: {} 1182 | 1183 | ms@2.1.2: {} 1184 | 1185 | msw@2.3.1(typescript@5.8.2): 1186 | dependencies: 1187 | '@bundled-es-modules/cookie': 2.0.0 1188 | '@bundled-es-modules/statuses': 1.0.1 1189 | '@inquirer/confirm': 3.1.14 1190 | '@mswjs/cookies': 1.1.1 1191 | '@mswjs/interceptors': 0.29.1 1192 | '@open-draft/until': 2.1.0 1193 | '@types/cookie': 0.6.0 1194 | '@types/statuses': 2.0.5 1195 | chalk: 4.1.2 1196 | graphql: 16.9.0 1197 | headers-polyfill: 4.0.3 1198 | is-node-process: 1.2.0 1199 | outvariant: 1.4.3 1200 | path-to-regexp: 6.2.2 1201 | strict-event-emitter: 0.5.1 1202 | type-fest: 4.21.0 1203 | yargs: 17.7.2 1204 | optionalDependencies: 1205 | typescript: 5.8.2 1206 | 1207 | multipasta@0.2.5: {} 1208 | 1209 | mute-stream@1.0.0: {} 1210 | 1211 | nanoid@3.3.7: {} 1212 | 1213 | npm-run-path@5.3.0: 1214 | dependencies: 1215 | path-key: 4.0.0 1216 | 1217 | onetime@6.0.0: 1218 | dependencies: 1219 | mimic-fn: 4.0.0 1220 | 1221 | outvariant@1.4.3: {} 1222 | 1223 | path-key@3.1.1: {} 1224 | 1225 | path-key@4.0.0: {} 1226 | 1227 | path-to-regexp@6.2.2: {} 1228 | 1229 | pathe@1.1.2: {} 1230 | 1231 | pathval@2.0.0: {} 1232 | 1233 | picocolors@1.0.1: {} 1234 | 1235 | postcss@8.4.39: 1236 | dependencies: 1237 | nanoid: 3.3.7 1238 | picocolors: 1.0.1 1239 | source-map-js: 1.2.0 1240 | 1241 | pure-rand@6.1.0: {} 1242 | 1243 | require-directory@2.1.1: {} 1244 | 1245 | resolve-pkg-maps@1.0.0: {} 1246 | 1247 | rollup@4.18.1: 1248 | dependencies: 1249 | '@types/estree': 1.0.5 1250 | optionalDependencies: 1251 | '@rollup/rollup-android-arm-eabi': 4.18.1 1252 | '@rollup/rollup-android-arm64': 4.18.1 1253 | '@rollup/rollup-darwin-arm64': 4.18.1 1254 | '@rollup/rollup-darwin-x64': 4.18.1 1255 | '@rollup/rollup-linux-arm-gnueabihf': 4.18.1 1256 | '@rollup/rollup-linux-arm-musleabihf': 4.18.1 1257 | '@rollup/rollup-linux-arm64-gnu': 4.18.1 1258 | '@rollup/rollup-linux-arm64-musl': 4.18.1 1259 | '@rollup/rollup-linux-powerpc64le-gnu': 4.18.1 1260 | '@rollup/rollup-linux-riscv64-gnu': 4.18.1 1261 | '@rollup/rollup-linux-s390x-gnu': 4.18.1 1262 | '@rollup/rollup-linux-x64-gnu': 4.18.1 1263 | '@rollup/rollup-linux-x64-musl': 4.18.1 1264 | '@rollup/rollup-win32-arm64-msvc': 4.18.1 1265 | '@rollup/rollup-win32-ia32-msvc': 4.18.1 1266 | '@rollup/rollup-win32-x64-msvc': 4.18.1 1267 | fsevents: 2.3.3 1268 | 1269 | shebang-command@2.0.0: 1270 | dependencies: 1271 | shebang-regex: 3.0.0 1272 | 1273 | shebang-regex@3.0.0: {} 1274 | 1275 | siginfo@2.0.0: {} 1276 | 1277 | signal-exit@4.1.0: {} 1278 | 1279 | source-map-js@1.2.0: {} 1280 | 1281 | stackback@0.0.2: {} 1282 | 1283 | statuses@2.0.1: {} 1284 | 1285 | std-env@3.7.0: {} 1286 | 1287 | strict-event-emitter@0.5.1: {} 1288 | 1289 | string-width@4.2.3: 1290 | dependencies: 1291 | emoji-regex: 8.0.0 1292 | is-fullwidth-code-point: 3.0.0 1293 | strip-ansi: 6.0.1 1294 | 1295 | strip-ansi@6.0.1: 1296 | dependencies: 1297 | ansi-regex: 5.0.1 1298 | 1299 | strip-final-newline@3.0.0: {} 1300 | 1301 | supports-color@7.2.0: 1302 | dependencies: 1303 | has-flag: 4.0.0 1304 | 1305 | tinybench@2.8.0: {} 1306 | 1307 | tinypool@1.0.0: {} 1308 | 1309 | tinyrainbow@1.2.0: {} 1310 | 1311 | tinyspy@3.0.0: {} 1312 | 1313 | tsx@4.16.2: 1314 | dependencies: 1315 | esbuild: 0.21.5 1316 | get-tsconfig: 4.7.5 1317 | optionalDependencies: 1318 | fsevents: 2.3.3 1319 | 1320 | type-fest@0.21.3: {} 1321 | 1322 | type-fest@4.21.0: {} 1323 | 1324 | typescript@5.8.2: {} 1325 | 1326 | undici-types@5.26.5: {} 1327 | 1328 | vite-node@2.0.2(@types/node@20.14.10): 1329 | dependencies: 1330 | cac: 6.7.14 1331 | debug: 4.3.5 1332 | pathe: 1.1.2 1333 | tinyrainbow: 1.2.0 1334 | vite: 5.3.3(@types/node@20.14.10) 1335 | transitivePeerDependencies: 1336 | - '@types/node' 1337 | - less 1338 | - lightningcss 1339 | - sass 1340 | - stylus 1341 | - sugarss 1342 | - supports-color 1343 | - terser 1344 | 1345 | vite@5.3.3(@types/node@20.14.10): 1346 | dependencies: 1347 | esbuild: 0.21.5 1348 | postcss: 8.4.39 1349 | rollup: 4.18.1 1350 | optionalDependencies: 1351 | '@types/node': 20.14.10 1352 | fsevents: 2.3.3 1353 | 1354 | vitest@2.0.2(@types/node@20.14.10): 1355 | dependencies: 1356 | '@ampproject/remapping': 2.3.0 1357 | '@vitest/expect': 2.0.2 1358 | '@vitest/pretty-format': 2.0.2 1359 | '@vitest/runner': 2.0.2 1360 | '@vitest/snapshot': 2.0.2 1361 | '@vitest/spy': 2.0.2 1362 | '@vitest/utils': 2.0.2 1363 | chai: 5.1.1 1364 | debug: 4.3.5 1365 | execa: 8.0.1 1366 | magic-string: 0.30.10 1367 | pathe: 1.1.2 1368 | std-env: 3.7.0 1369 | tinybench: 2.8.0 1370 | tinypool: 1.0.0 1371 | tinyrainbow: 1.2.0 1372 | vite: 5.3.3(@types/node@20.14.10) 1373 | vite-node: 2.0.2(@types/node@20.14.10) 1374 | why-is-node-running: 2.3.0 1375 | optionalDependencies: 1376 | '@types/node': 20.14.10 1377 | transitivePeerDependencies: 1378 | - less 1379 | - lightningcss 1380 | - sass 1381 | - stylus 1382 | - sugarss 1383 | - supports-color 1384 | - terser 1385 | 1386 | which@2.0.2: 1387 | dependencies: 1388 | isexe: 2.0.0 1389 | 1390 | why-is-node-running@2.3.0: 1391 | dependencies: 1392 | siginfo: 2.0.0 1393 | stackback: 0.0.2 1394 | 1395 | wrap-ansi@6.2.0: 1396 | dependencies: 1397 | ansi-styles: 4.3.0 1398 | string-width: 4.2.3 1399 | strip-ansi: 6.0.1 1400 | 1401 | wrap-ansi@7.0.0: 1402 | dependencies: 1403 | ansi-styles: 4.3.0 1404 | string-width: 4.2.3 1405 | strip-ansi: 6.0.1 1406 | 1407 | y18n@5.0.8: {} 1408 | 1409 | yargs-parser@21.1.1: {} 1410 | 1411 | yargs@17.7.2: 1412 | dependencies: 1413 | cliui: 8.0.1 1414 | escalade: 3.1.2 1415 | get-caller-file: 2.0.5 1416 | require-directory: 2.1.1 1417 | string-width: 4.2.3 1418 | y18n: 5.0.8 1419 | yargs-parser: 21.1.1 1420 | 1421 | yoctocolors-cjs@2.1.2: {} 1422 | --------------------------------------------------------------------------------