From 08cc1dcbaa70d01cca0091392afd420c9c77fcc1 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Thu, 17 Jul 2025 12:12:40 -1000 Subject: [PATCH 1/4] feat(typesync): utilize typesync pkg Mapping --- apps/connect/package.json | 2 +- apps/events/package.json | 3 +- apps/events/src/mapping.ts | 2 +- apps/events/tsconfig.app.json | 4 +- apps/server/package.json | 2 +- .../SchemaBuilder/TypeSelect.tsx | 2 +- .../client/src/routes/apps/create.tsx | 8 +- apps/typesync/client/src/utils/mapper.ts | 8 +- apps/typesync/domain/Domain.ts | 86 +-- apps/typesync/package.json | 28 +- apps/typesync/src/Database.ts | 5 +- apps/typesync/src/Generator.ts | 106 +-- apps/typesync/tsconfig.domain.json | 1 + apps/typesync/tsconfig.src.json | 2 +- packages/hypergraph-react/package.json | 4 +- .../src/HypergraphAppContext.tsx | 2 +- .../src/internal/use-query-public.tsx | 3 +- packages/hypergraph-react/tsconfig.build.json | 3 +- packages/hypergraph-react/tsconfig.src.json | 3 +- packages/hypergraph-react/tsconfig.test.json | 3 +- packages/hypergraph/package.json | 6 +- packages/hypergraph/src/store.ts | 2 +- packages/hypergraph/src/types.ts | 15 - packages/hypergraph/tsconfig.build.json | 3 + packages/hypergraph/tsconfig.src.json | 3 + packages/hypergraph/tsconfig.test.json | 3 +- packages/typesync/README.md | 15 +- packages/typesync/package.json | 6 +- packages/typesync/src/Mapping.ts | 124 +++- packages/typesync/test/Mapping.test.ts | 10 + pnpm-lock.yaml | 638 ++++++++---------- 31 files changed, 530 insertions(+), 572 deletions(-) diff --git a/apps/connect/package.json b/apps/connect/package.json index e4411dc3..c0ae74cd 100644 --- a/apps/connect/package.json +++ b/apps/connect/package.json @@ -24,7 +24,7 @@ "@tanstack/react-router-devtools": "^1.122.0", "@xstate/store": "^3.5.1", "clsx": "^2.1.1", - "effect": "^3.16.12", + "effect": "^3.16.16", "framer-motion": "^12.10.1", "graphql-request": "^7.2.0", "lucide-react": "^0.508.0", diff --git a/apps/events/package.json b/apps/events/package.json index e511914b..9305d453 100644 --- a/apps/events/package.json +++ b/apps/events/package.json @@ -11,6 +11,7 @@ "@graphprotocol/grc-20": "^0.21.6", "@graphprotocol/hypergraph": "workspace:*", "@graphprotocol/hypergraph-react": "workspace:*", + "@graphprotocol/typesync": "workspace:*", "@noble/hashes": "^1.8.0", "@radix-ui/react-avatar": "^1.1.9", "@radix-ui/react-icons": "^1.3.2", @@ -21,7 +22,7 @@ "@xstate/store": "^3.5.1", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "effect": "^3.16.12", + "effect": "^3.16.16", "framer-motion": "^12.10.1", "graphql-request": "^7.1.2", "isomorphic-ws": "^5.0.0", diff --git a/apps/events/src/mapping.ts b/apps/events/src/mapping.ts index 49b98e46..0ca8e539 100644 --- a/apps/events/src/mapping.ts +++ b/apps/events/src/mapping.ts @@ -1,5 +1,5 @@ import { Id } from '@graphprotocol/grc-20'; -import type { Mapping } from '@graphprotocol/hypergraph'; +import type { Mapping } from '@graphprotocol/typesync/Mapping'; export const mapping: Mapping = { Event: { diff --git a/apps/events/tsconfig.app.json b/apps/events/tsconfig.app.json index 0ce5612c..058a609b 100644 --- a/apps/events/tsconfig.app.json +++ b/apps/events/tsconfig.app.json @@ -35,7 +35,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/apps/server/package.json b/apps/server/package.json index 26d279f8..cde490e6 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -19,7 +19,7 @@ "@privy-io/server-auth": "^1.26.0", "body-parser": "^2.2.0", "cors": "^2.8.5", - "effect": "^3.16.12", + "effect": "^3.16.16", "express": "^5.1.0", "prisma": "^6.7.0", "siwe": "^3.0.0", diff --git a/apps/typesync/client/src/Components/App/CreateAppForm/SchemaBuilder/TypeSelect.tsx b/apps/typesync/client/src/Components/App/CreateAppForm/SchemaBuilder/TypeSelect.tsx index 1e081ba0..38bb29c2 100644 --- a/apps/typesync/client/src/Components/App/CreateAppForm/SchemaBuilder/TypeSelect.tsx +++ b/apps/typesync/client/src/Components/App/CreateAppForm/SchemaBuilder/TypeSelect.tsx @@ -19,7 +19,7 @@ class RelationTypeOption extends Schema.Class('/hypergraph/t const typeOptions: Array = [ TypeOption.make({ id: 'DefaultEntityText', name: 'Text' }), TypeOption.make({ id: 'DefaultEntityNumber', name: 'Number' }), - TypeOption.make({ id: 'DefaultEntityBoolean', name: 'Boolean' }), + TypeOption.make({ id: 'DefaultEntityCheckbox', name: 'Checkbox' }), TypeOption.make({ id: 'DefaultEntityDate', name: 'Date' }), TypeOption.make({ id: 'DefaultEntityUrl', name: 'Url' }), TypeOption.make({ id: 'DefaultEntityPoint', name: 'Point' }), diff --git a/apps/typesync/client/src/routes/apps/create.tsx b/apps/typesync/client/src/routes/apps/create.tsx index af502958..4643fdc2 100644 --- a/apps/typesync/client/src/routes/apps/create.tsx +++ b/apps/typesync/client/src/routes/apps/create.tsx @@ -1,5 +1,6 @@ 'use client'; +import { isDataTypeRelation } from '@graphprotocol/typesync/Mapping'; import { ArrowUturnLeftIcon, CheckCircleIcon, @@ -14,7 +15,7 @@ import { Link, createFileRoute } from '@tanstack/react-router'; import { Array as EffectArray, String as EffectString, Option, Schema, pipe } from 'effect'; import { useState } from 'react'; -import { InsertAppSchema, isDataTypeRelation } from '../../../../domain/Domain.js'; +import { InsertAppSchema } from '../../../../domain/Domain.js'; import { SchemaBrowser } from '../../Components/App/CreateAppForm/SchemaBuilder/SchemaBrowser.js'; import { useAppForm } from '../../Components/App/CreateAppForm/useCreateAppForm.js'; @@ -98,7 +99,8 @@ function CreateAppPage() { defaultValues, validators: { onChangeAsyncDebounceMs: 100, - onChange: Schema.standardSchemaV1(InsertAppSchema), + // biome-ignore lint/suspicious/noExplicitAny: fixes an issue with the prop.dataType type-string of `Relation(${name})` + onChange: Schema.standardSchemaV1(InsertAppSchema) as any, }, async onSubmit({ formApi, value }) { await mutateAsync(value).then(() => formApi.reset(undefined, { keepDefaultValues: true })); @@ -794,7 +796,7 @@ function CreateAppPage() { - + Cancel diff --git a/apps/typesync/client/src/utils/mapper.ts b/apps/typesync/client/src/utils/mapper.ts index 2f05c977..6cd2bfe8 100644 --- a/apps/typesync/client/src/utils/mapper.ts +++ b/apps/typesync/client/src/utils/mapper.ts @@ -1,11 +1,11 @@ -import type { SchemaDataType } from '../../../domain/Domain'; +import type { SchemaDataType } from '@graphprotocol/typesync/Mapping'; -import type { DataType } from '../generated/graphql'; +import type { DataTypes } from '../generated/graphql'; -export function mapKGDataTypeToPrimitiveType(dataType: DataType, entity: string): SchemaDataType { +export function mapKGDataTypeToPrimitiveType(dataType: DataTypes, entity: string): SchemaDataType { switch (dataType) { case 'CHECKBOX': { - return 'Boolean'; + return 'Checkbox'; } case 'NUMBER': { return 'Number'; diff --git a/apps/typesync/domain/Domain.ts b/apps/typesync/domain/Domain.ts index 65fd8c4c..69180c3b 100644 --- a/apps/typesync/domain/Domain.ts +++ b/apps/typesync/domain/Domain.ts @@ -1,83 +1,5 @@ -import { Array as EffectArray, String as EffectString, Schema, pipe } from 'effect'; - -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; -} - -export type DataTypeRelation = `Relation(${string})`; -export function isDataTypeRelation(val: string): val is DataTypeRelation { - return /^Relation\((.+)\)$/.test(val); -} - -export const SchemaDataTypeRelation = Schema.NonEmptyTrimmedString.pipe( - Schema.filter((val) => isDataTypeRelation(val)), -); -export type SchemaDataTypeRelation = typeof SchemaDataTypeRelation.Type; - -export const SchemaDataTypePrimitive = Schema.Literal('Text', 'Number', 'Boolean', 'Date', 'Point', 'Url'); -export type SchemaDataTypePrimitive = typeof SchemaDataTypePrimitive.Type; - -export const SchemaDataType = Schema.Union(SchemaDataTypePrimitive, SchemaDataTypeRelation); -export type SchemaDataType = typeof SchemaDataType.Type; - -export const SchemaTypePropertyRelation = Schema.Struct({ - name: Schema.NonEmptyTrimmedString, - knowledgeGraphId: Schema.NullOr(Schema.UUID), - dataType: Schema.NonEmptyTrimmedString, // The correct type for this is: `SchemaDataTypeRelation`. however, the standard schema definition to use in the form schema validation fails because of the `Relation(${string})` template string type. - relationType: Schema.NonEmptyTrimmedString.annotations({ - identifier: 'SchemaTypePropertyRelation.relationType', - description: 'name of the type within the schema that this property is related to', - examples: ['Account'], - }), -}); -export type SchemaTypePropertyRelation = typeof SchemaTypePropertyRelation.Type; - -export const SchemaTypePropertyPrimitive = Schema.Struct({ - name: Schema.NonEmptyTrimmedString, - knowledgeGraphId: Schema.NullOr(Schema.UUID), - dataType: SchemaDataTypePrimitive, -}); -export type SchemaTypePropertyPrimitive = typeof SchemaTypePropertyPrimitive.Type; - -export function propertyIsRelation( - property: SchemaTypePropertyPrimitive | SchemaTypePropertyRelation, -): property is SchemaTypePropertyRelation { - return isDataTypeRelation(property.dataType); -} - -export const SchemaType = Schema.Struct({ - name: Schema.NonEmptyTrimmedString, - knowledgeGraphId: Schema.NullOr(Schema.UUID), - properties: Schema.Array(Schema.Union(SchemaTypePropertyPrimitive, SchemaTypePropertyRelation)).pipe( - Schema.minItems(1), - Schema.filter(namesAreUnique, { - identifier: 'DuplicatePropertyNames', - jsonSchema: {}, - description: 'The property.name must be unique across all properties in the type', - }), - ), -}); -export type SchemaType = typeof SchemaType.Type; - -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)), - ); -} +import { Mapping, Utils } from '@graphprotocol/typesync'; +import { Schema } from 'effect'; /** * Defines the type to be received by the app schema builder. @@ -88,9 +10,9 @@ export const InsertAppSchema = Schema.Struct({ description: Schema.NullOr(Schema.String), directory: Schema.NullOr(Schema.String.pipe(Schema.pattern(/^(\.\/|~\/|\/|[a-zA-Z]:\/)[\w\-\.\s\/]*[\w\-\.]$/))), template: Schema.Literal('vite_react'), - types: Schema.Array(SchemaType).pipe( + types: Schema.Array(Mapping.SchemaType).pipe( Schema.minItems(1), - Schema.filter(namesAreUnique, { + Schema.filter(Utils.namesAreUnique, { identifier: 'DuplicateTypeNames', jsonSchema: {}, description: 'The type.name must be unique across all types in the schema', diff --git a/apps/typesync/package.json b/apps/typesync/package.json index b92cf742..89cdb724 100644 --- a/apps/typesync/package.json +++ b/apps/typesync/package.json @@ -38,20 +38,21 @@ "hypergraph": "pnpx tsx ./src/bin.ts typesync" }, "devDependencies": { - "@effect/cli": "^0.67.0", - "@effect/experimental": "^0.52.0", - "@effect/language-service": "^0.26.0", - "@effect/platform": "^0.88.0", - "@effect/platform-node": "^0.90.0", - "@effect/sql": "^0.41.0", - "@effect/sql-sqlite-node": "^0.42.0", - "@effect/vitest": "^0.24.0", + "@effect/cli": "^0.67.1", + "@effect/experimental": "^0.52.2", + "@effect/language-service": "^0.27.1", + "@effect/platform": "^0.88.1", + "@effect/platform-node": "^0.91.0", + "@effect/printer": "^0.44.14", + "@effect/sql": "^0.42.0", + "@effect/sql-sqlite-node": "^0.43.0", + "@effect/vitest": "^0.24.1", "@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.127.5", - "@types/node": "^24.0.13", + "@tanstack/router-plugin": "^1.128.0", + "@types/node": "^24.0.14", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "^4.6.0", @@ -64,6 +65,7 @@ "dependencies": { "@graphql-typed-document-node/core": "^3.2.0", "@graphprotocol/grc-20": "^0.21.6", + "@graphprotocol/typesync": "workspace:*", "@headlessui/react": "^2.2.4", "@heroicons/react": "^2.2.0", "@phosphor-icons/react": "^2.1.10", @@ -72,11 +74,11 @@ "@tanstack/react-form": "^1.14.1", "@tanstack/react-query": "^5.83.0", "@tanstack/react-query-devtools": "^5.83.0", - "@tanstack/react-router": "^1.127.3", - "@tanstack/react-router-devtools": "^1.127.3", + "@tanstack/react-router": "^1.128.0", + "@tanstack/react-router-devtools": "^1.128.0", "better-sqlite3": "^12.2.0", "date-fns": "^4.1.0", - "effect": "^3.16.13", + "effect": "^3.16.16", "graphql": "^16.11.0", "graphql-request": "^7.2.0", "jotai": "^2.12.5", diff --git a/apps/typesync/src/Database.ts b/apps/typesync/src/Database.ts index 57499fe9..09352fea 100644 --- a/apps/typesync/src/Database.ts +++ b/apps/typesync/src/Database.ts @@ -2,6 +2,7 @@ import { fileURLToPath } from 'node:url'; import { NodeContext } from '@effect/platform-node'; import { SqlClient, SqlError, SqlResolver, SqlSchema } from '@effect/sql'; import { SqliteMigrator as Migrator, SqliteClient } from '@effect/sql-sqlite-node'; +import { propertyIsRelation } from '@graphprotocol/typesync/Mapping'; import { Chunk, Console, Effect, Array as EffectArray, Layer, Option, Order, Schema, Stream } from 'effect'; import * as TypesyncDomain from '../domain/Domain.js'; @@ -234,9 +235,7 @@ export class DatabaseService extends Effect.Service()('/typesyn app_schema_type_id: createdType.id, name: property.name, type_name: property.dataType, - relation_type_name: TypesyncDomain.propertyIsRelation(property) - ? property.relationType - : null, + relation_type_name: propertyIsRelation(property) ? property.relationType : null, description: null, nullable: null, optional: null, diff --git a/apps/typesync/src/Generator.ts b/apps/typesync/src/Generator.ts index 26adb19a..e66a01da 100644 --- a/apps/typesync/src/Generator.ts +++ b/apps/typesync/src/Generator.ts @@ -2,9 +2,11 @@ import { execSync } from 'node:child_process'; import { readdirSync } from 'node:fs'; import { FileSystem, Path, type Error as PlatformError } from '@effect/platform'; import { NodeFileSystem } from '@effect/platform-node'; -import { Cause, Console, Data, Effect, String as EffectString } from 'effect'; +import { Doc } from '@effect/printer'; +import { Mapping } from '@graphprotocol/typesync'; +import { Cause, Console, Data, Effect, Array as EffectArray, String as EffectString } from 'effect'; -import * as Domain from '../domain/Domain.js'; +import type * as Domain from '../domain/Domain.js'; import * as Utils from './Utils.js'; export class SchemaGenerator extends Effect.Service()('/typesync/services/Generator', { @@ -313,15 +315,15 @@ function fieldToEntityString({ return 'Type.Text'; case dataType === 'Number': return 'Type.Number'; - case dataType === 'Boolean': - return 'Type.Boolean'; + case dataType === 'Checkbox': + return 'Type.Checkbox'; case dataType === 'Date': return 'Type.Date'; case dataType === 'Url': return 'Type.Url'; case dataType === 'Point': return 'Type.Point'; - case Domain.isDataTypeRelation(dataType): + case Mapping.isDataTypeRelation(dataType): // renders the type as `Type.Relation(Entity)` return `Type.${dataType}`; default: @@ -361,57 +363,59 @@ function buildSchemaFile(schema: Domain.InsertAppSchema) { } export function buildMappingFile(schema: Domain.InsertAppSchema) { - const importStatement1 = `import { Id } from '@graphprotocol/grc-20';`; - const importStatement2 = `import type { Mapping } from '@graphprotocol/hypergraph';`; - - const typeMappings: string[] = []; - - for (const type of schema.types) { - // Skip types without a valid knowledgeGraphId - if (!type.knowledgeGraphId) { - continue; - } - - const properties: string[] = []; - const relations: string[] = []; - - // Process properties and relations - for (const property of type.properties) { - // Skip properties without a valid knowledgeGraphId - if (!property.knowledgeGraphId) { - continue; - } - - if (Domain.isDataTypeRelation(property.dataType)) { - // This is a relation - relations.push(` ${Utils.toCamelCase(property.name)}: Id.Id('${property.knowledgeGraphId}')`); - } else { - // This is a regular property - properties.push(` ${Utils.toCamelCase(property.name)}: Id.Id('${property.knowledgeGraphId}')`); - } + const [mapping] = Mapping.generateMapping({ + types: schema.types, + }); + + // Import statements + const imports = Doc.vsep([ + Doc.text("import { Id } from '@graphprotocol/grc-20';"), + Doc.text("import type { Mapping } from '@graphprotocol/typesync/Mapping';"), + ]); + + // Generate the mapping object - build it line by line for exact formatting + const mappingLines = [Doc.text('export const mapping: Mapping = {')]; + + for (const [typeName, typeData] of Object.entries(mapping)) { + mappingLines.push(Doc.text(` ${typeName}: {`)); + + // Type IDs + const typeIdsList = typeData.typeIds.map((id: string) => `Id.Id("${id}")`).join(', '); + mappingLines.push(Doc.text(` typeIds: [${typeIdsList}],`)); + + // Properties + const properties = Object.entries(typeData.properties ?? {}); + if (EffectArray.isNonEmptyArray(properties)) { + mappingLines.push(Doc.text(' properties: {')); + properties.forEach(([propName, propId], index, entries) => { + const isLast = index === entries.length - 1; + const comma = isLast ? '' : ','; + mappingLines.push(Doc.text(` ${propName}: Id.Id("${propId}")${comma}`)); + }); + mappingLines.push(Doc.text(' },')); } - const typeName = Utils.toPascalCase(type.name); - const typeMapping = ` ${typeName}: { - typeIds: [Id.Id('${type.knowledgeGraphId}')], - properties: { -${properties.join(',\n')}, - },${ - relations.length > 0 - ? ` - relations: { -${relations.join(',\n')}, - },` - : '' + // Relations + const relations = Object.entries(typeData.relations ?? {}); + if (EffectArray.isNonEmptyArray(relations)) { + mappingLines.push(Doc.text(' relations: {')); + relations.forEach(([relationName, relationId], index, entries) => { + const isLast = index === entries.length - 1; + const comma = isLast ? '' : ','; + mappingLines.push(Doc.text(` ${relationName}: Id.Id("${relationId}")${comma}`)); + }); + mappingLines.push(Doc.text(' },')); } - }`; - typeMappings.push(typeMapping); + mappingLines.push(Doc.text(' }')); } - const mappingString = `export const mapping: Mapping = { -${typeMappings.join(',\n')}, -};`; + mappingLines.push(Doc.text('}')); + + const compiled = Doc.vcat([imports, Doc.empty, ...mappingLines]); - return [importStatement1, importStatement2, '', mappingString].join('\n'); + return Doc.render(compiled, { + style: 'pretty', + options: { lineWidth: 120 }, + }); } diff --git a/apps/typesync/tsconfig.domain.json b/apps/typesync/tsconfig.domain.json index 43fc0a50..8a93d2f3 100644 --- a/apps/typesync/tsconfig.domain.json +++ b/apps/typesync/tsconfig.domain.json @@ -1,6 +1,7 @@ { "extends": "./tsconfig.base.json", "include": ["domain"], + "references": [{ "path": "../../packages/typesync/tsconfig.src.json" }], "compilerOptions": { "types": ["node"], "tsBuildInfoFile": ".tsbuildinfo/domain.tsbuildinfo", diff --git a/apps/typesync/tsconfig.src.json b/apps/typesync/tsconfig.src.json index fb4fa35d..74e99ae4 100644 --- a/apps/typesync/tsconfig.src.json +++ b/apps/typesync/tsconfig.src.json @@ -1,7 +1,7 @@ { "extends": "./tsconfig.base.json", "include": ["src"], - "references": [{ "path": "./tsconfig.domain.json" }], + "references": [{ "path": "./tsconfig.domain.json" }, { "path": "../../packages/typesync/tsconfig.src.json" }], "compilerOptions": { "types": ["node"], "tsBuildInfoFile": ".tsbuildinfo/src.tsbuildinfo", diff --git a/packages/hypergraph-react/package.json b/packages/hypergraph-react/package.json index 78111416..6ee61536 100644 --- a/packages/hypergraph-react/package.json +++ b/packages/hypergraph-react/package.json @@ -25,10 +25,12 @@ }, "peerDependencies": { "@graphprotocol/hypergraph": "workspace:*", + "@graphprotocol/typesync": "workspace:*", "react": "^18.0.0 || ^19.0.0" }, "devDependencies": { "@graphprotocol/hypergraph": "workspace:*", + "@graphprotocol/typesync": "workspace:*", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.3.0", "@types/react": "^19.1.3", @@ -44,7 +46,7 @@ "@graphprotocol/grc-20": "^0.21.6", "@noble/hashes": "^1.8.0", "@tanstack/react-query": "^5.75.5", - "effect": "^3.16.12", + "effect": "^3.16.16", "graphql-request": "^7.1.2", "siwe": "^3.0.0", "uuid": "^11.1.0", diff --git a/packages/hypergraph-react/src/HypergraphAppContext.tsx b/packages/hypergraph-react/src/HypergraphAppContext.tsx index ae62f7c7..09962633 100644 --- a/packages/hypergraph-react/src/HypergraphAppContext.tsx +++ b/packages/hypergraph-react/src/HypergraphAppContext.tsx @@ -14,13 +14,13 @@ import { type InboxMessageStorageEntry, Inboxes, Key, - type Mapping, Messages, SpaceEvents, type SpaceStorageEntry, Utils, store, } from '@graphprotocol/hypergraph'; +import type { Mapping } from '@graphprotocol/typesync/Mapping'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { useSelector as useSelectorStore } from '@xstate/store/react'; import { Effect, Exit } from 'effect'; diff --git a/packages/hypergraph-react/src/internal/use-query-public.tsx b/packages/hypergraph-react/src/internal/use-query-public.tsx index b34426a1..7d96b2f4 100644 --- a/packages/hypergraph-react/src/internal/use-query-public.tsx +++ b/packages/hypergraph-react/src/internal/use-query-public.tsx @@ -1,5 +1,6 @@ import { Graph } from '@graphprotocol/grc-20'; -import { type Entity, type Mapping, type MappingEntry, Type, store } from '@graphprotocol/hypergraph'; +import { type Entity, Type, store } from '@graphprotocol/hypergraph'; +import type { Mapping, MappingEntry } from '@graphprotocol/typesync/Mapping'; import { useQuery as useQueryTanstack } from '@tanstack/react-query'; import { useSelector } from '@xstate/store/react'; import * as Either from 'effect/Either'; diff --git a/packages/hypergraph-react/tsconfig.build.json b/packages/hypergraph-react/tsconfig.build.json index 8288bf50..a5c60258 100644 --- a/packages/hypergraph-react/tsconfig.build.json +++ b/packages/hypergraph-react/tsconfig.build.json @@ -1,7 +1,8 @@ { "extends": "./tsconfig.src.json", "references": [ - { "path": "../hypergraph/tsconfig.build.json" } + { "path": "../hypergraph/tsconfig.build.json" }, + { "path": "../typesync/tsconfig.build.json" } ], "compilerOptions": { "tsBuildInfoFile": ".tsbuildinfo/build.tsbuildinfo", diff --git a/packages/hypergraph-react/tsconfig.src.json b/packages/hypergraph-react/tsconfig.src.json index 857616cf..400aeb41 100644 --- a/packages/hypergraph-react/tsconfig.src.json +++ b/packages/hypergraph-react/tsconfig.src.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.base.json", "include": ["src"], "references": [ - { "path": "../hypergraph/tsconfig.src.json" } + { "path": "../hypergraph/tsconfig.src.json" }, + { "path": "../typesync/tsconfig.src.json" } ], "compilerOptions": { "tsBuildInfoFile": ".tsbuildinfo/src.tsbuildinfo", diff --git a/packages/hypergraph-react/tsconfig.test.json b/packages/hypergraph-react/tsconfig.test.json index 2ec31f01..dc3df654 100644 --- a/packages/hypergraph-react/tsconfig.test.json +++ b/packages/hypergraph-react/tsconfig.test.json @@ -3,7 +3,8 @@ "include": ["test"], "references": [ { "path": "./tsconfig.src.json" }, - { "path": "../hypergraph/tsconfig.src.json" } + { "path": "../hypergraph/tsconfig.src.json" }, + { "path": "../typesync/tsconfig.src.json" } ], "compilerOptions": { "tsBuildInfoFile": ".tsbuildinfo/test.tsbuildinfo", diff --git a/packages/hypergraph/package.json b/packages/hypergraph/package.json index 7ce427f3..57492562 100644 --- a/packages/hypergraph/package.json +++ b/packages/hypergraph/package.json @@ -38,7 +38,11 @@ "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/typesync": "workspace:*" + }, "devDependencies": { + "@graphprotocol/typesync": "workspace:*", "@types/uuid": "^10.0.0" }, "dependencies": { @@ -54,7 +58,7 @@ "@serenity-kit/noble-sodium": "^0.2.1", "@xstate/store": "^3.5.1", "bs58check": "^4.0.0", - "effect": "^3.16.12", + "effect": "^3.16.16", "permissionless": "^0.2.47", "siwe": "^3.0.0", "uuid": "^11.1.0", diff --git a/packages/hypergraph/src/store.ts b/packages/hypergraph/src/store.ts index c873995c..c20cda0b 100644 --- a/packages/hypergraph/src/store.ts +++ b/packages/hypergraph/src/store.ts @@ -1,4 +1,5 @@ import type { AnyDocumentId, DocHandle, Repo } from '@automerge/automerge-repo'; +import type { Mapping } from '@graphprotocol/typesync/Mapping'; import { type Store, createStore } from '@xstate/store'; import type { PrivateAppIdentity } from './connect/types.js'; import type { DocumentContent } from './entity/types.js'; @@ -6,7 +7,6 @@ import { mergeMessages } from './inboxes/merge-messages.js'; import type { InboxSenderAuthPolicy } from './inboxes/types.js'; import type { Invitation, Updates } from './messages/index.js'; import type { SpaceEvent, SpaceState } from './space-events/index.js'; -import type { Mapping } from './types.js'; import { idToAutomergeId } from './utils/automergeId.js'; export type InboxMessageStorageEntry = { diff --git a/packages/hypergraph/src/types.ts b/packages/hypergraph/src/types.ts index 96e5b89f..0f269b73 100644 --- a/packages/hypergraph/src/types.ts +++ b/packages/hypergraph/src/types.ts @@ -1,4 +1,3 @@ -import type { Id as Grc20Id } from '@graphprotocol/grc-20'; import * as Data from 'effect/Data'; import * as Schema from 'effect/Schema'; @@ -49,17 +48,3 @@ export class FailedToParseConnectAuthUrl extends Data.TaggedError('FailedToParse export class FailedToParseAuthCallbackUrl extends Data.TaggedError('FailedToParseAuthCallbackUrl')<{ message: string; }> {} - -export type MappingEntry = { - typeIds: Grc20Id.Id[]; - properties?: { - [key: string]: Grc20Id.Id; - }; - relations?: { - [key: string]: Grc20Id.Id; - }; -}; - -export type Mapping = { - [key: string]: MappingEntry; -}; diff --git a/packages/hypergraph/tsconfig.build.json b/packages/hypergraph/tsconfig.build.json index fc59560f..c5a49a5d 100644 --- a/packages/hypergraph/tsconfig.build.json +++ b/packages/hypergraph/tsconfig.build.json @@ -1,5 +1,8 @@ { "extends": "./tsconfig.src.json", + "references": [ + { "path": "../typesync/tsconfig.build.json" } + ], "compilerOptions": { "tsBuildInfoFile": ".tsbuildinfo/build.tsbuildinfo", "outDir": "dist", diff --git a/packages/hypergraph/tsconfig.src.json b/packages/hypergraph/tsconfig.src.json index db90507a..56a5e1c2 100644 --- a/packages/hypergraph/tsconfig.src.json +++ b/packages/hypergraph/tsconfig.src.json @@ -1,6 +1,9 @@ { "extends": "../../tsconfig.base.json", "include": ["src", "src/connect/abis/*.json"], + "references": [ + { "path": "../typesync/tsconfig.src.json" } + ], "compilerOptions": { "tsBuildInfoFile": ".tsbuildinfo/src.tsbuildinfo", "rootDir": "src" diff --git a/packages/hypergraph/tsconfig.test.json b/packages/hypergraph/tsconfig.test.json index b1266154..52deb555 100644 --- a/packages/hypergraph/tsconfig.test.json +++ b/packages/hypergraph/tsconfig.test.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.base.json", "include": ["test"], "references": [ - { "path": "./tsconfig.src.json" } + { "path": "./tsconfig.src.json" }, + { "path": "../typesync/tsconfig.src.json" } ], "compilerOptions": { "tsBuildInfoFile": ".tsbuildinfo/test.tsbuildinfo", diff --git a/packages/typesync/README.md b/packages/typesync/README.md index 7d292903..bd47e4f1 100644 --- a/packages/typesync/README.md +++ b/packages/typesync/README.md @@ -9,11 +9,16 @@ This package exposes a function: `generateMapping` that takes the schema with an ## Mapping definition ```ts +import { Id } from '@graphprotocol/grc-20'; + export type MappingEntry = { - typeIds: Array; + typeIds: Array; properties?: { - [key: string]: Grc20Id.Id; + [key: string]: Id.Id; }; + relations?: { + [key: string]: Id.Id + } }; export type Mapping = { @@ -36,7 +41,7 @@ export class Account extends Entity.Class('Account')({ export class Event extends Entity.Class('Event')({ name: Type.Text, description: Type.Text, - account: Type.Relation(Account) + speaker: Type.Relation(Account) }) {} ``` @@ -59,8 +64,10 @@ export const mapping: Mapping = { properties: { name: Id.Id('3808e060-fb4a-4d08-8069-35b8c8a1902b'), description: Id.Id('1f0d9007-8da2-4b28-ab9f-3bc0709f4837'), - account: Id.Id('a5fd07b1-120f-46c6-b46f-387ef98396a6') }, + relations: { + speaker: Id.Id('a5fd07b1-120f-46c6-b46f-387ef98396a6') + } } } ``` diff --git a/packages/typesync/package.json b/packages/typesync/package.json index 78243b51..97013d4b 100644 --- a/packages/typesync/package.json +++ b/packages/typesync/package.json @@ -1,11 +1,11 @@ { "name": "@graphprotocol/typesync", - "version": "0.0.1", + "version": "0.0.3", "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 + "provenance": false }, "repository": { "type": "git", @@ -39,6 +39,6 @@ }, "dependencies": { "@graphprotocol/grc-20": "^0.21.6", - "effect": "^3.16.12" + "effect": "^3.16.16" } } diff --git a/packages/typesync/src/Mapping.ts b/packages/typesync/src/Mapping.ts index e6eef350..261043d2 100644 --- a/packages/typesync/src/Mapping.ts +++ b/packages/typesync/src/Mapping.ts @@ -26,6 +26,16 @@ export type MappingEntry = { [key: string]: Grc20Id.Id; } | undefined; + /** + * Record of relation properties to the `Id.Id` of the type in the Knowledge Graph + * + * @since 0.0.1 + */ + relations?: + | { + [key: string]: Grc20Id.Id; + } + | undefined; }; /** @@ -47,8 +57,10 @@ 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: { + * speaker: Id.Id('a5fd07b1-120f-46c6-b46f-387ef98396a6') + * } * } * } * ``` @@ -282,7 +294,7 @@ export function allRelationPropertyTypesExist(types: ReadonlyArray): ); } -export type GenerateMappingResult = [mapping: Mapping, ops: Array]; +export type GenerateMappingResult = [mapping: Mapping, ops: ReadonlyArray]; // Helper types for internal processing type PropertyIdMapping = { propName: string; id: Grc20Id.Id }; @@ -293,7 +305,7 @@ type ProcessedProperty = type ProcessedType = | { type: 'complete'; entry: MappingEntry & { typeName: string }; ops: Array } - | { type: 'deferred'; schemaType: SchemaType; properties: Array }; + | { type: 'deferred'; schemaType: SchemaType; properties: Array; relations: Array }; // Helper function to build property map from PropertyIdMappings function buildPropertyMap(properties: Array): MappingEntry['properties'] { @@ -306,6 +318,17 @@ function buildPropertyMap(properties: Array): MappingEntry['p ); } +// Helper function to build relation map from PropertyIdMappings +function buildRelationMap(relations: Array): MappingEntry['relations'] { + return pipe( + relations, + EffectArray.reduce({} as NonNullable, (rels, { propName, id }) => { + rels[toCamelCase(propName)] = id; + return rels; + }), + ); +} + // Helper function to create a property and return the result function createPropertyWithOps( property: SchemaTypePropertyPrimitive | SchemaTypePropertyRelation, @@ -365,8 +388,22 @@ function processType(type: SchemaType, typeIdMap: TypeIdMapping): ProcessedType EffectArray.filterMap((p) => (p.type === 'deferred' ? Option.some(p.property) : Option.none())), ); - const propertyMappings = pipe( + // Separate resolved properties into primitive properties and relations + const primitiveProperties = pipe( resolvedProperties, + EffectArray.filter((p) => { + const originalProp = type.properties.find(prop => prop.name === p.mapping.propName); + return originalProp ? !propertyIsRelation(originalProp) : false; + }), + EffectArray.map((p) => p.mapping), + ); + + const relationProperties = pipe( + resolvedProperties, + EffectArray.filter((p) => { + const originalProp = type.properties.find(prop => prop.name === p.mapping.propName); + return originalProp ? propertyIsRelation(originalProp) : false; + }), EffectArray.map((p) => p.mapping), ); @@ -377,13 +414,22 @@ function processType(type: SchemaType, typeIdMap: TypeIdMapping): ProcessedType // If type exists in knowledge graph, return complete entry if (type.knowledgeGraphId) { + const entry: MappingEntry & { typeName: string } = { + typeName: toPascalCase(type.name), + typeIds: [Grc20Id.Id(type.knowledgeGraphId)], + }; + + if (EffectArray.isNonEmptyArray(primitiveProperties)) { + entry.properties = buildPropertyMap(primitiveProperties); + } + + if (EffectArray.isNonEmptyArray(relationProperties)) { + entry.relations = buildRelationMap(relationProperties); + } + return { type: 'complete', - entry: { - typeName: toPascalCase(type.name), - typeIds: [Grc20Id.Id(type.knowledgeGraphId)], - properties: buildPropertyMap(propertyMappings), - }, + entry, ops: propertyOps, }; } @@ -393,28 +439,39 @@ function processType(type: SchemaType, typeIdMap: TypeIdMapping): ProcessedType return { type: 'deferred', schemaType: type, - properties: propertyMappings, + properties: primitiveProperties, + relations: relationProperties, }; } - // Create the type with all resolved properties + // Create the type with all resolved properties (both primitive and relations) + const allPropertyIds = [...primitiveProperties, ...relationProperties]; const { id, ops: typeOps } = Graph.createType({ name: type.name, properties: pipe( - propertyMappings, + allPropertyIds, EffectArray.map((p) => p.id), ), }); typeIdMap.set(type.name, id); + const entry: MappingEntry & { typeName: string } = { + typeName: toPascalCase(type.name), + typeIds: [id], + }; + + if (EffectArray.isNonEmptyArray(primitiveProperties)) { + entry.properties = buildPropertyMap(primitiveProperties); + } + + if (EffectArray.isNonEmptyArray(relationProperties)) { + entry.relations = buildRelationMap(relationProperties); + } + return { type: 'complete', - entry: { - typeName: toPascalCase(type.name), - typeIds: [id], - properties: buildPropertyMap(propertyMappings), - }, + entry, ops: [...propertyOps, ...typeOps], }; } @@ -484,6 +541,8 @@ function processType(type: SchemaType, typeIdMap: TypeIdMapping): ProcessedType * 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 + * }, + * relations: { * speaker: Id.Id("651ce59f-643b-4931-bf7a-5dc0ca0f5a47"), // generated from Graph.createProperty Op * } * } @@ -594,20 +653,23 @@ export function generateMapping(input: Schema): GenerateMappingResult { }), ); - // Combine all properties for this type - const allProperties = [ - ...deferred.properties, + // Combine resolved relations with existing relations + const allRelations = [ + ...deferred.relations, ...pipe( resolvedRelations, EffectArray.map((r) => r.mapping), ), ]; + // Combine all property IDs for type creation + const allPropertyIds = [...deferred.properties, ...allRelations]; + // Create the type with all properties const { id, ops: typeOps } = Graph.createType({ name: deferred.schemaType.name, properties: pipe( - allProperties, + allPropertyIds, EffectArray.map((p) => p.id), ), }); @@ -623,14 +685,24 @@ export function generateMapping(input: Schema): GenerateMappingResult { ...typeOps, ]; + // Build the entry with properties and relations separated + const entry: MappingEntry & { typeName: string } = { + typeName: toPascalCase(deferred.schemaType.name), + typeIds: [id], + }; + + if (EffectArray.isNonEmptyArray(deferred.properties)) { + entry.properties = buildPropertyMap(deferred.properties); + } + + if (EffectArray.isNonEmptyArray(allRelations)) { + entry.relations = buildRelationMap(allRelations); + } + return { entries: [ ...acc.entries, - { - typeName: toPascalCase(deferred.schemaType.name), - typeIds: [id], - properties: buildPropertyMap(allProperties), - }, + entry, ], ops: [...acc.ops, ...allOps], }; diff --git a/packages/typesync/test/Mapping.test.ts b/packages/typesync/test/Mapping.test.ts index 2a32fa80..19597961 100644 --- a/packages/typesync/test/Mapping.test.ts +++ b/packages/typesync/test/Mapping.test.ts @@ -113,6 +113,8 @@ describe('Mapping', () => { properties: { name: expect.any(String), description: expect.any(String), + }, + relations: { speaker: expect.any(String), }, }, @@ -176,6 +178,8 @@ describe('Mapping', () => { properties: { name: Id.Id('3808e060-fb4a-4d08-8069-35b8c8a1902b'), description: expect.any(String), + }, + relations: { speaker: expect.any(String), }, }, @@ -227,6 +231,8 @@ describe('Mapping', () => { typeIds: [expect.any(String)], properties: { name: expect.any(String), + }, + relations: { organizer: expect.any(String), }, }, @@ -278,6 +284,8 @@ describe('Mapping', () => { typeIds: [expect.any(String)], properties: { name: expect.any(String), + }, + relations: { organizer: expect.any(String), }, }, @@ -358,6 +366,8 @@ describe('Mapping', () => { typeIds: [expect.any(String)], properties: { title: expect.any(String), + }, + relations: { speaker: expect.any(String), venue: expect.any(String), }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fbf7cfd7..53537ec1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,7 +37,7 @@ importers: version: 5.8.3 vitest: specifier: ^3.2.4 - 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) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.14)(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: @@ -64,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.127.3)(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.128.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) @@ -72,8 +72,8 @@ importers: specifier: ^2.1.1 version: 2.1.1 effect: - specifier: ^3.16.12 - version: 3.16.12 + specifier: ^3.16.16 + version: 3.16.16 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) @@ -147,6 +147,9 @@ importers: '@graphprotocol/hypergraph-react': specifier: workspace:* version: link:../../packages/hypergraph-react/publish + '@graphprotocol/typesync': + specifier: workspace:* + version: link:../../packages/typesync/publish '@noble/hashes': specifier: ^1.8.0 version: 1.8.0 @@ -167,7 +170,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.127.3)(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.128.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) @@ -178,8 +181,8 @@ importers: specifier: ^2.1.1 version: 2.1.1 effect: - specifier: ^3.16.12 - version: 3.16.12 + specifier: ^3.16.16 + version: 3.16.16 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) @@ -315,8 +318,8 @@ importers: specifier: ^2.8.5 version: 2.8.5 effect: - specifier: ^3.16.12 - version: 3.16.12 + specifier: ^3.16.16 + version: 3.16.16 express: specifier: ^5.1.0 version: 5.1.0 @@ -360,6 +363,9 @@ importers: '@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/typesync': + specifier: workspace:* + version: link:../../packages/typesync/publish '@graphql-typed-document-node/core': specifier: ^3.2.0 version: 3.2.0(graphql@16.11.0) @@ -377,7 +383,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@7.0.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)) + version: 4.1.11(vite@7.0.4(@types/node@24.0.14)(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.14.1 version: 1.14.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -388,11 +394,11 @@ importers: 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.127.3 - version: 1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^1.128.0 + version: 1.128.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/react-router-devtools': - specifier: ^1.127.3 - version: 1.127.3(@tanstack/react-router@1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.127.3)(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.128.0 + version: 1.128.0(@tanstack/react-router@1.128.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.128.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 @@ -400,8 +406,8 @@ importers: specifier: ^4.1.0 version: 4.1.0 effect: - specifier: ^3.16.13 - version: 3.16.13 + specifier: ^3.16.16 + version: 3.16.16 graphql: specifier: ^16.11.0 version: 16.11.0 @@ -428,32 +434,35 @@ importers: version: 4.1.11 devDependencies: '@effect/cli': - specifier: ^0.67.0 - version: 0.67.0(@effect/platform@0.88.0(effect@3.16.13))(@effect/printer-ansi@0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13))(@effect/printer@0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13))(effect@3.16.13) + specifier: ^0.67.1 + version: 0.67.1(@effect/platform@0.88.1(effect@3.16.16))(@effect/printer-ansi@0.40.10(@effect/typeclass@0.31.10(effect@3.16.16))(effect@3.16.16))(@effect/printer@0.44.14(@effect/typeclass@0.31.10(effect@3.16.16))(effect@3.16.16))(effect@3.16.16) '@effect/experimental': - specifier: ^0.52.0 - version: 0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) + specifier: ^0.52.2 + version: 0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16) '@effect/language-service': - specifier: ^0.26.0 - version: 0.26.0 + specifier: ^0.27.1 + version: 0.27.1 '@effect/platform': - specifier: ^0.88.0 - version: 0.88.0(effect@3.16.13) + specifier: ^0.88.1 + version: 0.88.1(effect@3.16.16) '@effect/platform-node': - specifier: ^0.90.0 - version: 0.90.0(@effect/cluster@0.37.2(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/workflow@0.1.2(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(bufferutil@4.0.9)(effect@3.16.13)(utf-8-validate@5.0.10) + specifier: ^0.91.0 + version: 0.91.0(@effect/cluster@0.37.2(@effect/platform@0.88.1(effect@3.16.16))(@effect/rpc@0.61.4(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/sql@0.42.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/workflow@0.1.2(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(@effect/rpc@0.61.4(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/sql@0.42.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(bufferutil@4.0.9)(effect@3.16.16)(utf-8-validate@5.0.10) + '@effect/printer': + specifier: ^0.44.14 + version: 0.44.14(@effect/typeclass@0.31.10(effect@3.16.16))(effect@3.16.16) '@effect/sql': - specifier: ^0.41.0 - version: 0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) - '@effect/sql-sqlite-node': specifier: ^0.42.0 - version: 0.42.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(effect@3.16.13) + version: 0.42.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16) + '@effect/sql-sqlite-node': + specifier: ^0.43.0 + version: 0.43.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(@effect/sql@0.42.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(effect@3.16.16) '@effect/vitest': - specifier: ^0.24.0 - version: 0.24.0(effect@3.16.13)(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)) + specifier: ^0.24.1 + version: 0.24.1(effect@3.16.16)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.14)(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.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) + version: 5.0.7(@babel/core@7.28.0)(@parcel/watcher@2.5.1)(@types/node@24.0.14)(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) @@ -464,11 +473,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.127.5 - version: 1.127.5(@tanstack/react-router@1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.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))(webpack@5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2)) + specifier: ^1.128.0 + version: 1.128.0(@tanstack/react-router@1.128.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.4(@types/node@24.0.14)(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.13 - version: 24.0.13 + specifier: ^24.0.14 + version: 24.0.14 '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -477,7 +486,7 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.6.0 - version: 4.6.0(vite@7.0.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)) + version: 4.6.0(vite@7.0.4(@types/node@24.0.14)(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 @@ -492,7 +501,7 @@ importers: version: 4.20.3 vite: specifier: ^7.0.4 - version: 7.0.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) + version: 7.0.4(@types/node@24.0.14)(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: @@ -517,7 +526,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@7.0.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)) + version: 4.1.11(vite@7.0.4(@types/node@24.0.14)(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.14.1 version: 1.14.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -528,11 +537,11 @@ importers: 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.127.1 - version: 1.127.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^1.127.3 + version: 1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/react-router-devtools': - 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.3)(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.3 + version: 1.127.3(@tanstack/react-router@1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.128.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 @@ -540,8 +549,8 @@ importers: specifier: ^4.1.0 version: 4.1.0 effect: - specifier: ^3.16.12 - version: 3.16.12 + specifier: ^3.16.13 + version: 3.16.13 graphql: specifier: ^16.11.0 version: 16.11.0 @@ -552,8 +561,8 @@ importers: specifier: ^2.12.5 version: 2.12.5(@types/react@19.1.8)(react@19.1.0) open: - specifier: ^10.1.2 - version: 10.1.2 + specifier: ^10.2.0 + version: 10.2.0 react: specifier: ^19.1.0 version: 19.1.0 @@ -561,8 +570,8 @@ importers: specifier: ^19.1.0 version: 19.1.0(react@19.1.0) shiki: - specifier: ^3.7.0 - version: 3.7.0 + specifier: ^3.8.0 + version: 3.8.0 tailwindcss: specifier: ^4.1.11 version: 4.1.11 @@ -608,7 +617,7 @@ importers: version: 2.0.6 '@effect/experimental': specifier: ^0.51.1 - version: 0.51.1(@effect/platform@0.88.0(effect@3.16.12))(effect@3.16.12) + version: 0.51.1(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16) '@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) @@ -637,8 +646,8 @@ importers: specifier: ^4.0.0 version: 4.0.0 effect: - specifier: ^3.16.12 - version: 3.16.12 + specifier: ^3.16.16 + version: 3.16.16 permissionless: specifier: ^0.2.47 version: 0.2.47(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51)) @@ -652,6 +661,9 @@ importers: specifier: ^2.30.6 version: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) devDependencies: + '@graphprotocol/typesync': + specifier: workspace:* + version: link:../typesync/publish '@types/uuid': specifier: ^10.0.0 version: 10.0.0 @@ -678,8 +690,8 @@ importers: specifier: ^5.75.5 version: 5.75.5(react@19.1.0) effect: - specifier: ^3.16.12 - version: 3.16.12 + specifier: ^3.16.16 + version: 3.16.16 graphql-request: specifier: ^7.1.2 version: 7.1.2(graphql@16.11.0) @@ -696,6 +708,9 @@ importers: '@graphprotocol/hypergraph': specifier: workspace:* version: link:../hypergraph/publish + '@graphprotocol/typesync': + specifier: workspace:* + version: link:../typesync/publish '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 @@ -707,7 +722,7 @@ importers: version: 19.1.3 '@vitejs/plugin-react': specifier: ^4.4.1 - version: 4.4.1(vite@7.0.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)) + version: 4.4.1(vite@7.0.4(@types/node@24.0.14)(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) @@ -725,8 +740,8 @@ importers: 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 + specifier: ^3.16.16 + version: 3.16.16 publishDirectory: publish packages: @@ -2294,13 +2309,13 @@ packages: resolution: {integrity: sha512-e7zcB6TPnVzyUaHMJyLSArKa2AG3h9+4CfvKXKKWNx6hRs+p0a+u7HHTJBgo6KW2m+vqDnuIHK4X+bhmoghAFA==} engines: {node: '>=18.0'} - '@effect/cli@0.67.0': - resolution: {integrity: sha512-gBbt43yibW7Nh5TJtTP2OwqCeSa+lixAcM5PYFV2cM32oPlgdtWYyl1m8rcIZwWJBhQyjNXFtuxlYFk9A8alog==} + '@effect/cli@0.67.1': + resolution: {integrity: sha512-+Dg3z2KqMjrynSESZL9dApXpj6sJdUuYRjZ8KFgso52F6uqlM/5RKZiHOG3eHK6mrsOC0jgX+qsUMO46F8l9zw==} peerDependencies: - '@effect/platform': ^0.88.0 - '@effect/printer': ^0.44.13 - '@effect/printer-ansi': ^0.44.13 - effect: ^3.16.13 + '@effect/platform': ^0.88.1 + '@effect/printer': ^0.44.14 + '@effect/printer-ansi': ^0.44.14 + effect: ^3.16.14 '@effect/cluster@0.37.2': resolution: {integrity: sha512-9U4P/Fk8C6fN/s0e4nvA++prZmELtV7k5RwG2AOw4NgqBZqptiJMutgaT10ltwgdvddRF/77PVjgORyzNTBmbg==} @@ -2324,11 +2339,11 @@ packages: lmdb: optional: true - '@effect/experimental@0.52.0': - resolution: {integrity: sha512-SqTmGQMNJTq8IZ0XKu3hDOD09YRiZLDbHfODu4r1yhhAfh93vn2x9waELQtiAbXcsjG/eMpbajcCc0KvFgFFIA==} + '@effect/experimental@0.52.2': + resolution: {integrity: sha512-CotYjNLYvSAsYYwTE1/NUr/XkiupoYi941lq3NWGrJrYWov3T6v3Gg2om/n29/WqoMYpnFn0ka2AixTWhcq9dg==} peerDependencies: - '@effect/platform': ^0.88.0 - effect: ^3.16.13 + '@effect/platform': ^0.88.1 + effect: ^3.16.14 ioredis: ^5 lmdb: ^3 peerDependenciesMeta: @@ -2337,32 +2352,32 @@ packages: lmdb: optional: true - '@effect/language-service@0.26.0': - resolution: {integrity: sha512-flHqsDIotdAq3whQb0fjpiYIFd6OR078TDPbxgBY5sDO+7ZNgGZ7kKH51bEIKNz+dFhw0NJjowT0qypyhPpUDw==} + '@effect/language-service@0.27.1': + resolution: {integrity: sha512-BTOiDMdHdEQhvt5LTTeLZUbpUoHSsH4Jy5MEUDJLPEOMMN6vVgi3AZteYHLBhmT9Rv+aTxeICdgRT+hGgCoQXw==} hasBin: true - '@effect/platform-node-shared@0.43.0': - resolution: {integrity: sha512-kYlGo5eNDsfOkirBC4B4a83OtESc9x4r+JWCHNtnRswBnKKj8GgC90vL1ksNbfTnESzRCQ8/bfjPeyxHAffDAg==} + '@effect/platform-node-shared@0.44.0': + resolution: {integrity: sha512-UvMExEu5TUdlzJRe2O87K8+ttie0VfA26J/82uAXCAMCmi139EQvzBEbX7yE1iYIruH9CmypKXKFLU61VxSlnw==} peerDependencies: - '@effect/cluster': ^0.42.0 - '@effect/platform': ^0.88.0 - '@effect/rpc': ^0.65.0 - '@effect/sql': ^0.41.0 - effect: ^3.16.13 + '@effect/cluster': ^0.43.0 + '@effect/platform': ^0.88.1 + '@effect/rpc': ^0.65.1 + '@effect/sql': ^0.42.0 + effect: ^3.16.14 - '@effect/platform-node@0.90.0': - resolution: {integrity: sha512-U6WBUghdXYELtg5h+p5nzRV2ih0oPOoxnVrfvmR4UHQaOtvYbwu/Lexho59HBYdIqnYzHCi5KH12z8b6E0kv+Q==} + '@effect/platform-node@0.91.0': + resolution: {integrity: sha512-oHDcCilVLX1YEK6u0ukaNuYb03wLaCUTlws5JaGXsBjjdMlf3+bEW9i30bKFmf+B+uXheflf8X3MyZ3p94sXZA==} peerDependencies: - '@effect/cluster': ^0.42.0 - '@effect/platform': ^0.88.0 - '@effect/rpc': ^0.65.0 - '@effect/sql': ^0.41.0 - effect: ^3.16.13 + '@effect/cluster': ^0.43.0 + '@effect/platform': ^0.88.1 + '@effect/rpc': ^0.65.1 + '@effect/sql': ^0.42.0 + effect: ^3.16.14 - '@effect/platform@0.88.0': - resolution: {integrity: sha512-ObTXedf/DshoKtM2ygEcoP7Kj9rop0KeDvLriQE2HD4Fgo1pxjgbOivkCbSq03MErpNE2/lMYTY6Si6bo4qMqQ==} + '@effect/platform@0.88.1': + resolution: {integrity: sha512-12cRbqva8AFwEqCpa3d9nMmhvEYWk/lh/vo8Um4iOCFyTbc+ASe0zsI2MLJAVf1K0/TmpB0w+byEZLx6qCaxyw==} peerDependencies: - effect: ^3.16.13 + effect: ^3.16.14 '@effect/printer-ansi@0.40.10': resolution: {integrity: sha512-XMmAcHxojINGZKnNGJSrG1fMvMYLOlHGVAvvD/5pbp2Yi5Rh8PGDJjtaPmrj5PmO+WssovevLHGonrbKa8xybA==} @@ -2376,36 +2391,42 @@ packages: '@effect/typeclass': ^0.31.10 effect: ^3.12.10 + '@effect/printer@0.44.14': + resolution: {integrity: sha512-Z9YJbmRG++BJqpR+kmJIlo1XdVGtZXPcHSMKPUiZHkZNtX2dG5Ynk2PwdRiA68sz895Fr1QwdYel8zKorUij/w==} + peerDependencies: + '@effect/typeclass': ^0.35.14 + effect: ^3.16.14 + '@effect/rpc@0.61.4': resolution: {integrity: sha512-i1U/RuIRGqLJ2xxhgAPEsMwqfLW7mqtQYcj8Za2ouJejpqAN+6s3OIYxlsR4YZ6EDYfCZlD2eJ/wAD54xtAXDQ==} peerDependencies: '@effect/platform': ^0.84.4 effect: ^3.16.3 - '@effect/sql-sqlite-node@0.42.0': - resolution: {integrity: sha512-DZ+08CuE8SPrTfmtALHR7rjJSASOCd5yGZBVyDrj8De0g4R1YoyTHryii2VmopOUTPZu0g39bvz40OFJkqnajw==} + '@effect/sql-sqlite-node@0.43.0': + resolution: {integrity: sha512-kivFGI6rr0nDhaFDezfBxuDRiw4uhXLwiP66vxqInLmyLzti3RdqZ6I5u4/6MlfS29RIVikIXh+8W8vO+uCpDA==} peerDependencies: - '@effect/experimental': ^0.52.0 - '@effect/platform': ^0.88.0 - '@effect/sql': ^0.41.0 - effect: ^3.16.13 + '@effect/experimental': ^0.52.1 + '@effect/platform': ^0.88.1 + '@effect/sql': ^0.42.0 + effect: ^3.16.14 - '@effect/sql@0.41.0': - resolution: {integrity: sha512-P3RuRm/PHEYInkFE0VUijWCWGyCviq2rnLLcTpdIRCy9quwGTh53kOnh9Go1pL+owGkq3WrP1T1hiAr5LzeNfg==} + '@effect/sql@0.42.0': + resolution: {integrity: sha512-qZGumAGPcrQA+nRIxSUGewvdIE2vXjhemgGt98pbMqPL87RiI4IOaN0GfI8BhYJQ/AQF0iweMUVSa7yIsVw82Q==} peerDependencies: - '@effect/experimental': ^0.52.0 - '@effect/platform': ^0.88.0 - effect: ^3.16.13 + '@effect/experimental': ^0.52.1 + '@effect/platform': ^0.88.1 + effect: ^3.16.14 '@effect/typeclass@0.31.10': resolution: {integrity: sha512-mDuQ44IfyDUSnltcFS+cEQGWhMg37IwNiPmATLw/NYBYHDBkqUc77vzlCpSlBiKDzExSI8vjMVWqGjL22MLHGQ==} peerDependencies: effect: ^3.12.10 - '@effect/vitest@0.24.0': - resolution: {integrity: sha512-t3o9OH+UskMIsZSoYv1cpG7PA/wBLbO+5Bzhlhrjp+5TxO1gaAE7/Up6SVUVwckXRprcthzxA1LPITtDHAEOCw==} + '@effect/vitest@0.24.1': + resolution: {integrity: sha512-q5NVkJcmdiOlFLYhRLmeDfAk3maNDD4BYeeAr0Gy3TTXZWCX7hlWnzLoJpBVuJjjMJDC/HGxq9GFKxbP/oY7mQ==} peerDependencies: - effect: ^3.16.13 + effect: ^3.16.14 vitest: ^3.2.0 '@effect/workflow@0.1.2': @@ -4316,39 +4337,21 @@ packages: '@serenity-kit/noble-sodium@0.2.1': resolution: {integrity: sha512-023EjSl/ZMl8yNmnzeeWJh/V44QyBC82I8xuHltITeWdcyrQHbGnmMZRZOm/uTRinhgqoMzRBNQqbrfyuI5idg==} - '@shikijs/core@3.7.0': - resolution: {integrity: sha512-yilc0S9HvTPyahHpcum8eonYrQtmGTU0lbtwxhA6jHv4Bm1cAdlPFRCJX4AHebkCm75aKTjjRAW+DezqD1b/cg==} - '@shikijs/core@3.8.0': resolution: {integrity: sha512-gWt8NNZFurL6FMESO4lEsmspDh0H1fyUibhx1NnEH/S3kOXgYiWa6ZFqy+dcjBLhZqCXsepuUaL1QFXk6PrpsQ==} - '@shikijs/engine-javascript@3.7.0': - resolution: {integrity: sha512-0t17s03Cbv+ZcUvv+y33GtX75WBLQELgNdVghnsdhTgU3hVcWcMsoP6Lb0nDTl95ZJfbP1mVMO0p3byVh3uuzA==} - '@shikijs/engine-javascript@3.8.0': resolution: {integrity: sha512-IBULFFpQ1N5Cg/C7jPCGnjIKz72CcRtD0BIbNhSuXPUOxLG0bF1URsP/uLfxQFQ9ORfunCQwL7UuSX1RSRBwUQ==} - '@shikijs/engine-oniguruma@3.7.0': - resolution: {integrity: sha512-5BxcD6LjVWsGu4xyaBC5bu8LdNgPCVBnAkWTtOCs/CZxcB22L8rcoWfv7Hh/3WooVjBZmFtyxhgvkQFedPGnFw==} - '@shikijs/engine-oniguruma@3.8.0': resolution: {integrity: sha512-Tx7kR0oFzqa+rY7t80LjN8ZVtHO3a4+33EUnBVx2qYP3fGxoI9H0bvnln5ySelz9SIUTsS0/Qn+9dg5zcUMsUw==} - '@shikijs/langs@3.7.0': - resolution: {integrity: sha512-1zYtdfXLr9xDKLTGy5kb7O0zDQsxXiIsw1iIBcNOO8Yi5/Y1qDbJ+0VsFoqTlzdmneO8Ij35g7QKF8kcLyznCQ==} - '@shikijs/langs@3.8.0': resolution: {integrity: sha512-mfGYuUgjQ5GgXinB5spjGlBVhG2crKRpKkfADlp8r9k/XvZhtNXxyOToSnCEnF0QNiZnJjlt5MmU9PmhRdwAbg==} - '@shikijs/themes@3.7.0': - resolution: {integrity: sha512-VJx8497iZPy5zLiiCTSIaOChIcKQwR0FebwE9S3rcN0+J/GTWwQ1v/bqhTbpbY3zybPKeO8wdammqkpXc4NVjQ==} - '@shikijs/themes@3.8.0': resolution: {integrity: sha512-yaZiLuyO23sXe16JFU76KyUMTZCJi4EMQKIrdQt7okoTzI4yAaJhVXT2Uy4k8yBIEFRiia5dtD7gC1t8m6y3oQ==} - '@shikijs/types@3.7.0': - resolution: {integrity: sha512-MGaLeaRlSWpnP0XSAum3kP3a8vtcTsITqoEPYdt3lQG3YCdQH4DnEhodkYcNMcU0uW0RffhoD1O3e0vG5eSBBg==} - '@shikijs/types@3.8.0': resolution: {integrity: sha512-I/b/aNg0rP+kznVDo7s3UK8jMcqEGTtoPDdQ+JlQ2bcJIyu/e2iRvl42GLIDMK03/W1YOHOuhlhQ7aM+XbKUeg==} @@ -4958,19 +4961,19 @@ 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==} + '@tanstack/react-router-devtools@1.127.3': + resolution: {integrity: sha512-MS8+ArGAoRpFaVWpXnQxNpq2bU5e2WGwV/3Gskh9YB09gqX3t6knp9im4kJ0kam16+A8Vohq1yOpCliyHzQawA==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.127.1 + '@tanstack/react-router': ^1.127.3 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router-devtools@1.127.3': - resolution: {integrity: sha512-MS8+ArGAoRpFaVWpXnQxNpq2bU5e2WGwV/3Gskh9YB09gqX3t6knp9im4kJ0kam16+A8Vohq1yOpCliyHzQawA==} + '@tanstack/react-router-devtools@1.128.0': + resolution: {integrity: sha512-SJoFzCTvKdwPk8u1r5sTUFQqdEvt1lk0Y80DTzBz1Yc+PcUSTRMMfC6aGVFDSbWJt8QnQc65jDIlu6oTcnLhOQ==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.127.3 + '@tanstack/react-router': ^1.128.0 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' @@ -4981,15 +4984,15 @@ 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==} + '@tanstack/react-router@1.127.3': + resolution: {integrity: sha512-QprmWHJrGbEKXJiP7WZ+dilTJRc7nMbsFCUnfAUw8PsOYanhgvBkBwAU05YEo8WTIZ9atCc1R90hyzqbiBFkdA==} engines: {node: '>=12'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router@1.127.3': - resolution: {integrity: sha512-QprmWHJrGbEKXJiP7WZ+dilTJRc7nMbsFCUnfAUw8PsOYanhgvBkBwAU05YEo8WTIZ9atCc1R90hyzqbiBFkdA==} + '@tanstack/react-router@1.128.0': + resolution: {integrity: sha512-fYB/eeO7wPRS5Xh8uts2Qesp/unvSUz1deV76d8qY4SCNTLXcSrH5w0thxviGcHqRNuWnNCz7OEp8oowK4i7bw==} engines: {node: '>=12'} peerDependencies: react: '>=18.0.0 || >=19.0.0' @@ -5001,12 +5004,6 @@ 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.1': - resolution: {integrity: sha512-qUTEKdId6QPWGiWyKAPf/gkN29scEsz6EUSJ0C3HgLMgaqTAyBsQ2sMCfGVcqb+kkhEXAdjleCgH6LAPD6f2sA==} - 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-store@0.7.3': resolution: {integrity: sha512-3Dnqtbw9P2P0gw8uUM8WP2fFfg8XMDSZCTsywRPZe/XqqYW8PGkXKZTvP0AHkE4mpqP9Y43GpOg9vwO44azu6Q==} peerDependencies: @@ -5029,14 +5026,14 @@ packages: resolution: {integrity: sha512-3dZYP5cCq3jJYgnRDzKR3w4sYzrXP5sw1st303ye87VV26r31I8UaIuUEs7kiJaxgWBvqHglWCiygBWQODZXVw==} engines: {node: '>=12'} - '@tanstack/router-core@1.127.0': - resolution: {integrity: sha512-hHgbtLOAnN61LFqBrE2bq3mctRLfXvJefBlTFakZJavSoMEniX6bMQ5ZMDwMtpo57Hbyzx2rTD4yZfYu74Eydg==} - engines: {node: '>=12'} - '@tanstack/router-core@1.127.3': resolution: {integrity: sha512-08JlfwsMIDkMyCQsRviMVBn0cVUzlNzkll4pZgf6QRSO1RASBsci5hMojcsdH0d/yXLH0FBJ6fINbj0ctBm63Q==} engines: {node: '>=12'} + '@tanstack/router-core@1.128.0': + resolution: {integrity: sha512-XLDHPzDCjsjA8Q8NxiACsOiITv1ESWAL/oiXOrygdcZR+quistNixhy38z7XLJBojs0iCxRCV92qck5tAhjLoA==} + engines: {node: '>=12'} + '@tanstack/router-devtools-core@1.122.0': resolution: {integrity: sha512-3AWnGAlC6GBrS9ral+CeThwHt690T0RtxMoRpTYdK5aJ5qyegWeQXqIjd6WPWNRjxYSKsDjPY2h77HPoAm7F5Q==} engines: {node: '>=12'} @@ -5049,11 +5046,11 @@ packages: csstype: optional: true - '@tanstack/router-devtools-core@1.127.0': - resolution: {integrity: sha512-K/UFaru0sVonaRoqQFUoNiqDt4AvXLxcRd2+9HjbGSC1xckAUNEEAcVl7jwQfERg89e9IVfHiPOIuDdQFjFBtA==} + '@tanstack/router-devtools-core@1.127.3': + resolution: {integrity: sha512-TaLa0h7efSTmIMckTJ1s4PuvJSRGGv4PBSDQE9QnrtCn3SJAlzjK6VIcGq3C72QKJiVDyDtCcDas4q0YeT8I+A==} engines: {node: '>=12'} peerDependencies: - '@tanstack/router-core': ^1.127.0 + '@tanstack/router-core': ^1.127.3 csstype: ^3.0.10 solid-js: '>=1.9.5' tiny-invariant: ^1.3.3 @@ -5061,11 +5058,11 @@ packages: csstype: optional: true - '@tanstack/router-devtools-core@1.127.3': - resolution: {integrity: sha512-TaLa0h7efSTmIMckTJ1s4PuvJSRGGv4PBSDQE9QnrtCn3SJAlzjK6VIcGq3C72QKJiVDyDtCcDas4q0YeT8I+A==} + '@tanstack/router-devtools-core@1.128.0': + resolution: {integrity: sha512-KaHe3X1aB8D7cAi5lvKLKRhjy6f44x/jQV2yt6rurKQiGv10yzsKXoUDPZNOOaS9LUVkwUUXv7zuDwd/kv2Wow==} engines: {node: '>=12'} peerDependencies: - '@tanstack/router-core': ^1.127.3 + '@tanstack/router-core': ^1.128.0 csstype: ^3.0.10 solid-js: '>=1.9.5' tiny-invariant: ^1.3.3 @@ -5082,8 +5079,8 @@ packages: '@tanstack/react-router': optional: true - '@tanstack/router-generator@1.127.5': - resolution: {integrity: sha512-bPrUKJIo7cIBSF6FwKfZyYAl+FjoMU/HswWaYXr+rEdOw1EA86M3euuK33rfHNlVcxHTmZJk8AQ5p7ZYP6DogQ==} + '@tanstack/router-generator@1.128.0': + resolution: {integrity: sha512-7ibImI7bv4feWgWKZZF69CrZPFzuYbtfFtRPCmoFNY5aCKUIYya4HNNlldOkJLNXiUyWQ31kuoqvNhEdqwhGwQ==} engines: {node: '>=12'} '@tanstack/router-plugin@1.120.2': @@ -5107,12 +5104,12 @@ packages: webpack: optional: true - '@tanstack/router-plugin@1.127.5': - resolution: {integrity: sha512-7FzGsDM/XMy6TfAfdUkgJxN/xvPu8cIwJdoGQ4yAEdtk26BGCeaz3VZIDKX5mknNo8+H4//cO75a9F5UHsdVew==} + '@tanstack/router-plugin@1.128.0': + resolution: {integrity: sha512-HebeNn2AE8Ew4yhLc2kin5gTovSO20Y5bJBnJ6BJN3bX3sO4K1A4HzDof3oaW5bb4wqlESeVlZarD9zO9ANQ3Q==} engines: {node: '>=12'} peerDependencies: '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.127.3 + '@tanstack/react-router': ^1.128.0 vite: '>=5.0.0 || >=6.0.0' vite-plugin-solid: ^2.11.2 webpack: '>=5.92.0' @@ -5139,9 +5136,6 @@ packages: '@tanstack/store@0.7.0': resolution: {integrity: sha512-CNIhdoUsmD2NolYuaIs8VfWM467RK6oIBAW4nPEKZhg1smZ+/CwtCdpURgp7nxSqOaV9oKkzdWD80+bC66F/Jg==} - '@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==} @@ -5318,8 +5312,8 @@ packages: '@types/node@22.7.5': resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} - '@types/node@24.0.13': - resolution: {integrity: sha512-Qm9OYVOFHFYg3wJoTSrz80hoec5Lia/dPp84do3X7dZvLikQvM1YpmvTBEdIr/e+U8HTkFjLHLnl78K/qjf+jQ==} + '@types/node@24.0.14': + resolution: {integrity: sha512-4zXMWD91vBLGRtHK3YbIoFMia+1nqEz72coM42C5ETjnNCa/heoj7NT1G67iAfOqMmcfhuCZ4uNpyz8EjlAejw==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -6998,6 +6992,9 @@ packages: effect@3.16.13: resolution: {integrity: sha512-xJDgOhD7+3qIY1d8PGfkaPZMfmdJuSp2XAQgc9dVF8pSl1FJL6WK4ZUpMh177R+GH8XgPloT8dlZsEYUYDo1Ag==} + effect@3.16.16: + resolution: {integrity: sha512-q8jsuAJykQJJ9jDkR9VaAR1JeHnEDn49g6+LkveIcfW3nIPUJw6BrC9ZPaVCJWmU23vKoVj9XqJmC/EW8kiI8g==} + electron-to-chromium@1.5.152: resolution: {integrity: sha512-xBOfg/EBaIlVsHipHl2VdTPJRSvErNUaqW8ejTq5OlOlIYx1wOllCHsAvAIrr55jD1IYEfdR86miUEt8H5IeJg==} @@ -9363,10 +9360,6 @@ packages: oniguruma-to-es@4.3.3: resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} - open@10.1.2: - resolution: {integrity: sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==} - engines: {node: '>=18'} - open@10.2.0: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} @@ -10908,9 +10901,6 @@ packages: engines: {node: '>=4'} hasBin: true - shiki@3.7.0: - resolution: {integrity: sha512-ZcI4UT9n6N2pDuM2n3Jbk0sR4Swzq43nLPgS/4h0E3B/NrFn2HKElrDtceSf8Zx/OWYOo7G1SAtBLypCp+YXqg==} - shiki@3.8.0: resolution: {integrity: sha512-yPqK0y68t20aakv+3aMTpUMJZd6UHaBY2/SBUDowh9M70gVUwqT0bf7Kz5CWG0AXfHtFvXCHhBBHVAzdp0ILoQ==} @@ -14919,60 +14909,60 @@ snapshots: - uglify-js - webpack-cli - '@effect/cli@0.67.0(@effect/platform@0.88.0(effect@3.16.13))(@effect/printer-ansi@0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13))(@effect/printer@0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13))(effect@3.16.13)': + '@effect/cli@0.67.1(@effect/platform@0.88.1(effect@3.16.16))(@effect/printer-ansi@0.40.10(@effect/typeclass@0.31.10(effect@3.16.16))(effect@3.16.16))(@effect/printer@0.44.14(@effect/typeclass@0.31.10(effect@3.16.16))(effect@3.16.16))(effect@3.16.16)': dependencies: - '@effect/platform': 0.88.0(effect@3.16.13) - '@effect/printer': 0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13) - '@effect/printer-ansi': 0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13) - effect: 3.16.13 + '@effect/platform': 0.88.1(effect@3.16.16) + '@effect/printer': 0.44.14(@effect/typeclass@0.31.10(effect@3.16.16))(effect@3.16.16) + '@effect/printer-ansi': 0.40.10(@effect/typeclass@0.31.10(effect@3.16.16))(effect@3.16.16) + effect: 3.16.16 ini: 4.1.3 toml: 3.0.0 yaml: 2.7.0 - '@effect/cluster@0.37.2(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/workflow@0.1.2(effect@3.16.13))(effect@3.16.13)': + '@effect/cluster@0.37.2(@effect/platform@0.88.1(effect@3.16.16))(@effect/rpc@0.61.4(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/sql@0.42.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/workflow@0.1.2(effect@3.16.16))(effect@3.16.16)': dependencies: - '@effect/platform': 0.88.0(effect@3.16.13) - '@effect/rpc': 0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) - '@effect/sql': 0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) - '@effect/workflow': 0.1.2(effect@3.16.13) - effect: 3.16.13 + '@effect/platform': 0.88.1(effect@3.16.16) + '@effect/rpc': 0.61.4(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16) + '@effect/sql': 0.42.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16) + '@effect/workflow': 0.1.2(effect@3.16.16) + effect: 3.16.16 - '@effect/experimental@0.51.1(@effect/platform@0.88.0(effect@3.16.12))(effect@3.16.12)': + '@effect/experimental@0.51.1(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16)': dependencies: - '@effect/platform': 0.88.0(effect@3.16.12) - effect: 3.16.12 + '@effect/platform': 0.88.1(effect@3.16.16) + effect: 3.16.16 uuid: 11.1.0 - '@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13)': + '@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16)': dependencies: - '@effect/platform': 0.88.0(effect@3.16.13) - effect: 3.16.13 + '@effect/platform': 0.88.1(effect@3.16.16) + effect: 3.16.16 uuid: 11.1.0 - '@effect/language-service@0.26.0': {} + '@effect/language-service@0.27.1': {} - '@effect/platform-node-shared@0.43.0(@effect/cluster@0.37.2(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/workflow@0.1.2(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(bufferutil@4.0.9)(effect@3.16.13)(utf-8-validate@5.0.10)': + '@effect/platform-node-shared@0.44.0(@effect/cluster@0.37.2(@effect/platform@0.88.1(effect@3.16.16))(@effect/rpc@0.61.4(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/sql@0.42.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/workflow@0.1.2(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(@effect/rpc@0.61.4(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/sql@0.42.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(bufferutil@4.0.9)(effect@3.16.16)(utf-8-validate@5.0.10)': dependencies: - '@effect/cluster': 0.37.2(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/workflow@0.1.2(effect@3.16.13))(effect@3.16.13) - '@effect/platform': 0.88.0(effect@3.16.13) - '@effect/rpc': 0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) - '@effect/sql': 0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) + '@effect/cluster': 0.37.2(@effect/platform@0.88.1(effect@3.16.16))(@effect/rpc@0.61.4(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/sql@0.42.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/workflow@0.1.2(effect@3.16.16))(effect@3.16.16) + '@effect/platform': 0.88.1(effect@3.16.16) + '@effect/rpc': 0.61.4(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16) + '@effect/sql': 0.42.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16) '@parcel/watcher': 2.5.1 - effect: 3.16.13 + effect: 3.16.16 multipasta: 0.2.5 ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate - '@effect/platform-node@0.90.0(@effect/cluster@0.37.2(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/workflow@0.1.2(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(bufferutil@4.0.9)(effect@3.16.13)(utf-8-validate@5.0.10)': + '@effect/platform-node@0.91.0(@effect/cluster@0.37.2(@effect/platform@0.88.1(effect@3.16.16))(@effect/rpc@0.61.4(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/sql@0.42.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/workflow@0.1.2(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(@effect/rpc@0.61.4(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/sql@0.42.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(bufferutil@4.0.9)(effect@3.16.16)(utf-8-validate@5.0.10)': dependencies: - '@effect/cluster': 0.37.2(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/workflow@0.1.2(effect@3.16.13))(effect@3.16.13) - '@effect/platform': 0.88.0(effect@3.16.13) - '@effect/platform-node-shared': 0.43.0(@effect/cluster@0.37.2(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/workflow@0.1.2(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(bufferutil@4.0.9)(effect@3.16.13)(utf-8-validate@5.0.10) - '@effect/rpc': 0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) - '@effect/sql': 0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) - effect: 3.16.13 + '@effect/cluster': 0.37.2(@effect/platform@0.88.1(effect@3.16.16))(@effect/rpc@0.61.4(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/sql@0.42.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/workflow@0.1.2(effect@3.16.16))(effect@3.16.16) + '@effect/platform': 0.88.1(effect@3.16.16) + '@effect/platform-node-shared': 0.44.0(@effect/cluster@0.37.2(@effect/platform@0.88.1(effect@3.16.16))(@effect/rpc@0.61.4(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/sql@0.42.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/workflow@0.1.2(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(@effect/rpc@0.61.4(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/sql@0.42.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(bufferutil@4.0.9)(effect@3.16.16)(utf-8-validate@5.0.10) + '@effect/rpc': 0.61.4(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16) + '@effect/sql': 0.42.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16) + effect: 3.16.16 mime: 3.0.0 undici: 7.10.0 ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -14980,65 +14970,64 @@ snapshots: - bufferutil - utf-8-validate - '@effect/platform@0.88.0(effect@3.16.12)': + '@effect/platform@0.88.1(effect@3.16.16)': dependencies: - effect: 3.16.12 + '@opentelemetry/semantic-conventions': 1.34.0 + effect: 3.16.16 find-my-way-ts: 0.1.6 msgpackr: 1.11.4 multipasta: 0.2.5 - '@effect/platform@0.88.0(effect@3.16.13)': + '@effect/printer-ansi@0.40.10(@effect/typeclass@0.31.10(effect@3.16.16))(effect@3.16.16)': dependencies: - effect: 3.16.13 - find-my-way-ts: 0.1.6 - msgpackr: 1.11.4 - multipasta: 0.2.5 + '@effect/printer': 0.40.10(@effect/typeclass@0.31.10(effect@3.16.16))(effect@3.16.16) + '@effect/typeclass': 0.31.10(effect@3.16.16) + effect: 3.16.16 - '@effect/printer-ansi@0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13)': + '@effect/printer@0.40.10(@effect/typeclass@0.31.10(effect@3.16.16))(effect@3.16.16)': dependencies: - '@effect/printer': 0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13) - '@effect/typeclass': 0.31.10(effect@3.16.13) - effect: 3.16.13 + '@effect/typeclass': 0.31.10(effect@3.16.16) + effect: 3.16.16 - '@effect/printer@0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13)': + '@effect/printer@0.44.14(@effect/typeclass@0.31.10(effect@3.16.16))(effect@3.16.16)': dependencies: - '@effect/typeclass': 0.31.10(effect@3.16.13) - effect: 3.16.13 + '@effect/typeclass': 0.31.10(effect@3.16.16) + effect: 3.16.16 - '@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13)': + '@effect/rpc@0.61.4(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16)': dependencies: - '@effect/platform': 0.88.0(effect@3.16.13) - effect: 3.16.13 + '@effect/platform': 0.88.1(effect@3.16.16) + effect: 3.16.16 - '@effect/sql-sqlite-node@0.42.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(effect@3.16.13)': + '@effect/sql-sqlite-node@0.43.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(@effect/sql@0.42.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(effect@3.16.16)': dependencies: - '@effect/experimental': 0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) - '@effect/platform': 0.88.0(effect@3.16.13) - '@effect/sql': 0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) + '@effect/experimental': 0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16) + '@effect/platform': 0.88.1(effect@3.16.16) + '@effect/sql': 0.42.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16) '@opentelemetry/semantic-conventions': 1.34.0 better-sqlite3: 11.10.0 - effect: 3.16.13 + effect: 3.16.16 - '@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13)': + '@effect/sql@0.42.0(@effect/experimental@0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16))(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16)': dependencies: - '@effect/experimental': 0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) - '@effect/platform': 0.88.0(effect@3.16.13) + '@effect/experimental': 0.52.2(@effect/platform@0.88.1(effect@3.16.16))(effect@3.16.16) + '@effect/platform': 0.88.1(effect@3.16.16) '@opentelemetry/semantic-conventions': 1.34.0 - effect: 3.16.13 + effect: 3.16.16 uuid: 11.1.0 - '@effect/typeclass@0.31.10(effect@3.16.13)': + '@effect/typeclass@0.31.10(effect@3.16.16)': dependencies: - effect: 3.16.13 + effect: 3.16.16 - '@effect/vitest@0.24.0(effect@3.16.13)(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/vitest@0.24.1(effect@3.16.16)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.14)(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.13 - 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: 3.16.16 + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.14)(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.13)': + '@effect/workflow@0.1.2(effect@3.16.16)': dependencies: - effect: 3.16.13 + effect: 3.16.16 '@emnapi/runtime@1.4.3': dependencies: @@ -15600,7 +15589,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.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/cli@5.0.7(@babel/core@7.28.0)(@parcel/watcher@2.5.1)(@types/node@24.0.14)(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 @@ -15611,12 +15600,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.13)(graphql@16.11.0) + '@graphql-tools/github-loader': 8.0.13(@types/node@24.0.14)(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.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/prisma-loader': 8.0.17(@types/node@24.0.14)(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.14)(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 @@ -15624,7 +15613,7 @@ snapshots: debounce: 1.2.1 detect-indent: 6.1.0 graphql: 16.11.0 - 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) + graphql-config: 5.1.3(@types/node@24.0.14)(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 @@ -15846,7 +15835,7 @@ snapshots: - bufferutil - utf-8-validate - '@graphql-tools/executor-http@1.2.6(@types/node@24.0.13)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.2.6(@types/node@24.0.14)(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) @@ -15855,7 +15844,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.13) + meros: 1.3.0(@types/node@24.0.14) tslib: 2.8.1 value-or-promise: 1.0.12 transitivePeerDependencies: @@ -15895,9 +15884,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/github-loader@8.0.13(@types/node@24.0.13)(graphql@16.11.0)': + '@graphql-tools/github-loader@8.0.13(@types/node@24.0.14)(graphql@16.11.0)': dependencies: - '@graphql-tools/executor-http': 1.2.6(@types/node@24.0.13)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.2.6(@types/node@24.0.14)(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 @@ -15965,9 +15954,9 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@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/prisma-loader@8.0.17(@types/node@24.0.14)(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.13)(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.14)(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 @@ -16009,10 +15998,10 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@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/url-loader@8.0.24(@types/node@24.0.14)(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.13)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.2.6(@types/node@24.0.14)(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) @@ -17594,13 +17583,6 @@ snapshots: '@noble/curves': 1.9.0 '@noble/hashes': 1.8.0 - '@shikijs/core@3.7.0': - dependencies: - '@shikijs/types': 3.7.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.5 - '@shikijs/core@3.8.0': dependencies: '@shikijs/types': 3.8.0 @@ -17608,49 +17590,25 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/engine-javascript@3.7.0': - dependencies: - '@shikijs/types': 3.7.0 - '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 4.3.3 - '@shikijs/engine-javascript@3.8.0': dependencies: '@shikijs/types': 3.8.0 '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.3 - '@shikijs/engine-oniguruma@3.7.0': - dependencies: - '@shikijs/types': 3.7.0 - '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/engine-oniguruma@3.8.0': dependencies: '@shikijs/types': 3.8.0 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@3.7.0': - dependencies: - '@shikijs/types': 3.7.0 - '@shikijs/langs@3.8.0': dependencies: '@shikijs/types': 3.8.0 - '@shikijs/themes@3.7.0': - dependencies: - '@shikijs/types': 3.7.0 - '@shikijs/themes@3.8.0': dependencies: '@shikijs/types': 3.8.0 - '@shikijs/types@3.7.0': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - '@shikijs/types@3.8.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 @@ -18160,12 +18118,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@7.0.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))': + '@tailwindcss/vite@4.1.11(vite@7.0.4(@types/node@24.0.14)(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: 7.0.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) + vite: 7.0.4(@types/node@24.0.14)(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: @@ -18214,10 +18172,10 @@ snapshots: '@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.3)(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.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.128.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.127.3)(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.128.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: @@ -18226,10 +18184,10 @@ snapshots: - 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.3)(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.127.3(@tanstack/react-router@1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.128.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.3)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3) + '@tanstack/react-router': 1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/router-devtools-core': 1.127.3(@tanstack/router-core@1.128.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: @@ -18238,10 +18196,10 @@ snapshots: - solid-js - tiny-invariant - '@tanstack/react-router-devtools@1.127.3(@tanstack/react-router@1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.127.3)(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.128.0(@tanstack/react-router@1.128.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.128.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.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-devtools-core': 1.127.3(@tanstack/router-core@1.127.3)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3) + '@tanstack/react-router': 1.128.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/router-devtools-core': 1.128.0(@tanstack/router-core@1.128.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: @@ -18261,23 +18219,22 @@ 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)': + '@tanstack/react-router@1.127.3(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 + '@tanstack/react-store': 0.7.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/router-core': 1.127.3 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-router@1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/react-router@1.128.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@tanstack/history': 1.121.34 '@tanstack/react-store': 0.7.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-core': 1.127.3 + '@tanstack/router-core': 1.128.0 isbot: 5.1.28 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -18291,13 +18248,6 @@ snapshots: react-dom: 19.1.0(react@19.1.0) use-sync-external-store: 1.4.0(react@19.1.0) - '@tanstack/react-store@0.7.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@tanstack/store': 0.7.1 - 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-store@0.7.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@tanstack/store': 0.7.2 @@ -18323,18 +18273,17 @@ snapshots: '@tanstack/store': 0.7.0 tiny-invariant: 1.3.3 - '@tanstack/router-core@1.127.0': + '@tanstack/router-core@1.127.3': dependencies: '@tanstack/history': 1.121.34 - '@tanstack/store': 0.7.1 + '@tanstack/store': 0.7.2 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-core@1.127.3': + '@tanstack/router-core@1.128.0': dependencies: '@tanstack/history': 1.121.34 '@tanstack/store': 0.7.2 @@ -18344,9 +18293,9 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.122.0(@tanstack/router-core@1.127.3)(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.128.0)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': dependencies: - '@tanstack/router-core': 1.127.3 + '@tanstack/router-core': 1.128.0 clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) solid-js: 1.9.5 @@ -18354,9 +18303,9 @@ snapshots: optionalDependencies: csstype: 3.1.3 - '@tanstack/router-devtools-core@1.127.0(@tanstack/router-core@1.127.3)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': + '@tanstack/router-devtools-core@1.127.3(@tanstack/router-core@1.128.0)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': dependencies: - '@tanstack/router-core': 1.127.3 + '@tanstack/router-core': 1.128.0 clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) solid-js: 1.9.5 @@ -18364,9 +18313,9 @@ snapshots: optionalDependencies: csstype: 3.1.3 - '@tanstack/router-devtools-core@1.127.3(@tanstack/router-core@1.127.3)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': + '@tanstack/router-devtools-core@1.128.0(@tanstack/router-core@1.128.0)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': dependencies: - '@tanstack/router-core': 1.127.3 + '@tanstack/router-core': 1.128.0 clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) solid-js: 1.9.5 @@ -18383,9 +18332,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.127.5': + '@tanstack/router-generator@1.128.0': dependencies: - '@tanstack/router-core': 1.127.3 + '@tanstack/router-core': 1.128.0 '@tanstack/router-utils': 1.121.21 '@tanstack/virtual-file-routes': 1.121.21 prettier: 3.6.1 @@ -18422,7 +18371,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.127.5(@tanstack/react-router@1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.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))(webpack@5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2))': + '@tanstack/router-plugin@1.128.0(@tanstack/react-router@1.128.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.4(@types/node@24.0.14)(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) @@ -18430,8 +18379,8 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.28.0 '@babel/types': 7.28.0 - '@tanstack/router-core': 1.127.3 - '@tanstack/router-generator': 1.127.5 + '@tanstack/router-core': 1.128.0 + '@tanstack/router-generator': 1.128.0 '@tanstack/router-utils': 1.121.21 '@tanstack/virtual-file-routes': 1.121.21 babel-dead-code-elimination: 1.0.10 @@ -18439,8 +18388,8 @@ snapshots: unplugin: 2.1.2 zod: 3.25.51 optionalDependencies: - '@tanstack/react-router': 1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 7.0.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) + '@tanstack/react-router': 1.128.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + vite: 7.0.4(@types/node@24.0.14)(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 @@ -18465,8 +18414,6 @@ snapshots: '@tanstack/store@0.7.0': {} - '@tanstack/store@0.7.1': {} - '@tanstack/store@0.7.2': {} '@tanstack/virtual-core@3.13.6': {} @@ -18672,7 +18619,7 @@ snapshots: dependencies: undici-types: 6.19.8 - '@types/node@24.0.13': + '@types/node@24.0.14': dependencies: undici-types: 7.8.0 @@ -18796,18 +18743,18 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.4.1(vite@7.0.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))': + '@vitejs/plugin-react@4.4.1(vite@7.0.4(@types/node@24.0.14)(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: 7.0.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) + vite: 7.0.4(@types/node@24.0.14)(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@7.0.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))': + '@vitejs/plugin-react@4.6.0(vite@7.0.4(@types/node@24.0.14)(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) @@ -18815,7 +18762,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.19 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.0.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) + vite: 7.0.4(@types/node@24.0.14)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -18827,13 +18774,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.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/mocker@3.2.4(vite@6.3.5(@types/node@24.0.14)(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.13)(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.14)(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: @@ -21022,6 +20969,11 @@ snapshots: '@standard-schema/spec': 1.0.0 fast-check: 3.23.2 + effect@3.16.16: + dependencies: + '@standard-schema/spec': 1.0.0 + fast-check: 3.23.2 + electron-to-chromium@1.5.152: {} electron-to-chromium@1.5.52: {} @@ -21889,13 +21841,13 @@ snapshots: graceful-fs@4.2.11: {} - 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): + graphql-config@5.1.3(@types/node@24.0.14)(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.13)(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.14)(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 @@ -23222,9 +23174,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.0(@types/node@24.0.13): + meros@1.3.0(@types/node@24.0.14): optionalDependencies: - '@types/node': 24.0.13 + '@types/node': 24.0.14 methods@1.1.2: {} @@ -23885,13 +23837,6 @@ snapshots: regex: 6.0.1 regex-recursion: 6.0.2 - open@10.1.2: - dependencies: - default-browser: 5.2.1 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - is-wsl: 3.1.0 - open@10.2.0: dependencies: default-browser: 5.2.1 @@ -25761,17 +25706,6 @@ snapshots: interpret: 1.4.0 rechoir: 0.6.2 - shiki@3.7.0: - dependencies: - '@shikijs/core': 3.7.0 - '@shikijs/engine-javascript': 3.7.0 - '@shikijs/engine-oniguruma': 3.7.0 - '@shikijs/langs': 3.7.0 - '@shikijs/themes': 3.7.0 - '@shikijs/types': 3.7.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - shiki@3.8.0: dependencies: '@shikijs/core': 3.8.0 @@ -26828,13 +26762,13 @@ snapshots: - utf-8-validate - zod - 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): + vite-node@3.2.4(@types/node@24.0.14)(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.13)(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.14)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -26885,7 +26819,7 @@ snapshots: 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@6.3.5(@types/node@24.0.14)(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) @@ -26894,7 +26828,7 @@ snapshots: rollup: 4.39.0 tinyglobby: 0.2.13 optionalDependencies: - '@types/node': 24.0.13 + '@types/node': 24.0.14 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 @@ -26902,7 +26836,7 @@ snapshots: tsx: 4.20.3 yaml: 2.7.0 - vite@7.0.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): + vite@7.0.4(@types/node@24.0.14)(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.6(picomatch@4.0.2) @@ -26911,7 +26845,7 @@ snapshots: rollup: 4.45.0 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 24.0.13 + '@types/node': 24.0.14 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 @@ -26919,11 +26853,11 @@ snapshots: 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): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.14)(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.13)(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.14)(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 @@ -26941,12 +26875,12 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.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) + vite: 6.3.5(@types/node@24.0.14)(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.14)(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.13 + '@types/node': 24.0.14 jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - jiti From ab1b41d54755fd33437a5ed01bcb7b218c2f5843 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Thu, 17 Jul 2025 12:21:45 -1000 Subject: [PATCH 2/4] feat(typesync): lint fixes --- packages/typesync/src/Mapping.ts | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/packages/typesync/src/Mapping.ts b/packages/typesync/src/Mapping.ts index 261043d2..6367ac59 100644 --- a/packages/typesync/src/Mapping.ts +++ b/packages/typesync/src/Mapping.ts @@ -305,7 +305,12 @@ type ProcessedProperty = type ProcessedType = | { type: 'complete'; entry: MappingEntry & { typeName: string }; ops: Array } - | { type: 'deferred'; schemaType: SchemaType; properties: Array; relations: Array }; + | { + type: 'deferred'; + schemaType: SchemaType; + properties: Array; + relations: Array; + }; // Helper function to build property map from PropertyIdMappings function buildPropertyMap(properties: Array): MappingEntry['properties'] { @@ -392,7 +397,7 @@ function processType(type: SchemaType, typeIdMap: TypeIdMapping): ProcessedType const primitiveProperties = pipe( resolvedProperties, EffectArray.filter((p) => { - const originalProp = type.properties.find(prop => prop.name === p.mapping.propName); + const originalProp = type.properties.find((prop) => prop.name === p.mapping.propName); return originalProp ? !propertyIsRelation(originalProp) : false; }), EffectArray.map((p) => p.mapping), @@ -401,7 +406,7 @@ function processType(type: SchemaType, typeIdMap: TypeIdMapping): ProcessedType const relationProperties = pipe( resolvedProperties, EffectArray.filter((p) => { - const originalProp = type.properties.find(prop => prop.name === p.mapping.propName); + const originalProp = type.properties.find((prop) => prop.name === p.mapping.propName); return originalProp ? propertyIsRelation(originalProp) : false; }), EffectArray.map((p) => p.mapping), @@ -418,15 +423,15 @@ function processType(type: SchemaType, typeIdMap: TypeIdMapping): ProcessedType typeName: toPascalCase(type.name), typeIds: [Grc20Id.Id(type.knowledgeGraphId)], }; - + if (EffectArray.isNonEmptyArray(primitiveProperties)) { entry.properties = buildPropertyMap(primitiveProperties); } - + if (EffectArray.isNonEmptyArray(relationProperties)) { entry.relations = buildRelationMap(relationProperties); } - + return { type: 'complete', entry, @@ -460,11 +465,11 @@ function processType(type: SchemaType, typeIdMap: TypeIdMapping): ProcessedType typeName: toPascalCase(type.name), typeIds: [id], }; - + if (EffectArray.isNonEmptyArray(primitiveProperties)) { entry.properties = buildPropertyMap(primitiveProperties); } - + if (EffectArray.isNonEmptyArray(relationProperties)) { entry.relations = buildRelationMap(relationProperties); } @@ -690,20 +695,17 @@ export function generateMapping(input: Schema): GenerateMappingResult { typeName: toPascalCase(deferred.schemaType.name), typeIds: [id], }; - + if (EffectArray.isNonEmptyArray(deferred.properties)) { entry.properties = buildPropertyMap(deferred.properties); } - + if (EffectArray.isNonEmptyArray(allRelations)) { entry.relations = buildRelationMap(allRelations); } return { - entries: [ - ...acc.entries, - entry, - ], + entries: [...acc.entries, entry], ops: [...acc.ops, ...allOps], }; }, From bf92d1f83a6ef99644d34b185224e05c38499161 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Thu, 17 Jul 2025 12:33:14 -1000 Subject: [PATCH 3/4] feat(typesync): fix generator tests --- apps/typesync/src/Generator.ts | 4 +- apps/typesync/test/Dummy.test.ts | 7 -- apps/typesync/test/Generator.test.ts | 145 ++------------------------- 3 files changed, 13 insertions(+), 143 deletions(-) delete mode 100644 apps/typesync/test/Dummy.test.ts diff --git a/apps/typesync/src/Generator.ts b/apps/typesync/src/Generator.ts index e66a01da..0d701353 100644 --- a/apps/typesync/src/Generator.ts +++ b/apps/typesync/src/Generator.ts @@ -407,10 +407,10 @@ export function buildMappingFile(schema: Domain.InsertAppSchema) { mappingLines.push(Doc.text(' },')); } - mappingLines.push(Doc.text(' }')); + mappingLines.push(Doc.text(' },')); } - mappingLines.push(Doc.text('}')); + mappingLines.push(Doc.rbrace); const compiled = Doc.vcat([imports, Doc.empty, ...mappingLines]); diff --git a/apps/typesync/test/Dummy.test.ts b/apps/typesync/test/Dummy.test.ts deleted file mode 100644 index 6e63158c..00000000 --- a/apps/typesync/test/Dummy.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { describe, expect, it } from '@effect/vitest'; - -describe('Dummy', () => { - it('should pass', () => { - expect(true).toBe(true); - }); -}); diff --git a/apps/typesync/test/Generator.test.ts b/apps/typesync/test/Generator.test.ts index d8a0f5d2..b4a1373b 100644 --- a/apps/typesync/test/Generator.test.ts +++ b/apps/typesync/test/Generator.test.ts @@ -6,27 +6,27 @@ import { buildMappingFile } from '../src/Generator.js'; describe('buildMappingFile', () => { it('should build a valid mapping file', () => { const expectedMapping = `import { Id } from '@graphprotocol/grc-20'; -import type { Mapping } from '@graphprotocol/hypergraph'; +import type { Mapping } from '@graphprotocol/typesync/Mapping'; export const mapping: Mapping = { Space: { - typeIds: [Id.Id('362c1dbd-dc64-44bb-a3c4-652f38a642d7')], + typeIds: [Id.Id("362c1dbd-dc64-44bb-a3c4-652f38a642d7")], properties: { - name: Id.Id('a126ca53-0c8e-48d5-b888-82c734c38935'), - description: Id.Id('9b1f76ff-9711-404c-861e-59dc3fa7d037'), + name: Id.Id("a126ca53-0c8e-48d5-b888-82c734c38935"), + description: Id.Id("9b1f76ff-9711-404c-861e-59dc3fa7d037") }, }, Activity: { - typeIds: [Id.Id('8275c359-4662-40fb-9aec-27177b520cd2')], + typeIds: [Id.Id("8275c359-4662-40fb-9aec-27177b520cd2")], properties: { - name: Id.Id('a126ca53-0c8e-48d5-b888-82c734c38935'), - description: Id.Id('9b1f76ff-9711-404c-861e-59dc3fa7d037'), + name: Id.Id("a126ca53-0c8e-48d5-b888-82c734c38935"), + description: Id.Id("9b1f76ff-9711-404c-861e-59dc3fa7d037") }, relations: { - relatedSpaces: Id.Id('5b722cd3-61d6-494e-8887-1310566437ba'), + relatedSpaces: Id.Id("5b722cd3-61d6-494e-8887-1310566437ba") }, }, -};`; +}`; const mapping = buildMappingFile({ name: 'test', @@ -67,137 +67,14 @@ export const mapping: Mapping = { { name: 'Related spaces', knowledgeGraphId: '5b722cd3-61d6-494e-8887-1310566437ba', - dataType: 'Relation(Related spaces)', - relationType: 'Related spaces', + dataType: 'Relation(Space)', + relationType: 'Space', }, ], }, ], }); - expect(mapping).toBe(expectedMapping); - }); - - it('should skip a type entry without a knowledgeGraphId', () => { - const expectedMapping = `import { Id } from '@graphprotocol/grc-20'; -import type { Mapping } from '@graphprotocol/hypergraph'; -export const mapping: Mapping = { - Space: { - typeIds: [Id.Id('362c1dbd-dc64-44bb-a3c4-652f38a642d7')], - properties: { - name: Id.Id('a126ca53-0c8e-48d5-b888-82c734c38935'), - description: Id.Id('9b1f76ff-9711-404c-861e-59dc3fa7d037'), - }, - }, -};`; - - const mapping = buildMappingFile({ - name: 'test', - description: 'test', - directory: 'test', - template: 'vite_react', - types: [ - { - name: 'Space', - knowledgeGraphId: '362c1dbd-dc64-44bb-a3c4-652f38a642d7', - properties: [ - { - name: 'Name', - knowledgeGraphId: 'a126ca53-0c8e-48d5-b888-82c734c38935', - dataType: 'Text', - }, - { - name: 'Description', - knowledgeGraphId: '9b1f76ff-9711-404c-861e-59dc3fa7d037', - dataType: 'Text', - }, - ], - }, - { - name: 'new type', - knowledgeGraphId: null, - properties: [ - { - name: 'new prop', - knowledgeGraphId: null, - dataType: 'Text', - }, - ], - }, - ], - }); - expect(mapping).toBe(expectedMapping); - }); - - it('should skip a property entry without a knowledgeGraphId', () => { - const expectedMapping = `import { Id } from '@graphprotocol/grc-20'; -import type { Mapping } from '@graphprotocol/hypergraph'; - -export const mapping: Mapping = { - Space: { - typeIds: [Id.Id('362c1dbd-dc64-44bb-a3c4-652f38a642d7')], - properties: { - name: Id.Id('a126ca53-0c8e-48d5-b888-82c734c38935'), - description: Id.Id('9b1f76ff-9711-404c-861e-59dc3fa7d037'), - }, - }, - Activity: { - typeIds: [Id.Id('8275c359-4662-40fb-9aec-27177b520cd2')], - properties: { - name: Id.Id('a126ca53-0c8e-48d5-b888-82c734c38935'), - }, - relations: { - relatedSpaces: Id.Id('5b722cd3-61d6-494e-8887-1310566437ba'), - }, - }, -};`; - - const mapping = buildMappingFile({ - name: 'test', - description: 'test', - directory: 'test', - template: 'vite_react', - types: [ - { - name: 'Space', - knowledgeGraphId: '362c1dbd-dc64-44bb-a3c4-652f38a642d7', - properties: [ - { - name: 'Name', - knowledgeGraphId: 'a126ca53-0c8e-48d5-b888-82c734c38935', - dataType: 'Text', - }, - { - name: 'Description', - knowledgeGraphId: '9b1f76ff-9711-404c-861e-59dc3fa7d037', - dataType: 'Text', - }, - ], - }, - { - name: 'Activity', - knowledgeGraphId: '8275c359-4662-40fb-9aec-27177b520cd2', - properties: [ - { - name: 'Name', - knowledgeGraphId: 'a126ca53-0c8e-48d5-b888-82c734c38935', - dataType: 'Text', - }, - { - name: 'Description', - knowledgeGraphId: null, - dataType: 'Text', - }, - { - name: 'Related spaces', - knowledgeGraphId: '5b722cd3-61d6-494e-8887-1310566437ba', - dataType: 'Relation(Related spaces)', - relationType: 'Related spaces', - }, - ], - }, - ], - }); expect(mapping).toBe(expectedMapping); }); }); From dd46887a23271cdd03e03c3d17f8881fa037d4c9 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Tue, 22 Jul 2025 08:20:30 -1000 Subject: [PATCH 4/4] feat(typesync mapping): use published typesync package in typesync app --- apps/typesync/package.json | 2 +- pnpm-lock.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/typesync/package.json b/apps/typesync/package.json index 89cdb724..d637d272 100644 --- a/apps/typesync/package.json +++ b/apps/typesync/package.json @@ -65,7 +65,7 @@ "dependencies": { "@graphql-typed-document-node/core": "^3.2.0", "@graphprotocol/grc-20": "^0.21.6", - "@graphprotocol/typesync": "workspace:*", + "@graphprotocol/typesync": "^0.0.3", "@headlessui/react": "^2.2.4", "@heroicons/react": "^2.2.0", "@phosphor-icons/react": "^2.1.10", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index db0560e8..146fd3c2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -470,8 +470,8 @@ importers: 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/typesync': - specifier: workspace:* - version: link:../../packages/typesync/publish + specifier: ^0.0.3 + version: 0.0.3(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)