From 2cc06eecddf299ae300b34da080d2b28ca2dd578 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Mon, 9 Jun 2025 17:34:17 -1000 Subject: [PATCH 01/10] feat(typesync pkg): create typesync pkg. export Mapping definition --- apps/connect/package.json | 2 +- package.json | 10 +- packages/hypergraph-react/package.json | 2 +- packages/typesync/LICENSE | 21 + packages/typesync/README.md | 75 ++ packages/typesync/package.json | 46 + packages/typesync/src/Mapping.ts | 65 + packages/typesync/src/index.ts | 1 + packages/typesync/tsconfig.build.json | 8 + packages/typesync/tsconfig.json | 5 + packages/typesync/tsconfig.src.json | 8 + packages/typesync/tsconfig.test.json | 11 + packages/typesync/vitest.config.ts | 6 + pnpm-lock.yaml | 1538 ++++++++++++------------ tsconfig.base.json | 4 +- tsconfig.build.json | 3 +- tsconfig.json | 1 + vitest.config.ts | 7 + vitest.shared.ts | 1 + vitest.workspace.ts | 3 - 20 files changed, 1025 insertions(+), 792 deletions(-) create mode 100644 packages/typesync/LICENSE create mode 100644 packages/typesync/README.md create mode 100644 packages/typesync/package.json create mode 100644 packages/typesync/src/Mapping.ts create mode 100644 packages/typesync/src/index.ts create mode 100644 packages/typesync/tsconfig.build.json create mode 100644 packages/typesync/tsconfig.json create mode 100644 packages/typesync/tsconfig.src.json create mode 100644 packages/typesync/tsconfig.test.json create mode 100644 packages/typesync/vitest.config.ts create mode 100644 vitest.config.ts delete mode 100644 vitest.workspace.ts diff --git a/apps/connect/package.json b/apps/connect/package.json index c5bf34d2..b1fdcf42 100644 --- a/apps/connect/package.json +++ b/apps/connect/package.json @@ -17,7 +17,7 @@ "@tanstack/react-router": "^1.120.2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "effect": "^3.16.3", + "effect": "^3.16.5", "framer-motion": "^12.10.1", "lucide-react": "^0.508.0", "react": "^19.1.0", diff --git a/package.json b/package.json index 1c610bbb..56c00f9c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "private": true, "type": "module", - "packageManager": "pnpm@10.6.2", + "packageManager": "pnpm@10.12.1+sha512.f0dda8580f0ee9481c5c79a1d927b9164f2c478e90992ad268bbb2465a736984391d6333d2c327913578b2804af33474ca554ba29c04a8b13060a717675ae3ac", "scripts": { "clean": "node scripts/clean.mjs", "build": "tsc -b tsconfig.build.json && pnpm --recursive --parallel --filter \"./packages/*\" run build", @@ -12,13 +12,13 @@ }, "devDependencies": { "@babel/cli": "^7.27.2", - "@babel/core": "^7.27.1", + "@babel/core": "^7.27.4", "@biomejs/biome": "1.9.4", - "@changesets/cli": "^2.29.3", + "@changesets/cli": "^2.29.4", "babel-plugin-annotate-pure-calls": "^0.5.0", "glob": "^11.0.2", - "pkg-pr-new": "^0.0.43", + "pkg-pr-new": "^0.0.51", "typescript": "^5.8.3", - "vitest": "^3.1.3" + "vitest": "^3.2.3" } } diff --git a/packages/hypergraph-react/package.json b/packages/hypergraph-react/package.json index d63bb354..2a01c4d0 100644 --- a/packages/hypergraph-react/package.json +++ b/packages/hypergraph-react/package.json @@ -11,7 +11,7 @@ "repository": { "type": "git", "url": "https://github.com/graphprotocol/hypergraph.git", - "directory": "packages/react" + "directory": "packages/hypergraph-react" }, "license": "MIT", "type": "module", diff --git a/packages/typesync/LICENSE b/packages/typesync/LICENSE new file mode 100644 index 00000000..c75b86eb --- /dev/null +++ b/packages/typesync/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023-present The Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/typesync/README.md b/packages/typesync/README.md new file mode 100644 index 00000000..adb76f7f --- /dev/null +++ b/packages/typesync/README.md @@ -0,0 +1,75 @@ +# @graphprotocol/typesync + +Package for generating the mappings used within the `hypergraph` ecosystem that is used to query for entities on the Knowledge Graph by the `grc-20` id's. + +The `Mapping` is passed to the `` from the [@graphprotocol/hypergraph-react](../hypergraph-react/README.md) context to inform the query layer what entities to query from the Knowledge Graph. + +This package exposes a function: `generateMappings` that takes the schema with an array of types, each with properties. Both `types` and `properties` have a nullable `knowledgeGraphId` UUID value. If a value is provided, the `type/property` exists on the Knowledge Graph; this value will be plugged into to the `Mapping` values. If the `knowledgeGraphId` value is null, the `type/property` will be created using the `@graphprotocol/grc-20` ops and then returned in the mapping. + +## Mapping definition + +```ts +export type MappingEntry = { + typeIds: Array; + properties?: { + [key: string]: Grc20Id.Id; + }; + relations?: { + [key: string]: Grc20Id.Id; + }; +}; + +export type Mapping = { + [key: string]: MappingEntry; +}; +``` + +## Example + +- generated schema + +```ts +import { Entity, Type } from '@graphprotocol/hypergraph' + +export class Account extends Entity.Class('Account')({ + username: Type.Text, + createdAt: Type.Date +}) {} + +export class Event extends Entity.Class('Event')({ + name: Type.Text, + description: Type.Text, + account: Type.Relation(Account) +}) {} +``` + +- resuling mapping + +```ts +import { Id } from '@graphprotocol/grc-20' +import type { Mapping } from '@graphprotocol/typesync/Mapping' + +export const mapping: Mapping = { + Account: { + typeIds: [Id.Id('a5fd07b1-120f-46c6-b46f-387ef98396a6')], + properties: { + username: Id.Id('994edcff-6996-4a77-9797-a13e5e3efad8'), + createdAt: Id.Id('64bfba51-a69b-4746-be4b-213214a879fe') + } + }, + Event: { + typeIds: [Id.Id('0349187b-526f-435f-b2bb-9e9caf23127a')], + properties: { + name: Id.Id('3808e060-fb4a-4d08-8069-35b8c8a1902b'), + description: Id.Id('1f0d9007-8da2-4b28-ab9f-3bc0709f4837'), + }, + relations: { + account: Id.Id('a5fd07b1-120f-46c6-b46f-387ef98396a6') + } + } +} +``` + +## References + +- [@graphprotocol/grc-20](https://github.com/graphprotocol/grc-20-ts) \ No newline at end of file diff --git a/packages/typesync/package.json b/packages/typesync/package.json new file mode 100644 index 00000000..aad10fe6 --- /dev/null +++ b/packages/typesync/package.json @@ -0,0 +1,46 @@ +{ + "name": "@graphprotocol/typesync", + "version": "0.0.1", + "description": "Package for generating the mappings used within the hypergraph ecosystem that is used to query for entities on the Knowledge Graph by the grc-20 id's.", + "publishConfig": { + "access": "public", + "directory": "publish", + "provenance": true + }, + "repository": { + "type": "git", + "url": "https://github.com/graphprotocol/hypergraph.git", + "directory": "packages/typesync" + }, + "keywords": ["The Graph", "GRC-20", "hypergraph"], + "license": "MIT", + "type": "module", + "main": "./dist/index.js", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "./Mapping": { + "types": "./dist/Mapping.d.ts", + "default": "./dist/Mapping.js" + } + }, + "sideEffects": [], + "scripts": { + "build": "tsc -b --force tsconfig.build.json && babel dist --plugins annotate-pure-calls --out-dir dist --source-maps && node ../../scripts/package.mjs", + "test": "vitest" + }, + "peerDependencies": { + "@graphprotocol/hypergraph": "workspace:*" + }, + "devDependencies": { + "@graphprotocol/hypergraph": "workspace:*" + }, + "dependencies": { + "@graphprotocol/grc-20": "^0.17.1", + "effect": "^3.16.5" + } +} diff --git a/packages/typesync/src/Mapping.ts b/packages/typesync/src/Mapping.ts new file mode 100644 index 00000000..af50e8dc --- /dev/null +++ b/packages/typesync/src/Mapping.ts @@ -0,0 +1,65 @@ +import type { Id as Grc20Id } from '@graphprotocol/grc-20'; + +/** + * Mappings for a schema type and its properties/relations + * + * @since 0.0.1 + */ +export type MappingEntry = { + /** + * Array of the `Id.Id` of the type in the Knowledge Graph. + * Is an array because a type can belong to multiple spaces/extend multiple types. + * + * @since 0.0.1 + */ + typeIds: Array; + /** + * Record of property names to the `Id.Id` of the type in the Knowledge Graph + * + * @since 0.0.1 + */ + properties?: { + [key: string]: Grc20Id.Id; + }; + /** + * Record of schema type relation names to the `Id.Id` of the relation in the Knowledge Graph + * + * @since 0.0.1 + */ + relations?: { + [key: string]: Grc20Id.Id; + }; +}; + +/** + * @example + * ```ts + * import { Id } from '@graphprotocol/grc-20' + * import type { Mapping } from '@graphprotocol/typesync' + * + * const mapping: Mapping = { + * Account: { + * typeIds: [Id.Id('a5fd07b1-120f-46c6-b46f-387ef98396a6')], + * properties: { + * username: Id.Id('994edcff-6996-4a77-9797-a13e5e3efad8'), + * createdAt: Id.Id('64bfba51-a69b-4746-be4b-213214a879fe') + * } + * }, + * Event: { + * typeIds: [Id.Id('0349187b-526f-435f-b2bb-9e9caf23127a')], + * properties: { + * name: Id.Id('3808e060-fb4a-4d08-8069-35b8c8a1902b'), + * description: Id.Id('1f0d9007-8da2-4b28-ab9f-3bc0709f4837'), + * }, + * relations: { + * account: Id.Id('a5fd07b1-120f-46c6-b46f-387ef98396a6') + * } + * } + * } + * ``` + * + * @since 0.0.1 + */ +export type Mapping = { + [key: string]: MappingEntry; +}; diff --git a/packages/typesync/src/index.ts b/packages/typesync/src/index.ts new file mode 100644 index 00000000..1dab7fbd --- /dev/null +++ b/packages/typesync/src/index.ts @@ -0,0 +1 @@ +export * as Mapping from './Mapping.js'; diff --git a/packages/typesync/tsconfig.build.json b/packages/typesync/tsconfig.build.json new file mode 100644 index 00000000..fc59560f --- /dev/null +++ b/packages/typesync/tsconfig.build.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.src.json", + "compilerOptions": { + "tsBuildInfoFile": ".tsbuildinfo/build.tsbuildinfo", + "outDir": "dist", + "stripInternal": true + } +} diff --git a/packages/typesync/tsconfig.json b/packages/typesync/tsconfig.json new file mode 100644 index 00000000..84e89018 --- /dev/null +++ b/packages/typesync/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../../tsconfig.base.json", + "include": [], + "references": [{ "path": "tsconfig.src.json" }, { "path": "tsconfig.test.json" }] +} diff --git a/packages/typesync/tsconfig.src.json b/packages/typesync/tsconfig.src.json new file mode 100644 index 00000000..579ef691 --- /dev/null +++ b/packages/typesync/tsconfig.src.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["src"], + "compilerOptions": { + "tsBuildInfoFile": ".tsbuildinfo/src.tsbuildinfo", + "rootDir": "src" + } +} diff --git a/packages/typesync/tsconfig.test.json b/packages/typesync/tsconfig.test.json new file mode 100644 index 00000000..5c81d806 --- /dev/null +++ b/packages/typesync/tsconfig.test.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["test"], + "references": [ + { "path": "./tsconfig.src.json" }, + ], + "compilerOptions": { + "tsBuildInfoFile": ".tsbuildinfo/test.tsbuildinfo", + "rootDir": "test" + } +} diff --git a/packages/typesync/vitest.config.ts b/packages/typesync/vitest.config.ts new file mode 100644 index 00000000..1be24e98 --- /dev/null +++ b/packages/typesync/vitest.config.ts @@ -0,0 +1,6 @@ +import { type UserConfigExport, mergeConfig } from 'vitest/config'; +import shared from '../../vitest.shared.js'; + +const config: UserConfigExport = {}; + +export default mergeConfig(shared, config); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 77ec998f..9775cb25 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,31 +10,31 @@ importers: devDependencies: '@babel/cli': specifier: ^7.27.2 - version: 7.27.2(@babel/core@7.27.1) + version: 7.27.2(@babel/core@7.27.4) '@babel/core': - specifier: ^7.27.1 - version: 7.27.1 + specifier: ^7.27.4 + version: 7.27.4 '@biomejs/biome': specifier: 1.9.4 version: 1.9.4 '@changesets/cli': - specifier: ^2.29.3 - version: 2.29.3 + specifier: ^2.29.4 + version: 2.29.4 babel-plugin-annotate-pure-calls: specifier: ^0.5.0 - version: 0.5.0(@babel/core@7.27.1) + version: 0.5.0(@babel/core@7.27.4) glob: specifier: ^11.0.2 version: 11.0.2 pkg-pr-new: - specifier: ^0.0.43 - version: 0.0.43 + specifier: ^0.0.51 + version: 0.0.51 typescript: specifier: ^5.8.3 version: 5.8.3 vitest: - specifier: ^3.1.3 - version: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.29)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0) + specifier: ^3.2.3 + version: 3.2.3(@types/debug@4.1.12)(@types/node@22.15.29)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0) apps/connect: dependencies: @@ -66,8 +66,8 @@ importers: specifier: ^2.1.1 version: 2.1.1 effect: - specifier: ^3.16.3 - version: 3.16.3 + specifier: ^3.16.5 + version: 3.16.5 framer-motion: specifier: ^12.10.1 version: 12.10.1(@emotion/is-prop-valid@1.2.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -167,7 +167,7 @@ importers: version: 7.1.2(graphql@16.11.0) isomorphic-ws: specifier: ^5.0.0 - version: 5.0.0(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 5.0.0(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) lucide-react: specifier: ^0.508.0 version: 0.508.0(react@19.1.0) @@ -252,7 +252,7 @@ importers: version: 2.13.0(@solana/web3.js@1.95.3(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(@types/react@19.1.3)(bs58@6.0.0)(bufferutil@4.0.9)(immer@9.0.21)(permissionless@0.2.44(ox@0.6.7(typescript@5.8.3)(zod@3.24.2))(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.2)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.24.2) next: specifier: 15.3.2 - version: 15.3.2(@babel/core@7.27.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 15.3.2(@babel/core@7.27.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: specifier: ^19.0.0 version: 19.1.0 @@ -420,22 +420,22 @@ importers: version: 0.38.4(@effect/experimental@0.48.4(@effect/platform@0.84.4(effect@3.16.3))(effect@3.16.3))(@effect/platform@0.84.4(effect@3.16.3))(@effect/sql@0.37.4(@effect/experimental@0.48.4(@effect/platform@0.84.4(effect@3.16.3))(effect@3.16.3))(@effect/platform@0.84.4(effect@3.16.3))(effect@3.16.3))(effect@3.16.3) '@effect/vitest': specifier: latest - version: 0.23.3(effect@3.16.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.29)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0)) + version: 0.23.3(effect@3.16.3)(vitest@3.2.3(@types/debug@4.1.12)(@types/node@22.15.29)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0)) '@graphprotocol/grc-20': specifier: ^0.17.0 version: 0.17.0(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.24.2))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.2) '@graphql-codegen/cli': specifier: ^5.0.6 - version: 5.0.6(@babel/core@7.27.1)(@parcel/watcher@2.5.1)(@types/node@22.15.29)(bufferutil@4.0.9)(encoding@0.1.13)(enquirer@2.4.1)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + version: 5.0.6(@babel/core@7.27.4)(@parcel/watcher@2.5.1)(@types/node@22.15.29)(bufferutil@4.0.9)(encoding@0.1.13)(enquirer@2.4.1)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@graphql-codegen/client-preset': specifier: ^4.8.1 - version: 4.8.1(@babel/core@7.27.1)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0) + version: 4.8.1(@babel/core@7.27.4)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0) '@graphql-codegen/typescript': specifier: ^4.1.6 - version: 4.1.6(@babel/core@7.27.1)(encoding@0.1.13)(graphql@16.11.0) + version: 4.1.6(@babel/core@7.27.4)(encoding@0.1.13)(graphql@16.11.0) '@graphql-codegen/typescript-operations': specifier: ^4.6.1 - version: 4.6.1(@babel/core@7.27.1)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0) + version: 4.6.1(@babel/core@7.27.4)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0) '@tanstack/router-plugin': specifier: ^1.120.13 version: 1.120.13(@tanstack/react-router@1.120.15(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0))(webpack@5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2)) @@ -605,6 +605,20 @@ importers: version: 19.1.0 publishDirectory: publish + packages/typesync: + dependencies: + '@graphprotocol/grc-20': + specifier: ^0.17.1 + version: 0.17.1(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.24.2))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.2) + effect: + specifier: ^3.16.5 + version: 3.16.5 + devDependencies: + '@graphprotocol/hypergraph': + specifier: workspace:* + version: link:../hypergraph/publish + publishDirectory: publish + packages: '@adobe/css-tools@4.4.0': @@ -731,34 +745,22 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.5': - resolution: {integrity: sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.27.1': - resolution: {integrity: sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A==} - engines: {node: '>=6.9.0'} - '@babel/compat-data@7.27.2': resolution: {integrity: sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==} engines: {node: '>=6.9.0'} - '@babel/core@7.27.1': - resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.26.5': - resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.26.9': - resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==} + '@babel/core@7.27.4': + resolution: {integrity: sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==} engines: {node: '>=6.9.0'} '@babel/generator@7.27.1': resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==} engines: {node: '>=6.9.0'} + '@babel/generator@7.27.5': + resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.25.9': resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} @@ -767,14 +769,6 @@ packages: resolution: {integrity: sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.26.5': - resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.27.1': - resolution: {integrity: sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g==} - engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.27.2': resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} @@ -810,22 +804,18 @@ packages: resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.25.9': - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} - engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.27.1': resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + '@babel/helper-module-transforms@7.27.1': + resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-module-transforms@7.27.1': - resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==} + '@babel/helper-module-transforms@7.27.3': + resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -872,10 +862,6 @@ packages: resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} @@ -888,10 +874,6 @@ packages: resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.27.1': resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} @@ -900,22 +882,17 @@ packages: resolution: {integrity: sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.27.1': - resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==} + '@babel/helpers@7.27.6': + resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.5': - resolution: {integrity: sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/parser@7.26.9': - resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} + '@babel/parser@7.27.1': + resolution: {integrity: sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.27.1': - resolution: {integrity: sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==} + '@babel/parser@7.27.5': + resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==} engines: {node: '>=6.0.0'} hasBin: true @@ -1537,42 +1514,30 @@ packages: resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==} engines: {node: '>=6.9.0'} - '@babel/template@7.25.9': - resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.26.9': - resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} - engines: {node: '>=6.9.0'} - '@babel/template@7.27.1': resolution: {integrity: sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.26.5': - resolution: {integrity: sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.26.9': - resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==} + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} '@babel/traverse@7.27.1': resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==} engines: {node: '>=6.9.0'} - '@babel/types@7.26.5': - resolution: {integrity: sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.26.9': - resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} + '@babel/traverse@7.27.4': + resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==} engines: {node: '>=6.9.0'} '@babel/types@7.27.1': resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} engines: {node: '>=6.9.0'} + '@babel/types@7.27.6': + resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==} + engines: {node: '>=6.9.0'} + '@biomejs/biome@1.9.4': resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} engines: {node: '>=14.21.3'} @@ -1662,14 +1627,14 @@ packages: '@changesets/apply-release-plan@7.0.12': resolution: {integrity: sha512-EaET7As5CeuhTzvXTQCRZeBUcisoYPDDcXvgTE/2jmmypKp0RC7LxKj/yzqeh/1qFTZI7oDGFcL1PHRuQuketQ==} - '@changesets/assemble-release-plan@6.0.7': - resolution: {integrity: sha512-vS5J92Rm7ZUcrvtu6WvggGWIdohv8s1/3ypRYQX8FsPO+KPDx6JaNC3YwSfh2umY/faGGfNnq42A7PRT0aZPFw==} + '@changesets/assemble-release-plan@6.0.8': + resolution: {integrity: sha512-y8+8LvZCkKJdbUlpXFuqcavpzJR80PN0OIfn8HZdwK7Sh6MgLXm4hKY5vu6/NDoKp8lAlM4ERZCqRMLxP4m+MQ==} '@changesets/changelog-git@0.2.1': resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} - '@changesets/cli@2.29.3': - resolution: {integrity: sha512-TNhKr6Loc7I0CSD9LpAyVNSxWBHElXVmmvQYIZQvaMan5jddmL7geo3+08Wi7ImgHFVNB0Nhju/LzXqlrkoOxg==} + '@changesets/cli@2.29.4': + resolution: {integrity: sha512-VW30x9oiFp/un/80+5jLeWgEU6Btj8IqOgI+X/zAYu4usVOWXjPIK5jSSlt5jsCU7/6Z7AxEkarxBxGUqkAmNg==} hasBin: true '@changesets/config@3.1.1': @@ -1681,8 +1646,8 @@ packages: '@changesets/get-dependents-graph@2.1.3': resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==} - '@changesets/get-release-plan@4.0.11': - resolution: {integrity: sha512-4DZpsewsc/1m5TArVg5h1c0U94am+cJBnu3izAM3yYIZr8+zZwa3AXYdEyCNURzjx0wWr80u/TWoxshbwdZXOA==} + '@changesets/get-release-plan@4.0.12': + resolution: {integrity: sha512-KukdEgaafnyGryUwpHG2kZ7xJquOmWWWk5mmoeQaSvZTWH1DC5D/Sw6ClgGFYtQnOMSQhgoEbDxAbpIIayKH1g==} '@changesets/get-version-range-type@0.4.0': resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} @@ -2622,6 +2587,9 @@ packages: '@graphprotocol/grc-20@0.17.0': resolution: {integrity: sha512-y/ufqEdvrL06YebzAoQJXuIHKNoi6RmnLITH+OBMHpExjE+fDSB58RxKkRR6KN2ciMO/aoEt/clY1vbcSNwkOA==} + '@graphprotocol/grc-20@0.17.1': + resolution: {integrity: sha512-JX7tUuILGh1bgdSFlwNyrn4i5GEF40NNsj7MgyjVw7mfbXVQaymsxfzDBCSE7ADEpeSwyOJ/5BMq9gT7YIv0vA==} + '@graphql-codegen/add@5.0.3': resolution: {integrity: sha512-SxXPmramkth8XtBlAHu4H4jYcYXM/o3p01+psU+0NADQowA8jtYkK6MW5rV6T+CxkEaNZItfSmZRPgIuypcqnA==} peerDependencies: @@ -4696,6 +4664,9 @@ packages: '@types/bonjour@3.5.13': resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + '@types/chai@5.2.2': + resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + '@types/connect-history-api-fallback@1.5.4': resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} @@ -4708,6 +4679,9 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/eslint-scope@3.7.7': resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} @@ -4909,34 +4883,34 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 - '@vitest/expect@3.1.3': - resolution: {integrity: sha512-7FTQQuuLKmN1Ig/h+h/GO+44Q1IlglPlR2es4ab7Yvfx+Uk5xsv+Ykk+MEt/M2Yn/xGmzaLKxGw2lgy2bwuYqg==} + '@vitest/expect@3.2.3': + resolution: {integrity: sha512-W2RH2TPWVHA1o7UmaFKISPvdicFJH+mjykctJFoAkUw+SPTJTGjUNdKscFBrqM7IPnCVu6zihtKYa7TkZS1dkQ==} - '@vitest/mocker@3.1.3': - resolution: {integrity: sha512-PJbLjonJK82uCWHjzgBJZuR7zmAOrSvKk1QBxrennDIgtH4uK0TB1PvYmc0XBCigxxtiAVPfWtAdy4lpz8SQGQ==} + '@vitest/mocker@3.2.3': + resolution: {integrity: sha512-cP6fIun+Zx8he4rbWvi+Oya6goKQDZK+Yq4hhlggwQBbrlOQ4qtZ+G4nxB6ZnzI9lyIb+JnvyiJnPC2AGbKSPA==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@3.1.3': - resolution: {integrity: sha512-i6FDiBeJUGLDKADw2Gb01UtUNb12yyXAqC/mmRWuYl+m/U9GS7s8us5ONmGkGpUUo7/iAYzI2ePVfOZTYvUifA==} + '@vitest/pretty-format@3.2.3': + resolution: {integrity: sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==} - '@vitest/runner@3.1.3': - resolution: {integrity: sha512-Tae+ogtlNfFei5DggOsSUvkIaSuVywujMj6HzR97AHK6XK8i3BuVyIifWAm/sE3a15lF5RH9yQIrbXYuo0IFyA==} + '@vitest/runner@3.2.3': + resolution: {integrity: sha512-83HWYisT3IpMaU9LN+VN+/nLHVBCSIUKJzGxC5RWUOsK1h3USg7ojL+UXQR3b4o4UBIWCYdD2fxuzM7PQQ1u8w==} - '@vitest/snapshot@3.1.3': - resolution: {integrity: sha512-XVa5OPNTYUsyqG9skuUkFzAeFnEzDp8hQu7kZ0N25B1+6KjGm4hWLtURyBbsIAOekfWQ7Wuz/N/XXzgYO3deWQ==} + '@vitest/snapshot@3.2.3': + resolution: {integrity: sha512-9gIVWx2+tysDqUmmM1L0hwadyumqssOL1r8KJipwLx5JVYyxvVRfxvMq7DaWbZZsCqZnu/dZedaZQh4iYTtneA==} - '@vitest/spy@3.1.3': - resolution: {integrity: sha512-x6w+ctOEmEXdWaa6TO4ilb7l9DxPR5bwEb6hILKuxfU1NqWT2mpJD9NJN7t3OTfxmVlOMrvtoFJGdgyzZ605lQ==} + '@vitest/spy@3.2.3': + resolution: {integrity: sha512-JHu9Wl+7bf6FEejTCREy+DmgWe+rQKbK+y32C/k5f4TBIAlijhJbRBIRIOCEpVevgRsCQR2iHRUH2/qKVM/plw==} - '@vitest/utils@3.1.3': - resolution: {integrity: sha512-2Ltrpht4OmHO9+c/nmHtF09HWiyWdworqnHIwjfvDyWjuwKbdkcS9AnhsDn+8E2RM4x++foD1/tNuLPVvWG1Rg==} + '@vitest/utils@3.2.3': + resolution: {integrity: sha512-4zFBCU5Pf+4Z6v+rwnZ1HU1yzOKKvDkMXZrymE2PBlbjKJRlrOxbvpfPSvJTGRIwGoahaOGvp+kbCoxifhzJ1Q==} '@wallet-standard/app@1.1.0': resolution: {integrity: sha512-3CijvrO9utx598kjr45hTbbeeykQrQfKmSnxeWOgU25TOEpvcipD/bYDQWIqUv1Oc6KK4YStokSMu/FBNecGUQ==} @@ -6184,6 +6158,15 @@ packages: supports-color: optional: true + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} @@ -6431,6 +6414,9 @@ packages: effect@3.16.3: resolution: {integrity: sha512-SWndb1UavNWvet1+hnkU4qp3EHtnmDKhUeP14eB+7vf/2nCFlM77/oIjdDeZctveibNjE65P9H/sBBmF0NTy/w==} + effect@3.16.5: + resolution: {integrity: sha512-7nA+ZPMLoHItabNRV95RpMtwVw2k3BDNhILP4ffo8dG7zGR04XGjarP1JbO+jdBbTRET3eGx1Nz+hWB9kSOajw==} + electron-to-chromium@1.5.152: resolution: {integrity: sha512-xBOfg/EBaIlVsHipHl2VdTPJRSvErNUaqW8ejTq5OlOlIYx1wOllCHsAvAIrr55jD1IYEfdR86miUEt8H5IeJg==} @@ -7724,6 +7710,9 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -9012,8 +9001,8 @@ packages: resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} engines: {node: '>=14.16'} - pkg-pr-new@0.0.43: - resolution: {integrity: sha512-BxadQyJbbt7BtInyg82I73ztPOftPmDF1ttpTiJ1FpCp4p3zt5sXvDLm3V1GA8ukxa8MSvsI1+BJmsR54FLBpg==} + pkg-pr-new@0.0.51: + resolution: {integrity: sha512-jilf8dCTUE/iXaJSaNw5iPrNcSWd0s1b2deVXaTJVY3r610TBiio3uWjkmFIs2okThyPq8O+H55KcBcc+baBIQ==} hasBin: true pkg-types@1.3.1: @@ -10060,11 +10049,6 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.1: resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} @@ -10422,6 +10406,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strip-literal@3.0.0: + resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} + style-to-js@1.1.16: resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} @@ -10616,16 +10603,20 @@ packages: resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} engines: {node: '>=12.0.0'} - tinypool@1.0.2: - resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + engines: {node: '>=12.0.0'} + + tinypool@1.1.0: + resolution: {integrity: sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==} engines: {node: ^18.0.0 || >=20.0.0} tinyrainbow@2.0.0: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + tinyspy@4.0.3: + resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} engines: {node: '>=14.0.0'} title-case@3.0.3: @@ -11122,8 +11113,8 @@ packages: typescript: optional: true - vite-node@3.1.3: - resolution: {integrity: sha512-uHV4plJ2IxCl4u1up1FQRrqclylKAogbtBfOTwcuJ28xFi+89PZ57BRh+naIRvH70HPwxy5QHYzg1OrEaC7AbA==} + vite-node@3.2.3: + resolution: {integrity: sha512-gc8aAifGuDIpZHrPjuHyP4dpQmYXqWw7D1GmDnWeNWP654UEXzVfQ5IHPSK5HaHkwB/+p1atpYpSdw/2kOv8iQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true @@ -11172,16 +11163,16 @@ packages: yaml: optional: true - vitest@3.1.3: - resolution: {integrity: sha512-188iM4hAHQ0km23TN/adso1q5hhwKqUpv+Sd6p5sOuh6FhQnRNW3IsiIpvxqahtBabsJ2SLZgmGSpcYK4wQYJw==} + vitest@3.2.3: + resolution: {integrity: sha512-E6U2ZFXe3N/t4f5BwUaVCKRLHqUpk1CBWeMh78UT4VaTPH/2dyvH6ALl29JTovEPu9dVKr/K/J4PkXgrMbw4Ww==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.1.3 - '@vitest/ui': 3.1.3 + '@vitest/browser': 3.2.3 + '@vitest/ui': 3.2.3 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -11656,12 +11647,12 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@ardatan/relay-compiler@12.0.1(@babel/core@7.27.1)(encoding@0.1.13)(graphql@16.11.0)': + '@ardatan/relay-compiler@12.0.1(@babel/core@7.27.4)(encoding@0.1.13)(graphql@16.11.0)': dependencies: - '@babel/generator': 7.26.9 - '@babel/parser': 7.26.9 + '@babel/generator': 7.27.1 + '@babel/parser': 7.27.1 '@babel/runtime': 7.27.1 - babel-preset-fbjs: 3.4.0(@babel/core@7.27.1) + babel-preset-fbjs: 3.4.0(@babel/core@7.27.4) chalk: 4.1.2 fb-watchman: 2.0.2 fbjs: 3.0.5(encoding@0.1.13) @@ -11712,9 +11703,9 @@ snapshots: dependencies: uuid: 9.0.1 - '@babel/cli@7.27.2(@babel/core@7.27.1)': + '@babel/cli@7.27.2(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@jridgewell/trace-mapping': 0.3.25 commander: 6.2.1 convert-source-map: 2.0.0 @@ -11738,24 +11729,20 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.26.5': {} - - '@babel/compat-data@7.27.1': {} - '@babel/compat-data@7.27.2': {} - '@babel/core@7.27.1': + '@babel/core@7.27.4': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.27.1 - '@babel/generator': 7.27.1 - '@babel/helper-compilation-targets': 7.27.1 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) - '@babel/helpers': 7.27.1 - '@babel/parser': 7.27.1 - '@babel/template': 7.27.1 - '@babel/traverse': 7.27.1 - '@babel/types': 7.27.1 + '@babel/generator': 7.27.5 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) + '@babel/helpers': 7.27.6 + '@babel/parser': 7.27.5 + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.6 convert-source-map: 2.0.0 debug: 4.4.0 gensync: 1.0.0-beta.2 @@ -11764,26 +11751,18 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.26.5': + '@babel/generator@7.27.1': dependencies: - '@babel/parser': 7.26.5 - '@babel/types': 7.26.5 + '@babel/parser': 7.27.1 + '@babel/types': 7.27.1 '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 - '@babel/generator@7.26.9': + '@babel/generator@7.27.5': dependencies: - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.1.0 - - '@babel/generator@7.27.1': - dependencies: - '@babel/parser': 7.27.1 - '@babel/types': 7.27.1 + '@babel/parser': 7.27.5 + '@babel/types': 7.27.6 '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 @@ -11796,67 +11775,51 @@ snapshots: dependencies: '@babel/types': 7.27.1 - '@babel/helper-compilation-targets@7.26.5': - dependencies: - '@babel/compat-data': 7.26.5 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.2 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-compilation-targets@7.27.1': - dependencies: - '@babel/compat-data': 7.27.1 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.24.2 - lru-cache: 5.1.1 - semver: 6.3.1 - '@babel/helper-compilation-targets@7.27.2': dependencies: '@babel/compat-data': 7.27.2 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.24.2 + browserslist: 4.24.5 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.27.1)': + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.27.1) + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.27.4) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.26.9 + '@babel/traverse': 7.27.1 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.1)': + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-annotate-as-pure': 7.27.1 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 '@babel/traverse': 7.27.1 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.1)': + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-annotate-as-pure': 7.27.1 regexpu-core: 6.2.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.27.1)': + '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-compilation-targets': 7.27.1 + '@babel/core': 7.27.4 + '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.0 lodash.debounce: 4.0.8 @@ -11866,8 +11829,8 @@ snapshots: '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/traverse': 7.26.9 - '@babel/types': 7.26.9 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color @@ -11878,13 +11841,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.25.9': - dependencies: - '@babel/traverse': 7.26.5 - '@babel/types': 7.26.5 - transitivePeerDependencies: - - supports-color - '@babel/helper-module-imports@7.27.1': dependencies: '@babel/traverse': 7.27.1 @@ -11892,27 +11848,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.27.1)': + '@babel/helper-module-transforms@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.5 + '@babel/core': 7.27.4 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.27.1(@babel/core@7.27.1)': + '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.1 + '@babel/traverse': 7.27.4 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.25.9': dependencies: - '@babel/types': 7.26.9 + '@babel/types': 7.27.1 '@babel/helper-optimise-call-expression@7.27.1': dependencies: @@ -11922,27 +11878,27 @@ snapshots: '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.1)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-annotate-as-pure': 7.27.1 '@babel/helper-wrap-function': 7.27.1 '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.26.5(@babel/core@7.27.1)': + '@babel/helper-replace-supers@7.26.5(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.1)': + '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 '@babel/traverse': 7.27.1 @@ -11951,8 +11907,8 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: - '@babel/traverse': 7.26.9 - '@babel/types': 7.26.9 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color @@ -11963,16 +11919,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.25.9': {} - '@babel/helper-string-parser@7.27.1': {} '@babel/helper-validator-identifier@7.25.9': {} '@babel/helper-validator-identifier@7.27.1': {} - '@babel/helper-validator-option@7.25.9': {} - '@babel/helper-validator-option@7.27.1': {} '@babel/helper-wrap-function@7.27.1': @@ -11983,754 +11935,750 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helpers@7.27.1': - dependencies: - '@babel/template': 7.27.1 - '@babel/types': 7.27.1 - - '@babel/parser@7.26.5': + '@babel/helpers@7.27.6': dependencies: - '@babel/types': 7.26.5 - - '@babel/parser@7.26.9': - dependencies: - '@babel/types': 7.26.9 + '@babel/template': 7.27.2 + '@babel/types': 7.27.6 '@babel/parser@7.27.1': dependencies: '@babel/types': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.1)': + '@babel/parser@7.27.5': + dependencies: + '@babel/types': 7.27.6 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.4) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.27.1)': + '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.27.1)': + '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.27.4)': dependencies: - '@babel/compat-data': 7.26.5 - '@babel/core': 7.27.1 - '@babel/helper-compilation-targets': 7.26.5 + '@babel/compat-data': 7.27.2 + '@babel/core': 7.27.4 + '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.1) - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.27.1) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.4) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.27.4) - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.1)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.27.1)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.27.1)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-flow@7.26.0(@babel/core@7.27.1)': + '@babel/plugin-syntax-flow@7.26.0(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.27.1)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.1)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.1) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.4) '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.1) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.4) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.27.1)': + '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-block-scoping@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-block-scoping@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.27.1) - '@babel/traverse': 7.26.9 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.27.4) + '@babel/traverse': 7.27.1 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-classes@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-annotate-as-pure': 7.27.1 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4) '@babel/traverse': 7.27.1 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/template': 7.26.9 + '@babel/template': 7.27.1 - '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.27.1 - '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-destructuring@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-destructuring@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-flow-strip-types@7.26.5(@babel/core@7.27.1)': + '@babel/plugin-transform-flow-strip-types@7.26.5(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.27.1) + '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.27.4) - '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-compilation-targets': 7.26.5 + '@babel/core': 7.27.4 + '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.9 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-literals@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.27.1)': + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-object-rest-spread@7.27.2(@babel/core@7.27.1)': + '@babel/plugin-transform-object-rest-spread@7.27.2(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.27.1) + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.27.4) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-parameters@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-parameters@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-annotate-as-pure': 7.27.1 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-constant-elements@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-react-constant-elements@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-react-display-name@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-react-display-name@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.4) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.25.9 + '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.27.1) - '@babel/types': 7.26.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.27.4) + '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-annotate-as-pure': 7.27.1 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4) '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-annotate-as-pure': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regenerator@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-regenerator@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-runtime@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-runtime@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.27.1) - babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.1) - babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.27.1) + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.27.4) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.4) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.27.4) semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-spread@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-spread@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-annotate-as-pure': 7.27.1 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.4) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/preset-env@7.27.2(@babel/core@7.27.1)': + '@babel/preset-env@7.27.2(@babel/core@7.27.4)': dependencies: '@babel/compat-data': 7.27.2 - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.1) - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.27.1) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-block-scoping': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-classes': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-object-rest-spread': 7.27.2(@babel/core@7.27.1) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-regenerator': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.27.1) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.27.1) - babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.27.1) - babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.1) - babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.27.1) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.4) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.27.4) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-block-scoping': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-classes': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-object-rest-spread': 7.27.2(@babel/core@7.27.4) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-regenerator': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.27.4) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.27.4) + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.27.4) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.4) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.27.4) core-js-compat: 3.42.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.1)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/types': 7.27.1 esutils: 2.0.3 - '@babel/preset-react@7.27.1(@babel/core@7.27.1)': + '@babel/preset-react@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-react-display-name': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-react-display-name': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.27.4) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.27.1(@babel/core@7.27.1)': + '@babel/preset-typescript@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.4) transitivePeerDependencies: - supports-color @@ -12740,37 +12688,19 @@ snapshots: '@babel/runtime@7.27.1': {} - '@babel/template@7.25.9': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.5 - '@babel/types': 7.26.5 - - '@babel/template@7.26.9': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 - '@babel/template@7.27.1': dependencies: '@babel/code-frame': 7.27.1 '@babel/parser': 7.27.1 '@babel/types': 7.27.1 - '@babel/traverse@7.26.5': + '@babel/template@7.27.2': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.5 - '@babel/parser': 7.26.5 - '@babel/template': 7.25.9 - '@babel/types': 7.26.5 - debug: 4.4.0 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.27.5 + '@babel/types': 7.27.6 - '@babel/traverse@7.26.9': + '@babel/traverse@7.27.1': dependencies: '@babel/code-frame': 7.27.1 '@babel/generator': 7.27.1 @@ -12782,29 +12712,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/traverse@7.27.1': + '@babel/traverse@7.27.4': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.27.1 - '@babel/parser': 7.27.1 - '@babel/template': 7.27.1 - '@babel/types': 7.27.1 + '@babel/generator': 7.27.5 + '@babel/parser': 7.27.5 + '@babel/template': 7.27.2 + '@babel/types': 7.27.6 debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.26.5': + '@babel/types@7.27.1': dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 - '@babel/types@7.26.9': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - - '@babel/types@7.27.1': + '@babel/types@7.27.6': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 @@ -12878,30 +12803,30 @@ snapshots: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.6.3 + semver: 7.7.1 - '@changesets/assemble-release-plan@6.0.7': + '@changesets/assemble-release-plan@6.0.8': dependencies: '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.1.3 '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 - semver: 7.6.3 + semver: 7.7.1 '@changesets/changelog-git@0.2.1': dependencies: '@changesets/types': 6.1.0 - '@changesets/cli@2.29.3': + '@changesets/cli@2.29.4': dependencies: '@changesets/apply-release-plan': 7.0.12 - '@changesets/assemble-release-plan': 6.0.7 + '@changesets/assemble-release-plan': 6.0.8 '@changesets/changelog-git': 0.2.1 '@changesets/config': 3.1.1 '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.1.3 - '@changesets/get-release-plan': 4.0.11 + '@changesets/get-release-plan': 4.0.12 '@changesets/git': 3.0.4 '@changesets/logger': 0.1.1 '@changesets/pre': 2.0.2 @@ -12920,7 +12845,7 @@ snapshots: package-manager-detector: 0.2.8 picocolors: 1.1.1 resolve-from: 5.0.0 - semver: 7.6.3 + semver: 7.7.1 spawndamnit: 3.0.1 term-size: 2.2.1 @@ -12943,11 +12868,11 @@ snapshots: '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 picocolors: 1.1.1 - semver: 7.6.3 + semver: 7.7.1 - '@changesets/get-release-plan@4.0.11': + '@changesets/get-release-plan@4.0.12': dependencies: - '@changesets/assemble-release-plan': 6.0.7 + '@changesets/assemble-release-plan': 6.0.8 '@changesets/config': 3.1.1 '@changesets/pre': 2.0.2 '@changesets/read': 0.6.5 @@ -13288,13 +13213,13 @@ snapshots: '@docusaurus/babel@3.7.0(acorn@8.14.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/generator': 7.27.1 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.1) - '@babel/plugin-transform-runtime': 7.27.1(@babel/core@7.27.1) - '@babel/preset-env': 7.27.2(@babel/core@7.27.1) - '@babel/preset-react': 7.27.1(@babel/core@7.27.1) - '@babel/preset-typescript': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.4) + '@babel/plugin-transform-runtime': 7.27.1(@babel/core@7.27.4) + '@babel/preset-env': 7.27.2(@babel/core@7.27.4) + '@babel/preset-react': 7.27.1(@babel/core@7.27.4) + '@babel/preset-typescript': 7.27.1(@babel/core@7.27.4) '@babel/runtime': 7.27.1 '@babel/runtime-corejs3': 7.27.1 '@babel/traverse': 7.27.1 @@ -13315,13 +13240,13 @@ snapshots: '@docusaurus/bundler@3.7.0(acorn@8.14.0)(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@docusaurus/babel': 3.7.0(acorn@8.14.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/cssnano-preset': 3.7.0 '@docusaurus/logger': 3.7.0 '@docusaurus/types': 3.7.0(acorn@8.14.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils': 3.7.0(acorn@8.14.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - babel-loader: 9.2.1(@babel/core@7.27.1)(webpack@5.99.8) + babel-loader: 9.2.1(@babel/core@7.27.4)(webpack@5.99.8) clean-css: 5.3.3 copy-webpack-plugin: 11.0.0(webpack@5.99.8) css-loader: 6.11.0(webpack@5.99.8) @@ -14161,10 +14086,10 @@ snapshots: dependencies: effect: 3.16.3 - '@effect/vitest@0.23.3(effect@3.16.3)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.29)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0))': + '@effect/vitest@0.23.3(effect@3.16.3)(vitest@3.2.3(@types/debug@4.1.12)(@types/node@22.15.29)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0))': dependencies: effect: 3.16.3 - vitest: 3.1.3(@types/debug@4.1.12)(@types/node@22.15.29)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0) + vitest: 3.2.3(@types/debug@4.1.12)(@types/node@22.15.29)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0) '@effect/workflow@0.1.2(effect@3.16.3)': dependencies: @@ -14634,8 +14559,8 @@ snapshots: '@graphprotocol/grc-20@0.11.5(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.24.2))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.2)': dependencies: '@bufbuild/protobuf': 1.10.1 - '@changesets/cli': 2.29.3 - effect: 3.16.3 + '@changesets/cli': 2.29.4 + effect: 3.16.5 ethers: 5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) fflate: 0.8.2 graphql-request: 7.1.2(graphql@16.11.0) @@ -14655,8 +14580,29 @@ snapshots: '@graphprotocol/grc-20@0.17.0(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.24.2))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.2)': dependencies: '@bufbuild/protobuf': 1.10.1 - '@changesets/cli': 2.29.3 - effect: 3.16.3 + '@changesets/cli': 2.29.4 + effect: 3.16.5 + ethers: 5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + fflate: 0.8.2 + graphql-request: 7.2.0(graphql@16.11.0) + image-size: 2.0.2 + permissionless: 0.2.44(ox@0.6.7(typescript@5.8.3)(zod@3.24.2))(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.2)) + position-strings: 2.0.1 + uuid: 11.1.0 + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.2) + transitivePeerDependencies: + - bufferutil + - graphql + - ox + - typescript + - utf-8-validate + - zod + + '@graphprotocol/grc-20@0.17.1(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.24.2))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.2)': + dependencies: + '@bufbuild/protobuf': 1.10.1 + '@changesets/cli': 2.29.4 + effect: 3.16.5 ethers: 5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) fflate: 0.8.2 graphql-request: 7.2.0(graphql@16.11.0) @@ -14679,12 +14625,12 @@ snapshots: graphql: 16.11.0 tslib: 2.6.2 - '@graphql-codegen/cli@5.0.6(@babel/core@7.27.1)(@parcel/watcher@2.5.1)(@types/node@22.15.29)(bufferutil@4.0.9)(encoding@0.1.13)(enquirer@2.4.1)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@graphql-codegen/cli@5.0.6(@babel/core@7.27.4)(@parcel/watcher@2.5.1)(@types/node@22.15.29)(bufferutil@4.0.9)(encoding@0.1.13)(enquirer@2.4.1)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@babel/generator': 7.27.1 '@babel/template': 7.27.1 '@babel/types': 7.27.1 - '@graphql-codegen/client-preset': 4.8.1(@babel/core@7.27.1)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0) + '@graphql-codegen/client-preset': 4.8.1(@babel/core@7.27.4)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0) '@graphql-codegen/core': 4.0.2(graphql@16.11.0) '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.11.0) '@graphql-tools/apollo-engine-loader': 8.0.13(graphql@16.11.0) @@ -14731,17 +14677,17 @@ snapshots: - typescript - utf-8-validate - '@graphql-codegen/client-preset@4.8.1(@babel/core@7.27.1)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)': + '@graphql-codegen/client-preset@4.8.1(@babel/core@7.27.4)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)': dependencies: '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.27.1 '@graphql-codegen/add': 5.0.3(graphql@16.11.0) - '@graphql-codegen/gql-tag-operations': 4.0.17(@babel/core@7.27.1)(encoding@0.1.13)(graphql@16.11.0) + '@graphql-codegen/gql-tag-operations': 4.0.17(@babel/core@7.27.4)(encoding@0.1.13)(graphql@16.11.0) '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.11.0) - '@graphql-codegen/typed-document-node': 5.1.1(@babel/core@7.27.1)(encoding@0.1.13)(graphql@16.11.0) - '@graphql-codegen/typescript': 4.1.6(@babel/core@7.27.1)(encoding@0.1.13)(graphql@16.11.0) - '@graphql-codegen/typescript-operations': 4.6.1(@babel/core@7.27.1)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0) - '@graphql-codegen/visitor-plugin-common': 5.8.0(@babel/core@7.27.1)(encoding@0.1.13)(graphql@16.11.0) + '@graphql-codegen/typed-document-node': 5.1.1(@babel/core@7.27.4)(encoding@0.1.13)(graphql@16.11.0) + '@graphql-codegen/typescript': 4.1.6(@babel/core@7.27.4)(encoding@0.1.13)(graphql@16.11.0) + '@graphql-codegen/typescript-operations': 4.6.1(@babel/core@7.27.4)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0) + '@graphql-codegen/visitor-plugin-common': 5.8.0(@babel/core@7.27.4)(encoding@0.1.13)(graphql@16.11.0) '@graphql-tools/documents': 1.0.1(graphql@16.11.0) '@graphql-tools/utils': 10.7.2(graphql@16.11.0) '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) @@ -14762,10 +14708,10 @@ snapshots: graphql: 16.11.0 tslib: 2.6.2 - '@graphql-codegen/gql-tag-operations@4.0.17(@babel/core@7.27.1)(encoding@0.1.13)(graphql@16.11.0)': + '@graphql-codegen/gql-tag-operations@4.0.17(@babel/core@7.27.4)(encoding@0.1.13)(graphql@16.11.0)': dependencies: '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.11.0) - '@graphql-codegen/visitor-plugin-common': 5.8.0(@babel/core@7.27.1)(encoding@0.1.13)(graphql@16.11.0) + '@graphql-codegen/visitor-plugin-common': 5.8.0(@babel/core@7.27.4)(encoding@0.1.13)(graphql@16.11.0) '@graphql-tools/utils': 10.7.2(graphql@16.11.0) auto-bind: 4.0.0 graphql: 16.11.0 @@ -14792,10 +14738,10 @@ snapshots: graphql: 16.11.0 tslib: 2.6.2 - '@graphql-codegen/typed-document-node@5.1.1(@babel/core@7.27.1)(encoding@0.1.13)(graphql@16.11.0)': + '@graphql-codegen/typed-document-node@5.1.1(@babel/core@7.27.4)(encoding@0.1.13)(graphql@16.11.0)': dependencies: '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.11.0) - '@graphql-codegen/visitor-plugin-common': 5.8.0(@babel/core@7.27.1)(encoding@0.1.13)(graphql@16.11.0) + '@graphql-codegen/visitor-plugin-common': 5.8.0(@babel/core@7.27.4)(encoding@0.1.13)(graphql@16.11.0) auto-bind: 4.0.0 change-case-all: 1.0.15 graphql: 16.11.0 @@ -14805,11 +14751,11 @@ snapshots: - encoding - supports-color - '@graphql-codegen/typescript-operations@4.6.1(@babel/core@7.27.1)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)': + '@graphql-codegen/typescript-operations@4.6.1(@babel/core@7.27.4)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)': dependencies: '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.11.0) - '@graphql-codegen/typescript': 4.1.6(@babel/core@7.27.1)(encoding@0.1.13)(graphql@16.11.0) - '@graphql-codegen/visitor-plugin-common': 5.8.0(@babel/core@7.27.1)(encoding@0.1.13)(graphql@16.11.0) + '@graphql-codegen/typescript': 4.1.6(@babel/core@7.27.4)(encoding@0.1.13)(graphql@16.11.0) + '@graphql-codegen/visitor-plugin-common': 5.8.0(@babel/core@7.27.4)(encoding@0.1.13)(graphql@16.11.0) auto-bind: 4.0.0 graphql: 16.11.0 tslib: 2.6.2 @@ -14820,11 +14766,11 @@ snapshots: - encoding - supports-color - '@graphql-codegen/typescript@4.1.6(@babel/core@7.27.1)(encoding@0.1.13)(graphql@16.11.0)': + '@graphql-codegen/typescript@4.1.6(@babel/core@7.27.4)(encoding@0.1.13)(graphql@16.11.0)': dependencies: '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.11.0) '@graphql-codegen/schema-ast': 4.1.0(graphql@16.11.0) - '@graphql-codegen/visitor-plugin-common': 5.8.0(@babel/core@7.27.1)(encoding@0.1.13)(graphql@16.11.0) + '@graphql-codegen/visitor-plugin-common': 5.8.0(@babel/core@7.27.4)(encoding@0.1.13)(graphql@16.11.0) auto-bind: 4.0.0 graphql: 16.11.0 tslib: 2.6.2 @@ -14833,11 +14779,11 @@ snapshots: - encoding - supports-color - '@graphql-codegen/visitor-plugin-common@5.8.0(@babel/core@7.27.1)(encoding@0.1.13)(graphql@16.11.0)': + '@graphql-codegen/visitor-plugin-common@5.8.0(@babel/core@7.27.4)(encoding@0.1.13)(graphql@16.11.0)': dependencies: '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.11.0) '@graphql-tools/optimize': 2.0.0(graphql@16.11.0) - '@graphql-tools/relay-operation-optimizer': 7.0.12(@babel/core@7.27.1)(encoding@0.1.13)(graphql@16.11.0) + '@graphql-tools/relay-operation-optimizer': 7.0.12(@babel/core@7.27.4)(encoding@0.1.13)(graphql@16.11.0) '@graphql-tools/utils': 10.7.2(graphql@16.11.0) auto-bind: 4.0.0 change-case-all: 1.0.15 @@ -14989,9 +14935,9 @@ snapshots: '@graphql-tools/graphql-tag-pluck@8.3.12(graphql@16.11.0)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/parser': 7.27.1 - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.4) '@babel/traverse': 7.27.1 '@babel/types': 7.27.1 '@graphql-tools/utils': 10.7.2(graphql@16.11.0) @@ -15066,9 +15012,9 @@ snapshots: - supports-color - utf-8-validate - '@graphql-tools/relay-operation-optimizer@7.0.12(@babel/core@7.27.1)(encoding@0.1.13)(graphql@16.11.0)': + '@graphql-tools/relay-operation-optimizer@7.0.12(@babel/core@7.27.4)(encoding@0.1.13)(graphql@16.11.0)': dependencies: - '@ardatan/relay-compiler': 12.0.1(@babel/core@7.27.1)(encoding@0.1.13)(graphql@16.11.0) + '@ardatan/relay-compiler': 12.0.1(@babel/core@7.27.4)(encoding@0.1.13)(graphql@16.11.0) '@graphql-tools/utils': 10.7.2(graphql@16.11.0) graphql: 16.11.0 tslib: 2.8.1 @@ -16789,54 +16735,54 @@ snapshots: '@standard-schema/spec@1.0.0': {} - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.27.1)': + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.27.1)': + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.27.1)': + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.27.1)': + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.27.1)': + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.27.1)': + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.27.1)': + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.27.1)': + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 - '@svgr/babel-preset@8.1.0(@babel/core@7.27.1)': + '@svgr/babel-preset@8.1.0(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.1 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.27.1) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.27.1) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.27.1) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.27.1) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.27.1) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.27.1) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.27.1) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.27.4) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.27.4) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.27.4) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.27.4) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.27.4) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.27.4) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.27.4) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.27.4) '@svgr/core@8.1.0(typescript@5.8.3)': dependencies: - '@babel/core': 7.27.1 - '@svgr/babel-preset': 8.1.0(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@svgr/babel-preset': 8.1.0(@babel/core@7.27.4) camelcase: 6.3.0 cosmiconfig: 8.3.6(typescript@5.8.3) snake-case: 3.0.4 @@ -16851,8 +16797,8 @@ snapshots: '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.8.3))': dependencies: - '@babel/core': 7.27.1 - '@svgr/babel-preset': 8.1.0(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@svgr/babel-preset': 8.1.0(@babel/core@7.27.4) '@svgr/core': 8.1.0(typescript@5.8.3) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 @@ -16870,11 +16816,11 @@ snapshots: '@svgr/webpack@8.1.0(typescript@5.8.3)': dependencies: - '@babel/core': 7.27.1 - '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.27.1) - '@babel/preset-env': 7.27.2(@babel/core@7.27.1) - '@babel/preset-react': 7.27.1(@babel/core@7.27.1) - '@babel/preset-typescript': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.27.4) + '@babel/preset-env': 7.27.2(@babel/core@7.27.4) + '@babel/preset-react': 7.27.1(@babel/core@7.27.4) + '@babel/preset-typescript': 7.27.1(@babel/core@7.27.4) '@svgr/core': 8.1.0(typescript@5.8.3) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.8.3)) '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.8.3))(typescript@5.8.3) @@ -17267,9 +17213,9 @@ snapshots: '@tanstack/router-plugin@1.120.13(@tanstack/react-router@1.120.15(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0))(webpack@5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2))': dependencies: - '@babel/core': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.4) '@babel/template': 7.27.1 '@babel/traverse': 7.27.1 '@babel/types': 7.27.1 @@ -17293,9 +17239,9 @@ snapshots: '@tanstack/router-plugin@1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0))(webpack@5.99.8)': dependencies: - '@babel/core': 7.27.1 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.27.4) '@babel/template': 7.27.1 '@babel/traverse': 7.27.1 '@babel/types': 7.27.1 @@ -17399,6 +17345,10 @@ snapshots: dependencies: '@types/node': 22.15.29 + '@types/chai@5.2.2': + dependencies: + '@types/deep-eql': 4.0.2 + '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.0.1 @@ -17416,6 +17366,8 @@ snapshots: dependencies: '@types/ms': 0.7.34 + '@types/deep-eql@4.0.2': {} + '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 9.6.1 @@ -17634,9 +17586,9 @@ snapshots: '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0))': dependencies: - '@babel/core': 7.27.1 - '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.27.4) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0) @@ -17645,9 +17597,9 @@ snapshots: '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0))': dependencies: - '@babel/core': 7.27.1 - '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.27.4) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0) @@ -17656,9 +17608,9 @@ snapshots: '@vitejs/plugin-react@4.5.0(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0))': dependencies: - '@babel/core': 7.27.1 - '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.27.4) '@rolldown/pluginutils': 1.0.0-beta.9 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 @@ -17666,43 +17618,45 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/expect@3.1.3': + '@vitest/expect@3.2.3': dependencies: - '@vitest/spy': 3.1.3 - '@vitest/utils': 3.1.3 + '@types/chai': 5.2.2 + '@vitest/spy': 3.2.3 + '@vitest/utils': 3.2.3 chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.1.3(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0))': + '@vitest/mocker@3.2.3(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0))': dependencies: - '@vitest/spy': 3.1.3 + '@vitest/spy': 3.2.3 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0) - '@vitest/pretty-format@3.1.3': + '@vitest/pretty-format@3.2.3': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.1.3': + '@vitest/runner@3.2.3': dependencies: - '@vitest/utils': 3.1.3 + '@vitest/utils': 3.2.3 pathe: 2.0.3 + strip-literal: 3.0.0 - '@vitest/snapshot@3.1.3': + '@vitest/snapshot@3.2.3': dependencies: - '@vitest/pretty-format': 3.1.3 + '@vitest/pretty-format': 3.2.3 magic-string: 0.30.17 pathe: 2.0.3 - '@vitest/spy@3.1.3': + '@vitest/spy@3.2.3': dependencies: - tinyspy: 3.0.2 + tinyspy: 4.0.3 - '@vitest/utils@3.1.3': + '@vitest/utils@3.2.3': dependencies: - '@vitest/pretty-format': 3.1.3 + '@vitest/pretty-format': 3.2.3 loupe: 3.1.3 tinyrainbow: 2.0.0 @@ -18573,23 +18527,23 @@ snapshots: babel-dead-code-elimination@1.0.10: dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 '@babel/parser': 7.27.1 '@babel/traverse': 7.27.1 '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color - babel-loader@9.2.1(@babel/core@7.27.1)(webpack@5.99.8): + babel-loader@9.2.1(@babel/core@7.27.4)(webpack@5.99.8): dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 find-cache-dir: 4.0.0 schema-utils: 4.3.2 webpack: 5.99.8 - babel-plugin-annotate-pure-calls@0.5.0(@babel/core@7.27.1): + babel-plugin-annotate-pure-calls@0.5.0(@babel/core@7.27.4): dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 babel-plugin-dynamic-import-node@2.3.3: dependencies: @@ -18601,61 +18555,61 @@ snapshots: cosmiconfig: 7.1.0 resolve: 1.22.10 - babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.27.1): + babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.27.4): dependencies: - '@babel/compat-data': 7.27.1 - '@babel/core': 7.27.1 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.1) + '@babel/compat-data': 7.27.2 + '@babel/core': 7.27.4 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.4) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.27.1): + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.27.4): dependencies: - '@babel/core': 7.27.1 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.4) core-js-compat: 3.42.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.27.1): + babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.27.4): dependencies: - '@babel/core': 7.27.1 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.1) + '@babel/core': 7.27.4 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.4) transitivePeerDependencies: - supports-color babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: {} - babel-preset-fbjs@3.4.0(@babel/core@7.27.1): - dependencies: - '@babel/core': 7.27.1 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.1) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.27.1) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.27.1) - '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.27.1) - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.1) - '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.27.1) - '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-transform-flow-strip-types': 7.26.5(@babel/core@7.27.1) - '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.27.1) - '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.27.1) - '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.27.1) + babel-preset-fbjs@3.4.0(@babel/core@7.27.4): + dependencies: + '@babel/core': 7.27.4 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.4) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.27.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.27.4) + '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.27.4) + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.4) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.27.4) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-flow-strip-types': 7.26.5(@babel/core@7.27.4) + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.27.4) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.27.4) + '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.27.4) babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 transitivePeerDependencies: - supports-color @@ -18971,7 +18925,7 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.24.2 + browserslist: 4.24.5 caniuse-lite: 1.0.30001678 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 @@ -19501,7 +19455,7 @@ snapshots: cssnano-preset-advanced@6.1.2(postcss@8.5.3): dependencies: autoprefixer: 10.4.21(postcss@8.5.3) - browserslist: 4.24.2 + browserslist: 4.24.5 cssnano-preset-default: 6.1.2(postcss@8.5.3) postcss: 8.5.3 postcss-discard-unused: 6.0.5(postcss@8.5.3) @@ -19511,7 +19465,7 @@ snapshots: cssnano-preset-default@6.1.2(postcss@8.5.3): dependencies: - browserslist: 4.24.2 + browserslist: 4.24.5 css-declaration-sorter: 7.2.0(postcss@8.5.3) cssnano-utils: 4.0.2(postcss@8.5.3) postcss: 8.5.3 @@ -19589,6 +19543,10 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.4.1: + dependencies: + ms: 2.1.3 + decamelize@1.2.0: {} decimal.js@10.5.0: {} @@ -19820,6 +19778,11 @@ snapshots: '@standard-schema/spec': 1.0.0 fast-check: 3.23.2 + effect@3.16.5: + dependencies: + '@standard-schema/spec': 1.0.0 + fast-check: 3.23.2 + electron-to-chromium@1.5.152: {} electron-to-chromium@1.5.52: {} @@ -21236,6 +21199,10 @@ snapshots: dependencies: ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + isomorphic-ws@5.0.0(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + isomorphic-ws@5.0.0(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -21331,6 +21298,8 @@ snapshots: js-tokens@4.0.0: {} + js-tokens@9.0.1: {} + js-yaml@3.14.1: dependencies: argparse: 1.0.10 @@ -22360,7 +22329,7 @@ snapshots: neo-async@2.6.2: {} - next@15.3.2(@babel/core@7.27.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + next@15.3.2(@babel/core@7.27.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@next/env': 15.3.2 '@swc/counter': 0.1.3 @@ -22370,7 +22339,7 @@ snapshots: postcss: 8.4.31 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - styled-jsx: 5.1.6(@babel/core@7.27.1)(react@19.1.0) + styled-jsx: 5.1.6(@babel/core@7.27.4)(react@19.1.0) optionalDependencies: '@next/swc-darwin-arm64': 15.3.2 '@next/swc-darwin-x64': 15.3.2 @@ -22920,7 +22889,7 @@ snapshots: dependencies: find-up: 6.3.0 - pkg-pr-new@0.0.43: + pkg-pr-new@0.0.51: dependencies: '@jsdevtools/ez-spawn': 3.0.4 '@octokit/action': 6.1.0 @@ -22987,7 +22956,7 @@ snapshots: postcss-colormin@6.1.0(postcss@8.5.3): dependencies: - browserslist: 4.24.2 + browserslist: 4.24.5 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.5.3 @@ -22995,7 +22964,7 @@ snapshots: postcss-convert-values@6.1.0(postcss@8.5.3): dependencies: - browserslist: 4.24.2 + browserslist: 4.24.5 postcss: 8.5.3 postcss-value-parser: 4.2.0 @@ -23128,7 +23097,7 @@ snapshots: postcss-merge-rules@6.1.1(postcss@8.5.3): dependencies: - browserslist: 4.24.2 + browserslist: 4.24.5 caniuse-api: 3.0.0 cssnano-utils: 4.0.2(postcss@8.5.3) postcss: 8.5.3 @@ -23148,7 +23117,7 @@ snapshots: postcss-minify-params@6.1.0(postcss@8.5.3): dependencies: - browserslist: 4.24.2 + browserslist: 4.24.5 cssnano-utils: 4.0.2(postcss@8.5.3) postcss: 8.5.3 postcss-value-parser: 4.2.0 @@ -23217,7 +23186,7 @@ snapshots: postcss-normalize-unicode@6.1.0(postcss@8.5.3): dependencies: - browserslist: 4.24.2 + browserslist: 4.24.5 postcss: 8.5.3 postcss-value-parser: 4.2.0 @@ -23334,7 +23303,7 @@ snapshots: postcss-reduce-initial@6.1.0(postcss@8.5.3): dependencies: - browserslist: 4.24.2 + browserslist: 4.24.5 caniuse-api: 3.0.0 postcss: 8.5.3 @@ -24161,8 +24130,6 @@ snapshots: semver@6.3.1: {} - semver@7.6.3: {} - semver@7.7.1: {} send@0.19.0: @@ -24627,6 +24594,10 @@ snapshots: strip-json-comments@3.1.1: {} + strip-literal@3.0.0: + dependencies: + js-tokens: 9.0.1 + style-to-js@1.1.16: dependencies: style-to-object: 1.0.8 @@ -24649,16 +24620,16 @@ snapshots: stylis: 4.3.2 tslib: 2.6.2 - styled-jsx@5.1.6(@babel/core@7.27.1)(react@19.1.0): + styled-jsx@5.1.6(@babel/core@7.27.4)(react@19.1.0): dependencies: client-only: 0.0.1 react: 19.1.0 optionalDependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.27.4 stylehacks@6.1.1(postcss@8.5.3): dependencies: - browserslist: 4.24.2 + browserslist: 4.24.5 postcss: 8.5.3 postcss-selector-parser: 6.1.2 @@ -24828,11 +24799,16 @@ snapshots: fdir: 6.4.4(picomatch@4.0.2) picomatch: 4.0.2 - tinypool@1.0.2: {} + tinyglobby@0.2.14: + dependencies: + fdir: 6.4.4(picomatch@4.0.2) + picomatch: 4.0.2 + + tinypool@1.1.0: {} tinyrainbow@2.0.0: {} - tinyspy@3.0.2: {} + tinyspy@4.0.3: {} title-case@3.0.3: dependencies: @@ -25313,10 +25289,10 @@ snapshots: - utf-8-validate - zod - vite-node@3.1.3(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0): + vite-node@3.2.3(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0): dependencies: cac: 6.7.14 - debug: 4.4.0 + debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0) @@ -25376,28 +25352,30 @@ snapshots: tsx: 4.19.4 yaml: 2.7.0 - vitest@3.1.3(@types/debug@4.1.12)(@types/node@22.15.29)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0): + vitest@3.2.3(@types/debug@4.1.12)(@types/node@22.15.29)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0): dependencies: - '@vitest/expect': 3.1.3 - '@vitest/mocker': 3.1.3(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0)) - '@vitest/pretty-format': 3.1.3 - '@vitest/runner': 3.1.3 - '@vitest/snapshot': 3.1.3 - '@vitest/spy': 3.1.3 - '@vitest/utils': 3.1.3 + '@types/chai': 5.2.2 + '@vitest/expect': 3.2.3 + '@vitest/mocker': 3.2.3(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0)) + '@vitest/pretty-format': 3.2.3 + '@vitest/runner': 3.2.3 + '@vitest/snapshot': 3.2.3 + '@vitest/spy': 3.2.3 + '@vitest/utils': 3.2.3 chai: 5.2.0 - debug: 4.4.0 + debug: 4.4.1 expect-type: 1.2.1 magic-string: 0.30.17 pathe: 2.0.3 + picomatch: 4.0.2 std-env: 3.9.0 tinybench: 2.9.0 tinyexec: 0.3.2 - tinyglobby: 0.2.13 - tinypool: 1.0.2 + tinyglobby: 0.2.14 + tinypool: 1.1.0 tinyrainbow: 2.0.0 vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0) - vite-node: 3.1.3(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0) + vite-node: 3.2.3(@types/node@22.15.29)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.19.4)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 @@ -25569,7 +25547,7 @@ snapshots: '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.14.0 - browserslist: 4.24.5 + browserslist: 4.24.2 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.1 es-module-lexer: 1.7.0 diff --git a/tsconfig.base.json b/tsconfig.base.json index 493bc634..47013b38 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -40,7 +40,9 @@ "@graphprotocol/hypergraph": ["./packages/hypergraph/src/index.js"], "@graphprotocol/hypergraph/*": ["./packages/hypergraph/src/*.js"], "@graphprotocol/hypergraph-react": ["./packages/hypergraph-react/src/index.js"], - "@graphprotocol/hypergraph-react/*": ["./packages/hypergraph-react/src/*.js"] + "@graphprotocol/hypergraph-react/*": ["./packages/hypergraph-react/src/*.js"], + "@graphprotocol/typesync": ["./packages/typesync/src/index.js"], + "@graphprotocol/typesync/*": ["./packages/typesync/src/*.js"] } } } diff --git a/tsconfig.build.json b/tsconfig.build.json index 28a8b852..6d0022d3 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -3,6 +3,7 @@ "include": [], "references": [ { "path": "packages/hypergraph/tsconfig.build.json" }, - { "path": "packages/hypergraph-react/tsconfig.build.json" } + { "path": "packages/hypergraph-react/tsconfig.build.json" }, + { "path": "packages/typesync/tsconfig.build.json" } ] } diff --git a/tsconfig.json b/tsconfig.json index f083483d..0dc88926 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,6 +4,7 @@ "references": [ { "path": "packages/hypergraph" }, { "path": "packages/hypergraph-react" }, + { "path": "packages/typesync" }, { "path": "apps/server" }, { "path": "apps/events" }, { "path": "apps/typesync" } diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 00000000..d194e6db --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + projects: ['./packages/*', './apps/events', './apps/typesync'], + }, +}); diff --git a/vitest.shared.ts b/vitest.shared.ts index 781cc6ec..4a3cc6bb 100644 --- a/vitest.shared.ts +++ b/vitest.shared.ts @@ -11,6 +11,7 @@ const config: ViteUserConfig = { alias: { ...alias('hypergraph'), ...alias('hypergraph-react'), + ...alias('typesync'), }, }, }; diff --git a/vitest.workspace.ts b/vitest.workspace.ts deleted file mode 100644 index 5f3a0451..00000000 --- a/vitest.workspace.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { defineWorkspace } from 'vitest/config'; - -export default defineWorkspace(['./packages/*', './apps/events', './apps/typesync']); From 55f79aedd583ed875571a198ac47714a0fe9e38c Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Tue, 10 Jun 2025 08:22:04 -1000 Subject: [PATCH 02/10] feat(typesync pkg): build initial generateMapping fn --- .DS_Store | Bin 8196 -> 8196 bytes packages/typesync/src/Mapping.ts | 170 ++++++++++++++++++++++++- packages/typesync/test/Mapping.test.ts | 82 ++++++++++++ scripts/package.mjs | 1 + 4 files changed, 246 insertions(+), 7 deletions(-) create mode 100644 packages/typesync/test/Mapping.test.ts diff --git a/.DS_Store b/.DS_Store index 9cca65381006a14b669926878e0900f95e6e9816..00d45596843fa2d8cd233f339f25d2d75431f6ff 100644 GIT binary patch delta 37 scmZp1XmQx!FT$P7kk63Ekj9Y7kUn{Vi1K7x5qlO!1_p-B2Si-B0mQ2bg#Z8m delta 68 zcmZp1XmQx!FEY7bL|2W0fkBv|j3JYugdvro7)a_dlr!Wr6ftB2c?ArK49P%oy~zT? QVjPTo|G{AM0TCB&07f4ZwEzGB diff --git a/packages/typesync/src/Mapping.ts b/packages/typesync/src/Mapping.ts index af50e8dc..740f85f8 100644 --- a/packages/typesync/src/Mapping.ts +++ b/packages/typesync/src/Mapping.ts @@ -1,4 +1,5 @@ -import type { Id as Grc20Id } from '@graphprotocol/grc-20'; +import { type CreatePropertyParams, Graph, Id as Grc20Id, type Op } from '@graphprotocol/grc-20'; +import { Array as EffectArray, Schema as EffectSchema, pipe } from 'effect'; /** * Mappings for a schema type and its properties/relations @@ -18,17 +19,21 @@ export type MappingEntry = { * * @since 0.0.1 */ - properties?: { - [key: string]: Grc20Id.Id; - }; + properties?: + | { + [key: string]: Grc20Id.Id; + } + | undefined; /** * Record of schema type relation names to the `Id.Id` of the relation in the Knowledge Graph * * @since 0.0.1 */ - relations?: { - [key: string]: Grc20Id.Id; - }; + relations?: + | { + [key: string]: Grc20Id.Id; + } + | undefined; }; /** @@ -63,3 +68,154 @@ export type MappingEntry = { export type Mapping = { [key: string]: MappingEntry; }; + +export type DataTypeRelation = `Relation(${string})`; +export function isDataTypeRelation(val: string): val is DataTypeRelation { + return /^Relation\((.+)\)$/.test(val); +} +export const SchemaDataTypeRelation = EffectSchema.NonEmptyTrimmedString.pipe( + EffectSchema.filter((val) => isDataTypeRelation(val)), +); +export type SchemaDataTypeRelation = typeof SchemaDataTypeRelation.Type; + +export const SchemaDataType = EffectSchema.Union( + EffectSchema.Literal('Text', 'Number', 'Boolean', 'Date', 'Point', 'Url'), + SchemaDataTypeRelation, +); +export type SchemaDataType = typeof SchemaDataType.Type; + +export const Schema = EffectSchema.Struct({ + types: EffectSchema.Array( + EffectSchema.Struct({ + name: EffectSchema.NonEmptyTrimmedString, + knowledgeGraphId: EffectSchema.NullOr(EffectSchema.UUID), + properties: EffectSchema.Array( + EffectSchema.Struct({ + name: EffectSchema.NonEmptyTrimmedString, + knowledgeGraphId: EffectSchema.NullOr(EffectSchema.UUID), + dataType: SchemaDataType, + }), + ).pipe(EffectSchema.minItems(1)), + }), + ).pipe(EffectSchema.minItems(1)), +}).annotations({ + identifier: 'typesync/Schema', + title: 'TypeSync app Schema', + description: 'An array of types in the schema defined by the user to generate a Mapping object for', + examples: [ + { + types: [ + { + name: 'Account', + knowledgeGraphId: null, + properties: [{ name: 'username', knowledgeGraphId: null, dataType: 'Text' }], + }, + ], + }, + { + types: [ + { + name: 'Account', + knowledgeGraphId: 'a5fd07b1-120f-46c6-b46f-387ef98396a6', + properties: [{ name: 'name', knowledgeGraphId: 'a126ca53-0c8e-48d5-b888-82c734c38935', dataType: 'Text' }], + }, + ], + }, + ], +}); +export type Schema = typeof Schema.Type; + +export async function generateMapping(schema: Schema): Promise { + const entries: Array = []; + const ops: Array = []; + + for (const type of schema.types) { + const typePropertyIds: Array<{ propName: string; id: Grc20Id.Id }> = []; + for (const property of type.properties) { + if (property.knowledgeGraphId) { + typePropertyIds.push({ propName: property.name, id: Grc20Id.Id(property.knowledgeGraphId) }); + continue; + } + // create op for creating type property + const { id, ops: createTypePropOp } = Graph.createProperty({ + name: property.name, + dataType: mapSchemaDataTypeToGRC20PropDataType(property.dataType), + }); + typePropertyIds.push({ propName: property.name, id }); + // add createProperty ops to array to submit in batch to KG + ops.push(...createTypePropOp); + } + + const properties: MappingEntry['properties'] = pipe( + typePropertyIds, + EffectArray.reduce({} as NonNullable, (props, { propName, id }) => { + props[propName] = id; + + return props; + }), + ); + + const relations: MappingEntry['relations'] = undefined; + + if (type.knowledgeGraphId) { + entries.push({ + typeName: type.name, + typeIds: [Grc20Id.Id(type.knowledgeGraphId)], + properties, + relations, + }); + continue; + } + // create the type op, with its properties + const { id, ops: createTypeOp } = Graph.createType({ + name: type.name, + properties: EffectArray.map(typePropertyIds, ({ id }) => id), + }); + ops.push(...createTypeOp); + + entries.push({ + typeName: type.name, + typeIds: [id], + properties, + relations, + }); + } + + // @todo send ops to Knowledge Graph + + return pipe( + entries, + EffectArray.reduce({} as Mapping, (mapping, entry) => { + const { typeName, ...rest } = entry; + mapping[typeName] = rest; + + return mapping; + }), + ); +} + +export function mapSchemaDataTypeToGRC20PropDataType(dataType: SchemaDataType): CreatePropertyParams['dataType'] { + switch (true) { + case dataType === 'Boolean': { + return 'CHECKBOX'; + } + case dataType === 'Date': { + return 'TIME'; + } + case dataType === 'Number': { + return 'NUMBER'; + } + case dataType === 'Point': { + return 'POINT'; + } + case dataType === 'Url': { + return 'TEXT'; + } + case isDataTypeRelation(dataType): { + return 'RELATION'; + } + default: { + return 'TEXT'; + } + } +} diff --git a/packages/typesync/test/Mapping.test.ts b/packages/typesync/test/Mapping.test.ts new file mode 100644 index 00000000..b284785e --- /dev/null +++ b/packages/typesync/test/Mapping.test.ts @@ -0,0 +1,82 @@ +import { describe, expect, it } from 'vitest'; + +import { type Mapping, generateMapping, mapSchemaDataTypeToGRC20PropDataType } from '../src/Mapping.js'; + +describe('Mapping', () => { + describe('mapSchemaDataTypeToGRC20PropDataType', () => { + it('should be able to map the schema dataType to the correct GRC-20 dataType', () => { + expect(mapSchemaDataTypeToGRC20PropDataType('Boolean')).toEqual('CHECKBOX'); + expect(mapSchemaDataTypeToGRC20PropDataType('Number')).toEqual('NUMBER'); + expect(mapSchemaDataTypeToGRC20PropDataType('Date')).toEqual('TIME'); + expect(mapSchemaDataTypeToGRC20PropDataType('Point')).toEqual('POINT'); + expect(mapSchemaDataTypeToGRC20PropDataType('Url')).toEqual('TEXT'); + expect(mapSchemaDataTypeToGRC20PropDataType('Text')).toEqual('TEXT'); + expect(mapSchemaDataTypeToGRC20PropDataType('Relation(Event)')).toEqual('RELATION'); + }); + }); + + describe('generateMapping', () => { + it('should be able to map the input schema to a resulting Mapping definition', async () => { + const actual = await generateMapping({ + types: [ + { + name: 'Account', + knowledgeGraphId: null, + properties: [ + { + name: 'username', + dataType: 'Text', + knowledgeGraphId: null, + }, + { + name: 'createdAt', + dataType: 'Date', + knowledgeGraphId: null, + }, + ], + }, + { + name: 'Event', + knowledgeGraphId: null, + properties: [ + { + name: 'name', + dataType: 'Text', + knowledgeGraphId: null, + }, + { + name: 'description', + dataType: 'Text', + knowledgeGraphId: null, + }, + { + name: 'speaker', + dataType: 'Relation(Account)', + knowledgeGraphId: null, + }, + ], + }, + ], + }); + const expected: Mapping = { + Account: { + typeIds: [expect.any(String)], + properties: { + username: expect.any(String), + createdAt: expect.any(String), + }, + }, + Event: { + typeIds: [expect.any(String)], + properties: { + name: expect.any(String), + description: expect.any(String), + speaker: expect.any(String), + }, + }, + }; + + expect(actual).toEqual(expected); + }); + }); +}); diff --git a/scripts/package.mjs b/scripts/package.mjs index c33f3486..6619aa70 100644 --- a/scripts/package.mjs +++ b/scripts/package.mjs @@ -32,6 +32,7 @@ const publishPkgJson = { module: pkgJson.module, types: pkgJson.types, sideEffects: pkgJson.sideEffects, + exports: pkgJson.exports, peerDependencies: pkgJson.peerDependencies, dependencies: pkgJson.dependencies, publishConfig: { From f75247c392bd0466e17bd0a92f9402339313f733 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Tue, 10 Jun 2025 08:26:02 -1000 Subject: [PATCH 03/10] feat(typesync pkg): add partially existing test-case --- packages/typesync/test/Mapping.test.ts | 63 ++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/packages/typesync/test/Mapping.test.ts b/packages/typesync/test/Mapping.test.ts index b284785e..c91ce87f 100644 --- a/packages/typesync/test/Mapping.test.ts +++ b/packages/typesync/test/Mapping.test.ts @@ -1,3 +1,4 @@ +import { Id } from '@graphprotocol/grc-20'; import { describe, expect, it } from 'vitest'; import { type Mapping, generateMapping, mapSchemaDataTypeToGRC20PropDataType } from '../src/Mapping.js'; @@ -76,6 +77,68 @@ describe('Mapping', () => { }, }; + expect(actual).toEqual(expected); + }); + it('should use the existing KG ids if provided', async () => { + const actual = await generateMapping({ + types: [ + { + name: 'Account', + knowledgeGraphId: 'a5fd07b1-120f-46c6-b46f-387ef98396a6', + properties: [ + { + name: 'username', + dataType: 'Text', + knowledgeGraphId: '994edcff-6996-4a77-9797-a13e5e3efad8', + }, + { + name: 'createdAt', + dataType: 'Date', + knowledgeGraphId: '64bfba51-a69b-4746-be4b-213214a879fe', + }, + ], + }, + { + name: 'Event', + knowledgeGraphId: null, + properties: [ + { + name: 'name', + dataType: 'Text', + knowledgeGraphId: '3808e060-fb4a-4d08-8069-35b8c8a1902b', + }, + { + name: 'description', + dataType: 'Text', + knowledgeGraphId: null, + }, + { + name: 'speaker', + dataType: 'Relation(Account)', + knowledgeGraphId: null, + }, + ], + }, + ], + }); + const expected: Mapping = { + Account: { + typeIds: [Id.Id('a5fd07b1-120f-46c6-b46f-387ef98396a6')], + properties: { + username: Id.Id('994edcff-6996-4a77-9797-a13e5e3efad8'), + createdAt: Id.Id('64bfba51-a69b-4746-be4b-213214a879fe'), + }, + }, + Event: { + typeIds: [expect.any(String)], + properties: { + name: Id.Id('3808e060-fb4a-4d08-8069-35b8c8a1902b'), + description: expect.any(String), + speaker: expect.any(String), + }, + }, + }; + expect(actual).toEqual(expected); }); }); From c05f1af95dc688c4cb2f9c9183cd32c261c900eb Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Tue, 10 Jun 2025 10:36:56 -1000 Subject: [PATCH 04/10] feat(typesync pkg): create utils to convert name to camelCase or PascalCase --- packages/typesync/package.json | 10 +- packages/typesync/src/Mapping.ts | 106 +++++++++++++----- packages/typesync/src/Utils.ts | 156 +++++++++++++++++++++++++++ packages/typesync/src/index.ts | 1 + packages/typesync/test/Utils.test.ts | 46 ++++++++ pnpm-lock.yaml | 4 - 6 files changed, 288 insertions(+), 35 deletions(-) create mode 100644 packages/typesync/src/Utils.ts create mode 100644 packages/typesync/test/Utils.test.ts diff --git a/packages/typesync/package.json b/packages/typesync/package.json index aad10fe6..4bbe1261 100644 --- a/packages/typesync/package.json +++ b/packages/typesync/package.json @@ -26,6 +26,10 @@ "./Mapping": { "types": "./dist/Mapping.d.ts", "default": "./dist/Mapping.js" + }, + "./Utils": { + "types": "./dist/Utils.d.ts", + "default": "./dist/Utils.js" } }, "sideEffects": [], @@ -33,12 +37,6 @@ "build": "tsc -b --force tsconfig.build.json && babel dist --plugins annotate-pure-calls --out-dir dist --source-maps && node ../../scripts/package.mjs", "test": "vitest" }, - "peerDependencies": { - "@graphprotocol/hypergraph": "workspace:*" - }, - "devDependencies": { - "@graphprotocol/hypergraph": "workspace:*" - }, "dependencies": { "@graphprotocol/grc-20": "^0.17.1", "effect": "^3.16.5" diff --git a/packages/typesync/src/Mapping.ts b/packages/typesync/src/Mapping.ts index 740f85f8..0086ffc2 100644 --- a/packages/typesync/src/Mapping.ts +++ b/packages/typesync/src/Mapping.ts @@ -1,6 +1,8 @@ import { type CreatePropertyParams, Graph, Id as Grc20Id, type Op } from '@graphprotocol/grc-20'; import { Array as EffectArray, Schema as EffectSchema, pipe } from 'effect'; +import { namesAreUnique, toCamelCase, toPascalCase } from './Utils.js'; + /** * Mappings for a schema type and its properties/relations * @@ -24,16 +26,6 @@ export type MappingEntry = { [key: string]: Grc20Id.Id; } | undefined; - /** - * Record of schema type relation names to the `Id.Id` of the relation in the Knowledge Graph - * - * @since 0.0.1 - */ - relations?: - | { - [key: string]: Grc20Id.Id; - } - | undefined; }; /** @@ -55,10 +47,8 @@ export type MappingEntry = { * properties: { * name: Id.Id('3808e060-fb4a-4d08-8069-35b8c8a1902b'), * description: Id.Id('1f0d9007-8da2-4b28-ab9f-3bc0709f4837'), + * speaker: Id.Id('a5fd07b1-120f-46c6-b46f-387ef98396a6') * }, - * relations: { - * account: Id.Id('a5fd07b1-120f-46c6-b46f-387ef98396a6') - * } * } * } * ``` @@ -69,21 +59,43 @@ export type Mapping = { [key: string]: MappingEntry; }; +/** + * @since 0.0.1 + */ export type DataTypeRelation = `Relation(${string})`; +/** + * @since 0.0.1 + */ export function isDataTypeRelation(val: string): val is DataTypeRelation { return /^Relation\((.+)\)$/.test(val); } +/** + * @since 0.0.1 + */ export const SchemaDataTypeRelation = EffectSchema.NonEmptyTrimmedString.pipe( EffectSchema.filter((val) => isDataTypeRelation(val)), ); +/** + * @since 0.0.1 + */ export type SchemaDataTypeRelation = typeof SchemaDataTypeRelation.Type; - +/** + * @since 0.0.1 + */ export const SchemaDataType = EffectSchema.Union( EffectSchema.Literal('Text', 'Number', 'Boolean', 'Date', 'Point', 'Url'), SchemaDataTypeRelation, ); +/** + * @since 0.0.1 + */ export type SchemaDataType = typeof SchemaDataType.Type; +/** + * Represents the user-built schema object to generate a `Mappings` definition for + * + * @since 0.0.1 + */ export const Schema = EffectSchema.Struct({ types: EffectSchema.Array( EffectSchema.Struct({ @@ -95,9 +107,23 @@ export const Schema = EffectSchema.Struct({ knowledgeGraphId: EffectSchema.NullOr(EffectSchema.UUID), dataType: SchemaDataType, }), - ).pipe(EffectSchema.minItems(1)), + ).pipe( + EffectSchema.minItems(1), + EffectSchema.filter(namesAreUnique, { + identifier: 'DuplicatePropertyNames', + jsonSchema: {}, + description: 'The property.name must be unique across all properties in the type', + }), + ), + }), + ).pipe( + EffectSchema.minItems(1), + EffectSchema.filter(namesAreUnique, { + identifier: 'DuplicateTypeNames', + jsonSchema: {}, + description: 'The type.name must be unique across all types in the schema', }), - ).pipe(EffectSchema.minItems(1)), + ), }).annotations({ identifier: 'typesync/Schema', title: 'TypeSync app Schema', @@ -123,8 +149,27 @@ export const Schema = EffectSchema.Struct({ }, ], }); +/** + * @since 0.0.1 + */ export type Schema = typeof Schema.Type; +/** + * @since 0.0.1 + */ +export const SchemaKnownDecoder = EffectSchema.decodeSync(Schema); +/** + * @since 0.0.1 + */ +export const SchemaUnknownDecoder = EffectSchema.decodeUnknownSync(Schema); +/** + * + * + * @since 0.0.1 + * + * @param schema user-built and submitted schema + * @returns the generated [Mapping] definition from the submitted schema + */ export async function generateMapping(schema: Schema): Promise { const entries: Array = []; const ops: Array = []; @@ -134,35 +179,45 @@ export async function generateMapping(schema: Schema): Promise { for (const property of type.properties) { if (property.knowledgeGraphId) { typePropertyIds.push({ propName: property.name, id: Grc20Id.Id(property.knowledgeGraphId) }); + continue; } // create op for creating type property + const dataType = mapSchemaDataTypeToGRC20PropDataType(property.dataType); + if (dataType === 'RELATION') { + const { id, ops: createTypePropOp } = Graph.createProperty({ + name: property.name, + dataType: 'RELATION', + relationValueTypes: [], + properties: [], + }); + typePropertyIds.push({ propName: property.name, id }); + ops.push(...createTypePropOp); + + continue; + } const { id, ops: createTypePropOp } = Graph.createProperty({ name: property.name, dataType: mapSchemaDataTypeToGRC20PropDataType(property.dataType), }); typePropertyIds.push({ propName: property.name, id }); - // add createProperty ops to array to submit in batch to KG ops.push(...createTypePropOp); } const properties: MappingEntry['properties'] = pipe( typePropertyIds, EffectArray.reduce({} as NonNullable, (props, { propName, id }) => { - props[propName] = id; + props[toCamelCase(propName)] = id; return props; }), ); - const relations: MappingEntry['relations'] = undefined; - if (type.knowledgeGraphId) { entries.push({ - typeName: type.name, + typeName: toPascalCase(type.name), typeIds: [Grc20Id.Id(type.knowledgeGraphId)], properties, - relations, }); continue; } @@ -174,14 +229,15 @@ export async function generateMapping(schema: Schema): Promise { ops.push(...createTypeOp); entries.push({ - typeName: type.name, + typeName: toPascalCase(type.name), typeIds: [id], properties, - relations, }); } - // @todo send ops to Knowledge Graph + /** + * @todo publish the schema onchain to the Knowledge Graph with hypergraph connect app to the application space + */ return pipe( entries, diff --git a/packages/typesync/src/Utils.ts b/packages/typesync/src/Utils.ts new file mode 100644 index 00000000..e7b75315 --- /dev/null +++ b/packages/typesync/src/Utils.ts @@ -0,0 +1,156 @@ +import { Data, String as EffectString } from 'effect'; + +/** + * Takes the input string and returns the camelCase equivalent + * + * @example + * ```ts + * import * as Utils from '@graphprotocol/typesync/Utils' + * + * expect(Utils.toCamelCase('Address line 1')).toEqual('addressLine1'); + * expect(Utils.toCamelCase('AddressLine1')).toEqual('addressLine1'); + * expect(Utils.toCamelCase('addressLine1')).toEqual('addressLine1'); + * expect(Utils.toCamelCase('address_line_1')).toEqual('addressLine1'); + * expect(Utils.toCamelCase('address-line-1')).toEqual('addressLine1'); + * expect(Utils.toCamelCase('address-line_1')).toEqual('addressLine1'); + * expect(Utils.toCamelCase('address-line 1')).toEqual('addressLine1'); + * expect(Utils.toCamelCase('ADDRESS_LINE_1')).toEqual('addressLine1'); + * ``` + * + * @since 0.0.1 + * + * @param str input string + * @returns camelCased value of the input string + */ +export function toCamelCase(str: string): string { + if (EffectString.isEmpty(str)) { + throw new InvalidInputError({ input: str, cause: 'Input is empty' }); + } + + let result = ''; + let capitalizeNext = false; + let i = 0; + + // Skip leading non-alphanumeric characters + while (i < EffectString.length(str) && !/[a-zA-Z0-9]/.test(str[i])) { + i++; + } + + for (; i < EffectString.length(str); i++) { + const char = str[i]; + + if (/[a-zA-Z0-9]/.test(char)) { + if (capitalizeNext) { + result += EffectString.toUpperCase(char); + capitalizeNext = false; + } else if (EffectString.length(result) === 0) { + // First character should always be lowercase + result += EffectString.toLowerCase(char); + } else if (/[A-Z]/.test(char) && i > 0 && /[a-z0-9]/.test(str[i - 1])) { + // Capital letter following lowercase/number - this indicates a word boundary + // So we need to capitalize this letter (it starts a new word) + result += EffectString.toUpperCase(char); + } else { + result += EffectString.toLowerCase(char); + } + } else { + // Non-alphanumeric character - set flag to capitalize next letter + capitalizeNext = EffectString.length(result) > 0; // Only capitalize if we have existing content + } + } + + return result; +} + +/** + * Takes the input string and returns the PascalCase equivalent + * + * @example + * ```ts + * import * as Utils from '@graphprotocol/typesync/Utils' + * + * expect(Utils.toPascalCase('Address line 1')).toEqual('AddressLine1'); + * expect(Utils.toPascalCase('AddressLine1')).toEqual('AddressLine1'); + * expect(Utils.toPascalCase('addressLine1')).toEqual('AddressLine1'); + * expect(Utils.toPascalCase('address_line_1')).toEqual('AddressLine1'); + * expect(Utils.toPascalCase('address-line-1')).toEqual('AddressLine1'); + * expect(Utils.toPascalCase('address-line_1')).toEqual('AddressLine1'); + * expect(Utils.toPascalCase('address-line 1')).toEqual('AddressLine1'); + * expect(Utils.toPascalCase('ADDRESS_LINE_1')).toEqual('AddressLine1'); + * ``` + * + * @since 0.0.1 + * + * @param str input string + * @returns PascalCased value of the input string + */ +export function toPascalCase(str: string): string { + if (EffectString.isEmpty(str)) { + throw new InvalidInputError({ input: str, cause: 'Input is empty' }); + } + + let result = ''; + let capitalizeNext = true; // Start with true to capitalize the first letter + let i = 0; + + // Skip leading non-alphanumeric characters + while (i < EffectString.length(str) && !/[a-zA-Z0-9]/.test(str[i])) { + i++; + } + + for (; i < EffectString.length(str); i++) { + const char = str[i]; + + if (/[a-zA-Z0-9]/.test(char)) { + if (capitalizeNext) { + result += EffectString.toUpperCase(char); + capitalizeNext = false; + } else if (/[A-Z]/.test(char) && i > 0 && /[a-z0-9]/.test(str[i - 1])) { + // Capital letter following lowercase/number - this indicates a word boundary + // So we need to capitalize this letter (it starts a new word) + result += EffectString.toUpperCase(char); + } else { + result += EffectString.toLowerCase(char); + } + } else { + // Non-alphanumeric character - set flag to capitalize next letter + capitalizeNext = true; + } + } + + return result; +} + +export class InvalidInputError extends Data.TaggedError('/typesync/errors/InvalidInputError')<{ + readonly input: string; + readonly cause: unknown; +}> {} + +/** + * Adds schema validation that the array of objects with property `name` only has unique names + * + * @example only unique names -> returns true + * ```ts + * const types = [{name:'Account'}, {name:'Event'}] + * expect(namesAreUnique(types)).toEqual(true) + * ``` + * + * @example duplicate name -> returns false + * ```ts + * const types = [{name:'Account'}, {name:'Event'}, {name:'Account'}] + * expect(namesAreUnique(types)).toEqual(false) + * ``` + */ +export function namesAreUnique(entries: ReadonlyArray): boolean { + const names = new Set(); + + for (const entry of entries) { + const name = EffectString.toLowerCase(entry.name); + if (names.has(name)) { + return false; + } + names.add(name); + } + + return true; +} diff --git a/packages/typesync/src/index.ts b/packages/typesync/src/index.ts index 1dab7fbd..5bdaff85 100644 --- a/packages/typesync/src/index.ts +++ b/packages/typesync/src/index.ts @@ -1 +1,2 @@ export * as Mapping from './Mapping.js'; +export * as Utils from './Utils.js'; diff --git a/packages/typesync/test/Utils.test.ts b/packages/typesync/test/Utils.test.ts new file mode 100644 index 00000000..3304a2c0 --- /dev/null +++ b/packages/typesync/test/Utils.test.ts @@ -0,0 +1,46 @@ +import { describe, expect, it } from 'vitest'; + +import * as Utils from '../src/Utils.js'; + +describe('Utils', () => { + describe('toCamelCase', () => { + it('should convert the strings to camelCase', () => { + expect(Utils.toCamelCase('Address line 1')).toEqual('addressLine1'); + expect(Utils.toCamelCase('AddressLine1')).toEqual('addressLine1'); + expect(Utils.toCamelCase('addressLine1')).toEqual('addressLine1'); + expect(Utils.toCamelCase('address_line_1')).toEqual('addressLine1'); + expect(Utils.toCamelCase('address-line-1')).toEqual('addressLine1'); + expect(Utils.toCamelCase('address-line_1')).toEqual('addressLine1'); + expect(Utils.toCamelCase('address-line 1')).toEqual('addressLine1'); + expect(Utils.toCamelCase('ADDRESS_LINE_1')).toEqual('addressLine1'); + }); + it.fails('should throw an InvalidNameError if string is empty', () => { + expect(Utils.toCamelCase('')).toThrowError(Utils.InvalidInputError); + }); + }); + describe('toPascalCase', () => { + it('should convert the strings to PascalCase', () => { + expect(Utils.toPascalCase('Address line 1')).toEqual('AddressLine1'); + expect(Utils.toPascalCase('AddressLine1')).toEqual('AddressLine1'); + expect(Utils.toPascalCase('addressLine1')).toEqual('AddressLine1'); + expect(Utils.toPascalCase('address_line_1')).toEqual('AddressLine1'); + expect(Utils.toPascalCase('address-line-1')).toEqual('AddressLine1'); + expect(Utils.toPascalCase('address-line_1')).toEqual('AddressLine1'); + expect(Utils.toPascalCase('address-line 1')).toEqual('AddressLine1'); + expect(Utils.toPascalCase('ADDRESS_LINE_1')).toEqual('AddressLine1'); + }); + it.fails('should throw an InvalidNameError if string is empty', () => { + expect(Utils.toPascalCase('')).toThrowError(Utils.InvalidInputError); + }); + }); + describe('namesAreUnique', () => { + it('should return true if the name prop on each entry is unique', () => { + expect(Utils.namesAreUnique([{ name: 'Account' }, { name: 'Event' }])).toEqual(true); + }); + it('should return false if the name prop on each entry is not unique', () => { + expect(Utils.namesAreUnique([{ name: 'Account' }, { name: 'Event' }, { name: 'Account' }])).toEqual(false); + // should handle casing + expect(Utils.namesAreUnique([{ name: 'Account' }, { name: 'Event' }, { name: 'account' }])).toEqual(false); + }); + }); +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9775cb25..698eb41c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -613,10 +613,6 @@ importers: effect: specifier: ^3.16.5 version: 3.16.5 - devDependencies: - '@graphprotocol/hypergraph': - specifier: workspace:* - version: link:../hypergraph/publish publishDirectory: publish packages: From db012c1ce8ed89d79d0415aa5320a6ac136fc8fa Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Tue, 10 Jun 2025 13:06:29 -1000 Subject: [PATCH 05/10] feat(typesync pkg): expose more types. add relationType to relation prop. add schema validation --- packages/typesync/src/Mapping.ts | 186 +++++++++++++++++++++---- packages/typesync/test/Mapping.test.ts | 95 ++++++++++++- 2 files changed, 253 insertions(+), 28 deletions(-) diff --git a/packages/typesync/src/Mapping.ts b/packages/typesync/src/Mapping.ts index 0086ffc2..0bd4ba3e 100644 --- a/packages/typesync/src/Mapping.ts +++ b/packages/typesync/src/Mapping.ts @@ -82,14 +82,77 @@ export type SchemaDataTypeRelation = typeof SchemaDataTypeRelation.Type; /** * @since 0.0.1 */ -export const SchemaDataType = EffectSchema.Union( - EffectSchema.Literal('Text', 'Number', 'Boolean', 'Date', 'Point', 'Url'), - SchemaDataTypeRelation, -); +export const SchemaDataTypePrimitive = EffectSchema.Literal('Text', 'Number', 'Boolean', 'Date', 'Point', 'Url'); +/** + * @since 0.0.1 + */ +export type SchemaDataTypePrimitive = typeof SchemaDataTypePrimitive.Type; +/** + * @since 0.0.1 + */ +export const SchemaDataType = EffectSchema.Union(SchemaDataTypePrimitive, SchemaDataTypeRelation); /** * @since 0.0.1 */ export type SchemaDataType = typeof SchemaDataType.Type; +/** + * @since 0.0.1 + */ +export const SchemaTypePropertyRelation = EffectSchema.Struct({ + name: EffectSchema.NonEmptyTrimmedString, + knowledgeGraphId: EffectSchema.NullOr(EffectSchema.UUID), + dataType: SchemaDataTypeRelation, + relationType: EffectSchema.NonEmptyTrimmedString.annotations({ + identifier: 'SchemaTypePropertyRelation.relationType', + description: 'name of the type within the schema that this property is related to', + examples: ['Account'], + }), +}); +/** + * @since 0.0.1 + */ +export type SchemaTypePropertyRelation = typeof SchemaTypePropertyRelation.Type; +/** + * @since 0.0.1 + */ +export const SchemaTypePropertyPrimitive = EffectSchema.Struct({ + name: EffectSchema.NonEmptyTrimmedString, + knowledgeGraphId: EffectSchema.NullOr(EffectSchema.UUID), + dataType: SchemaDataTypePrimitive, +}); +/** + * @since 0.0.1 + */ +export type SchemaTypePropertyPrimitive = typeof SchemaTypePropertyPrimitive.Type; + +/** + * @since 0.0.1 + */ +export function propertyIsRelation( + property: SchemaTypePropertyPrimitive | SchemaTypePropertyRelation, +): property is SchemaTypePropertyRelation { + return isDataTypeRelation(property.dataType); +} + +/** + * @since 0.0.1 + */ +export const SchemaType = EffectSchema.Struct({ + name: EffectSchema.NonEmptyTrimmedString, + knowledgeGraphId: EffectSchema.NullOr(EffectSchema.UUID), + properties: EffectSchema.Array(EffectSchema.Union(SchemaTypePropertyPrimitive, SchemaTypePropertyRelation)).pipe( + EffectSchema.minItems(1), + EffectSchema.filter(namesAreUnique, { + identifier: 'DuplicatePropertyNames', + jsonSchema: {}, + description: 'The property.name must be unique across all properties in the type', + }), + ), +}); +/** + * @since 0.0.1 + */ +export type SchemaType = typeof SchemaType.Type; /** * Represents the user-built schema object to generate a `Mappings` definition for @@ -97,32 +160,18 @@ export type SchemaDataType = typeof SchemaDataType.Type; * @since 0.0.1 */ export const Schema = EffectSchema.Struct({ - types: EffectSchema.Array( - EffectSchema.Struct({ - name: EffectSchema.NonEmptyTrimmedString, - knowledgeGraphId: EffectSchema.NullOr(EffectSchema.UUID), - properties: EffectSchema.Array( - EffectSchema.Struct({ - name: EffectSchema.NonEmptyTrimmedString, - knowledgeGraphId: EffectSchema.NullOr(EffectSchema.UUID), - dataType: SchemaDataType, - }), - ).pipe( - EffectSchema.minItems(1), - EffectSchema.filter(namesAreUnique, { - identifier: 'DuplicatePropertyNames', - jsonSchema: {}, - description: 'The property.name must be unique across all properties in the type', - }), - ), - }), - ).pipe( + types: EffectSchema.Array(SchemaType).pipe( EffectSchema.minItems(1), EffectSchema.filter(namesAreUnique, { identifier: 'DuplicateTypeNames', jsonSchema: {}, description: 'The type.name must be unique across all types in the schema', }), + EffectSchema.filter(allRelationPropertyTypesExist, { + identifier: 'AllRelationTypesExist', + jsonSchema: {}, + description: 'Each type property of dataType RELATION must have a type of the same name in the schema', + }), ), }).annotations({ identifier: 'typesync/Schema', @@ -163,14 +212,88 @@ export const SchemaKnownDecoder = EffectSchema.decodeSync(Schema); export const SchemaUnknownDecoder = EffectSchema.decodeUnknownSync(Schema); /** + * Iterate through all properties in all types in the schema of `dataType` === `Relation(${string})` + * and validate that the schema.types have a type for the existing relation * + * @example All types exist + * ```ts + * import { allRelationPropertyTypesExist, type Mapping } from '@graphprotocol/typesync/Mapping' + * + * const types: Mapping['types'] = [ + * { + * name: "Account", + * knowledgeGraphId: null, + * properties: [ + * { + * name: "username", + * dataType: "Text", + * knowledgeGraphId: null + * } + * ] + * }, + * { + * name: "Event", + * knowledgeGraphId: null, + * properties: [ + * { + * name: "speaker", + * dataType: "Relation(Account)" + * relationType: "Account", + * knowledgeGraphId: null, + * } + * ] + * } + * ] + * expect(allRelationPropertyTypesExist(types)).toEqual(true) + * ``` + * + * @example Account type is missing + * ```ts + * import { allRelationPropertyTypesExist, type Mapping } from '@graphprotocol/typesync/Mapping' + * + * const types: Mapping['types'] = [ + * { + * name: "Event", + * knowledgeGraphId: null, + * properties: [ + * { + * name: "speaker", + * dataType: "Relation(Account)", + * relationType: "Account", + * knowledgeGraphId: null, + * } + * ] + * } + * ] + * expect(allRelationPropertyTypesExist(types)).toEqual(false) + * ``` + * + * @since 0.0.1 + * + * @param types the user-submitted schema types + */ +export function allRelationPropertyTypesExist(types: ReadonlyArray): boolean { + const unqTypeNames = EffectArray.reduce(types, new Set(), (names, curr) => names.add(curr.name)); + return pipe( + types, + EffectArray.flatMap((curr) => curr.properties), + EffectArray.filter((prop) => propertyIsRelation(prop)), + EffectArray.every((prop) => unqTypeNames.has(prop.relationType)), + ); +} + +/** + * Takes the user-submitted schema, validates it, and build the `Mapping` definition for the schema. * * @since 0.0.1 * - * @param schema user-built and submitted schema + * @param input user-built and submitted schema * @returns the generated [Mapping] definition from the submitted schema */ -export async function generateMapping(schema: Schema): Promise { +export async function generateMapping(input: Schema): Promise { + // validate the schema since the input is the type, but the schema has additional filters against it to validate as well + const schema = SchemaKnownDecoder(input); + const entries: Array = []; const ops: Array = []; @@ -188,6 +311,9 @@ export async function generateMapping(schema: Schema): Promise { const { id, ops: createTypePropOp } = Graph.createProperty({ name: property.name, dataType: 'RELATION', + /** + * @todo fill in the relationValueTypes and properties for creating a relation property + */ relationValueTypes: [], properties: [], }); @@ -198,7 +324,7 @@ export async function generateMapping(schema: Schema): Promise { } const { id, ops: createTypePropOp } = Graph.createProperty({ name: property.name, - dataType: mapSchemaDataTypeToGRC20PropDataType(property.dataType), + dataType, }); typePropertyIds.push({ propName: property.name, id }); ops.push(...createTypePropOp); @@ -250,6 +376,12 @@ export async function generateMapping(schema: Schema): Promise { ); } +/** + * @since 0.0.1 + * + * @param dataType the dataType from the user-submitted schema + * @returns the mapped to GRC-20 dataType for the GRC-20 ops + */ export function mapSchemaDataTypeToGRC20PropDataType(dataType: SchemaDataType): CreatePropertyParams['dataType'] { switch (true) { case dataType === 'Boolean': { diff --git a/packages/typesync/test/Mapping.test.ts b/packages/typesync/test/Mapping.test.ts index c91ce87f..9cb08a2c 100644 --- a/packages/typesync/test/Mapping.test.ts +++ b/packages/typesync/test/Mapping.test.ts @@ -1,7 +1,13 @@ import { Id } from '@graphprotocol/grc-20'; import { describe, expect, it } from 'vitest'; -import { type Mapping, generateMapping, mapSchemaDataTypeToGRC20PropDataType } from '../src/Mapping.js'; +import { + type Mapping, + type Schema, + allRelationPropertyTypesExist, + generateMapping, + mapSchemaDataTypeToGRC20PropDataType, +} from '../src/Mapping.js'; describe('Mapping', () => { describe('mapSchemaDataTypeToGRC20PropDataType', () => { @@ -16,6 +22,40 @@ describe('Mapping', () => { }); }); + describe('allRelationPropertyTypesExist', () => { + it('should return true if the submitted schema contains all required types', () => { + const types: Schema['types'] = [ + { + name: 'Account', + knowledgeGraphId: null, + properties: [{ name: 'username', dataType: 'Text', knowledgeGraphId: null }], + }, + { + name: 'Event', + knowledgeGraphId: null, + properties: [ + { name: 'speaker', dataType: 'Relation(Account)', relationType: 'Account', knowledgeGraphId: null }, + ], + }, + ]; + + expect(allRelationPropertyTypesExist(types)).toEqual(true); + }); + it('should return false if the submitted schema relation properties', () => { + const types: Schema['types'] = [ + { + name: 'Event', + knowledgeGraphId: null, + properties: [ + { name: 'speaker', dataType: 'Relation(Account)', relationType: 'Account', knowledgeGraphId: null }, + ], + }, + ]; + + expect(allRelationPropertyTypesExist(types)).toEqual(false); + }); + }); + describe('generateMapping', () => { it('should be able to map the input schema to a resulting Mapping definition', async () => { const actual = await generateMapping({ @@ -53,6 +93,7 @@ describe('Mapping', () => { { name: 'speaker', dataType: 'Relation(Account)', + relationType: 'Account', knowledgeGraphId: null, }, ], @@ -115,6 +156,7 @@ describe('Mapping', () => { { name: 'speaker', dataType: 'Relation(Account)', + relationType: 'Account', knowledgeGraphId: null, }, ], @@ -141,5 +183,56 @@ describe('Mapping', () => { expect(actual).toEqual(expected); }); + describe('schema validation failures', () => { + it('should throw an error if the Schema does not pass validation: type names are not unique', async () => { + await expect(() => + generateMapping({ + types: [ + { + name: 'Account', + knowledgeGraphId: null, + properties: [{ name: 'username', dataType: 'Text', knowledgeGraphId: null }], + }, + { + name: 'Account', + knowledgeGraphId: null, + properties: [{ name: 'image', dataType: 'Text', knowledgeGraphId: null }], + }, + ], + }), + ).rejects.toThrowError(); + }); + it('should throw an error if the Schema does not pass validation: type property names are not unique', async () => { + await expect(() => + generateMapping({ + types: [ + { + name: 'Account', + knowledgeGraphId: null, + properties: [ + { name: 'username', dataType: 'Text', knowledgeGraphId: null }, + { name: 'username', dataType: 'Text', knowledgeGraphId: null }, + ], + }, + ], + }), + ).rejects.toThrowError(); + }); + it('should throw an error if the Schema does not pass validation: referenced relation property does not have matching type in schema', async () => { + await expect(() => + generateMapping({ + types: [ + { + name: 'Event', + knowledgeGraphId: null, + properties: [ + { name: 'speaker', dataType: 'Relation(Account)', relationType: 'Account', knowledgeGraphId: null }, + ], + }, + ], + }), + ).rejects.toThrowError(); + }); + }); }); }); From 4159167c4ecb00c0887e8a4fab5ec20be75bbcd7 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Tue, 10 Jun 2025 13:08:54 -1000 Subject: [PATCH 06/10] feat(typesync pkg): update README --- packages/typesync/README.md | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/packages/typesync/README.md b/packages/typesync/README.md index adb76f7f..7d292903 100644 --- a/packages/typesync/README.md +++ b/packages/typesync/README.md @@ -4,7 +4,7 @@ Package for generating the mappings used within the `hypergraph` ecosystem that The `Mapping` is passed to the `` from the [@graphprotocol/hypergraph-react](../hypergraph-react/README.md) context to inform the query layer what entities to query from the Knowledge Graph. -This package exposes a function: `generateMappings` that takes the schema with an array of types, each with properties. Both `types` and `properties` have a nullable `knowledgeGraphId` UUID value. If a value is provided, the `type/property` exists on the Knowledge Graph; this value will be plugged into to the `Mapping` values. If the `knowledgeGraphId` value is null, the `type/property` will be created using the `@graphprotocol/grc-20` ops and then returned in the mapping. +This package exposes a function: `generateMapping` that takes the schema with an array of types, each with properties. Both `types` and `properties` have a nullable `knowledgeGraphId` UUID value. If a value is provided, the `type/property` exists on the Knowledge Graph; this value will be plugged into to the `Mapping` values. If the `knowledgeGraphId` value is null, the `type/property` will be created using the `@graphprotocol/grc-20` ops and then returned in the mapping. ## Mapping definition @@ -14,9 +14,6 @@ export type MappingEntry = { properties?: { [key: string]: Grc20Id.Id; }; - relations?: { - [key: string]: Grc20Id.Id; - }; }; export type Mapping = { @@ -62,10 +59,8 @@ export const mapping: Mapping = { properties: { name: Id.Id('3808e060-fb4a-4d08-8069-35b8c8a1902b'), description: Id.Id('1f0d9007-8da2-4b28-ab9f-3bc0709f4837'), - }, - relations: { account: Id.Id('a5fd07b1-120f-46c6-b46f-387ef98396a6') - } + }, } } ``` From d7119f285b9ed60806c7a7181875f6e41dcdc5eb Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Wed, 9 Jul 2025 11:47:08 -1000 Subject: [PATCH 07/10] feat(typesync pkg): rebase. lint fixes --- apps/typesync/src/Database.ts | 2 +- apps/typesync/src/Utils.ts | 57 +++++++++++++++-------------------- scripts/package.mjs | 1 - 3 files changed, 26 insertions(+), 34 deletions(-) diff --git a/apps/typesync/src/Database.ts b/apps/typesync/src/Database.ts index 9dd8ef9c..57499fe9 100644 --- a/apps/typesync/src/Database.ts +++ b/apps/typesync/src/Database.ts @@ -14,7 +14,7 @@ const SqlLive = SqliteClient.layer({ const MigratorLive = Migrator.layer({ loader: fromFileSystem(fileURLToPath(new URL('migrations', import.meta.url))), -}).pipe(Layer.provide(SqlLive)) +}).pipe(Layer.provide(SqlLive)); const DatabaseLive = Layer.mergeAll(SqlLive, MigratorLive).pipe(Layer.provide(NodeContext.layer)); diff --git a/apps/typesync/src/Utils.ts b/apps/typesync/src/Utils.ts index a69d86f8..4f6851c7 100644 --- a/apps/typesync/src/Utils.ts +++ b/apps/typesync/src/Utils.ts @@ -130,11 +130,11 @@ export class InvalidInputError extends Data.TaggedError('/typesync/errors/Invali /* Windows-safe migration loader */ /* ------------------------------------------------------------------ */ -import { pathToFileURL } from "node:url" -import { FileSystem } from "@effect/platform/FileSystem" -import * as Effect from "effect/Effect" -import type { Loader, ResolvedMigration } from "@effect/sql/Migrator" -import { MigrationError } from "@effect/sql/Migrator" +import { pathToFileURL } from 'node:url'; +import { FileSystem } from '@effect/platform/FileSystem'; +import type { Loader, ResolvedMigration } from '@effect/sql/Migrator'; +import { MigrationError } from '@effect/sql/Migrator'; +import * as Effect from 'effect/Effect'; /** * Patched version of @@ -143,36 +143,29 @@ import { MigrationError } from "@effect/sql/Migrator" * The only difference is that the dynamic `import()` receives a proper * `file://` URL, so it works on Windows as well as on Linux / macOS. */ -export const fromFileSystem = ( - dir: string, -): Loader => +export const fromFileSystem = (dir: string): Loader => FileSystem.pipe( /* read directory ----------------------------------------------------- */ Effect.flatMap((FS) => FS.readDirectory(dir)), - Effect.mapError( - (e) => new MigrationError({ reason: "failed", message: e.message }), - ), + Effect.mapError((e) => new MigrationError({ reason: 'failed', message: e.message })), /* build migration list ---------------------------------------------- */ - Effect.map((files): ReadonlyArray => - files - .flatMap((file) => { - const m = - file.match(/^(?:.*[\\/])?(\d+)_([^.]+)\.(js|ts)$/) // win/posix - if (!m) return [] - const [basename, id, name] = m - return [ - [ - Number(id), - name, - Effect.promise(() => - import( - /* @vite-ignore */ /* webpackIgnore: true */ - pathToFileURL(`${dir}/${basename}`).href, + Effect.map( + (files): ReadonlyArray => + files + .flatMap((file) => { + const m = file.match(/^(?:.*[\\/])?(\d+)_([^.]+)\.(js|ts)$/); // win/posix + if (!m) return []; + const [basename, id, name] = m; + return [ + [ + Number(id), + name, + Effect.promise( + () => import(/* @vite-ignore */ /* webpackIgnore: true */ pathToFileURL(`${dir}/${basename}`).href), ), - ), - ], - ] as const - }) - .sort(([a], [b]) => a - b), + ], + ] as const; + }) + .sort(([a], [b]) => a - b), ), - ) \ No newline at end of file + ); diff --git a/scripts/package.mjs b/scripts/package.mjs index 3e76403a..fe74c046 100644 --- a/scripts/package.mjs +++ b/scripts/package.mjs @@ -35,7 +35,6 @@ const publishPkgJson = { main: pkgJson.main, module: pkgJson.module, types: pkgJson.types, - exports: pkgJson.exports, sideEffects: pkgJson.sideEffects, exports: pkgJson.exports, peerDependencies: pkgJson.peerDependencies, From d086b9fd924d2006f47bfcd982d6065dbc46ab0a Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Thu, 10 Jul 2025 08:17:14 -1000 Subject: [PATCH 08/10] feat(typesync pkg): rename Boolean to Checkbox --- packages/typesync/src/Mapping.ts | 4 ++-- packages/typesync/test/Mapping.test.ts | 2 +- pnpm-lock.yaml | 12 ++---------- 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/packages/typesync/src/Mapping.ts b/packages/typesync/src/Mapping.ts index 0bd4ba3e..6ba30220 100644 --- a/packages/typesync/src/Mapping.ts +++ b/packages/typesync/src/Mapping.ts @@ -82,7 +82,7 @@ export type SchemaDataTypeRelation = typeof SchemaDataTypeRelation.Type; /** * @since 0.0.1 */ -export const SchemaDataTypePrimitive = EffectSchema.Literal('Text', 'Number', 'Boolean', 'Date', 'Point', 'Url'); +export const SchemaDataTypePrimitive = EffectSchema.Literal('Text', 'Number', 'Checkbox', 'Date', 'Point', 'Url'); /** * @since 0.0.1 */ @@ -384,7 +384,7 @@ export async function generateMapping(input: Schema): Promise { */ export function mapSchemaDataTypeToGRC20PropDataType(dataType: SchemaDataType): CreatePropertyParams['dataType'] { switch (true) { - case dataType === 'Boolean': { + case dataType === 'Checkbox': { return 'CHECKBOX'; } case dataType === 'Date': { diff --git a/packages/typesync/test/Mapping.test.ts b/packages/typesync/test/Mapping.test.ts index 9cb08a2c..93a08dcc 100644 --- a/packages/typesync/test/Mapping.test.ts +++ b/packages/typesync/test/Mapping.test.ts @@ -12,7 +12,7 @@ import { describe('Mapping', () => { describe('mapSchemaDataTypeToGRC20PropDataType', () => { it('should be able to map the schema dataType to the correct GRC-20 dataType', () => { - expect(mapSchemaDataTypeToGRC20PropDataType('Boolean')).toEqual('CHECKBOX'); + expect(mapSchemaDataTypeToGRC20PropDataType('Checkbox')).toEqual('CHECKBOX'); expect(mapSchemaDataTypeToGRC20PropDataType('Number')).toEqual('NUMBER'); expect(mapSchemaDataTypeToGRC20PropDataType('Date')).toEqual('TIME'); expect(mapSchemaDataTypeToGRC20PropDataType('Point')).toEqual('POINT'); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 95dd2f8c..ac384f99 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -525,8 +525,8 @@ importers: specifier: ^4.1.0 version: 4.1.0 effect: - specifier: ^3.16.10 - version: 3.16.10 + specifier: ^3.16.12 + version: 3.16.12 graphql: specifier: ^16.11.0 version: 16.11.0 @@ -6796,9 +6796,6 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - effect@3.16.10: - resolution: {integrity: sha512-F0hDCOLax7i3SOy5wQnJZTzKP9aGg8OQNUJ2s8YoL5fVcCgRCgE+Ky+Hfz5qC7LgVVOWDDbRpCh5MPB20wRI8Q==} - effect@3.16.12: resolution: {integrity: sha512-N39iBk0K71F9nb442TLbTkjl24FLUzuvx2i1I2RsEAQsdAdUTuUoW0vlfUXgkMTUOnYqKnWcFfqw4hK4Pw27hg==} @@ -20585,11 +20582,6 @@ snapshots: ee-first@1.1.1: {} - effect@3.16.10: - dependencies: - '@standard-schema/spec': 1.0.0 - fast-check: 3.23.2 - effect@3.16.12: dependencies: '@standard-schema/spec': 1.0.0 From fd4aae413659fd651e895c55aab70b0657747021 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Fri, 11 Jul 2025 08:51:28 -1000 Subject: [PATCH 09/10] feat(typeynsc mapping): readd grc-20 lib to deps --- apps/connect/package.json | 1 + apps/events/package.json | 1 + apps/next-example/package.json | 1 + apps/typesync/package.json | 31 +- packages/hypergraph-react/package.json | 1 + packages/hypergraph/package.json | 1 + packages/typesync/package.json | 1 + pnpm-lock.yaml | 561 +++++++++++++++++-------- 8 files changed, 406 insertions(+), 192 deletions(-) diff --git a/apps/connect/package.json b/apps/connect/package.json index a8110b51..e4411dc3 100644 --- a/apps/connect/package.json +++ b/apps/connect/package.json @@ -15,6 +15,7 @@ }, "dependencies": { "@base-ui-components/react": "1.0.0-beta.0", + "@graphprotocol/grc-20": "^0.21.6", "@graphprotocol/hypergraph": "workspace:*", "@graphprotocol/hypergraph-react": "workspace:*", "@privy-io/react-auth": "^2.13.0", diff --git a/apps/events/package.json b/apps/events/package.json index 76fccbec..e511914b 100644 --- a/apps/events/package.json +++ b/apps/events/package.json @@ -8,6 +8,7 @@ "preview": "vite preview" }, "dependencies": { + "@graphprotocol/grc-20": "^0.21.6", "@graphprotocol/hypergraph": "workspace:*", "@graphprotocol/hypergraph-react": "workspace:*", "@noble/hashes": "^1.8.0", diff --git a/apps/next-example/package.json b/apps/next-example/package.json index 4ca6bc6c..88ec1c3d 100644 --- a/apps/next-example/package.json +++ b/apps/next-example/package.json @@ -11,6 +11,7 @@ }, "type": "module", "dependencies": { + "@graphprotocol/grc-20": "^0.21.6", "@graphprotocol/hypergraph": "workspace:*", "@graphprotocol/hypergraph-react": "workspace:*", "next": "15.3.2", diff --git a/apps/typesync/package.json b/apps/typesync/package.json index 5e7150c8..73cf36c6 100644 --- a/apps/typesync/package.json +++ b/apps/typesync/package.json @@ -38,20 +38,20 @@ "hypergraph": "pnpx tsx ./src/bin.ts typesync" }, "devDependencies": { - "@effect/cli": "^0.66.1", - "@effect/experimental": "^0.51.1", - "@effect/language-service": "^0.23.3", - "@effect/platform": "^0.87.1", - "@effect/platform-node": "^0.88.3", - "@effect/sql": "^0.40.1", - "@effect/sql-sqlite-node": "^0.41.1", - "@effect/vitest": "^0.23.10", + "@effect/cli": "^0.66.12", + "@effect/experimental": "^0.51.13", + "@effect/language-service": "^0.24.2", + "@effect/platform": "^0.87.12", + "@effect/platform-node": "^0.89.5", + "@effect/sql": "^0.40.13", + "@effect/sql-sqlite-node": "^0.41.13", + "@effect/vitest": "^0.23.12", "@graphql-codegen/cli": "^5.0.7", "@graphql-codegen/client-preset": "^4.8.3", "@graphql-codegen/typescript": "^4.1.6", "@graphql-codegen/typescript-operations": "^4.6.1", - "@tanstack/router-plugin": "^1.123.2", - "@types/node": "^24.0.8", + "@tanstack/router-plugin": "^1.127.1", + "@types/node": "^24.0.13", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "^4.6.0", @@ -63,16 +63,17 @@ }, "dependencies": { "@graphql-typed-document-node/core": "^3.2.0", + "@graphprotocol/grc-20": "^0.21.6", "@headlessui/react": "^2.2.4", "@heroicons/react": "^2.2.0", "@phosphor-icons/react": "^2.1.10", "@radix-ui/react-tabs": "^1.1.12", "@tailwindcss/vite": "^4.1.11", - "@tanstack/react-form": "^1.12.4", - "@tanstack/react-query": "^5.81.5", - "@tanstack/react-query-devtools": "^5.81.5", - "@tanstack/react-router": "^1.123.2", - "@tanstack/react-router-devtools": "^1.123.2", + "@tanstack/react-form": "^1.14.1", + "@tanstack/react-query": "^5.83.0", + "@tanstack/react-query-devtools": "^5.83.0", + "@tanstack/react-router": "^1.127.1", + "@tanstack/react-router-devtools": "^1.127.1", "better-sqlite3": "^12.2.0", "date-fns": "^4.1.0", "effect": "^3.16.12", diff --git a/packages/hypergraph-react/package.json b/packages/hypergraph-react/package.json index 84200b06..78111416 100644 --- a/packages/hypergraph-react/package.json +++ b/packages/hypergraph-react/package.json @@ -41,6 +41,7 @@ "@automerge/automerge": "^2.2.9", "@automerge/automerge-repo": "^2.0.6", "@automerge/automerge-repo-react-hooks": "^2.0.6", + "@graphprotocol/grc-20": "^0.21.6", "@noble/hashes": "^1.8.0", "@tanstack/react-query": "^5.75.5", "effect": "^3.16.12", diff --git a/packages/hypergraph/package.json b/packages/hypergraph/package.json index ed3bd5ce..7ce427f3 100644 --- a/packages/hypergraph/package.json +++ b/packages/hypergraph/package.json @@ -45,6 +45,7 @@ "@automerge/automerge": "^2.2.9", "@automerge/automerge-repo": "^2.0.6", "@effect/experimental": "^0.51.1", + "@graphprotocol/grc-20": "^0.21.6", "@noble/ciphers": "^1.3.0", "@noble/curves": "^1.9.0", "@noble/hashes": "^1.8.0", diff --git a/packages/typesync/package.json b/packages/typesync/package.json index 7c7305c1..78243b51 100644 --- a/packages/typesync/package.json +++ b/packages/typesync/package.json @@ -38,6 +38,7 @@ "test": "vitest" }, "dependencies": { + "@graphprotocol/grc-20": "^0.21.6", "effect": "^3.16.12" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1582533c..fd40a030 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,13 +37,16 @@ importers: version: 5.8.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.8)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) apps/connect: dependencies: '@base-ui-components/react': specifier: 1.0.0-beta.0 version: 1.0.0-beta.0(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@graphprotocol/grc-20': + specifier: ^0.21.6 + version: 0.21.6(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) '@graphprotocol/hypergraph': specifier: workspace:* version: link:../../packages/hypergraph/publish @@ -61,7 +64,7 @@ importers: version: 1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/react-router-devtools': specifier: ^1.122.0 - version: 1.122.0(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.123.2)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) + version: 1.122.0(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.127.0)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) '@xstate/store': specifier: ^3.5.1 version: 3.5.1(react@19.1.0)(solid-js@1.9.5) @@ -135,6 +138,9 @@ importers: apps/events: dependencies: + '@graphprotocol/grc-20': + specifier: ^0.21.6 + version: 0.21.6(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) '@graphprotocol/hypergraph': specifier: workspace:* version: link:../../packages/hypergraph/publish @@ -161,7 +167,7 @@ importers: version: 1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/react-router-devtools': specifier: ^1.122.0 - version: 1.122.0(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.123.2)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) + version: 1.122.0(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.127.0)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) '@xstate/store': specifier: ^3.5.1 version: 3.5.1(react@19.1.0)(solid-js@1.9.5) @@ -247,6 +253,9 @@ importers: apps/next-example: dependencies: + '@graphprotocol/grc-20': + specifier: ^0.21.6 + version: 0.21.6(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) '@graphprotocol/hypergraph': specifier: workspace:* version: link:../../packages/hypergraph/publish @@ -348,6 +357,9 @@ importers: apps/typesync: dependencies: + '@graphprotocol/grc-20': + specifier: ^0.21.6 + version: 0.21.6(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) '@graphql-typed-document-node/core': specifier: ^3.2.0 version: 3.2.0(graphql@16.11.0) @@ -365,22 +377,22 @@ importers: version: 1.1.12(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.1.11(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@tanstack/react-form': - specifier: ^1.12.4 - version: 1.12.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^1.14.1 + version: 1.14.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/react-query': - specifier: ^5.81.5 - version: 5.81.5(react@19.1.0) + specifier: ^5.83.0 + version: 5.83.0(react@19.1.0) '@tanstack/react-query-devtools': - specifier: ^5.81.5 - version: 5.81.5(@tanstack/react-query@5.81.5(react@19.1.0))(react@19.1.0) + specifier: ^5.83.0 + version: 5.83.0(@tanstack/react-query@5.83.0(react@19.1.0))(react@19.1.0) '@tanstack/react-router': - specifier: ^1.123.2 - version: 1.123.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^1.127.1 + version: 1.127.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/react-router-devtools': - specifier: ^1.123.2 - version: 1.123.2(@tanstack/react-router@1.123.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.123.2)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) + specifier: ^1.127.1 + version: 1.127.1(@tanstack/react-router@1.127.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.127.0)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) better-sqlite3: specifier: ^12.2.0 version: 12.2.0 @@ -416,32 +428,32 @@ importers: version: 4.1.11 devDependencies: '@effect/cli': - specifier: ^0.66.1 - version: 0.66.1(@effect/platform@0.87.1(effect@3.16.12))(@effect/printer-ansi@0.40.10(@effect/typeclass@0.31.10(effect@3.16.12))(effect@3.16.12))(@effect/printer@0.40.10(@effect/typeclass@0.31.10(effect@3.16.12))(effect@3.16.12))(effect@3.16.12) + specifier: ^0.66.12 + version: 0.66.12(@effect/platform@0.87.12(effect@3.16.12))(@effect/printer-ansi@0.40.10(@effect/typeclass@0.31.10(effect@3.16.12))(effect@3.16.12))(@effect/printer@0.40.10(@effect/typeclass@0.31.10(effect@3.16.12))(effect@3.16.12))(effect@3.16.12) '@effect/experimental': - specifier: ^0.51.1 - version: 0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12) + specifier: ^0.51.13 + version: 0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12) '@effect/language-service': - specifier: ^0.23.3 - version: 0.23.3 + specifier: ^0.24.2 + version: 0.24.2 '@effect/platform': - specifier: ^0.87.1 - version: 0.87.1(effect@3.16.12) + specifier: ^0.87.12 + version: 0.87.12(effect@3.16.12) '@effect/platform-node': - specifier: ^0.88.3 - version: 0.88.3(@effect/cluster@0.37.2(@effect/platform@0.87.1(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/workflow@0.1.2(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(bufferutil@4.0.9)(effect@3.16.12)(utf-8-validate@5.0.10) + specifier: ^0.89.5 + version: 0.89.5(@effect/cluster@0.37.2(@effect/platform@0.87.12(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/workflow@0.1.2(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(bufferutil@4.0.9)(effect@3.16.12)(utf-8-validate@5.0.10) '@effect/sql': - specifier: ^0.40.1 - version: 0.40.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12) + specifier: ^0.40.13 + version: 0.40.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12) '@effect/sql-sqlite-node': - specifier: ^0.41.1 - version: 0.41.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(@effect/sql@0.40.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(effect@3.16.12) + specifier: ^0.41.13 + version: 0.41.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(@effect/sql@0.40.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(effect@3.16.12) '@effect/vitest': - specifier: ^0.23.10 - version: 0.23.10(effect@3.16.12)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.8)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + specifier: ^0.23.12 + version: 0.23.12(effect@3.16.12)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@graphql-codegen/cli': specifier: ^5.0.7 - version: 5.0.7(@babel/core@7.28.0)(@parcel/watcher@2.5.1)(@types/node@24.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(enquirer@2.4.1)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + version: 5.0.7(@babel/core@7.28.0)(@parcel/watcher@2.5.1)(@types/node@24.0.13)(bufferutil@4.0.9)(encoding@0.1.13)(enquirer@2.4.1)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@graphql-codegen/client-preset': specifier: ^4.8.3 version: 4.8.3(@babel/core@7.28.0)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0) @@ -452,11 +464,11 @@ importers: specifier: ^4.6.1 version: 4.6.1(@babel/core@7.28.0)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0) '@tanstack/router-plugin': - specifier: ^1.123.2 - version: 1.123.2(@tanstack/react-router@1.123.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2)) + specifier: ^1.127.1 + version: 1.127.1(@tanstack/react-router@1.127.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2)) '@types/node': - specifier: ^24.0.8 - version: 24.0.8 + specifier: ^24.0.13 + version: 24.0.13 '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -465,7 +477,7 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.6.0 - version: 4.6.0(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.6.0(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) glob: specifier: ^11.0.3 version: 11.0.3 @@ -480,7 +492,7 @@ importers: version: 4.20.3 vite: specifier: ^6.3.5 - version: 6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + version: 6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) publishDirectory: dist apps/typesync/dist: @@ -502,7 +514,7 @@ importers: version: 1.1.12(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.1.11(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@tanstack/react-form': specifier: ^1.12.4 version: 1.12.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -517,7 +529,7 @@ importers: version: 1.123.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/react-router-devtools': specifier: ^1.123.2 - version: 1.123.2(@tanstack/react-router@1.123.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.123.2)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) + version: 1.123.2(@tanstack/react-router@1.123.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.127.0)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) better-sqlite3: specifier: ^12.2.0 version: 12.2.0 @@ -593,7 +605,10 @@ importers: version: 2.0.6 '@effect/experimental': specifier: ^0.51.1 - version: 0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12) + version: 0.51.1(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12) + '@graphprotocol/grc-20': + specifier: ^0.21.6 + version: 0.21.6(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) '@noble/ciphers': specifier: ^1.3.0 version: 1.3.0 @@ -650,6 +665,9 @@ importers: '@automerge/automerge-repo-react-hooks': specifier: ^2.0.6 version: 2.0.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@graphprotocol/grc-20': + specifier: ^0.21.6 + version: 0.21.6(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) '@noble/hashes': specifier: ^1.8.0 version: 1.8.0 @@ -686,7 +704,7 @@ importers: version: 19.1.3 '@vitejs/plugin-react': specifier: ^4.4.1 - version: 4.4.1(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.4.1(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@xstate/store': specifier: ^3.5.1 version: 3.5.1(react@19.1.0)(solid-js@1.9.5) @@ -700,6 +718,9 @@ importers: packages/typesync: dependencies: + '@graphprotocol/grc-20': + specifier: ^0.21.6 + version: 0.21.6(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) effect: specifier: ^3.16.12 version: 3.16.12 @@ -2270,13 +2291,13 @@ packages: resolution: {integrity: sha512-e7zcB6TPnVzyUaHMJyLSArKa2AG3h9+4CfvKXKKWNx6hRs+p0a+u7HHTJBgo6KW2m+vqDnuIHK4X+bhmoghAFA==} engines: {node: '>=18.0'} - '@effect/cli@0.66.1': - resolution: {integrity: sha512-FXXVNoMgrwf57dCTe8w/fqlZkr+MYNyNLxVHg2jYFUUWTFCzOTcj2myNEs5loVvJ5CmH2kvaylmM9ZRb+U6o1w==} + '@effect/cli@0.66.12': + resolution: {integrity: sha512-fAlZXPjcb3J+7OfbZvZVzkrNGJ44vuLQuRcCO8pX5u1ub4RY9/ikwYe0WfcugbcrvthMF1GEGo3+z10v1upk5g==} peerDependencies: - '@effect/platform': ^0.87.1 - '@effect/printer': ^0.44.10 - '@effect/printer-ansi': ^0.44.10 - effect: ^3.16.10 + '@effect/platform': ^0.87.12 + '@effect/printer': ^0.44.12 + '@effect/printer-ansi': ^0.44.12 + effect: ^3.16.12 '@effect/cluster@0.37.2': resolution: {integrity: sha512-9U4P/Fk8C6fN/s0e4nvA++prZmELtV7k5RwG2AOw4NgqBZqptiJMutgaT10ltwgdvddRF/77PVjgORyzNTBmbg==} @@ -2300,31 +2321,45 @@ packages: lmdb: optional: true - '@effect/language-service@0.23.3': - resolution: {integrity: sha512-yurF+FHd1HwM/3Mh7kQCea+z4wvbs2/NLPyk6FiEWA2sppRKv4Kp4luwfUqWqyd9/uyScWJcHX7WK1caLpx4Pw==} + '@effect/experimental@0.51.13': + resolution: {integrity: sha512-5dqPCO6HT6zLQw2yZaVZgIY4gytr1YQA3ZxfKyXPymKBTyTog0vrQxAiV7KUhXHQLpxvEdmaSisr/S1WUYUBrA==} + peerDependencies: + '@effect/platform': ^0.87.12 + effect: ^3.16.12 + ioredis: ^5 + lmdb: ^3 + peerDependenciesMeta: + ioredis: + optional: true + lmdb: + optional: true + + '@effect/language-service@0.24.2': + resolution: {integrity: sha512-wZiMtqbuJBcYNvXyG91c09T9dX1OPcmyH9k1Rz8G56i3kIrvVbs/gB/w4hexDuCjlemApYacMV6fH7O9O+Gtbg==} + hasBin: true - '@effect/platform-node-shared@0.42.3': - resolution: {integrity: sha512-3mV3lIeS/nSRbZuNb/64UfHDKf1k3IjCiBE8rajgbvOwMB+Fk5m/9ZPdDVoj/pkGE68EmDoVkbI1ysIiyUm0cg==} + '@effect/platform-node-shared@0.42.17': + resolution: {integrity: sha512-FNfR0Wsxru+1GnAyeTkOOOR8+ZsftQsTGcHq736eTv556jAhWVqKyhwDP0eRLZbQ2BjwxEFoAZl1AM8I3yUhNQ==} peerDependencies: - '@effect/cluster': ^0.41.3 - '@effect/platform': ^0.87.1 - '@effect/rpc': ^0.64.2 - '@effect/sql': ^0.40.1 - effect: ^3.16.10 + '@effect/cluster': ^0.41.17 + '@effect/platform': ^0.87.12 + '@effect/rpc': ^0.64.13 + '@effect/sql': ^0.40.13 + effect: ^3.16.12 - '@effect/platform-node@0.88.3': - resolution: {integrity: sha512-ChJxjjpT/pSmBpWgyKVHG1m8J8tEtPaKc160FFjNz/HGVmhBSsWce9Vro9Z13mQvsm2K5SZkET2pyQX8Rw60Yw==} + '@effect/platform-node@0.89.5': + resolution: {integrity: sha512-WQpggkO5TrwnN/Ry41H/ljdSFCFAp5pqtvhkqgyBepVzQ8XQFUYm78/Ty5t1UBexFzxC4qvFD0sjxlHbck2dmQ==} peerDependencies: - '@effect/cluster': ^0.41.3 - '@effect/platform': ^0.87.1 - '@effect/rpc': ^0.64.2 - '@effect/sql': ^0.40.1 - effect: ^3.16.10 + '@effect/cluster': ^0.41.17 + '@effect/platform': ^0.87.12 + '@effect/rpc': ^0.64.13 + '@effect/sql': ^0.40.13 + effect: ^3.16.12 - '@effect/platform@0.87.1': - resolution: {integrity: sha512-OJmdAOle5ZYExJIppBh2+N3RHCAdn3WdtxvLgkECI0aJLjpEy/O88XdkkLmRKrVPFByxsShfVUEhZyKtVdHA8A==} + '@effect/platform@0.87.12': + resolution: {integrity: sha512-IRYynFjo18wmfTd0FVNAXSC631+gE1yBeBfcOHtPLyMlApjhB31YzaCs+T9kY1cBrE7nZ78lJl0MtHmu1W9Wkw==} peerDependencies: - effect: ^3.16.10 + effect: ^3.16.12 '@effect/printer-ansi@0.40.10': resolution: {integrity: sha512-XMmAcHxojINGZKnNGJSrG1fMvMYLOlHGVAvvD/5pbp2Yi5Rh8PGDJjtaPmrj5PmO+WssovevLHGonrbKa8xybA==} @@ -2344,30 +2379,30 @@ packages: '@effect/platform': ^0.84.4 effect: ^3.16.3 - '@effect/sql-sqlite-node@0.41.1': - resolution: {integrity: sha512-jnDYcnAM9oyt9nt2W4W7G1/XsYGXXH/ZN8ugVE2IVH2GvCKBChozLRonBGs/wlLTxkAlivTIL4KIMrfAY7HAxQ==} + '@effect/sql-sqlite-node@0.41.13': + resolution: {integrity: sha512-MflOCMRsyPTo+5GHPXynXnH/hqWYDDzZjkxGm/Z2DXdZLPara8ZqME1U3OdDTKw/KWj1Xf/QT3yICv7OWX03WA==} peerDependencies: - '@effect/experimental': ^0.51.1 - '@effect/platform': ^0.87.1 - '@effect/sql': ^0.40.1 - effect: ^3.16.10 + '@effect/experimental': ^0.51.13 + '@effect/platform': ^0.87.12 + '@effect/sql': ^0.40.13 + effect: ^3.16.12 - '@effect/sql@0.40.1': - resolution: {integrity: sha512-yvAgaPotWz72h5WOh2sqckUk1rCNmcaWQJR9MW5v+KPMUryK5+BR2hnhPO5Lz+TKAOIcdBoQOwsdLCw/Y0zg3A==} + '@effect/sql@0.40.13': + resolution: {integrity: sha512-rAE9ofFAHcyN74hIPnAp+Kiu51KovayuLkKnBkAn+WsgCyHgK7Tn4qYJe9Hbqi3E/cRepRCh89zw11IpGbf37g==} peerDependencies: - '@effect/experimental': ^0.51.1 - '@effect/platform': ^0.87.1 - effect: ^3.16.10 + '@effect/experimental': ^0.51.13 + '@effect/platform': ^0.87.12 + effect: ^3.16.12 '@effect/typeclass@0.31.10': resolution: {integrity: sha512-mDuQ44IfyDUSnltcFS+cEQGWhMg37IwNiPmATLw/NYBYHDBkqUc77vzlCpSlBiKDzExSI8vjMVWqGjL22MLHGQ==} peerDependencies: effect: ^3.12.10 - '@effect/vitest@0.23.10': - resolution: {integrity: sha512-XdaA67TzoA61BtMRSQ9q77CGcNTiRPVNTeTHRYUM5scXQH+U3gH7RRFFG7PgmYNZp5WEeXg6VCAHV4+fGEdyZg==} + '@effect/vitest@0.23.12': + resolution: {integrity: sha512-kUR6Npn9gXsO+PlxnZQ9kmd7RzjT1Bl0foyypvCKctvRtG/CmqNgDNNZU9s/GZXvVAtbChjULXe1APyE2smrAw==} peerDependencies: - effect: ^3.16.10 + effect: ^3.16.12 vitest: ^3.0.0 '@effect/workflow@0.1.2': @@ -4749,6 +4784,9 @@ packages: '@tanstack/form-core@1.12.4': resolution: {integrity: sha512-BhfNI5sEjI68Im1Vqezf9w68fJL4EB80cqW5w0zb/MV1erHHsXNRwLGmljF88VnCx1t/xd4fmF0D08wNajBauQ==} + '@tanstack/form-core@1.14.0': + resolution: {integrity: sha512-uAOW3IxkT/Cmy8JlznK8S/LSpvtHjpUQi2wyuPqVfJ04y95WuV90SO+VKtb9TrNp51QLrrTFBR8tMEuzqp5wmA==} + '@tanstack/history@1.115.0': resolution: {integrity: sha512-K7JJNrRVvyjAVnbXOH2XLRhFXDkeP54Kt2P4FR1Kl2KDGlIbkua5VqZQD2rot3qaDrpufyUa63nuLai1kOLTsQ==} engines: {node: '>=12'} @@ -4763,6 +4801,9 @@ packages: '@tanstack/query-core@5.81.5': resolution: {integrity: sha512-ZJOgCy/z2qpZXWaj/oxvodDx07XcQa9BF92c0oINjHkoqUPsmm3uG08HpTaviviZ/N9eP1f9CM7mKSEkIo7O1Q==} + '@tanstack/query-core@5.83.0': + resolution: {integrity: sha512-0M8dA+amXUkyz5cVUm/B+zSk3xkQAcuXuz5/Q/LveT4ots2rBpPTZOzd7yJa2Utsf8D2Upl5KyjhHRY+9lB/XA==} + '@tanstack/query-devtools@5.81.2': resolution: {integrity: sha512-jCeJcDCwKfoyyBXjXe9+Lo8aTkavygHHsUHAlxQKKaDeyT0qyQNLKl7+UyqYH2dDF6UN/14873IPBHchcsU+Zg==} @@ -4778,12 +4819,30 @@ packages: vinxi: optional: true + '@tanstack/react-form@1.14.1': + resolution: {integrity: sha512-Ioja3zcLZj082OdCH6pFNv15fD4UTfnJgKIXxY7Iumio8EcYLXSuxzanqNWewFvftshUFHknSEa7QtyOAkFs0Q==} + peerDependencies: + '@tanstack/react-start': ^1.112.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + vinxi: ^0.5.0 + peerDependenciesMeta: + '@tanstack/react-start': + optional: true + vinxi: + optional: true + '@tanstack/react-query-devtools@5.81.5': resolution: {integrity: sha512-lCGMu4RX0uGnlrlLeSckBfnW/UV+KMlTBVqa97cwK7Z2ED5JKnZRSjNXwoma6sQBTJrcULvzgx2K6jEPvNUpDw==} peerDependencies: '@tanstack/react-query': ^5.81.5 react: ^18 || ^19 + '@tanstack/react-query-devtools@5.83.0': + resolution: {integrity: sha512-yfp8Uqd3I1jgx8gl0lxbSSESu5y4MO2ThOPBnGNTYs0P+ZFu+E9g5IdOngyUGuo6Uz6Qa7p9TLdZEX3ntik2fQ==} + peerDependencies: + '@tanstack/react-query': ^5.83.0 + react: ^18 || ^19 + '@tanstack/react-query@5.75.5': resolution: {integrity: sha512-QrLCJe40BgBVlWdAdf2ZEVJ0cISOuEy/HKupId1aTKU6gPJZVhSvZpH+Si7csRflCJphzlQ77Yx6gUxGW9o0XQ==} peerDependencies: @@ -4794,6 +4853,11 @@ packages: peerDependencies: react: ^18 || ^19 + '@tanstack/react-query@5.83.0': + resolution: {integrity: sha512-/XGYhZ3foc5H0VM2jLSD/NyBRIOK4q9kfeml4+0x2DlL6xVuAcVEW+hTlTapAmejObg0i3eNqhkr2dT+eciwoQ==} + peerDependencies: + react: ^18 || ^19 + '@tanstack/react-router-devtools@1.122.0': resolution: {integrity: sha512-UClUnO+PFvX5Ddlhhfkgo/7qSRTM/a/jsT7V5dz9LrSaPCsh7oLQgm6lj1Yu8U9GfpCQBLzWzbsvmYAdpOa/TQ==} engines: {node: '>=12'} @@ -4810,6 +4874,14 @@ packages: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' + '@tanstack/react-router-devtools@1.127.1': + resolution: {integrity: sha512-vKIO9ccqPNXqIU1mfZ4FRGNSeJAjvCqi9ZDxQkOb88euMkejzmN+4VTGFRQ51LwCOZaIgdy1l4JPaxH2tgq+vQ==} + engines: {node: '>=12'} + peerDependencies: + '@tanstack/react-router': ^1.127.1 + react: '>=18.0.0 || >=19.0.0' + react-dom: '>=18.0.0 || >=19.0.0' + '@tanstack/react-router@1.120.2': resolution: {integrity: sha512-CNduh/O3miW6A/WDMd2cfca8D8x+kVJTYwG5fMaBfcEF/bfjneDnEWXsmKLMdB2iLc6miaRQu66ryPSMdIBUAw==} engines: {node: '>=12'} @@ -4824,6 +4896,13 @@ packages: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' + '@tanstack/react-router@1.127.1': + resolution: {integrity: sha512-6Ofe9VxvmuGmaJ1qUBSOsCimsPHlq4nx75EC8JhIwnkc95AQaFCZce7mTp++qECVf6HlkE5El12YwpeTz8wnpQ==} + engines: {node: '>=12'} + peerDependencies: + react: '>=18.0.0 || >=19.0.0' + react-dom: '>=18.0.0 || >=19.0.0' + '@tanstack/react-store@0.7.0': resolution: {integrity: sha512-S/Rq17HaGOk+tQHV/yrePMnG1xbsKZIl/VsNWnNXt4XW+tTY8dTlvpJH2ZQ3GRALsusG5K6Q3unAGJ2pd9W/Ng==} peerDependencies: @@ -4836,6 +4915,12 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@tanstack/react-store@0.7.3': + resolution: {integrity: sha512-3Dnqtbw9P2P0gw8uUM8WP2fFfg8XMDSZCTsywRPZe/XqqYW8PGkXKZTvP0AHkE4mpqP9Y43GpOg9vwO44azu6Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + '@tanstack/react-virtual@3.13.6': resolution: {integrity: sha512-WT7nWs8ximoQ0CDx/ngoFP7HbQF9Q2wQe4nh2NB+u2486eX3nZRE40P9g6ccCVq7ZfTSH5gFOuCoVH5DLNS/aA==} peerDependencies: @@ -4856,6 +4941,10 @@ packages: resolution: {integrity: sha512-k1GTymZ2CBOX9SDiVHlqtgrNiid8fSKGjAofLToMAoLgqESg1knuIsYSeivmPkVbeSSdKkwF2uqsrJqNRIp/TQ==} engines: {node: '>=12'} + '@tanstack/router-core@1.127.0': + resolution: {integrity: sha512-hHgbtLOAnN61LFqBrE2bq3mctRLfXvJefBlTFakZJavSoMEniX6bMQ5ZMDwMtpo57Hbyzx2rTD4yZfYu74Eydg==} + engines: {node: '>=12'} + '@tanstack/router-devtools-core@1.122.0': resolution: {integrity: sha512-3AWnGAlC6GBrS9ral+CeThwHt690T0RtxMoRpTYdK5aJ5qyegWeQXqIjd6WPWNRjxYSKsDjPY2h77HPoAm7F5Q==} engines: {node: '>=12'} @@ -4880,6 +4969,18 @@ packages: csstype: optional: true + '@tanstack/router-devtools-core@1.127.0': + resolution: {integrity: sha512-K/UFaru0sVonaRoqQFUoNiqDt4AvXLxcRd2+9HjbGSC1xckAUNEEAcVl7jwQfERg89e9IVfHiPOIuDdQFjFBtA==} + engines: {node: '>=12'} + peerDependencies: + '@tanstack/router-core': ^1.127.0 + csstype: ^3.0.10 + solid-js: '>=1.9.5' + tiny-invariant: ^1.3.3 + peerDependenciesMeta: + csstype: + optional: true + '@tanstack/router-generator@1.120.2': resolution: {integrity: sha512-rI+hQjUtsAZs5K2292zM6OE/fHAVRZxejAkrLlaQlunphqJYtHBizXk15SP9QsP3i+QvS1D8YnioMPvSlVPEOw==} engines: {node: '>=12'} @@ -4889,8 +4990,8 @@ packages: '@tanstack/react-router': optional: true - '@tanstack/router-generator@1.123.2': - resolution: {integrity: sha512-JJ1spXiYlUndXhZUwSpkwWwytvnhm164KP8mUbXHfY6STcH5doBZTcwkjUm5MYz8TXta3rNCuutNTshEMQX1BQ==} + '@tanstack/router-generator@1.127.0': + resolution: {integrity: sha512-k6f2Ekkoe4MB8lEeMfefQ4031yVf+3BIArsQqFB3HOzJaIRzPo8w8Boq7XqwZ2/r1lwSpK0z/xrNLcF2EMmeaw==} engines: {node: '>=12'} '@tanstack/router-plugin@1.120.2': @@ -4914,12 +5015,12 @@ packages: webpack: optional: true - '@tanstack/router-plugin@1.123.2': - resolution: {integrity: sha512-5+oM8Xmv0EAOs/ZU0wbKKzbpwiqixco1mAg3DCy/R5z4IIFq9Df9N33zC7c2RRDjJ/S2OzXWWA3Dn26DuC/HUg==} + '@tanstack/router-plugin@1.127.1': + resolution: {integrity: sha512-JgwxSCI3ESsU+E3iHpSn2MX8/UwygaT4DvOllQTm+njFpeHLqm3i3MjmPlj7AelLAyLqALntt4WvaZKvfKaLLA==} engines: {node: '>=12'} peerDependencies: '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.123.2 + '@tanstack/react-router': ^1.127.1 vite: '>=5.0.0 || >=6.0.0' vite-plugin-solid: ^2.11.2 webpack: '>=5.92.0' @@ -4949,6 +5050,9 @@ packages: '@tanstack/store@0.7.1': resolution: {integrity: sha512-PjUQKXEXhLYj2X5/6c1Xn/0/qKY0IVFxTJweopRfF26xfjVyb14yALydJrHupDh3/d+1WKmfEgZPBVCmDkzzwg==} + '@tanstack/store@0.7.2': + resolution: {integrity: sha512-RP80Z30BYiPX2Pyo0Nyw4s1SJFH2jyM6f9i3HfX4pA+gm5jsnYryscdq2aIQLnL4TaGuQMO+zXmN9nh1Qck+Pg==} + '@tanstack/virtual-core@3.13.6': resolution: {integrity: sha512-cnQUeWnhNP8tJ4WsGcYiX24Gjkc9ALstLbHcBj1t3E7EimN6n6kHH+DPV4PpDnuw00NApQp+ViojMj1GRdwYQg==} @@ -5122,8 +5226,8 @@ packages: '@types/node@22.7.5': resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} - '@types/node@24.0.8': - resolution: {integrity: sha512-WytNrFSgWO/esSH9NbpWUfTMGQwCGIKfCmNlmFDNiI5gGhgMmEA+V1AEvKLeBNvvtBnailJtkrEa2OIISwrVAA==} + '@types/node@24.0.13': + resolution: {integrity: sha512-Qm9OYVOFHFYg3wJoTSrz80hoec5Lia/dPp84do3X7dZvLikQvM1YpmvTBEdIr/e+U8HTkFjLHLnl78K/qjf+jQ==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -7217,8 +7321,8 @@ packages: resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} engines: {node: '>=14.16'} - find-my-way-ts@0.1.5: - resolution: {integrity: sha512-4GOTMrpGQVzsCH2ruUn2vmwzV/02zF4q+ybhCIrw/Rkt3L8KWcycdC6aJMctJzwN4fXD4SD5F/4B9Sksh5rE0A==} + find-my-way-ts@0.1.6: + resolution: {integrity: sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA==} find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} @@ -10613,10 +10717,20 @@ packages: peerDependencies: seroval: ^1.0 + seroval-plugins@1.3.2: + resolution: {integrity: sha512-0QvCV2lM3aj/U3YozDiVwx9zpH0q8A60CTWIv4Jszj/givcudPb48B+rkU5D51NJ0pTpweGMttHjboPa9/zoIQ==} + engines: {node: '>=10'} + peerDependencies: + seroval: ^1.0 + seroval@1.2.1: resolution: {integrity: sha512-yBxFFs3zmkvKNmR0pFSU//rIsYjuX418TnlDmc2weaq5XFDqDIV/NOMPBoLrbxjLH42p4UzRuXHryXh9dYcKcw==} engines: {node: '>=10'} + seroval@1.3.2: + resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==} + engines: {node: '>=10'} + serve-handler@6.1.6: resolution: {integrity: sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==} @@ -14647,9 +14761,9 @@ snapshots: - uglify-js - webpack-cli - '@effect/cli@0.66.1(@effect/platform@0.87.1(effect@3.16.12))(@effect/printer-ansi@0.40.10(@effect/typeclass@0.31.10(effect@3.16.12))(effect@3.16.12))(@effect/printer@0.40.10(@effect/typeclass@0.31.10(effect@3.16.12))(effect@3.16.12))(effect@3.16.12)': + '@effect/cli@0.66.12(@effect/platform@0.87.12(effect@3.16.12))(@effect/printer-ansi@0.40.10(@effect/typeclass@0.31.10(effect@3.16.12))(effect@3.16.12))(@effect/printer@0.40.10(@effect/typeclass@0.31.10(effect@3.16.12))(effect@3.16.12))(effect@3.16.12)': dependencies: - '@effect/platform': 0.87.1(effect@3.16.12) + '@effect/platform': 0.87.12(effect@3.16.12) '@effect/printer': 0.40.10(@effect/typeclass@0.31.10(effect@3.16.12))(effect@3.16.12) '@effect/printer-ansi': 0.40.10(@effect/typeclass@0.31.10(effect@3.16.12))(effect@3.16.12) effect: 3.16.12 @@ -14657,28 +14771,34 @@ snapshots: toml: 3.0.0 yaml: 2.7.0 - '@effect/cluster@0.37.2(@effect/platform@0.87.1(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/workflow@0.1.2(effect@3.16.12))(effect@3.16.12)': + '@effect/cluster@0.37.2(@effect/platform@0.87.12(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/workflow@0.1.2(effect@3.16.12))(effect@3.16.12)': dependencies: - '@effect/platform': 0.87.1(effect@3.16.12) - '@effect/rpc': 0.61.4(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12) - '@effect/sql': 0.40.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12) + '@effect/platform': 0.87.12(effect@3.16.12) + '@effect/rpc': 0.61.4(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12) + '@effect/sql': 0.40.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12) '@effect/workflow': 0.1.2(effect@3.16.12) effect: 3.16.12 - '@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12)': + '@effect/experimental@0.51.1(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12)': + dependencies: + '@effect/platform': 0.87.12(effect@3.16.12) + effect: 3.16.12 + uuid: 11.1.0 + + '@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12)': dependencies: - '@effect/platform': 0.87.1(effect@3.16.12) + '@effect/platform': 0.87.12(effect@3.16.12) effect: 3.16.12 uuid: 11.1.0 - '@effect/language-service@0.23.3': {} + '@effect/language-service@0.24.2': {} - '@effect/platform-node-shared@0.42.3(@effect/cluster@0.37.2(@effect/platform@0.87.1(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/workflow@0.1.2(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(bufferutil@4.0.9)(effect@3.16.12)(utf-8-validate@5.0.10)': + '@effect/platform-node-shared@0.42.17(@effect/cluster@0.37.2(@effect/platform@0.87.12(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/workflow@0.1.2(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(bufferutil@4.0.9)(effect@3.16.12)(utf-8-validate@5.0.10)': dependencies: - '@effect/cluster': 0.37.2(@effect/platform@0.87.1(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/workflow@0.1.2(effect@3.16.12))(effect@3.16.12) - '@effect/platform': 0.87.1(effect@3.16.12) - '@effect/rpc': 0.61.4(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12) - '@effect/sql': 0.40.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12) + '@effect/cluster': 0.37.2(@effect/platform@0.87.12(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/workflow@0.1.2(effect@3.16.12))(effect@3.16.12) + '@effect/platform': 0.87.12(effect@3.16.12) + '@effect/rpc': 0.61.4(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12) + '@effect/sql': 0.40.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12) '@parcel/watcher': 2.5.1 effect: 3.16.12 multipasta: 0.2.5 @@ -14687,13 +14807,13 @@ snapshots: - bufferutil - utf-8-validate - '@effect/platform-node@0.88.3(@effect/cluster@0.37.2(@effect/platform@0.87.1(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/workflow@0.1.2(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(bufferutil@4.0.9)(effect@3.16.12)(utf-8-validate@5.0.10)': + '@effect/platform-node@0.89.5(@effect/cluster@0.37.2(@effect/platform@0.87.12(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/workflow@0.1.2(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(bufferutil@4.0.9)(effect@3.16.12)(utf-8-validate@5.0.10)': dependencies: - '@effect/cluster': 0.37.2(@effect/platform@0.87.1(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/workflow@0.1.2(effect@3.16.12))(effect@3.16.12) - '@effect/platform': 0.87.1(effect@3.16.12) - '@effect/platform-node-shared': 0.42.3(@effect/cluster@0.37.2(@effect/platform@0.87.1(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/workflow@0.1.2(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(bufferutil@4.0.9)(effect@3.16.12)(utf-8-validate@5.0.10) - '@effect/rpc': 0.61.4(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12) - '@effect/sql': 0.40.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12) + '@effect/cluster': 0.37.2(@effect/platform@0.87.12(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/workflow@0.1.2(effect@3.16.12))(effect@3.16.12) + '@effect/platform': 0.87.12(effect@3.16.12) + '@effect/platform-node-shared': 0.42.17(@effect/cluster@0.37.2(@effect/platform@0.87.12(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/workflow@0.1.2(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(@effect/rpc@0.61.4(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/sql@0.40.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(bufferutil@4.0.9)(effect@3.16.12)(utf-8-validate@5.0.10) + '@effect/rpc': 0.61.4(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12) + '@effect/sql': 0.40.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12) effect: 3.16.12 mime: 3.0.0 undici: 7.10.0 @@ -14702,10 +14822,10 @@ snapshots: - bufferutil - utf-8-validate - '@effect/platform@0.87.1(effect@3.16.12)': + '@effect/platform@0.87.12(effect@3.16.12)': dependencies: effect: 3.16.12 - find-my-way-ts: 0.1.5 + find-my-way-ts: 0.1.6 msgpackr: 1.11.4 multipasta: 0.2.5 @@ -14720,24 +14840,24 @@ snapshots: '@effect/typeclass': 0.31.10(effect@3.16.12) effect: 3.16.12 - '@effect/rpc@0.61.4(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12)': + '@effect/rpc@0.61.4(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12)': dependencies: - '@effect/platform': 0.87.1(effect@3.16.12) + '@effect/platform': 0.87.12(effect@3.16.12) effect: 3.16.12 - '@effect/sql-sqlite-node@0.41.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(@effect/sql@0.40.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(effect@3.16.12)': + '@effect/sql-sqlite-node@0.41.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(@effect/sql@0.40.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(effect@3.16.12)': dependencies: - '@effect/experimental': 0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12) - '@effect/platform': 0.87.1(effect@3.16.12) - '@effect/sql': 0.40.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12) + '@effect/experimental': 0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12) + '@effect/platform': 0.87.12(effect@3.16.12) + '@effect/sql': 0.40.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12) '@opentelemetry/semantic-conventions': 1.34.0 better-sqlite3: 11.10.0 effect: 3.16.12 - '@effect/sql@0.40.1(@effect/experimental@0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12)': + '@effect/sql@0.40.13(@effect/experimental@0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12))(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12)': dependencies: - '@effect/experimental': 0.51.1(@effect/platform@0.87.1(effect@3.16.12))(effect@3.16.12) - '@effect/platform': 0.87.1(effect@3.16.12) + '@effect/experimental': 0.51.13(@effect/platform@0.87.12(effect@3.16.12))(effect@3.16.12) + '@effect/platform': 0.87.12(effect@3.16.12) '@opentelemetry/semantic-conventions': 1.34.0 effect: 3.16.12 uuid: 11.1.0 @@ -14746,10 +14866,10 @@ snapshots: dependencies: effect: 3.16.12 - '@effect/vitest@0.23.10(effect@3.16.12)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.8)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@effect/vitest@0.23.12(effect@3.16.12)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: effect: 3.16.12 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.8)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) '@effect/workflow@0.1.2(effect@3.16.12)': dependencies: @@ -15315,7 +15435,7 @@ snapshots: graphql: 16.11.0 tslib: 2.6.2 - '@graphql-codegen/cli@5.0.7(@babel/core@7.28.0)(@parcel/watcher@2.5.1)(@types/node@24.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(enquirer@2.4.1)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@graphql-codegen/cli@5.0.7(@babel/core@7.28.0)(@parcel/watcher@2.5.1)(@types/node@24.0.13)(bufferutil@4.0.9)(encoding@0.1.13)(enquirer@2.4.1)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@babel/generator': 7.27.1 '@babel/template': 7.27.1 @@ -15326,12 +15446,12 @@ snapshots: '@graphql-tools/apollo-engine-loader': 8.0.13(graphql@16.11.0) '@graphql-tools/code-file-loader': 8.1.13(graphql@16.11.0) '@graphql-tools/git-loader': 8.0.17(graphql@16.11.0) - '@graphql-tools/github-loader': 8.0.13(@types/node@24.0.8)(graphql@16.11.0) + '@graphql-tools/github-loader': 8.0.13(@types/node@24.0.13)(graphql@16.11.0) '@graphql-tools/graphql-file-loader': 8.0.12(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.11(graphql@16.11.0) '@graphql-tools/load': 8.1.0(graphql@16.11.0) - '@graphql-tools/prisma-loader': 8.0.17(@types/node@24.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(utf-8-validate@5.0.10) - '@graphql-tools/url-loader': 8.0.24(@types/node@24.0.8)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) + '@graphql-tools/prisma-loader': 8.0.17(@types/node@24.0.13)(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.24(@types/node@24.0.13)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) '@whatwg-node/fetch': 0.10.3 chalk: 4.1.2 @@ -15339,7 +15459,7 @@ snapshots: debounce: 1.2.1 detect-indent: 6.1.0 graphql: 16.11.0 - graphql-config: 5.1.3(@types/node@24.0.8)(bufferutil@4.0.9)(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + graphql-config: 5.1.3(@types/node@24.0.13)(bufferutil@4.0.9)(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10) inquirer: 8.2.6 is-glob: 4.0.3 jiti: 1.21.7 @@ -15561,7 +15681,7 @@ snapshots: - bufferutil - utf-8-validate - '@graphql-tools/executor-http@1.2.6(@types/node@24.0.8)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.2.6(@types/node@24.0.13)(graphql@16.11.0)': dependencies: '@graphql-tools/executor-common': 0.0.1(graphql@16.11.0) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) @@ -15570,7 +15690,7 @@ snapshots: '@whatwg-node/fetch': 0.10.3 extract-files: 11.0.0 graphql: 16.11.0 - meros: 1.3.0(@types/node@24.0.8) + meros: 1.3.0(@types/node@24.0.13) tslib: 2.8.1 value-or-promise: 1.0.12 transitivePeerDependencies: @@ -15610,9 +15730,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/github-loader@8.0.13(@types/node@24.0.8)(graphql@16.11.0)': + '@graphql-tools/github-loader@8.0.13(@types/node@24.0.13)(graphql@16.11.0)': dependencies: - '@graphql-tools/executor-http': 1.2.6(@types/node@24.0.8)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.2.6(@types/node@24.0.13)(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.12(graphql@16.11.0) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) '@whatwg-node/fetch': 0.10.3 @@ -15680,9 +15800,9 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/prisma-loader@8.0.17(@types/node@24.0.8)(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(utf-8-validate@5.0.10)': + '@graphql-tools/prisma-loader@8.0.17(@types/node@24.0.13)(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(utf-8-validate@5.0.10)': dependencies: - '@graphql-tools/url-loader': 8.0.24(@types/node@24.0.8)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.24(@types/node@24.0.13)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) '@types/js-yaml': 4.0.9 '@whatwg-node/fetch': 0.10.3 @@ -15724,10 +15844,10 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.24(@types/node@24.0.8)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10)': + '@graphql-tools/url-loader@8.0.24(@types/node@24.0.13)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10)': dependencies: '@graphql-tools/executor-graphql-ws': 1.3.7(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) - '@graphql-tools/executor-http': 1.2.6(@types/node@24.0.8)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.2.6(@types/node@24.0.13)(graphql@16.11.0) '@graphql-tools/executor-legacy-ws': 1.1.10(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) '@graphql-tools/wrap': 10.0.29(graphql@16.11.0) @@ -17784,12 +17904,12 @@ snapshots: tailwindcss: 4.1.10 vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) - '@tailwindcss/vite@4.1.11(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@tailwindcss/vite@4.1.11(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@tailwindcss/node': 4.1.11 '@tailwindcss/oxide': 4.1.11 tailwindcss: 4.1.11 - vite: 6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) '@tailwindcss/vite@4.1.5(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: @@ -17802,6 +17922,10 @@ snapshots: dependencies: '@tanstack/store': 0.7.1 + '@tanstack/form-core@1.14.0': + dependencies: + '@tanstack/store': 0.7.2 + '@tanstack/history@1.115.0': {} '@tanstack/history@1.121.34': {} @@ -17810,6 +17934,8 @@ snapshots: '@tanstack/query-core@5.81.5': {} + '@tanstack/query-core@5.83.0': {} + '@tanstack/query-devtools@5.81.2': {} '@tanstack/react-form@1.12.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': @@ -17822,12 +17948,28 @@ snapshots: transitivePeerDependencies: - react-dom + '@tanstack/react-form@1.14.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@tanstack/form-core': 1.14.0 + '@tanstack/react-store': 0.7.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + decode-formdata: 0.9.0 + devalue: 5.1.1 + react: 19.1.0 + transitivePeerDependencies: + - react-dom + '@tanstack/react-query-devtools@5.81.5(@tanstack/react-query@5.81.5(react@19.1.0))(react@19.1.0)': dependencies: '@tanstack/query-devtools': 5.81.2 '@tanstack/react-query': 5.81.5(react@19.1.0) react: 19.1.0 + '@tanstack/react-query-devtools@5.83.0(@tanstack/react-query@5.83.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@tanstack/query-devtools': 5.81.2 + '@tanstack/react-query': 5.83.0(react@19.1.0) + react: 19.1.0 + '@tanstack/react-query@5.75.5(react@19.1.0)': dependencies: '@tanstack/query-core': 5.75.5 @@ -17838,10 +17980,15 @@ snapshots: '@tanstack/query-core': 5.81.5 react: 19.1.0 - '@tanstack/react-router-devtools@1.122.0(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.123.2)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)': + '@tanstack/react-query@5.83.0(react@19.1.0)': + dependencies: + '@tanstack/query-core': 5.83.0 + react: 19.1.0 + + '@tanstack/react-router-devtools@1.122.0(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.127.0)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)': dependencies: '@tanstack/react-router': 1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-devtools-core': 1.122.0(@tanstack/router-core@1.123.2)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3) + '@tanstack/router-devtools-core': 1.122.0(@tanstack/router-core@1.127.0)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) transitivePeerDependencies: @@ -17850,10 +17997,22 @@ snapshots: - solid-js - tiny-invariant - '@tanstack/react-router-devtools@1.123.2(@tanstack/react-router@1.123.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.123.2)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)': + '@tanstack/react-router-devtools@1.123.2(@tanstack/react-router@1.123.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.127.0)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)': dependencies: '@tanstack/react-router': 1.123.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-devtools-core': 1.123.2(@tanstack/router-core@1.123.2)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3) + '@tanstack/router-devtools-core': 1.123.2(@tanstack/router-core@1.127.0)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + transitivePeerDependencies: + - '@tanstack/router-core' + - csstype + - solid-js + - tiny-invariant + + '@tanstack/react-router-devtools@1.127.1(@tanstack/react-router@1.127.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.127.0)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)': + dependencies: + '@tanstack/react-router': 1.127.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/router-devtools-core': 1.127.0(@tanstack/router-core@1.127.0)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) transitivePeerDependencies: @@ -17885,6 +18044,18 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 + '@tanstack/react-router@1.127.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@tanstack/history': 1.121.34 + '@tanstack/react-store': 0.7.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/router-core': 1.127.0 + isbot: 5.1.28 + jsesc: 3.1.0 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + tiny-invariant: 1.3.3 + tiny-warning: 1.0.3 + '@tanstack/react-store@0.7.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@tanstack/store': 0.7.0 @@ -17899,6 +18070,13 @@ snapshots: react-dom: 19.1.0(react@19.1.0) use-sync-external-store: 1.5.0(react@19.1.0) + '@tanstack/react-store@0.7.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@tanstack/store': 0.7.2 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + use-sync-external-store: 1.5.0(react@19.1.0) + '@tanstack/react-virtual@3.13.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@tanstack/virtual-core': 3.13.6 @@ -17926,9 +18104,20 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.122.0(@tanstack/router-core@1.123.2)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': + '@tanstack/router-core@1.127.0': dependencies: - '@tanstack/router-core': 1.123.2 + '@tanstack/history': 1.121.34 + '@tanstack/store': 0.7.1 + cookie-es: 1.2.2 + jsesc: 3.1.0 + seroval: 1.3.2 + seroval-plugins: 1.3.2(seroval@1.3.2) + tiny-invariant: 1.3.3 + tiny-warning: 1.0.3 + + '@tanstack/router-devtools-core@1.122.0(@tanstack/router-core@1.127.0)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': + dependencies: + '@tanstack/router-core': 1.127.0 clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) solid-js: 1.9.5 @@ -17936,9 +18125,19 @@ snapshots: optionalDependencies: csstype: 3.1.3 - '@tanstack/router-devtools-core@1.123.2(@tanstack/router-core@1.123.2)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': + '@tanstack/router-devtools-core@1.123.2(@tanstack/router-core@1.127.0)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': dependencies: - '@tanstack/router-core': 1.123.2 + '@tanstack/router-core': 1.127.0 + clsx: 2.1.1 + goober: 2.1.16(csstype@3.1.3) + solid-js: 1.9.5 + tiny-invariant: 1.3.3 + optionalDependencies: + csstype: 3.1.3 + + '@tanstack/router-devtools-core@1.127.0(@tanstack/router-core@1.127.0)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': + dependencies: + '@tanstack/router-core': 1.127.0 clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) solid-js: 1.9.5 @@ -17955,9 +18154,9 @@ snapshots: optionalDependencies: '@tanstack/react-router': 1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-generator@1.123.2': + '@tanstack/router-generator@1.127.0': dependencies: - '@tanstack/router-core': 1.123.2 + '@tanstack/router-core': 1.127.0 '@tanstack/router-utils': 1.121.21 '@tanstack/virtual-file-routes': 1.121.21 prettier: 3.6.1 @@ -17994,16 +18193,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.123.2(@tanstack/react-router@1.123.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2))': + '@tanstack/router-plugin@1.127.1(@tanstack/react-router@1.127.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.0) '@babel/template': 7.27.2 - '@babel/traverse': 7.27.7 - '@babel/types': 7.27.7 - '@tanstack/router-core': 1.123.2 - '@tanstack/router-generator': 1.123.2 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.0 + '@tanstack/router-core': 1.127.0 + '@tanstack/router-generator': 1.127.0 '@tanstack/router-utils': 1.121.21 '@tanstack/virtual-file-routes': 1.121.21 babel-dead-code-elimination: 1.0.10 @@ -18011,8 +18210,8 @@ snapshots: unplugin: 2.1.2 zod: 3.25.51 optionalDependencies: - '@tanstack/react-router': 1.123.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + '@tanstack/react-router': 1.127.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + vite: 6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) webpack: 5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2) transitivePeerDependencies: - supports-color @@ -18027,8 +18226,8 @@ snapshots: '@tanstack/router-utils@1.121.21': dependencies: '@babel/core': 7.28.0 - '@babel/generator': 7.27.5 - '@babel/parser': 7.27.7 + '@babel/generator': 7.28.0 + '@babel/parser': 7.28.0 '@babel/preset-typescript': 7.27.1(@babel/core@7.28.0) ansis: 4.1.0 diff: 8.0.2 @@ -18039,6 +18238,8 @@ snapshots: '@tanstack/store@0.7.1': {} + '@tanstack/store@0.7.2': {} + '@tanstack/virtual-core@3.13.6': {} '@tanstack/virtual-core@3.13.9': {} @@ -18242,7 +18443,7 @@ snapshots: dependencies: undici-types: 6.19.8 - '@types/node@24.0.8': + '@types/node@24.0.13': dependencies: undici-types: 7.8.0 @@ -18366,18 +18567,18 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.28.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.28.0) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.6.0(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@vitejs/plugin-react@4.6.0(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.0) @@ -18385,7 +18586,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.19 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -18397,13 +18598,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) '@vitest/pretty-format@3.2.4': dependencies: @@ -21175,7 +21376,7 @@ snapshots: common-path-prefix: 3.0.0 pkg-dir: 7.0.0 - find-my-way-ts@0.1.5: {} + find-my-way-ts@0.1.6: {} find-root@1.1.0: {} @@ -21450,13 +21651,13 @@ snapshots: graceful-fs@4.2.11: {} - graphql-config@5.1.3(@types/node@24.0.8)(bufferutil@4.0.9)(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10): + graphql-config@5.1.3(@types/node@24.0.13)(bufferutil@4.0.9)(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10): dependencies: '@graphql-tools/graphql-file-loader': 8.0.12(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.11(graphql@16.11.0) '@graphql-tools/load': 8.1.0(graphql@16.11.0) '@graphql-tools/merge': 9.0.24(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.24(@types/node@24.0.8)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.24(@types/node@24.0.13)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) cosmiconfig: 8.3.6(typescript@5.8.3) graphql: 16.11.0 @@ -22783,9 +22984,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.0(@types/node@24.0.8): + meros@1.3.0(@types/node@24.0.13): optionalDependencies: - '@types/node': 24.0.8 + '@types/node': 24.0.13 methods@1.1.2: {} @@ -25167,8 +25368,14 @@ snapshots: dependencies: seroval: 1.2.1 + seroval-plugins@1.3.2(seroval@1.3.2): + dependencies: + seroval: 1.3.2 + seroval@1.2.1: {} + seroval@1.3.2: {} + serve-handler@6.1.6: dependencies: bytes: 3.0.0 @@ -26337,13 +26544,13 @@ snapshots: - utf-8-validate - zod - vite-node@3.2.4(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): + vite-node@3.2.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -26394,7 +26601,7 @@ snapshots: tsx: 4.20.3 yaml: 2.7.0 - vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): + vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): dependencies: esbuild: 0.25.2 fdir: 6.4.4(picomatch@4.0.2) @@ -26403,7 +26610,7 @@ snapshots: rollup: 4.39.0 tinyglobby: 0.2.13 optionalDependencies: - '@types/node': 24.0.8 + '@types/node': 24.0.13 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 @@ -26411,11 +26618,11 @@ snapshots: tsx: 4.20.3 yaml: 2.7.0 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.8)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -26433,12 +26640,12 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) - vite-node: 3.2.4(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite-node: 3.2.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 24.0.8 + '@types/node': 24.0.13 jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - jiti From 9cec6e01e3135b673cc2059eea204739d0778f84 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Fri, 11 Jul 2025 11:42:04 -1000 Subject: [PATCH 10/10] feat(typeynsc mapping): work through remaining generateMapping issues --- packages/typesync/src/Mapping.ts | 431 +++++++++++++++++++++---- packages/typesync/test/Mapping.test.ts | 213 +++++++++++- 2 files changed, 559 insertions(+), 85 deletions(-) diff --git a/packages/typesync/src/Mapping.ts b/packages/typesync/src/Mapping.ts index 6ba30220..e6eef350 100644 --- a/packages/typesync/src/Mapping.ts +++ b/packages/typesync/src/Mapping.ts @@ -1,5 +1,5 @@ import { type CreatePropertyParams, Graph, Id as Grc20Id, type Op } from '@graphprotocol/grc-20'; -import { Array as EffectArray, Schema as EffectSchema, pipe } from 'effect'; +import { Data, Array as EffectArray, Schema as EffectSchema, Option, pipe } from 'effect'; import { namesAreUnique, toCamelCase, toPascalCase } from './Utils.js'; @@ -282,100 +282,391 @@ export function allRelationPropertyTypesExist(types: ReadonlyArray): ); } +export type GenerateMappingResult = [mapping: Mapping, ops: Array]; + +// Helper types for internal processing +type PropertyIdMapping = { propName: string; id: Grc20Id.Id }; +type TypeIdMapping = Map; +type ProcessedProperty = + | { type: 'resolved'; mapping: PropertyIdMapping; ops: Array } + | { type: 'deferred'; property: SchemaTypePropertyRelation }; + +type ProcessedType = + | { type: 'complete'; entry: MappingEntry & { typeName: string }; ops: Array } + | { type: 'deferred'; schemaType: SchemaType; properties: Array }; + +// Helper function to build property map from PropertyIdMappings +function buildPropertyMap(properties: Array): MappingEntry['properties'] { + return pipe( + properties, + EffectArray.reduce({} as NonNullable, (props, { propName, id }) => { + props[toCamelCase(propName)] = id; + return props; + }), + ); +} + +// Helper function to create a property and return the result +function createPropertyWithOps( + property: SchemaTypePropertyPrimitive | SchemaTypePropertyRelation, + typeIdMap: TypeIdMapping, +): ProcessedProperty { + if (property.knowledgeGraphId) { + return { + type: 'resolved', + mapping: { propName: property.name, id: Grc20Id.Id(property.knowledgeGraphId) }, + ops: [], + }; + } + + if (propertyIsRelation(property)) { + const relationTypeId = typeIdMap.get(property.relationType); + if (relationTypeId == null) { + return { type: 'deferred', property }; + } + + const { id, ops } = Graph.createProperty({ + name: property.name, + dataType: 'RELATION', + relationValueTypes: [relationTypeId], + }); + return { + type: 'resolved', + mapping: { propName: property.name, id }, + ops, + }; + } + + const { id, ops } = Graph.createProperty({ + name: property.name, + dataType: mapSchemaDataTypeToGRC20PropDataType(property.dataType), + }); + return { + type: 'resolved', + mapping: { propName: property.name, id }, + ops, + }; +} + +// Helper function to process a single type +function processType(type: SchemaType, typeIdMap: TypeIdMapping): ProcessedType { + const processedProperties = pipe( + type.properties, + EffectArray.map((prop) => createPropertyWithOps(prop, typeIdMap)), + ); + + const resolvedProperties = pipe( + processedProperties, + EffectArray.filterMap((p) => (p.type === 'resolved' ? Option.some(p) : Option.none())), + ); + + const deferredProperties = pipe( + processedProperties, + EffectArray.filterMap((p) => (p.type === 'deferred' ? Option.some(p.property) : Option.none())), + ); + + const propertyMappings = pipe( + resolvedProperties, + EffectArray.map((p) => p.mapping), + ); + + const propertyOps = pipe( + resolvedProperties, + EffectArray.flatMap((p) => p.ops), + ); + + // If type exists in knowledge graph, return complete entry + if (type.knowledgeGraphId) { + return { + type: 'complete', + entry: { + typeName: toPascalCase(type.name), + typeIds: [Grc20Id.Id(type.knowledgeGraphId)], + properties: buildPropertyMap(propertyMappings), + }, + ops: propertyOps, + }; + } + + // If there are deferred properties, defer type creation + if (EffectArray.isNonEmptyArray(deferredProperties)) { + return { + type: 'deferred', + schemaType: type, + properties: propertyMappings, + }; + } + + // Create the type with all resolved properties + const { id, ops: typeOps } = Graph.createType({ + name: type.name, + properties: pipe( + propertyMappings, + EffectArray.map((p) => p.id), + ), + }); + + typeIdMap.set(type.name, id); + + return { + type: 'complete', + entry: { + typeName: toPascalCase(type.name), + typeIds: [id], + properties: buildPropertyMap(propertyMappings), + }, + ops: [...propertyOps, ...typeOps], + }; +} + /** - * Takes the user-submitted schema, validates it, and build the `Mapping` definition for the schema. + * Takes the user-submitted schema, validates it, and build the `Mapping` definition for the schema as well as the GRC-20 Ops needed to publish the schema/schema changes to the Knowledge Graph. + * + * @example + * ```ts + * import { Id } from "@graphprotocol/grc-20" + * import { generateMapping } from "@graphprotocol/typesync" + * + * const schema: Schema = { + * types: [ + * { + * name: "Account", + * knowledgeGraphId: "a5fd07b1-120f-46c6-b46f-387ef98396a6", + * properties: [ + * { + * name: "username", + * dataType: "Text", + * knowledgeGraphId: "994edcff-6996-4a77-9797-a13e5e3efad8" + * }, + * { + * name: "createdAt", + * dataType: "Date", + * knowledgeGraphId: null + * } + * ] + * }, + * { + * name: "Event", + * knowledgeGraphId: null, + * properties: [ + * { + * name: "name", + * dataType: "Text", + * knowledgeGraphId: "3808e060-fb4a-4d08-8069-35b8c8a1902b" + * }, + * { + * name: "description", + * dataType: "Text", + * knowledgeGraphId: null + * }, + * { + * name: "speaker", + * dataType: "Relation(Account)", + * relationType: "Account", + * knowledgeGraphId: null + * } + * ] + * } + * ], + * } + * const [mapping, ops] = generateMapping(schema) + * + * expect(mapping).toEqual({ + * Account: { + * typeIds: [Id.Id("a5fd07b1-120f-46c6-b46f-387ef98396a6")], // comes from input schema + * properties: { + * username: Id.Id("994edcff-6996-4a77-9797-a13e5e3efad8"), // comes from input schema + * createdAt: Id.Id("8cd7d9ac-a878-4287-8000-e71e6f853117"), // generated from Graph.createProperty Op + * } + * }, + * Event: { + * typeIds: [Id.Id("20b3fe39-8e62-41a0-b9cb-92743fd760da")], // generated from Graph.createType Op + * properties: { + * name: Id.Id("3808e060-fb4a-4d08-8069-35b8c8a1902b"), // comes from input schema + * description: Id.Id("8fc4e17c-7581-4d6c-a712-943385afc7b5"), // generated from Graph.createProperty Op + * speaker: Id.Id("651ce59f-643b-4931-bf7a-5dc0ca0f5a47"), // generated from Graph.createProperty Op + * } + * } + * }) + * expect(ops).toEqual([ + * // Graph.createProperty Op for Account.createdAt property + * { + * type: "CREATE_PROPERTY", + * property: { + * id: Id.Id("8cd7d9ac-a878-4287-8000-e71e6f853117"), + * dataType: "TEXT" + * } + * }, + * // Graph.createProperty Op for Event.description property + * { + * type: "CREATE_PROPERTY", + * property: { + * id: Id.Id("8fc4e17c-7581-4d6c-a712-943385afc7b5"), + * dataType: "TEXT" + * } + * }, + * // Graph.createProperty Op for Event.speaker property + * { + * type: "CREATE_PROPERTY", + * property: { + * id: Id.Id("651ce59f-643b-4931-bf7a-5dc0ca0f5a47"), + * dataType: "RELATION" + * } + * }, + * // Graph.createType Op for Event type + * { + * type: "CREATE_PROPERTY", + * property: { + * id: Id.Id("651ce59f-643b-4931-bf7a-5dc0ca0f5a47"), + * dataType: "RELATION" + * } + * }, + * ]) + * ``` * * @since 0.0.1 * * @param input user-built and submitted schema - * @returns the generated [Mapping] definition from the submitted schema + * @returns the generated [Mapping] definition from the submitted schema as well as the GRC-20 Ops required to publish the schema to the Knowledge Graph */ -export async function generateMapping(input: Schema): Promise { - // validate the schema since the input is the type, but the schema has additional filters against it to validate as well +export function generateMapping(input: Schema): GenerateMappingResult { + // Validate the schema const schema = SchemaKnownDecoder(input); - const entries: Array = []; - const ops: Array = []; + // Build initial type ID map + const typeIdMap: TypeIdMapping = pipe( + schema.types, + EffectArray.reduce(new Map(), (map, type) => + map.set(type.name, type.knowledgeGraphId != null ? Grc20Id.Id(type.knowledgeGraphId) : null), + ), + ); - for (const type of schema.types) { - const typePropertyIds: Array<{ propName: string; id: Grc20Id.Id }> = []; - for (const property of type.properties) { - if (property.knowledgeGraphId) { - typePropertyIds.push({ propName: property.name, id: Grc20Id.Id(property.knowledgeGraphId) }); + // First pass: process all types + const processedTypes = pipe( + schema.types, + EffectArray.map((type) => processType(type, typeIdMap)), + ); - continue; - } - // create op for creating type property - const dataType = mapSchemaDataTypeToGRC20PropDataType(property.dataType); - if (dataType === 'RELATION') { - const { id, ops: createTypePropOp } = Graph.createProperty({ - name: property.name, - dataType: 'RELATION', - /** - * @todo fill in the relationValueTypes and properties for creating a relation property - */ - relationValueTypes: [], - properties: [], - }); - typePropertyIds.push({ propName: property.name, id }); - ops.push(...createTypePropOp); + // Separate complete and deferred types + const [deferredTypes, completeTypes] = pipe( + processedTypes, + EffectArray.partition( + (result): result is Extract => result.type === 'complete', + ), + ); - continue; - } - const { id, ops: createTypePropOp } = Graph.createProperty({ - name: property.name, - dataType, - }); - typePropertyIds.push({ propName: property.name, id }); - ops.push(...createTypePropOp); - } + // Collect all operations from first pass + const firstPassOps = pipe( + completeTypes, + EffectArray.flatMap((t) => t.ops), + ); - const properties: MappingEntry['properties'] = pipe( - typePropertyIds, - EffectArray.reduce({} as NonNullable, (props, { propName, id }) => { - props[toCamelCase(propName)] = id; + // Second pass: resolve deferred relation properties and create deferred types + const { entries: deferredEntries, ops: secondPassOps } = pipe( + deferredTypes, + EffectArray.reduce( + { entries: [] as Array, ops: [] as Array }, + (acc, deferred) => { + // Resolve all deferred relation properties for this type + const resolvedRelations = pipe( + deferred.schemaType.properties, + EffectArray.filterMap((prop) => { + if (!propertyIsRelation(prop) || prop.knowledgeGraphId != null) { + return Option.none(); + } - return props; - }), - ); + const relationTypeId = typeIdMap.get(prop.relationType); + if (relationTypeId == null) { + throw new RelationValueTypeDoesNotExistError({ + message: `Failed to resolve type ID for relation type: ${prop.relationType}`, + property: prop.name, + relatedType: prop.relationType, + }); + } - if (type.knowledgeGraphId) { - entries.push({ - typeName: toPascalCase(type.name), - typeIds: [Grc20Id.Id(type.knowledgeGraphId)], - properties, - }); - continue; - } - // create the type op, with its properties - const { id, ops: createTypeOp } = Graph.createType({ - name: type.name, - properties: EffectArray.map(typePropertyIds, ({ id }) => id), - }); - ops.push(...createTypeOp); + const { id, ops } = Graph.createProperty({ + name: prop.name, + dataType: 'RELATION', + relationValueTypes: [relationTypeId], + }); - entries.push({ - typeName: toPascalCase(type.name), - typeIds: [id], - properties, - }); - } + return Option.some({ mapping: { propName: prop.name, id }, ops }); + }), + ); - /** - * @todo publish the schema onchain to the Knowledge Graph with hypergraph connect app to the application space - */ + // Combine all properties for this type + const allProperties = [ + ...deferred.properties, + ...pipe( + resolvedRelations, + EffectArray.map((r) => r.mapping), + ), + ]; - return pipe( - entries, + // Create the type with all properties + const { id, ops: typeOps } = Graph.createType({ + name: deferred.schemaType.name, + properties: pipe( + allProperties, + EffectArray.map((p) => p.id), + ), + }); + + typeIdMap.set(deferred.schemaType.name, id); + + // Collect all operations + const allOps = [ + ...pipe( + resolvedRelations, + EffectArray.flatMap((r) => r.ops), + ), + ...typeOps, + ]; + + return { + entries: [ + ...acc.entries, + { + typeName: toPascalCase(deferred.schemaType.name), + typeIds: [id], + properties: buildPropertyMap(allProperties), + }, + ], + ops: [...acc.ops, ...allOps], + }; + }, + ), + ); + + // Combine all entries and build final mapping + const allEntries = [ + ...pipe( + completeTypes, + EffectArray.map((t) => t.entry), + ), + ...deferredEntries, + ]; + + const mapping = pipe( + allEntries, EffectArray.reduce({} as Mapping, (mapping, entry) => { const { typeName, ...rest } = entry; mapping[typeName] = rest; - return mapping; }), ); + + return [mapping, [...firstPassOps, ...secondPassOps]] as const; } +export class RelationValueTypeDoesNotExistError extends Data.TaggedError( + '/typesync/errors/RelationValueTypeDoesNotExistError', +)<{ + readonly message: string; + readonly property: string; + readonly relatedType: string; +}> {} + /** * @since 0.0.1 * diff --git a/packages/typesync/test/Mapping.test.ts b/packages/typesync/test/Mapping.test.ts index 93a08dcc..2a32fa80 100644 --- a/packages/typesync/test/Mapping.test.ts +++ b/packages/typesync/test/Mapping.test.ts @@ -57,8 +57,8 @@ describe('Mapping', () => { }); describe('generateMapping', () => { - it('should be able to map the input schema to a resulting Mapping definition', async () => { - const actual = await generateMapping({ + it('should be able to map the input schema to a resulting Mapping definition', () => { + const [mapping] = generateMapping({ types: [ { name: 'Account', @@ -118,10 +118,10 @@ describe('Mapping', () => { }, }; - expect(actual).toEqual(expected); + expect(mapping).toEqual(expected); }); - it('should use the existing KG ids if provided', async () => { - const actual = await generateMapping({ + it('should use the existing KG ids if provided', () => { + const [mapping] = generateMapping({ types: [ { name: 'Account', @@ -181,11 +181,194 @@ describe('Mapping', () => { }, }; - expect(actual).toEqual(expected); + expect(mapping).toEqual(expected); + }); + it('should handle relation properties where the related type has a knowledgeGraphId', () => { + const [mapping] = generateMapping({ + types: [ + { + name: 'Account', + knowledgeGraphId: 'a5fd07b1-120f-46c6-b46f-387ef98396a6', + properties: [ + { + name: 'username', + dataType: 'Text', + knowledgeGraphId: null, + }, + ], + }, + { + name: 'Event', + knowledgeGraphId: null, + properties: [ + { + name: 'name', + dataType: 'Text', + knowledgeGraphId: null, + }, + { + name: 'organizer', + dataType: 'Relation(Account)', + relationType: 'Account', + knowledgeGraphId: null, + }, + ], + }, + ], + }); + const expected: Mapping = { + Account: { + typeIds: [Id.Id('a5fd07b1-120f-46c6-b46f-387ef98396a6')], + properties: { + username: expect.any(String), + }, + }, + Event: { + typeIds: [expect.any(String)], + properties: { + name: expect.any(String), + organizer: expect.any(String), + }, + }, + }; + + expect(mapping).toEqual(expected); + }); + it('should handle relation properties where the related type does NOT have a knowledgeGraphId (second pass)', () => { + const [mapping] = generateMapping({ + types: [ + { + name: 'Account', + knowledgeGraphId: null, + properties: [ + { + name: 'username', + dataType: 'Text', + knowledgeGraphId: null, + }, + ], + }, + { + name: 'Event', + knowledgeGraphId: null, + properties: [ + { + name: 'name', + dataType: 'Text', + knowledgeGraphId: null, + }, + { + name: 'organizer', + dataType: 'Relation(Account)', + relationType: 'Account', + knowledgeGraphId: null, + }, + ], + }, + ], + }); + const expected: Mapping = { + Account: { + typeIds: [expect.any(String)], + properties: { + username: expect.any(String), + }, + }, + Event: { + typeIds: [expect.any(String)], + properties: { + name: expect.any(String), + organizer: expect.any(String), + }, + }, + }; + + expect(mapping).toEqual(expected); + }); + it('should handle mixed scenarios with some relation types having knowledgeGraphId and others not', () => { + const [mapping] = generateMapping({ + types: [ + { + name: 'Account', + knowledgeGraphId: 'a5fd07b1-120f-46c6-b46f-387ef98396a6', + properties: [ + { + name: 'username', + dataType: 'Text', + knowledgeGraphId: '994edcff-6996-4a77-9797-a13e5e3efad8', + }, + ], + }, + { + name: 'Venue', + knowledgeGraphId: null, + properties: [ + { + name: 'name', + dataType: 'Text', + knowledgeGraphId: null, + }, + { + name: 'location', + dataType: 'Point', + knowledgeGraphId: null, + }, + ], + }, + { + name: 'Event', + knowledgeGraphId: null, + properties: [ + { + name: 'title', + dataType: 'Text', + knowledgeGraphId: null, + }, + { + name: 'speaker', + dataType: 'Relation(Account)', + relationType: 'Account', + knowledgeGraphId: null, + }, + { + name: 'venue', + dataType: 'Relation(Venue)', + relationType: 'Venue', + knowledgeGraphId: null, + }, + ], + }, + ], + }); + const expected: Mapping = { + Account: { + typeIds: [Id.Id('a5fd07b1-120f-46c6-b46f-387ef98396a6')], + properties: { + username: Id.Id('994edcff-6996-4a77-9797-a13e5e3efad8'), + }, + }, + Venue: { + typeIds: [expect.any(String)], + properties: { + name: expect.any(String), + location: expect.any(String), + }, + }, + Event: { + typeIds: [expect.any(String)], + properties: { + title: expect.any(String), + speaker: expect.any(String), + venue: expect.any(String), + }, + }, + }; + + expect(mapping).toEqual(expected); }); describe('schema validation failures', () => { - it('should throw an error if the Schema does not pass validation: type names are not unique', async () => { - await expect(() => + it('should throw an error if the Schema does not pass validation: type names are not unique', () => { + expect(() => generateMapping({ types: [ { @@ -200,10 +383,10 @@ describe('Mapping', () => { }, ], }), - ).rejects.toThrowError(); + ).toThrowError(); }); - it('should throw an error if the Schema does not pass validation: type property names are not unique', async () => { - await expect(() => + it('should throw an error if the Schema does not pass validation: type property names are not unique', () => { + expect(() => generateMapping({ types: [ { @@ -216,10 +399,10 @@ describe('Mapping', () => { }, ], }), - ).rejects.toThrowError(); + ).toThrowError(); }); - it('should throw an error if the Schema does not pass validation: referenced relation property does not have matching type in schema', async () => { - await expect(() => + it('should throw an error if the Schema does not pass validation: referenced relation property does not have matching type in schema', () => { + expect(() => generateMapping({ types: [ { @@ -231,7 +414,7 @@ describe('Mapping', () => { }, ], }), - ).rejects.toThrowError(); + ).toThrowError(); }); }); });