From a3b4613e9692874752be1cd143ee92da8ad5eda1 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Wed, 30 Jul 2025 07:46:04 -1000 Subject: [PATCH 1/3] feat(typesync.v2 | cli): building out cli tool to read and parse schema and mapping files --- apps/connect/package.json | 2 +- apps/create-hypergraph/package.json | 4 +- .../template-vite-react/package.json | 2 +- apps/events/package.json | 5 +- apps/events/tsconfig.app.json | 4 +- apps/server/package.json | 2 +- apps/typesync/package.json | 6 +- packages/hypergraph-react/package.json | 2 +- packages/hypergraph-react/tsconfig.build.json | 3 +- packages/hypergraph-react/tsconfig.src.json | 3 +- packages/hypergraph-react/tsconfig.test.json | 1 - packages/hypergraph/package.json | 23 +- packages/hypergraph/src/cli/Cli.ts | 15 + packages/hypergraph/src/cli/Logger.ts | 20 + packages/hypergraph/src/cli/bin.ts | 33 + packages/hypergraph/src/cli/bun.ts | 3 + .../hypergraph/src/cli/services/Typesync.ts | 227 ++++++ .../src/cli/services/schema-parser.ts | 127 ++++ .../src/cli/subcommands/typesync.ts | 93 +++ packages/hypergraph/src/mapping/Mapping.ts | 22 + .../test/cli/services/Typesync.test.ts | 10 + .../test/cli/services/schema-parser.test.ts | 238 ++++++ packages/hypergraph/tsconfig.build.json | 3 - packages/hypergraph/tsconfig.src.json | 6 +- packages/hypergraph/tsconfig.test.json | 1 - packages/typesync/package.json | 2 +- pnpm-lock.yaml | 677 ++++++++++-------- 27 files changed, 1200 insertions(+), 334 deletions(-) create mode 100644 packages/hypergraph/src/cli/Cli.ts create mode 100644 packages/hypergraph/src/cli/Logger.ts create mode 100644 packages/hypergraph/src/cli/bin.ts create mode 100644 packages/hypergraph/src/cli/bun.ts create mode 100644 packages/hypergraph/src/cli/services/Typesync.ts create mode 100644 packages/hypergraph/src/cli/services/schema-parser.ts create mode 100644 packages/hypergraph/src/cli/subcommands/typesync.ts create mode 100644 packages/hypergraph/test/cli/services/Typesync.test.ts create mode 100644 packages/hypergraph/test/cli/services/schema-parser.test.ts diff --git a/apps/connect/package.json b/apps/connect/package.json index c9d254cc..7f1ef57f 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.17.1", + "effect": "^3.17.3", "framer-motion": "^12.10.1", "graphql-request": "^7.2.0", "lucide-react": "^0.508.0", diff --git a/apps/create-hypergraph/package.json b/apps/create-hypergraph/package.json index 97046490..89215dbb 100644 --- a/apps/create-hypergraph/package.json +++ b/apps/create-hypergraph/package.json @@ -55,13 +55,13 @@ "homepage": "https://github.com/graphprotocol/hypergraph/tree/main/apps/create-hypergraph-app#readme", "devDependencies": { "@effect/cli": "^0.69.0", - "@effect/language-service": "^0.28.3", + "@effect/language-service": "^0.31.2", "@effect/platform": "^0.90.0", "@effect/platform-node": "^0.94.0", "@effect/printer-ansi": "^0.45.0", "@effect/vitest": "^0.25.0", "@types/node": "^24.1.0", - "effect": "^3.17.1", + "effect": "^3.17.3", "execa": "^9.6.0", "tsdown": "^0.13.0", "tsx": "^4.20.3" diff --git a/apps/create-hypergraph/template-vite-react/package.json b/apps/create-hypergraph/template-vite-react/package.json index cbe90e22..65348bf7 100644 --- a/apps/create-hypergraph/template-vite-react/package.json +++ b/apps/create-hypergraph/template-vite-react/package.json @@ -22,7 +22,7 @@ "@tanstack/react-router": "^1.129.2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "effect": "^3.17.1", + "effect": "^3.17.3", "lucide-react": "^0.525.0", "react": "^19.1.0", "react-dom": "^19.1.0", diff --git a/apps/events/package.json b/apps/events/package.json index 496f15fd..88cb3b8c 100644 --- a/apps/events/package.json +++ b/apps/events/package.json @@ -5,7 +5,8 @@ "type": "module", "scripts": { "dev": "vite --force", - "preview": "vite preview" + "preview": "vite preview", + "typesync": "hypergraph typesync" }, "dependencies": { "@graphprotocol/grc-20": "^0.21.6", @@ -21,7 +22,7 @@ "@xstate/store": "^3.5.1", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "effect": "^3.17.1", + "effect": "^3.17.3", "framer-motion": "^12.10.1", "graphql-request": "^7.1.2", "isomorphic-ws": "^5.0.0", diff --git a/apps/events/tsconfig.app.json b/apps/events/tsconfig.app.json index 058a609b..0ce5612c 100644 --- a/apps/events/tsconfig.app.json +++ b/apps/events/tsconfig.app.json @@ -35,9 +35,7 @@ "@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/typesync": ["../../packages/typesync/src/index.js"], - "@graphprotocol/typesync/*": ["../../packages/typesync/src/*.js"] + "@graphprotocol/hypergraph-react/*": ["../../packages/hypergraph-react/src/*.js"] } } } diff --git a/apps/server/package.json b/apps/server/package.json index 6fc25561..285e16a1 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.17.1", + "effect": "^3.17.3", "express": "^5.1.0", "prisma": "^6.7.0", "siwe": "^3.0.0", diff --git a/apps/typesync/package.json b/apps/typesync/package.json index b753d0bb..0c850577 100644 --- a/apps/typesync/package.json +++ b/apps/typesync/package.json @@ -42,8 +42,8 @@ }, "devDependencies": { "@effect/cli": "^0.69.0", - "@effect/experimental": "^0.54.0", - "@effect/language-service": "^0.28.3", + "@effect/experimental": "^0.54.2", + "@effect/language-service": "^0.31.2", "@effect/platform": "^0.90.0", "@effect/platform-node": "^0.94.0", "@effect/printer": "^0.45.0", @@ -81,7 +81,7 @@ "@tanstack/react-router-devtools": "^1.129.5", "better-sqlite3": "^12.2.0", "date-fns": "^4.1.0", - "effect": "^3.17.1", + "effect": "^3.17.3", "graphql": "^16.11.0", "graphql-request": "^7.2.0", "jotai": "^2.12.5", diff --git a/packages/hypergraph-react/package.json b/packages/hypergraph-react/package.json index c4bf62b1..bf0cafe0 100644 --- a/packages/hypergraph-react/package.json +++ b/packages/hypergraph-react/package.json @@ -50,7 +50,7 @@ "@graphprotocol/grc-20": "^0.21.6", "@noble/hashes": "^1.8.0", "@tanstack/react-query": "^5.75.5", - "effect": "^3.17.1", + "effect": "^3.17.3", "graphql-request": "^7.1.2", "siwe": "^3.0.0", "uuid": "^11.1.0", diff --git a/packages/hypergraph-react/tsconfig.build.json b/packages/hypergraph-react/tsconfig.build.json index a5c60258..8288bf50 100644 --- a/packages/hypergraph-react/tsconfig.build.json +++ b/packages/hypergraph-react/tsconfig.build.json @@ -1,8 +1,7 @@ { "extends": "./tsconfig.src.json", "references": [ - { "path": "../hypergraph/tsconfig.build.json" }, - { "path": "../typesync/tsconfig.build.json" } + { "path": "../hypergraph/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 400aeb41..857616cf 100644 --- a/packages/hypergraph-react/tsconfig.src.json +++ b/packages/hypergraph-react/tsconfig.src.json @@ -2,8 +2,7 @@ "extends": "../../tsconfig.base.json", "include": ["src"], "references": [ - { "path": "../hypergraph/tsconfig.src.json" }, - { "path": "../typesync/tsconfig.src.json" } + { "path": "../hypergraph/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 dc3df654..40dbc2fd 100644 --- a/packages/hypergraph-react/tsconfig.test.json +++ b/packages/hypergraph-react/tsconfig.test.json @@ -4,7 +4,6 @@ "references": [ { "path": "./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 8d2a8504..a9d7bd20 100644 --- a/packages/hypergraph/package.json +++ b/packages/hypergraph/package.json @@ -3,6 +3,10 @@ "version": "0.2.0", "description": "SDK for building performant, type-safe, local-first dapps on top of The Graph ecosystem knowledge graphs.", "publishConfig": { + "bin": { + "hypergraph": "./dist/cli/bin.js", + "hg": "./dist/cli/bin.js" + }, "access": "public", "directory": "publish", "provenance": false @@ -37,10 +41,23 @@ "sideEffects": [], "scripts": { "build": "tsc -b --force tsconfig.build.json && babel dist --plugins annotate-pure-calls --out-dir dist --source-maps && node ../../scripts/package.mjs", - "test": "vitest" + "test": "vitest", + "hypergraph": "pnpm tsx ./src/cli/bun.ts" + }, + "bin": { + "hypergraph": "./src/cli/bun.ts", + "hg": "./src/cli/bun.ts" }, "devDependencies": { - "@types/uuid": "^10.0.0" + "@effect/cli": "^0.69.0", + "@effect/platform": "^0.90.0", + "@effect/platform-node": "^0.94.0", + "@effect/printer-ansi": "^0.45.0", + "@effect/vitest": "^0.25.0", + "@types/node": "^24.1.0", + "@types/uuid": "^10.0.0", + "jiti": "^2.5.1", + "typescript": "^5.8.3" }, "dependencies": { "@automerge/automerge": "^2.2.9", @@ -55,7 +72,7 @@ "@serenity-kit/noble-sodium": "^0.2.1", "@xstate/store": "^3.5.1", "bs58check": "^4.0.0", - "effect": "^3.17.1", + "effect": "^3.17.3", "permissionless": "^0.2.47", "siwe": "^3.0.0", "uuid": "^11.1.0", diff --git a/packages/hypergraph/src/cli/Cli.ts b/packages/hypergraph/src/cli/Cli.ts new file mode 100644 index 00000000..a4a0e136 --- /dev/null +++ b/packages/hypergraph/src/cli/Cli.ts @@ -0,0 +1,15 @@ +import * as Command from '@effect/cli/Command'; + +import { typesync } from './subcommands/typesync.js'; + +const hypergraph = Command.make('hypergraph').pipe( + Command.withDescription( + 'Hypergraph command line interface for building and interacting with @graphprotocol/hypergraph schemas', + ), + Command.withSubcommands([typesync]), +); + +export const run = Command.run(hypergraph, { + name: 'hypergraph', + version: '0.0.1', +}); diff --git a/packages/hypergraph/src/cli/Logger.ts b/packages/hypergraph/src/cli/Logger.ts new file mode 100644 index 00000000..66747c5d --- /dev/null +++ b/packages/hypergraph/src/cli/Logger.ts @@ -0,0 +1,20 @@ +import * as Ansi from '@effect/printer-ansi/Ansi'; +import * as AnsiDoc from '@effect/printer-ansi/AnsiDoc'; +import * as EffectArray from 'effect/Array'; +import * as Logger from 'effect/Logger'; + +export const AnsiDocLogger = Logger.make(({ message }) => { + const messageArr = EffectArray.ensure(message); + for (let i = 0; i < messageArr.length; i++) { + const currentMessage = messageArr[i]; + if (AnsiDoc.isDoc(currentMessage)) { + const prefix = AnsiDoc.text('hypergraph-cli').pipe( + AnsiDoc.annotate(Ansi.cyan), + AnsiDoc.squareBracketed, + AnsiDoc.cat(AnsiDoc.colon), + ); + const document = AnsiDoc.catWithSpace(prefix, currentMessage as AnsiDoc.AnsiDoc); + globalThis.console.log(AnsiDoc.render(document, { style: 'pretty' })); + } + } +}); diff --git a/packages/hypergraph/src/cli/bin.ts b/packages/hypergraph/src/cli/bin.ts new file mode 100644 index 00000000..c7c230cd --- /dev/null +++ b/packages/hypergraph/src/cli/bin.ts @@ -0,0 +1,33 @@ +#!/usr/bin/env node + +import { NodeContext, NodeFileSystem, NodeRuntime } from '@effect/platform-node'; +import * as Ansi from '@effect/printer-ansi/Ansi'; +import * as AnsiDoc from '@effect/printer-ansi/AnsiDoc'; +import * as Effect from 'effect/Effect'; +import * as Logger from 'effect/Logger'; +import * as LogLevel from 'effect/LogLevel'; + +import { run } from './Cli.js'; +import { AnsiDocLogger } from './Logger.js'; + +const runnable = Effect.suspend(() => run(process.argv)).pipe( + Effect.provide(NodeFileSystem.layer), + Effect.provide(NodeContext.layer), +); + +runnable.pipe( + Effect.catchAllDefect((defect) => + Effect.gen(function* () { + if (defect && typeof defect === 'object' && 'name' in defect && defect.name === 'QuitException') { + return yield* Effect.logError( + AnsiDoc.cat(AnsiDoc.hardLine, AnsiDoc.text('Exiting...').pipe(AnsiDoc.annotate(Ansi.red))), + ); + } + return Effect.die(defect); + }), + ), + Effect.provide(Logger.replace(Logger.defaultLogger, AnsiDocLogger)), + Logger.withMinimumLogLevel(LogLevel.Debug), + Effect.orDie, + NodeRuntime.runMain({ disableErrorReporting: process.env.NODE_ENV === 'prod', disablePrettyLogger: true }), +); diff --git a/packages/hypergraph/src/cli/bun.ts b/packages/hypergraph/src/cli/bun.ts new file mode 100644 index 00000000..4e927044 --- /dev/null +++ b/packages/hypergraph/src/cli/bun.ts @@ -0,0 +1,3 @@ +#!/usr/bin/env bun + +import './bin.js'; diff --git a/packages/hypergraph/src/cli/services/Typesync.ts b/packages/hypergraph/src/cli/services/Typesync.ts new file mode 100644 index 00000000..f5777b38 --- /dev/null +++ b/packages/hypergraph/src/cli/services/Typesync.ts @@ -0,0 +1,227 @@ +import { FileSystem, Path } from '@effect/platform'; +import { NodeFileSystem } from '@effect/platform-node'; +import { AnsiDoc } from '@effect/printer-ansi'; +import { Cause, Data, Effect, Array as EffectArray, Option, Stream } from 'effect'; +import type { NonEmptyReadonlyArray } from 'effect/Array'; +import type { Schema as HypergraphSchema, Mapping } from '../../mapping/Mapping.js'; +import { parseSchema } from './schema-parser.js'; + +/** + * @internal + * + * Runtime check to see if a value looks like a Mapping + */ +function isMappingLike(value: unknown): value is Mapping { + if (!value || typeof value !== 'object') return false; + return Object.values(value).every( + (entry) => + entry && + typeof entry === 'object' && + 'typeIds' in entry && + // biome-ignore lint/suspicious/noExplicitAny: parsing so type unknown + EffectArray.isArray((entry as any).typeIds), + ); +} + +export class TypesyncSchemaStreamBuilder extends Effect.Service()( + '/Hypergraph/cli/services/TypesyncSchemaStreamBuilder', + { + dependencies: [NodeFileSystem.layer], + effect: Effect.gen(function* () { + const fs = yield* FileSystem.FileSystem; + const path = yield* Path.Path; + + const schemaCandidates = (cwd = '.') => + EffectArray.make( + path.resolve(cwd, 'schema.ts'), + path.resolve(cwd, 'src/schema.ts'), + path.resolve(cwd, 'app/schema.ts'), + path.resolve(cwd, 'src/app/schema.ts'), + // @todo other possible locations? + ); + const mappingCandidates = (cwd = '.') => + EffectArray.make( + path.resolve(cwd, 'mapping.ts'), + path.resolve(cwd, 'src/mapping.ts'), + path.resolve(cwd, 'app/mapping.ts'), + path.resolve(cwd, 'src/app/mapping.ts'), + // @todo other possible locations? + ); + + const jiti = yield* Effect.tryPromise({ + async try() { + const { createJiti } = await import('jiti'); + return createJiti(import.meta.url, { moduleCache: false, tryNative: false }); + }, + catch(cause) { + return new MappingLoaderError({ cause }); + }, + }).pipe(Effect.cached); + + const loadMapping = Effect.fnUntraced(function* (mappingFilePath: string) { + return yield* Effect.tryMapPromise(jiti, { + try(instance) { + return instance.import(mappingFilePath); + }, + catch(cause) { + return cause; + }, + }).pipe( + // biome-ignore lint/suspicious/noExplicitAny: type should be import object from jiti + Effect.map((moduleExports: any) => { + // Find all exports that look like Mapping objects + const mappingCandidates = Object.entries(moduleExports).filter(([, value]) => isMappingLike(value)); + + if (mappingCandidates.length === 0) { + return {} as Mapping; + } + + if (mappingCandidates.length === 1) { + return mappingCandidates[0][1] as Mapping; + } + + // Multiple candidates - prefer common names + const preferredNames = ['mapping', 'default', 'config']; + for (const preferredName of preferredNames) { + const found = mappingCandidates.find(([name]) => name === preferredName); + if (found) { + return found[1] as Mapping; + } + } + + // If no preferred names found, use the first one + return mappingCandidates[0][1] as Mapping; + }), + Effect.mapError( + (cause) => new MappingLoaderError({ cause, message: `Failed to load mapping file ${mappingFilePath}` }), + ), + Effect.tapErrorCause((cause) => + Effect.logWarning( + AnsiDoc.cats([AnsiDoc.text('Failure loading mapping'), AnsiDoc.text(Cause.pretty(cause))]), + ), + ), + Effect.orElseSucceed(() => ({}) as Mapping), + ); + }); + + const findHypergraphSchema = Effect.fnUntraced(function* (candidates: NonEmptyReadonlyArray) { + return yield* Effect.findFirst(candidates, (_) => fs.exists(_).pipe(Effect.orElseSucceed(() => false))); + }); + + /** + * Reads the schema.ts file, and maybe reads the mapping.ts file (if exists). + * Parses the schema and from it, plus the loaded mapping, creates a Stream of the Hypergraph [Schema](../../mapping/Mapping.ts). + * This represents the state of the schema when the user hits the schema stream endpoint + * + * @param schemaFilePath path of the schema.ts file + * @param mappingFilePath [Optional] path of the mapping.ts file + * @returns A stream of [Schema](../../mapping/Mapping.ts) pared from the schema.ts file + */ + const currentSchemaStream = ( + schemaFilePath: string, + mappingFilePath: Option.Option, + ): Stream.Stream => + Stream.fromEffect( + Effect.gen(function* () { + const schema = yield* fs.readFileString(schemaFilePath); + const mapping = yield* Option.match(mappingFilePath, { + onNone: () => Effect.succeed({} as Mapping), + onSome: loadMapping, + }); + return yield* parseSchema(schema, mapping); + }), + ).pipe( + Stream.tapErrorCause((cause) => + Effect.logError( + AnsiDoc.text('Failure parsing current schema into types'), + AnsiDoc.text(Cause.pretty(cause)), + ), + ), + // if failure, don't bubble to return and just return empty schema + Stream.orElseSucceed(() => ({ types: [] }) satisfies HypergraphSchema), + ); + /** + * Reads the schema.ts file, and maybe reads the mapping.ts file (if exists). + * Parses the schema and from it, plus the loaded mapping, creates a Stream of the Hypergraph [Schema](../../mapping/Mapping.ts). + * This stream watches for changes in both the schema.ts file and (if provided) the mapping.ts file. + * This way, if the user updates either, this will emit an event on the stream of the updated schema. + * + * @param schemaFilePath path of the schema.ts file + * @param mappingFilePath [Optional] path of the mapping.ts file + * @returns A stream of [Schema](../../mapping/Mapping.ts) pared from the schema.ts file + */ + const watchSchemaStream = ( + schemaFilePath: string, + mappingFilePath: Option.Option, + ): Stream.Stream => { + const schemaWatch = fs.watch(schemaFilePath); + const mappingWatch = Option.match(mappingFilePath, { + onNone: () => Stream.empty, + onSome: (path) => fs.watch(path), + }); + + return Stream.mergeAll([schemaWatch, mappingWatch], { concurrency: 2 }).pipe( + Stream.buffer({ capacity: 1, strategy: 'sliding' }), + Stream.mapEffect(() => + Effect.gen(function* () { + const schema = yield* fs.readFileString(schemaFilePath); + const mapping = yield* Option.match(mappingFilePath, { + onNone: () => Effect.succeed({} as Mapping), + onSome: loadMapping, + }); + return yield* parseSchema(schema, mapping); + }), + ), + Stream.tapErrorCause((cause) => + Effect.logError(AnsiDoc.text('Failure parsing schema changes into types'), { cause: Cause.pretty(cause) }), + ), + // if failure, don't bubble to return and just return empty schema + Stream.orElseSucceed(() => ({ types: [] }) satisfies HypergraphSchema), + ); + }; + + const hypergraphSchemaStream = (cwd = '.') => + Effect.gen(function* () { + const schemaFileCandidates = schemaCandidates(cwd); + const schemaFile = yield* findHypergraphSchema(schemaFileCandidates).pipe( + Effect.flatMap( + Option.match({ + onSome(file) { + return Effect.succeed(Option.some(file)); + }, + onNone() { + return Effect.succeed(Option.none()); + }, + }), + ), + ); + if (Option.isNone(schemaFile)) { + yield* Effect.logWarning(AnsiDoc.text('No Hypergraph schema file found. Searched:'), schemaFileCandidates); + return Stream.empty; + } + const schemaFilePath = schemaFile.value; + + // Fetch the Mapping definition from any mapping.ts in the directory. + // If exists, use it to get the knowledgeGraphId for each type/property in the parsed schema + const mappingFilePath = yield* findHypergraphSchema(mappingCandidates(cwd)); + + return currentSchemaStream(schemaFilePath, mappingFilePath).pipe( + Stream.concat(watchSchemaStream(schemaFilePath, mappingFilePath)), + Stream.map((stream) => { + const jsonData = JSON.stringify(stream); + const sseData = `data: ${jsonData}\n\n`; + return new TextEncoder().encode(sseData); + }), + ); + }); + + return { hypergraphSchemaStream } as const; + }), + }, +) {} +export const layer = TypesyncSchemaStreamBuilder.Default; + +export class MappingLoaderError extends Data.TaggedError('/Hypergraph/cli/errors/MappingLoaderError')<{ + readonly cause: unknown; + readonly message?: string; +}> {} diff --git a/packages/hypergraph/src/cli/services/schema-parser.ts b/packages/hypergraph/src/cli/services/schema-parser.ts new file mode 100644 index 00000000..d6855508 --- /dev/null +++ b/packages/hypergraph/src/cli/services/schema-parser.ts @@ -0,0 +1,127 @@ +import { Data, Effect } from 'effect'; +import ts from 'typescript'; + +import * as Mapping from '../../mapping/Mapping.js'; +import * as Utils from '../../mapping/Utils.js'; + +/** + * Takes a parsed schema.ts file and maps it to a the Mapping.Schema type. + * + * @internal + * + * @param sourceCode the read schema.ts file + * @param mapping the parsed mappint.ts file + * @returns the parsed Schema instance + */ +export const parseSchema = ( + sourceCode: string, + mapping: Mapping.Mapping, +): Effect.Effect => + Effect.try({ + try() { + const sourceFile = ts.createSourceFile('schema.ts', sourceCode, ts.ScriptTarget.Latest, true); + + const entities: Array = []; + + const visit = (node: ts.Node) => { + if (ts.isClassDeclaration(node) && node.name) { + const className = node.name.text; + const properties: Array = []; + + // Find the Entity.Class call + if (node.heritageClauses) { + for (const clause of node.heritageClauses) { + for (const type of clause.types) { + if (ts.isCallExpression(type.expression)) { + const callExpr = type.expression; + + // Look for the object literal with properties + if (callExpr.arguments.length > 0) { + const arg = callExpr.arguments[0]; + if (ts.isObjectLiteralExpression(arg)) { + for (const prop of arg.properties) { + if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) { + const propName = prop.name.text; + let dataType: Mapping.SchemaDataType = 'Text'; + let relationType: string | undefined; + + const mappingEntry = mapping[className]; + const camelCasePropName = Utils.toCamelCase(propName); + + // Extract the type + if (ts.isPropertyAccessExpression(prop.initializer)) { + // Simple types like Type.Text + dataType = Mapping.getDataType(prop.initializer.name.text); + + // Look up the property's knowledgeGraphId from the mapping + const propKnowledgeGraphId = mappingEntry?.properties?.[camelCasePropName] || null; + + // push to type properties as primitive property + properties.push({ + name: propName, + dataType: dataType as Mapping.SchemaDataTypePrimitive, + knowledgeGraphId: propKnowledgeGraphId, + } satisfies Mapping.SchemaTypePropertyPrimitive); + } else if (ts.isCallExpression(prop.initializer)) { + // Relation types like Type.Relation(User) + const callNode = prop.initializer; + if (ts.isPropertyAccessExpression(callNode.expression)) { + const typeName = callNode.expression.name.text; + + if (typeName === 'Relation' && callNode.arguments.length > 0) { + const relationArg = callNode.arguments[0]; + if (ts.isIdentifier(relationArg)) { + relationType = relationArg.text; + dataType = `Relation(${relationType})`; + + // Look up the relation property's knowledgeGraphId from the mapping + const relKnowledgeGraphId = mappingEntry?.relations?.[camelCasePropName] || null; + + // push to type properties as relation property + properties.push({ + name: propName, + dataType, + relationType, + knowledgeGraphId: relKnowledgeGraphId, + } satisfies Mapping.SchemaTypePropertyRelation); + } + } + } + } + } + } + } + } + } + } + } + } + + // Look up the type's knowledgeGraphId from the mapping + const mappingEntry = mapping[Utils.toPascalCase(className)]; + const typeKnowledgeGraphId = mappingEntry?.typeIds?.[0] ? mappingEntry.typeIds[0] : null; + + entities.push({ name: className, knowledgeGraphId: typeKnowledgeGraphId, properties }); + } + + ts.forEachChild(node, visit); + }; + + visit(sourceFile); + + return { + types: entities, + } as const; + }, + catch(error) { + return new SchemaParserFailure({ + message: `Failed to parse schema: ${error}`, + cause: error, + }); + }, + }); + +export class SchemaParserFailure extends Data.TaggedError('/Hypergraph/cli/errors/SchemaParserFailure')<{ + readonly message: string; + readonly cause: unknown; +}> {} diff --git a/packages/hypergraph/src/cli/subcommands/typesync.ts b/packages/hypergraph/src/cli/subcommands/typesync.ts new file mode 100644 index 00000000..e3e26a18 --- /dev/null +++ b/packages/hypergraph/src/cli/subcommands/typesync.ts @@ -0,0 +1,93 @@ +import { createServer } from 'node:http'; +import { Command, Options } from '@effect/cli'; +import { + HttpApi, + HttpApiBuilder, + HttpApiEndpoint, + HttpApiError, + HttpApiGroup, + HttpApiSchema, + HttpMiddleware, + HttpServer, + HttpServerResponse, +} from '@effect/platform'; +import { NodeHttpServer } from '@effect/platform-node'; +import { AnsiDoc } from '@effect/printer-ansi'; +import { Effect, Layer, Schema } from 'effect'; +import * as Typesync from '../services/Typesync.js'; + +const hypergraphTypeSyncApi = HttpApi.make('HypergraphTypeSyncApi') + .add( + HttpApiGroup.make('SchemaStreamGroup') + .add( + // exposes an api endpoint at /api/vX/schema/events that is a stream of the current Schema parsed from the directory the hypergraph-cli tool is running in + HttpApiEndpoint.get('HypergraphSchemaEventStream')`/schema/events` + .addError(HttpApiError.InternalServerError) + .addSuccess( + Schema.String.pipe( + HttpApiSchema.withEncoding({ + kind: 'Json', + contentType: 'text/event-stream', + }), + ), + ), + ) + .prefix('/v1'), + ) + .prefix('/api'); + +const hypergraphTypeSyncApiLive = HttpApiBuilder.group(hypergraphTypeSyncApi, 'SchemaStreamGroup', (handlers) => + handlers.handle('HypergraphSchemaEventStream', () => + Effect.gen(function* () { + const schemaStream = yield* Typesync.TypesyncSchemaStreamBuilder; + + const stream = yield* schemaStream + .hypergraphSchemaStream() + .pipe(Effect.catchAll(() => new HttpApiError.InternalServerError())); + + return yield* HttpServerResponse.stream(stream, { contentType: 'text/event-stream' }).pipe( + HttpServerResponse.setHeaders({ + 'Content-Type': 'text/event-stream', + 'Cache-Control': 'no-cache', + Connection: 'keep-alive', + }), + ); + }), + ), +); + +const HypergraphTypeSyncApiLive = HttpApiBuilder.api(hypergraphTypeSyncApi).pipe( + Layer.provide(hypergraphTypeSyncApiLive), + Layer.provide(Typesync.layer), +); + +const HypergraphTypeSyncApiLayer = HttpApiBuilder.serve(HttpMiddleware.logger).pipe( + Layer.provide(HttpApiBuilder.middlewareCors()), + Layer.provide(HypergraphTypeSyncApiLive), +); + +export const typesync = Command.make('typesync', { + args: { + port: Options.integer('port').pipe( + Options.withAlias('p'), + Options.withDefault(3000), + Options.withDescription('The port to run the Hypergraph TypeSync studio server on. Default 3000'), + ), + }, +}).pipe( + Command.withDescription( + 'Opens the TypeSync studio to help users build and publish their Hypergraph application schema', + ), + Command.withHandler(({ args }) => + Effect.gen(function* () { + yield* HypergraphTypeSyncApiLayer.pipe( + HttpServer.withLogAddress, + Layer.provide(NodeHttpServer.layer(createServer, { port: args.port })), + Layer.tap(() => + Effect.logInfo(AnsiDoc.text(`🎉 TypeSync studio started and running at http://localhost:${args.port}`)), + ), + Layer.launch, + ); + }), + ), +); diff --git a/packages/hypergraph/src/mapping/Mapping.ts b/packages/hypergraph/src/mapping/Mapping.ts index eaac3f51..9af6a5a5 100644 --- a/packages/hypergraph/src/mapping/Mapping.ts +++ b/packages/hypergraph/src/mapping/Mapping.ts @@ -99,6 +99,12 @@ export const SchemaDataTypePrimitive = EffectSchema.Literal('Text', 'Number', 'C * @since 0.2.0 */ export type SchemaDataTypePrimitive = typeof SchemaDataTypePrimitive.Type; +/** + * @since 0.3.0 + */ +export function isDataTypePrimitive(val: string): val is SchemaDataTypePrimitive { + return ['Text', 'Number', 'Checkbox', 'Date', 'Point'].includes(val); +} /** * @since 0.2.0 */ @@ -107,6 +113,22 @@ export const SchemaDataType = EffectSchema.Union(SchemaDataTypePrimitive, Schema * @since 0.2.0 */ export type SchemaDataType = typeof SchemaDataType.Type; +/** + * @since 0.3.0 + */ +export function isDataType(val: string): val is SchemaDataType { + return isDataTypePrimitive(val) || isDataTypeRelation(val); +} +/** + * @since 0.3.0 + */ +export function getDataType(val: string): SchemaDataType { + const dataType = isDataTypePrimitive(val) || isDataTypeRelation(val); + if (dataType) { + return val; + } + throw new Error(`Passed dataType ${val} is not supported`); +} /** * @since 0.2.0 */ diff --git a/packages/hypergraph/test/cli/services/Typesync.test.ts b/packages/hypergraph/test/cli/services/Typesync.test.ts new file mode 100644 index 00000000..f4602f93 --- /dev/null +++ b/packages/hypergraph/test/cli/services/Typesync.test.ts @@ -0,0 +1,10 @@ +import { describe, it } from '@effect/vitest'; +import { Effect } from 'effect'; + +import { TypesyncSchemaStreamBuilder } from '../../../src/cli/services/Typesync.js'; + +describe('TypesyncSchemaStreamBuilder', () => { + it.effect('Should return a stream of the parsed Schema from the given schema.ts and mapping.ts files', ({ expect }) => + Effect.gen(function* () {}), + ); +}); diff --git a/packages/hypergraph/test/cli/services/schema-parser.test.ts b/packages/hypergraph/test/cli/services/schema-parser.test.ts new file mode 100644 index 00000000..ffb6f2e5 --- /dev/null +++ b/packages/hypergraph/test/cli/services/schema-parser.test.ts @@ -0,0 +1,238 @@ +import { describe, it } from '@effect/vitest'; +import { Id } from '@graphprotocol/grc-20'; +import type { Mapping } from '@graphprotocol/hypergraph'; +import { Effect } from 'effect'; +import { parseSchema } from '../../../src/cli/services/schema-parser.js'; + +describe('parseSchema', () => { + it.effect('should return empty types array for empty schema file', ({ expect }) => + Effect.gen(function* () { + const emptySchemaContent = ''; + const emptyMapping: Mapping.Mapping = {}; + + const result = yield* parseSchema(emptySchemaContent, emptyMapping); + + yield* Effect.sync(() => { + expect(result).toEqual({ types: [] }); + }); + }), + ); + + it.effect('should parse schema file correctly', ({ expect }) => + Effect.gen(function* () { + const schemaContent = `import { Entity, Type } from '@graphprotocol/hypergraph'; + +export class User extends Entity.Class('User')({ + name: Type.Text, +}) {} + +export class Todo extends Entity.Class('Todo')({ + name: Type.Text, + completed: Type.Checkbox, + assignees: Type.Relation(User), +}) {} + +export class Todo2 extends Entity.Class('Todo2')({ + name: Type.Text, + checked: Type.Checkbox, + assignees: Type.Relation(User), + due: Type.Date, + amount: Type.Number, + point: Type.Point, + website: Type.Text, +}) {} + +export class JobOffer extends Entity.Class('JobOffer')({ + name: Type.Text, + salary: Type.Number, +}) {} + +export class Company extends Entity.Class('Company')({ + name: Type.Text, + // address: Type.Text, + jobOffers: Type.Relation(JobOffer), +}) {} + +export class Event extends Entity.Class('Event')({ + name: Type.Text, + // description: Type.Text, + sponsors: Type.Relation(Company), +}) {}`; + + const emptyMapping: Mapping.Mapping = {}; + const result = yield* parseSchema(schemaContent, emptyMapping); + + yield* Effect.sync(() => { + expect(result.types).toHaveLength(6); + + // Check User entity + const userEntity = result.types.find((t) => t.name === 'User'); + expect(userEntity).toBeDefined(); + expect(userEntity?.properties).toHaveLength(1); + expect(userEntity?.properties[0]).toMatchObject({ + name: 'name', + dataType: 'Text', + knowledgeGraphId: null, + }); + + // Check Todo entity + const todoEntity = result.types.find((t) => t.name === 'Todo'); + expect(todoEntity).toBeDefined(); + expect(todoEntity?.properties).toHaveLength(3); + expect(todoEntity?.properties[0]).toMatchObject({ + name: 'name', + dataType: 'Text', + knowledgeGraphId: null, + }); + expect(todoEntity?.properties[1]).toMatchObject({ + name: 'completed', + dataType: 'Checkbox', + knowledgeGraphId: null, + }); + expect(todoEntity?.properties[2]).toMatchObject({ + name: 'assignees', + dataType: 'Relation(User)', + relationType: 'User', + knowledgeGraphId: null, + }); + + // Check Todo2 entity with various types + const todo2Entity = result.types.find((t) => t.name === 'Todo2'); + expect(todo2Entity).toBeDefined(); + expect(todo2Entity?.properties).toHaveLength(7); + expect(todo2Entity?.properties[3]).toMatchObject({ + name: 'due', + dataType: 'Date', + knowledgeGraphId: null, + }); + expect(todo2Entity?.properties[4]).toMatchObject({ + name: 'amount', + dataType: 'Number', + knowledgeGraphId: null, + }); + expect(todo2Entity?.properties[5]).toMatchObject({ + name: 'point', + dataType: 'Point', + knowledgeGraphId: null, + }); + + // Check Company entity with relation + const companyEntity = result.types.find((t) => t.name === 'Company'); + expect(companyEntity).toBeDefined(); + expect(companyEntity?.properties).toHaveLength(2); + expect(companyEntity?.properties[1]).toMatchObject({ + name: 'jobOffers', + dataType: 'Relation(JobOffer)', + relationType: 'JobOffer', + knowledgeGraphId: null, + }); + }); + }), + ); + + it.effect('should parse schema file with mapping and resolve knowledgeGraphIds', ({ expect }) => + Effect.gen(function* () { + const schemaContent = `import { Entity, Type } from '@graphprotocol/hypergraph'; + +export class Event extends Entity.Class('Event')({ + name: Type.Text, + sponsors: Type.Relation(Company), +}) {} + +export class Company extends Entity.Class('Company')({ + name: Type.Text, + jobOffers: Type.Relation(JobOffer), +}) {} + +export class JobOffer extends Entity.Class('JobOffer')({ + name: Type.Text, + salary: Type.Number, +}) {}`; + + // Use mapping from events app + const mapping: Mapping.Mapping = { + Event: { + typeIds: [Id.Id('7f9562d4-034d-4385-bf5c-f02cdebba47a')], + properties: { + name: Id.Id('a126ca53-0c8e-48d5-b888-82c734c38935'), + }, + relations: { + sponsors: Id.Id('6860bfac-f703-4289-b789-972d0aaf3abe'), + }, + }, + Company: { + typeIds: [Id.Id('6c504df5-1a8f-43d1-bf2d-1ef9fa5b08b5')], + properties: { + name: Id.Id('a126ca53-0c8e-48d5-b888-82c734c38935'), + }, + relations: { + jobOffers: Id.Id('1203064e-9741-4235-89d4-97f4b22eddfb'), + }, + }, + JobOffer: { + typeIds: [Id.Id('f60585af-71b6-4674-9a26-b74ca6c1cceb')], + properties: { + name: Id.Id('a126ca53-0c8e-48d5-b888-82c734c38935'), + salary: Id.Id('baa36ac9-78ac-4cf7-8394-6b2d3006bebe'), + }, + }, + }; + + const result = yield* parseSchema(schemaContent, mapping); + + yield* Effect.sync(() => { + expect(result.types).toHaveLength(3); + + // Check Event entity with resolved IDs + const eventEntity = result.types.find((t) => t.name === 'Event'); + expect(eventEntity).toBeDefined(); + expect(eventEntity?.knowledgeGraphId).toBe('7f9562d4-034d-4385-bf5c-f02cdebba47a'); + expect(eventEntity?.properties).toHaveLength(2); + expect(eventEntity?.properties[0]).toMatchObject({ + name: 'name', + dataType: 'Text', + knowledgeGraphId: 'a126ca53-0c8e-48d5-b888-82c734c38935', + }); + expect(eventEntity?.properties[1]).toMatchObject({ + name: 'sponsors', + dataType: 'Relation(Company)', + relationType: 'Company', + knowledgeGraphId: '6860bfac-f703-4289-b789-972d0aaf3abe', + }); + + // Check Company entity with resolved IDs + const companyEntity = result.types.find((t) => t.name === 'Company'); + expect(companyEntity).toBeDefined(); + expect(companyEntity?.knowledgeGraphId).toBe('6c504df5-1a8f-43d1-bf2d-1ef9fa5b08b5'); + expect(companyEntity?.properties).toHaveLength(2); + expect(companyEntity?.properties[0]).toMatchObject({ + name: 'name', + dataType: 'Text', + knowledgeGraphId: 'a126ca53-0c8e-48d5-b888-82c734c38935', + }); + expect(companyEntity?.properties[1]).toMatchObject({ + name: 'jobOffers', + dataType: 'Relation(JobOffer)', + relationType: 'JobOffer', + knowledgeGraphId: '1203064e-9741-4235-89d4-97f4b22eddfb', + }); + + // Check JobOffer entity with resolved IDs + const jobOfferEntity = result.types.find((t) => t.name === 'JobOffer'); + expect(jobOfferEntity).toBeDefined(); + expect(jobOfferEntity?.knowledgeGraphId).toBe('f60585af-71b6-4674-9a26-b74ca6c1cceb'); + expect(jobOfferEntity?.properties).toHaveLength(2); + expect(jobOfferEntity?.properties[0]).toMatchObject({ + name: 'name', + dataType: 'Text', + knowledgeGraphId: 'a126ca53-0c8e-48d5-b888-82c734c38935', + }); + expect(jobOfferEntity?.properties[1]).toMatchObject({ + name: 'salary', + dataType: 'Number', + knowledgeGraphId: 'baa36ac9-78ac-4cf7-8394-6b2d3006bebe', + }); + }); + }), + ); +}); diff --git a/packages/hypergraph/tsconfig.build.json b/packages/hypergraph/tsconfig.build.json index c5a49a5d..fc59560f 100644 --- a/packages/hypergraph/tsconfig.build.json +++ b/packages/hypergraph/tsconfig.build.json @@ -1,8 +1,5 @@ { "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 56a5e1c2..7f5f0b29 100644 --- a/packages/hypergraph/tsconfig.src.json +++ b/packages/hypergraph/tsconfig.src.json @@ -1,11 +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" + "rootDir": "src", + "types": ["node"] } } diff --git a/packages/hypergraph/tsconfig.test.json b/packages/hypergraph/tsconfig.test.json index 52deb555..5c81d806 100644 --- a/packages/hypergraph/tsconfig.test.json +++ b/packages/hypergraph/tsconfig.test.json @@ -3,7 +3,6 @@ "include": ["test"], "references": [ { "path": "./tsconfig.src.json" }, - { "path": "../typesync/tsconfig.src.json" } ], "compilerOptions": { "tsBuildInfoFile": ".tsbuildinfo/test.tsbuildinfo", diff --git a/packages/typesync/package.json b/packages/typesync/package.json index 11d27ed1..369da982 100644 --- a/packages/typesync/package.json +++ b/packages/typesync/package.json @@ -43,6 +43,6 @@ }, "dependencies": { "@graphprotocol/grc-20": "^0.21.6", - "effect": "^3.17.1" + "effect": "^3.17.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f6f5f8de..8f39647d 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.1.0)(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.1.0)(jiti@2.5.1)(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: @@ -72,8 +72,8 @@ importers: specifier: ^2.1.1 version: 2.1.1 effect: - specifier: ^3.17.1 - version: 3.17.1 + specifier: ^3.17.3 + version: 3.17.3 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) @@ -97,14 +97,14 @@ importers: version: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) vite: specifier: ^6.3.5 - version: 6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + version: 6.3.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) devDependencies: '@tailwindcss/vite': specifier: ^4.1.10 - version: 4.1.10(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.1.10(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@tanstack/router-plugin': specifier: ^1.120.2 - version: 1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) + version: 1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) '@types/node': specifier: ^24.1.0 version: 24.1.0 @@ -116,7 +116,7 @@ importers: version: 19.1.3(@types/react@19.1.3) '@vitejs/plugin-react': specifier: ^4.4.1 - version: 4.4.1(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.4.1(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) prettier: specifier: ^3.6.0 version: 3.6.1 @@ -128,40 +128,40 @@ importers: version: 4.1.10 unplugin-fonts: specifier: ^1.3.1 - version: 1.3.1(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 1.3.1(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) vite-plugin-node-polyfills: specifier: ^0.23.0 - version: 0.23.0(rollup@4.45.0)(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 0.23.0(rollup@4.45.0)(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) vite-plugin-svgr: specifier: ^4.3.0 - version: 4.3.0(rollup@4.45.0)(typescript@5.8.3)(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.3.0(rollup@4.45.0)(typescript@5.8.3)(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) apps/create-hypergraph: devDependencies: '@effect/cli': specifier: ^0.69.0 - version: 0.69.0(@effect/platform@0.90.0(effect@3.17.1))(@effect/printer-ansi@0.45.0(@effect/typeclass@0.31.10(effect@3.17.1))(effect@3.17.1))(@effect/printer@0.45.0(@effect/typeclass@0.31.10(effect@3.17.1))(effect@3.17.1))(effect@3.17.1) + version: 0.69.0(@effect/platform@0.90.0(effect@3.17.3))(@effect/printer-ansi@0.45.0(@effect/typeclass@0.31.10(effect@3.17.3))(effect@3.17.3))(@effect/printer@0.45.0(@effect/typeclass@0.31.10(effect@3.17.3))(effect@3.17.3))(effect@3.17.3) '@effect/language-service': - specifier: ^0.28.3 - version: 0.28.3 + specifier: ^0.31.2 + version: 0.31.2 '@effect/platform': specifier: ^0.90.0 - version: 0.90.0(effect@3.17.1) + version: 0.90.0(effect@3.17.3) '@effect/platform-node': specifier: ^0.94.0 - version: 0.94.0(@effect/cluster@0.37.2(@effect/platform@0.90.0(effect@3.17.1))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/sql@0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/workflow@0.1.2(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/sql@0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(bufferutil@4.0.9)(effect@3.17.1)(utf-8-validate@5.0.10) + version: 0.94.0(@effect/cluster@0.37.2(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/workflow@0.1.2(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(bufferutil@4.0.9)(effect@3.17.3)(utf-8-validate@5.0.10) '@effect/printer-ansi': specifier: ^0.45.0 - version: 0.45.0(@effect/typeclass@0.31.10(effect@3.17.1))(effect@3.17.1) + version: 0.45.0(@effect/typeclass@0.31.10(effect@3.17.3))(effect@3.17.3) '@effect/vitest': specifier: ^0.25.0 - version: 0.25.0(effect@3.17.1)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(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: 0.25.0(effect@3.17.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(jiti@2.5.1)(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)) '@types/node': specifier: ^24.1.0 version: 24.1.0 effect: - specifier: ^3.17.1 - version: 3.17.1 + specifier: ^3.17.3 + version: 3.17.3 execa: specifier: ^9.6.0 version: 9.6.0 @@ -173,6 +173,8 @@ importers: version: 4.20.3 publishDirectory: dist + apps/create-hypergraph/dist: {} + apps/create-hypergraph/template-nextjs: dependencies: '@graphprotocol/grc-20': @@ -238,10 +240,10 @@ importers: version: 19.1.6(@types/react@19.1.8) eslint: specifier: ^9 - version: 9.31.0(jiti@2.4.2) + version: 9.31.0(jiti@2.5.1) eslint-config-next: specifier: 15.4.3 - version: 15.4.3(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + version: 15.4.3(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3) prettier: specifier: ^3.6.2 version: 3.6.2 @@ -274,7 +276,7 @@ importers: version: 1.2.7(@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.5(@types/node@24.1.0)(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.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@tanstack/react-query': specifier: ^5.83.0 version: 5.83.0(react@19.1.0) @@ -288,8 +290,8 @@ importers: specifier: ^2.1.1 version: 2.1.1 effect: - specifier: ^3.17.1 - version: 3.17.1 + specifier: ^3.17.3 + version: 3.17.3 lucide-react: specifier: ^0.525.0 version: 0.525.0(react@19.1.0) @@ -307,14 +309,14 @@ importers: version: 4.1.11 vite: specifier: ^7.0.5 - version: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + version: 7.0.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) devDependencies: '@eslint/js': specifier: ^9.31.0 version: 9.31.0 '@tanstack/router-plugin': specifier: ^1.129.2 - version: 1.129.5(@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) + version: 1.129.5(@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) '@types/node': specifier: ^24.1.0 version: 24.1.0 @@ -326,16 +328,16 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.7.0 - version: 4.7.0(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.7.0(vite@7.0.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) eslint: specifier: ^9.31.0 - version: 9.31.0(jiti@2.4.2) + version: 9.31.0(jiti@2.5.1) eslint-plugin-react-hooks: specifier: ^5.2.0 - version: 5.2.0(eslint@9.31.0(jiti@2.4.2)) + version: 5.2.0(eslint@9.31.0(jiti@2.5.1)) eslint-plugin-react-refresh: specifier: ^0.4.20 - version: 0.4.20(eslint@9.31.0(jiti@2.4.2)) + version: 0.4.20(eslint@9.31.0(jiti@2.5.1)) globals: specifier: ^16.3.0 version: 16.3.0 @@ -350,7 +352,7 @@ importers: version: 5.8.3 typescript-eslint: specifier: ^8.38.0 - version: 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + version: 8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3) apps/events: dependencies: @@ -394,8 +396,8 @@ importers: specifier: ^2.1.1 version: 2.1.1 effect: - specifier: ^3.17.1 - version: 3.17.1 + specifier: ^3.17.3 + version: 3.17.3 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) @@ -434,17 +436,17 @@ importers: version: 2.29.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) vite: specifier: ^6.3.5 - version: 6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + version: 6.3.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) devDependencies: '@biomejs/biome': specifier: 1.9.4 version: 1.9.4 '@tailwindcss/vite': specifier: ^4.1.5 - version: 4.1.5(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.1.5(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@tanstack/router-plugin': specifier: ^1.120.2 - version: 1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) + version: 1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) '@types/node': specifier: ^24.1.0 version: 24.1.0 @@ -459,7 +461,7 @@ importers: version: 10.0.0 '@vitejs/plugin-react': specifier: ^4.4.1 - version: 4.4.1(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.4.1(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) globals: specifier: ^16.1.0 version: 16.1.0 @@ -531,8 +533,8 @@ importers: specifier: ^2.8.5 version: 2.8.5 effect: - specifier: ^3.17.1 - version: 3.17.1 + specifier: ^3.17.3 + version: 3.17.3 express: specifier: ^5.1.0 version: 5.1.0 @@ -566,7 +568,7 @@ importers: version: 8.18.1 tsup: specifier: ^8.4.0 - version: 8.4.0(@swc/core@1.11.24(@swc/helpers@0.5.17))(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.7.0) + version: 8.4.0(@swc/core@1.11.24(@swc/helpers@0.5.17))(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.7.0) typescript: specifier: ^5.8.3 version: 5.8.3 @@ -596,7 +598,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.1.0)(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.1.0)(jiti@2.5.1)(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) @@ -619,8 +621,8 @@ importers: specifier: ^4.1.0 version: 4.1.0 effect: - specifier: ^3.17.1 - version: 3.17.1 + specifier: ^3.17.3 + version: 3.17.3 graphql: specifier: ^16.11.0 version: 16.11.0 @@ -648,31 +650,31 @@ importers: devDependencies: '@effect/cli': specifier: ^0.69.0 - version: 0.69.0(@effect/platform@0.90.0(effect@3.17.1))(@effect/printer-ansi@0.45.0(@effect/typeclass@0.31.10(effect@3.17.1))(effect@3.17.1))(@effect/printer@0.45.0(@effect/typeclass@0.31.10(effect@3.17.1))(effect@3.17.1))(effect@3.17.1) + version: 0.69.0(@effect/platform@0.90.0(effect@3.17.3))(@effect/printer-ansi@0.45.0(@effect/typeclass@0.31.10(effect@3.17.3))(effect@3.17.3))(@effect/printer@0.45.0(@effect/typeclass@0.31.10(effect@3.17.3))(effect@3.17.3))(effect@3.17.3) '@effect/experimental': - specifier: ^0.54.0 - version: 0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1) + specifier: ^0.54.2 + version: 0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3) '@effect/language-service': - specifier: ^0.28.3 - version: 0.28.3 + specifier: ^0.31.2 + version: 0.31.2 '@effect/platform': specifier: ^0.90.0 - version: 0.90.0(effect@3.17.1) + version: 0.90.0(effect@3.17.3) '@effect/platform-node': specifier: ^0.94.0 - version: 0.94.0(@effect/cluster@0.37.2(@effect/platform@0.90.0(effect@3.17.1))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/sql@0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/workflow@0.1.2(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/sql@0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(bufferutil@4.0.9)(effect@3.17.1)(utf-8-validate@5.0.10) + version: 0.94.0(@effect/cluster@0.37.2(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/workflow@0.1.2(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(bufferutil@4.0.9)(effect@3.17.3)(utf-8-validate@5.0.10) '@effect/printer': specifier: ^0.45.0 - version: 0.45.0(@effect/typeclass@0.31.10(effect@3.17.1))(effect@3.17.1) + version: 0.45.0(@effect/typeclass@0.31.10(effect@3.17.3))(effect@3.17.3) '@effect/sql': specifier: ^0.44.0 - version: 0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1) + version: 0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3) '@effect/sql-sqlite-node': specifier: ^0.45.0 - version: 0.45.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(@effect/sql@0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(effect@3.17.1) + version: 0.45.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(effect@3.17.3) '@effect/vitest': specifier: ^0.25.0 - version: 0.25.0(effect@3.17.1)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(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: 0.25.0(effect@3.17.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(jiti@2.5.1)(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.1.0)(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) @@ -687,7 +689,7 @@ importers: 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.129.5 - version: 1.129.5(@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.4(@types/node@24.1.0)(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)) + version: 1.129.5(@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.4(@types/node@24.1.0)(jiti@2.5.1)(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.1.0 version: 24.1.0 @@ -699,7 +701,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.1.0)(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.1.0)(jiti@2.5.1)(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 @@ -708,13 +710,13 @@ importers: version: 6.0.1 tsup: specifier: ^8.5.0 - version: 8.5.0(@swc/core@1.11.24(@swc/helpers@0.5.17))(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.7.0) + version: 8.5.0(@swc/core@1.11.24(@swc/helpers@0.5.17))(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.7.0) tsx: specifier: ^4.20.3 version: 4.20.3 vite: specifier: ^7.0.4 - version: 7.0.4(@types/node@24.1.0)(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.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) publishDirectory: dist apps/typesync/dist: @@ -742,7 +744,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.5(@types/node@24.1.0)(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.5(@types/node@24.1.0)(jiti@2.5.1)(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) @@ -765,8 +767,8 @@ importers: specifier: ^4.1.0 version: 4.1.0 effect: - specifier: ^3.17.1 - version: 3.17.1 + specifier: ^3.17.3 + version: 3.17.3 graphql: specifier: ^16.11.0 version: 16.11.0 @@ -796,10 +798,10 @@ importers: dependencies: '@docusaurus/core': specifier: 3.7.0 - version: 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + version: 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/preset-classic': specifier: 3.7.0 - version: 3.7.0(@algolia/client-search@5.25.0)(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(search-insights@2.17.3)(typescript@5.8.3)(utf-8-validate@5.0.10) + version: 3.7.0(@algolia/client-search@5.25.0)(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(search-insights@2.17.3)(typescript@5.8.3)(utf-8-validate@5.0.10) '@mdx-js/react': specifier: ^3.0.0 version: 3.1.0(@types/react@19.1.8)(react@19.1.0) @@ -833,7 +835,7 @@ importers: version: 2.0.6 '@effect/experimental': specifier: ^0.51.1 - version: 0.51.1(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1) + version: 0.51.1(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3) '@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) @@ -862,8 +864,8 @@ importers: specifier: ^4.0.0 version: 4.0.0 effect: - specifier: ^3.17.1 - version: 3.17.1 + specifier: ^3.17.3 + version: 3.17.3 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)) @@ -877,9 +879,33 @@ 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: + '@effect/cli': + specifier: ^0.69.0 + version: 0.69.0(@effect/platform@0.90.0(effect@3.17.3))(@effect/printer-ansi@0.45.0(@effect/typeclass@0.31.10(effect@3.17.3))(effect@3.17.3))(@effect/printer@0.45.0(@effect/typeclass@0.31.10(effect@3.17.3))(effect@3.17.3))(effect@3.17.3) + '@effect/platform': + specifier: ^0.90.0 + version: 0.90.0(effect@3.17.3) + '@effect/platform-node': + specifier: ^0.94.0 + version: 0.94.0(@effect/cluster@0.37.2(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.51.1(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/workflow@0.1.2(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.51.1(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(bufferutil@4.0.9)(effect@3.17.3)(utf-8-validate@5.0.10) + '@effect/printer-ansi': + specifier: ^0.45.0 + version: 0.45.0(@effect/typeclass@0.31.10(effect@3.17.3))(effect@3.17.3) + '@effect/vitest': + specifier: ^0.25.0 + version: 0.25.0(effect@3.17.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(jiti@2.5.1)(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)) + '@types/node': + specifier: ^24.1.0 + version: 24.1.0 '@types/uuid': specifier: ^10.0.0 version: 10.0.0 + jiti: + specifier: ^2.5.1 + version: 2.5.1 + typescript: + specifier: ^5.8.3 + version: 5.8.3 publishDirectory: publish packages/hypergraph-react: @@ -903,8 +929,8 @@ importers: specifier: ^5.75.5 version: 5.75.5(react@19.1.0) effect: - specifier: ^3.17.1 - version: 3.17.1 + specifier: ^3.17.3 + version: 3.17.3 graphql-request: specifier: ^7.1.2 version: 7.1.2(graphql@16.11.0) @@ -932,7 +958,7 @@ importers: version: 19.1.3 '@vitejs/plugin-react': specifier: ^4.4.1 - version: 4.4.1(vite@7.0.5(@types/node@24.1.0)(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.5(@types/node@24.1.0)(jiti@2.5.1)(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) @@ -950,8 +976,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.17.1 - version: 3.17.1 + specifier: ^3.17.3 + version: 3.17.3 publishDirectory: publish packages: @@ -2610,11 +2636,11 @@ packages: lmdb: optional: true - '@effect/experimental@0.54.0': - resolution: {integrity: sha512-9XkKzfHpcGSLCVKGqC6lHNG/O1seBHNWtOW6bssJbYw8slvZ7giPNyW+iQHL2GhWsSDPFANvIu9K32iBdE7AGA==} + '@effect/experimental@0.54.2': + resolution: {integrity: sha512-edHopTBPXQdgyuR4ytRmyoPq7Ubt6CS4TymiXpyd6lu3kxlK7K78/eTMju9hRfJbiSDFVy8S5C2dW8CH9i66Rg==} peerDependencies: '@effect/platform': ^0.90.0 - effect: ^3.17.0 + effect: ^3.17.3 ioredis: ^5 lmdb: ^3 peerDependenciesMeta: @@ -2623,8 +2649,8 @@ packages: lmdb: optional: true - '@effect/language-service@0.28.3': - resolution: {integrity: sha512-C7feKBiRkvH7zy9mO67P1lRkdI/brXdv9FF0Jc0JYz7q/Sytgz2c1aqelid9fodh0ee+PTO5bd3OaCpIDu/7qA==} + '@effect/language-service@0.31.2': + resolution: {integrity: sha512-OuFjNT9CiKwW6yTrkBeUoO6Qrl/thLk7x4oYU73MD9kXUEMwQJQ7eCr+nZj74axofLHGJpsyrxvSzGN75pEk1Q==} hasBin: true '@effect/platform-node-shared@0.47.0': @@ -7914,8 +7940,8 @@ packages: effect@3.16.12: resolution: {integrity: sha512-N39iBk0K71F9nb442TLbTkjl24FLUzuvx2i1I2RsEAQsdAdUTuUoW0vlfUXgkMTUOnYqKnWcFfqw4hK4Pw27hg==} - effect@3.17.1: - resolution: {integrity: sha512-t917ks10FGNf7MpwOxHUg6vo42p0XsdMHuBMVpy4NttPu5gIv8/ah5MgbHLVQJ2kmDvZfQUT1/xyCa1IR09u2Q==} + effect@3.17.3: + resolution: {integrity: sha512-FbFMr6xBXPII5Od8QJnkHz+2GTmQgq+8NPQev6C2k9cf1lcUjQ4vpw1kjbMc2X0UkjIkIWe0EtNK2RV6bl34UQ==} electron-to-chromium@1.5.152: resolution: {integrity: sha512-xBOfg/EBaIlVsHipHl2VdTPJRSvErNUaqW8ejTq5OlOlIYx1wOllCHsAvAIrr55jD1IYEfdR86miUEt8H5IeJg==} @@ -9481,8 +9507,8 @@ packages: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true - jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + jiti@2.5.1: + resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} hasBin: true joi@17.13.3: @@ -15691,7 +15717,7 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/bundler@3.7.0(acorn@8.15.0)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@docusaurus/bundler@3.7.0(acorn@8.15.0)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': dependencies: '@babel/core': 7.28.0 '@docusaurus/babel': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -15712,7 +15738,7 @@ snapshots: postcss: 8.5.6 postcss-loader: 7.3.4(postcss@8.5.6)(typescript@5.8.3)(webpack@5.99.8) postcss-preset-env: 10.1.6(postcss@8.5.6) - react-dev-utils: 12.0.1(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)(webpack@5.99.8) + react-dev-utils: 12.0.1(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)(webpack@5.99.8) terser-webpack-plugin: 5.3.14(webpack@5.99.8) tslib: 2.8.1 url-loader: 4.1.1(file-loader@6.2.0(webpack@5.99.8))(webpack@5.99.8) @@ -15736,10 +15762,10 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@docusaurus/babel': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@docusaurus/bundler': 3.7.0(acorn@8.15.0)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + '@docusaurus/bundler': 3.7.0(acorn@8.15.0)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) '@docusaurus/logger': 3.7.0 '@docusaurus/mdx-loader': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -15766,7 +15792,7 @@ snapshots: p-map: 4.0.0 prompts: 2.4.2 react: 19.1.0 - react-dev-utils: 12.0.1(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)(webpack@5.99.8) + react-dev-utils: 12.0.1(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)(webpack@5.99.8) react-dom: 19.1.0(react@19.1.0) react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)' react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.1.0)' @@ -15870,13 +15896,13 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/plugin-content-blog@3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-content-blog@3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/logger': 3.7.0 '@docusaurus/mdx-loader': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils-common': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -15914,13 +15940,13 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/logger': 3.7.0 '@docusaurus/mdx-loader': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/module-type-aliases': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils-common': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -15956,9 +15982,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-pages@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-content-pages@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/mdx-loader': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -15989,9 +16015,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-debug@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-debug@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) fs-extra: 11.3.0 @@ -16020,9 +16046,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-analytics@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-google-analytics@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils-validation': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 @@ -16049,9 +16075,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-gtag@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-google-gtag@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils-validation': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@types/gtag.js': 0.0.12 @@ -16079,9 +16105,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-tag-manager@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-google-tag-manager@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils-validation': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 @@ -16108,9 +16134,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-sitemap@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-sitemap@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/logger': 3.7.0 '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -16142,9 +16168,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-svgr@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-svgr@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils-validation': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -16175,21 +16201,21 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/preset-classic@3.7.0(@algolia/client-search@5.25.0)(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(search-insights@2.17.3)(typescript@5.8.3)(utf-8-validate@5.0.10)': - dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-content-blog': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-content-pages': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-debug': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-google-analytics': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-google-gtag': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-google-tag-manager': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-sitemap': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-svgr': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/theme-classic': 3.7.0(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@docusaurus/theme-search-algolia': 3.7.0(@algolia/client-search@5.25.0)(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(search-insights@2.17.3)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/preset-classic@3.7.0(@algolia/client-search@5.25.0)(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(search-insights@2.17.3)(typescript@5.8.3)(utf-8-validate@5.0.10)': + dependencies: + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-content-blog': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-content-pages': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-debug': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-google-analytics': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-google-gtag': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-google-tag-manager': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-sitemap': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-svgr': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/theme-classic': 3.7.0(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@docusaurus/theme-search-algolia': 3.7.0(@algolia/client-search@5.25.0)(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(search-insights@2.17.3)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -16222,16 +16248,16 @@ snapshots: '@types/react': 19.1.8 react: 19.1.0 - '@docusaurus/theme-classic@3.7.0(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/theme-classic@3.7.0(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/logger': 3.7.0 '@docusaurus/mdx-loader': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/module-type-aliases': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@docusaurus/plugin-content-blog': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-content-pages': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@docusaurus/plugin-content-blog': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-content-pages': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/theme-translations': 3.7.0 '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -16273,11 +16299,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/theme-common@3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@docusaurus/theme-common@3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@docusaurus/mdx-loader': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/module-type-aliases': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils-common': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@types/history': 4.7.11 @@ -16298,13 +16324,13 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/theme-search-algolia@3.7.0(@algolia/client-search@5.25.0)(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(search-insights@2.17.3)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/theme-search-algolia@3.7.0(@algolia/client-search@5.25.0)(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(search-insights@2.17.3)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@docsearch/react': 3.9.0(@algolia/client-search@5.25.0)(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(search-insights@2.17.3) - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/logger': 3.7.0 - '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/theme-translations': 3.7.0 '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils-validation': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -16434,60 +16460,97 @@ snapshots: - uglify-js - webpack-cli - '@effect/cli@0.69.0(@effect/platform@0.90.0(effect@3.17.1))(@effect/printer-ansi@0.45.0(@effect/typeclass@0.31.10(effect@3.17.1))(effect@3.17.1))(@effect/printer@0.45.0(@effect/typeclass@0.31.10(effect@3.17.1))(effect@3.17.1))(effect@3.17.1)': + '@effect/cli@0.69.0(@effect/platform@0.90.0(effect@3.17.3))(@effect/printer-ansi@0.45.0(@effect/typeclass@0.31.10(effect@3.17.3))(effect@3.17.3))(@effect/printer@0.45.0(@effect/typeclass@0.31.10(effect@3.17.3))(effect@3.17.3))(effect@3.17.3)': dependencies: - '@effect/platform': 0.90.0(effect@3.17.1) - '@effect/printer': 0.45.0(@effect/typeclass@0.31.10(effect@3.17.1))(effect@3.17.1) - '@effect/printer-ansi': 0.45.0(@effect/typeclass@0.31.10(effect@3.17.1))(effect@3.17.1) - effect: 3.17.1 + '@effect/platform': 0.90.0(effect@3.17.3) + '@effect/printer': 0.45.0(@effect/typeclass@0.31.10(effect@3.17.3))(effect@3.17.3) + '@effect/printer-ansi': 0.45.0(@effect/typeclass@0.31.10(effect@3.17.3))(effect@3.17.3) + effect: 3.17.3 ini: 4.1.3 toml: 3.0.0 yaml: 2.7.0 - '@effect/cluster@0.37.2(@effect/platform@0.90.0(effect@3.17.1))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/sql@0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/workflow@0.1.2(effect@3.17.1))(effect@3.17.1)': + '@effect/cluster@0.37.2(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.51.1(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/workflow@0.1.2(effect@3.17.3))(effect@3.17.3)': + dependencies: + '@effect/platform': 0.90.0(effect@3.17.3) + '@effect/rpc': 0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3) + '@effect/sql': 0.44.0(@effect/experimental@0.51.1(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3) + '@effect/workflow': 0.1.2(effect@3.17.3) + effect: 3.17.3 + + '@effect/cluster@0.37.2(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/workflow@0.1.2(effect@3.17.3))(effect@3.17.3)': dependencies: - '@effect/platform': 0.90.0(effect@3.17.1) - '@effect/rpc': 0.61.4(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1) - '@effect/sql': 0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1) - '@effect/workflow': 0.1.2(effect@3.17.1) - effect: 3.17.1 + '@effect/platform': 0.90.0(effect@3.17.3) + '@effect/rpc': 0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3) + '@effect/sql': 0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3) + '@effect/workflow': 0.1.2(effect@3.17.3) + effect: 3.17.3 - '@effect/experimental@0.51.1(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1)': + '@effect/experimental@0.51.1(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3)': dependencies: - '@effect/platform': 0.90.0(effect@3.17.1) - effect: 3.17.1 + '@effect/platform': 0.90.0(effect@3.17.3) + effect: 3.17.3 uuid: 11.1.0 - '@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1)': + '@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3)': dependencies: - '@effect/platform': 0.90.0(effect@3.17.1) - effect: 3.17.1 + '@effect/platform': 0.90.0(effect@3.17.3) + effect: 3.17.3 uuid: 11.1.0 - '@effect/language-service@0.28.3': {} + '@effect/language-service@0.31.2': {} - '@effect/platform-node-shared@0.47.0(@effect/cluster@0.37.2(@effect/platform@0.90.0(effect@3.17.1))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/sql@0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/workflow@0.1.2(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/sql@0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(bufferutil@4.0.9)(effect@3.17.1)(utf-8-validate@5.0.10)': + '@effect/platform-node-shared@0.47.0(@effect/cluster@0.37.2(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.51.1(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/workflow@0.1.2(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.51.1(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(bufferutil@4.0.9)(effect@3.17.3)(utf-8-validate@5.0.10)': dependencies: - '@effect/cluster': 0.37.2(@effect/platform@0.90.0(effect@3.17.1))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/sql@0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/workflow@0.1.2(effect@3.17.1))(effect@3.17.1) - '@effect/platform': 0.90.0(effect@3.17.1) - '@effect/rpc': 0.61.4(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1) - '@effect/sql': 0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1) + '@effect/cluster': 0.37.2(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.51.1(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/workflow@0.1.2(effect@3.17.3))(effect@3.17.3) + '@effect/platform': 0.90.0(effect@3.17.3) + '@effect/rpc': 0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3) + '@effect/sql': 0.44.0(@effect/experimental@0.51.1(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3) '@parcel/watcher': 2.5.1 - effect: 3.17.1 + effect: 3.17.3 multipasta: 0.2.7 ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate - '@effect/platform-node@0.94.0(@effect/cluster@0.37.2(@effect/platform@0.90.0(effect@3.17.1))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/sql@0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/workflow@0.1.2(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/sql@0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(bufferutil@4.0.9)(effect@3.17.1)(utf-8-validate@5.0.10)': + '@effect/platform-node-shared@0.47.0(@effect/cluster@0.37.2(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/workflow@0.1.2(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(bufferutil@4.0.9)(effect@3.17.3)(utf-8-validate@5.0.10)': dependencies: - '@effect/cluster': 0.37.2(@effect/platform@0.90.0(effect@3.17.1))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/sql@0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/workflow@0.1.2(effect@3.17.1))(effect@3.17.1) - '@effect/platform': 0.90.0(effect@3.17.1) - '@effect/platform-node-shared': 0.47.0(@effect/cluster@0.37.2(@effect/platform@0.90.0(effect@3.17.1))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/sql@0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/workflow@0.1.2(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/sql@0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(bufferutil@4.0.9)(effect@3.17.1)(utf-8-validate@5.0.10) - '@effect/rpc': 0.61.4(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1) - '@effect/sql': 0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1) - effect: 3.17.1 + '@effect/cluster': 0.37.2(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/workflow@0.1.2(effect@3.17.3))(effect@3.17.3) + '@effect/platform': 0.90.0(effect@3.17.3) + '@effect/rpc': 0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3) + '@effect/sql': 0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3) + '@parcel/watcher': 2.5.1 + effect: 3.17.3 + multipasta: 0.2.7 + ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@effect/platform-node@0.94.0(@effect/cluster@0.37.2(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.51.1(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/workflow@0.1.2(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.51.1(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(bufferutil@4.0.9)(effect@3.17.3)(utf-8-validate@5.0.10)': + dependencies: + '@effect/cluster': 0.37.2(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.51.1(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/workflow@0.1.2(effect@3.17.3))(effect@3.17.3) + '@effect/platform': 0.90.0(effect@3.17.3) + '@effect/platform-node-shared': 0.47.0(@effect/cluster@0.37.2(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.51.1(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/workflow@0.1.2(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.51.1(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(bufferutil@4.0.9)(effect@3.17.3)(utf-8-validate@5.0.10) + '@effect/rpc': 0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3) + '@effect/sql': 0.44.0(@effect/experimental@0.51.1(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3) + effect: 3.17.3 + mime: 3.0.0 + undici: 7.10.0 + ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@effect/platform-node@0.94.0(@effect/cluster@0.37.2(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/workflow@0.1.2(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(bufferutil@4.0.9)(effect@3.17.3)(utf-8-validate@5.0.10)': + dependencies: + '@effect/cluster': 0.37.2(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/workflow@0.1.2(effect@3.17.3))(effect@3.17.3) + '@effect/platform': 0.90.0(effect@3.17.3) + '@effect/platform-node-shared': 0.47.0(@effect/cluster@0.37.2(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/workflow@0.1.2(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(bufferutil@4.0.9)(effect@3.17.3)(utf-8-validate@5.0.10) + '@effect/rpc': 0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3) + '@effect/sql': 0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3) + effect: 3.17.3 mime: 3.0.0 undici: 7.10.0 ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -16495,59 +16558,67 @@ snapshots: - bufferutil - utf-8-validate - '@effect/platform@0.90.0(effect@3.17.1)': + '@effect/platform@0.90.0(effect@3.17.3)': dependencies: '@opentelemetry/semantic-conventions': 1.34.0 - effect: 3.17.1 + effect: 3.17.3 find-my-way-ts: 0.1.6 msgpackr: 1.11.4 multipasta: 0.2.7 - '@effect/printer-ansi@0.45.0(@effect/typeclass@0.31.10(effect@3.17.1))(effect@3.17.1)': + '@effect/printer-ansi@0.45.0(@effect/typeclass@0.31.10(effect@3.17.3))(effect@3.17.3)': dependencies: - '@effect/printer': 0.45.0(@effect/typeclass@0.31.10(effect@3.17.1))(effect@3.17.1) - '@effect/typeclass': 0.31.10(effect@3.17.1) - effect: 3.17.1 + '@effect/printer': 0.45.0(@effect/typeclass@0.31.10(effect@3.17.3))(effect@3.17.3) + '@effect/typeclass': 0.31.10(effect@3.17.3) + effect: 3.17.3 - '@effect/printer@0.45.0(@effect/typeclass@0.31.10(effect@3.17.1))(effect@3.17.1)': + '@effect/printer@0.45.0(@effect/typeclass@0.31.10(effect@3.17.3))(effect@3.17.3)': dependencies: - '@effect/typeclass': 0.31.10(effect@3.17.1) - effect: 3.17.1 + '@effect/typeclass': 0.31.10(effect@3.17.3) + effect: 3.17.3 - '@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1)': + '@effect/rpc@0.61.4(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3)': dependencies: - '@effect/platform': 0.90.0(effect@3.17.1) - effect: 3.17.1 + '@effect/platform': 0.90.0(effect@3.17.3) + effect: 3.17.3 - '@effect/sql-sqlite-node@0.45.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(@effect/sql@0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(effect@3.17.1)': + '@effect/sql-sqlite-node@0.45.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(@effect/sql@0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(effect@3.17.3)': dependencies: - '@effect/experimental': 0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1) - '@effect/platform': 0.90.0(effect@3.17.1) - '@effect/sql': 0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1) + '@effect/experimental': 0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3) + '@effect/platform': 0.90.0(effect@3.17.3) + '@effect/sql': 0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3) '@opentelemetry/semantic-conventions': 1.34.0 better-sqlite3: 11.10.0 - effect: 3.17.1 + effect: 3.17.3 + + '@effect/sql@0.44.0(@effect/experimental@0.51.1(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3)': + dependencies: + '@effect/experimental': 0.51.1(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3) + '@effect/platform': 0.90.0(effect@3.17.3) + '@opentelemetry/semantic-conventions': 1.34.0 + effect: 3.17.3 + uuid: 11.1.0 - '@effect/sql@0.44.0(@effect/experimental@0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1))(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1)': + '@effect/sql@0.44.0(@effect/experimental@0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3))(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3)': dependencies: - '@effect/experimental': 0.54.0(@effect/platform@0.90.0(effect@3.17.1))(effect@3.17.1) - '@effect/platform': 0.90.0(effect@3.17.1) + '@effect/experimental': 0.54.2(@effect/platform@0.90.0(effect@3.17.3))(effect@3.17.3) + '@effect/platform': 0.90.0(effect@3.17.3) '@opentelemetry/semantic-conventions': 1.34.0 - effect: 3.17.1 + effect: 3.17.3 uuid: 11.1.0 - '@effect/typeclass@0.31.10(effect@3.17.1)': + '@effect/typeclass@0.31.10(effect@3.17.3)': dependencies: - effect: 3.17.1 + effect: 3.17.3 - '@effect/vitest@0.25.0(effect@3.17.1)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(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.25.0(effect@3.17.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(jiti@2.5.1)(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.17.1 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(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.17.3 + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(jiti@2.5.1)(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.17.1)': + '@effect/workflow@0.1.2(effect@3.17.3)': dependencies: - effect: 3.17.1 + effect: 3.17.3 '@emnapi/core@1.4.5': dependencies: @@ -16726,9 +16797,9 @@ snapshots: '@esbuild/win32-x64@0.25.2': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.31.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.7.0(eslint@9.31.0(jiti@2.5.1))': dependencies: - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.31.0(jiti@2.5.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -17108,7 +17179,7 @@ snapshots: '@graphprotocol/typesync@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)': dependencies: '@graphprotocol/grc-20': 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: 3.17.1 + effect: 3.17.3 transitivePeerDependencies: - bufferutil - graphql @@ -19784,7 +19855,7 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 enhanced-resolve: 5.18.1 - jiti: 2.4.2 + jiti: 2.5.1 lightningcss: 1.30.1 magic-string: 0.30.17 source-map-js: 1.2.1 @@ -19794,7 +19865,7 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 enhanced-resolve: 5.18.1 - jiti: 2.4.2 + jiti: 2.5.1 lightningcss: 1.30.1 magic-string: 0.30.17 source-map-js: 1.2.1 @@ -19803,7 +19874,7 @@ snapshots: '@tailwindcss/node@4.1.5': dependencies: enhanced-resolve: 5.18.1 - jiti: 2.4.2 + jiti: 2.5.1 lightningcss: 1.29.2 tailwindcss: 4.1.5 @@ -19974,33 +20045,33 @@ snapshots: postcss: 8.5.6 tailwindcss: 4.1.11 - '@tailwindcss/vite@4.1.10(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@tailwindcss/vite@4.1.10(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@tailwindcss/node': 4.1.10 '@tailwindcss/oxide': 4.1.10 tailwindcss: 4.1.10 - vite: 6.3.5(@types/node@24.1.0)(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.1.0)(jiti@2.5.1)(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.1.0)(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.1.0)(jiti@2.5.1)(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.1.0)(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.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) - '@tailwindcss/vite@4.1.11(vite@7.0.5(@types/node@24.1.0)(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.5(@types/node@24.1.0)(jiti@2.5.1)(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.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 7.0.5(@types/node@24.1.0)(jiti@2.5.1)(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@24.1.0)(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@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@tailwindcss/node': 4.1.5 '@tailwindcss/oxide': 4.1.5 tailwindcss: 4.1.5 - vite: 6.3.5(@types/node@24.1.0)(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.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) '@tanstack/form-core@1.14.0': dependencies: @@ -20182,7 +20253,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8)': + '@tanstack/router-plugin@1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8)': dependencies: '@babel/core': 7.28.0 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.28.0) @@ -20203,12 +20274,12 @@ snapshots: zod: 3.24.2 optionalDependencies: '@tanstack/react-router': 1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.5(@types/node@24.1.0)(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.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) webpack: 5.99.8 transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.129.5(@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.4(@types/node@24.1.0)(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.129.5(@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.4(@types/node@24.1.0)(jiti@2.5.1)(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) @@ -20226,12 +20297,12 @@ snapshots: zod: 3.25.51 optionalDependencies: '@tanstack/react-router': 1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 7.0.4(@types/node@24.1.0)(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.1.0)(jiti@2.5.1)(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 - '@tanstack/router-plugin@1.129.5(@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8)': + '@tanstack/router-plugin@1.129.5(@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8)': dependencies: '@babel/core': 7.28.0 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) @@ -20249,7 +20320,7 @@ snapshots: zod: 3.25.51 optionalDependencies: '@tanstack/react-router': 1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 7.0.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) webpack: 5.99.8 transitivePeerDependencies: - supports-color @@ -20597,15 +20668,15 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3) '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.38.0 - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.31.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -20614,14 +20685,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.31.0(jiti@2.5.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -20644,13 +20715,13 @@ snapshots: dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 8.38.0 '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3) debug: 4.4.1 - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.31.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -20674,13 +20745,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.5.1)) '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.31.0(jiti@2.5.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -20751,29 +20822,29 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.28.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.28.0) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.3.5(@types/node@24.1.0)(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.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.4.1(vite@7.0.5(@types/node@24.1.0)(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.5(@types/node@24.1.0)(jiti@2.5.1)(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.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 7.0.5(@types/node@24.1.0)(jiti@2.5.1)(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.1.0)(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.1.0)(jiti@2.5.1)(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) @@ -20781,11 +20852,11 @@ 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.1.0)(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.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.7.0(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@vitejs/plugin-react@4.7.0(vite@7.0.5(@types/node@24.1.0)(jiti@2.5.1)(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) @@ -20793,7 +20864,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 7.0.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -20805,13 +20876,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@24.1.0)(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.1.0)(jiti@2.5.1)(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.1.0)(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.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) '@vitest/pretty-format@3.2.4': dependencies: @@ -23108,7 +23179,7 @@ snapshots: '@standard-schema/spec': 1.0.0 fast-check: 3.23.2 - effect@3.17.1: + effect@3.17.3: dependencies: '@standard-schema/spec': 1.0.0 fast-check: 3.23.2 @@ -23353,19 +23424,19 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-config-next@15.4.3(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3): + eslint-config-next@15.4.3(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3): dependencies: '@next/eslint-plugin-next': 15.4.3 '@rushstack/eslint-patch': 1.12.0 - '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.31.0(jiti@2.4.2) + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3) + eslint: 9.31.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@2.4.2)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.4.2)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.31.0(jiti@2.4.2)) - eslint-plugin-react: 7.37.5(eslint@9.31.0(jiti@2.4.2)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.31.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@2.5.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.5.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.31.0(jiti@2.5.1)) + eslint-plugin-react: 7.37.5(eslint@9.31.0(jiti@2.5.1)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.31.0(jiti@2.5.1)) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -23381,33 +23452,33 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@2.4.2)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@2.5.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1 - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.31.0(jiti@2.5.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.14 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.4.2)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.4.2)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.5.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.31.0(jiti@2.4.2) + '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3) + eslint: 9.31.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.4.2)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.5.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -23416,9 +23487,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.31.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.4.2)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.5.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -23430,13 +23501,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.10.2(eslint@9.31.0(jiti@2.4.2)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.31.0(jiti@2.5.1)): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -23446,7 +23517,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.31.0(jiti@2.5.1) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -23455,15 +23526,15 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-react-hooks@5.2.0(eslint@9.31.0(jiti@2.4.2)): + eslint-plugin-react-hooks@5.2.0(eslint@9.31.0(jiti@2.5.1)): dependencies: - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.31.0(jiti@2.5.1) - eslint-plugin-react-refresh@0.4.20(eslint@9.31.0(jiti@2.4.2)): + eslint-plugin-react-refresh@0.4.20(eslint@9.31.0(jiti@2.5.1)): dependencies: - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.31.0(jiti@2.5.1) - eslint-plugin-react@7.37.5(eslint@9.31.0(jiti@2.4.2)): + eslint-plugin-react@7.37.5(eslint@9.31.0(jiti@2.5.1)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -23471,7 +23542,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.31.0(jiti@2.5.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -23499,9 +23570,9 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.31.0(jiti@2.4.2): + eslint@9.31.0(jiti@2.5.1): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.0 @@ -23537,7 +23608,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.4.2 + jiti: 2.5.1 transitivePeerDependencies: - supports-color @@ -24005,7 +24076,7 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@6.5.3(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)(webpack@5.99.8): + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)(webpack@5.99.8): dependencies: '@babel/code-frame': 7.27.1 '@types/json-schema': 7.0.15 @@ -24023,7 +24094,7 @@ snapshots: typescript: 5.8.3 webpack: 5.99.8 optionalDependencies: - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.31.0(jiti@2.5.1) form-data-encoder@2.1.4: {} @@ -24264,7 +24335,7 @@ snapshots: '@graphql-tools/utils': 10.8.6(graphql@16.11.0) cosmiconfig: 8.3.6(typescript@5.8.3) graphql: 16.11.0 - jiti: 2.4.2 + jiti: 2.5.1 minimatch: 9.0.5 string-env-interpolation: 1.0.1 tslib: 2.8.1 @@ -25087,7 +25158,7 @@ snapshots: jiti@1.21.7: {} - jiti@2.4.2: {} + jiti@2.5.1: {} joi@17.13.3: dependencies: @@ -27002,11 +27073,11 @@ snapshots: '@csstools/utilities': 2.0.0(postcss@8.5.6) postcss: 8.5.6 - postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.7.0): + postcss-load-config@6.0.1(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.7.0): dependencies: lilconfig: 3.1.3 optionalDependencies: - jiti: 2.4.2 + jiti: 2.5.1 postcss: 8.5.6 tsx: 4.20.3 yaml: 2.7.0 @@ -27553,7 +27624,7 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-dev-utils@12.0.1(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)(webpack@5.99.8): + react-dev-utils@12.0.1(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)(webpack@5.99.8): dependencies: '@babel/code-frame': 7.27.1 address: 1.2.2 @@ -27564,7 +27635,7 @@ snapshots: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)(webpack@5.99.8) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3)(webpack@5.99.8) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -29133,7 +29204,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.4.0(@swc/core@1.11.24(@swc/helpers@0.5.17))(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.7.0): + tsup@8.4.0(@swc/core@1.11.24(@swc/helpers@0.5.17))(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.7.0): dependencies: bundle-require: 5.1.0(esbuild@0.25.2) cac: 6.7.14 @@ -29143,7 +29214,7 @@ snapshots: esbuild: 0.25.2 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.7.0) + postcss-load-config: 6.0.1(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.7.0) resolve-from: 5.0.0 rollup: 4.39.0 source-map: 0.8.0-beta.0 @@ -29161,7 +29232,7 @@ snapshots: - tsx - yaml - tsup@8.5.0(@swc/core@1.11.24(@swc/helpers@0.5.17))(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.7.0): + tsup@8.5.0(@swc/core@1.11.24(@swc/helpers@0.5.17))(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.7.0): dependencies: bundle-require: 5.1.0(esbuild@0.25.2) cac: 6.7.14 @@ -29172,7 +29243,7 @@ snapshots: fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.7.0) + postcss-load-config: 6.0.1(jiti@2.5.1)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.7.0) resolve-from: 5.0.0 rollup: 4.39.0 source-map: 0.8.0-beta.0 @@ -29271,13 +29342,13 @@ snapshots: dependencies: is-typedarray: 1.0.0 - typescript-eslint@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3): + typescript-eslint@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3) '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.31.0(jiti@2.4.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.5.1))(typescript@5.8.3) + eslint: 9.31.0(jiti@2.5.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -29305,7 +29376,7 @@ snapshots: dependencies: '@quansync/fs': 0.1.3 defu: 6.1.4 - jiti: 2.4.2 + jiti: 2.5.1 quansync: 0.2.10 uncrypto@0.1.3: {} @@ -29396,11 +29467,11 @@ snapshots: unpipe@1.0.0: {} - unplugin-fonts@1.3.1(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)): + unplugin-fonts@1.3.1(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)): dependencies: fast-glob: 3.3.3 unplugin: 2.0.0-beta.1 - vite: 6.3.5(@types/node@24.1.0)(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.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) unplugin@2.0.0-beta.1: dependencies: @@ -29683,13 +29754,13 @@ snapshots: - utf-8-validate - zod - vite-node@3.2.4(@types/node@24.1.0)(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.1.0)(jiti@2.5.1)(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: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 7.0.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -29704,26 +29775,26 @@ snapshots: - tsx - yaml - vite-plugin-node-polyfills@0.23.0(rollup@4.45.0)(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)): + vite-plugin-node-polyfills@0.23.0(rollup@4.45.0)(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)): dependencies: '@rollup/plugin-inject': 5.0.5(rollup@4.45.0) node-stdlib-browser: 1.3.1 - vite: 6.3.5(@types/node@24.1.0)(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.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - rollup - vite-plugin-svgr@4.3.0(rollup@4.45.0)(typescript@5.8.3)(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)): + vite-plugin-svgr@4.3.0(rollup@4.45.0)(typescript@5.8.3)(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)): dependencies: '@rollup/pluginutils': 5.2.0(rollup@4.45.0) '@svgr/core': 8.1.0(typescript@5.8.3) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.8.3)) - vite: 6.3.5(@types/node@24.1.0)(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.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - rollup - supports-color - typescript - vite@6.3.5(@types/node@24.1.0)(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.1.0)(jiti@2.5.1)(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) @@ -29734,13 +29805,13 @@ snapshots: optionalDependencies: '@types/node': 24.1.0 fsevents: 2.3.3 - jiti: 2.4.2 + jiti: 2.5.1 lightningcss: 1.30.1 terser: 5.39.1 tsx: 4.20.3 yaml: 2.7.0 - vite@7.0.4(@types/node@24.1.0)(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.1.0)(jiti@2.5.1)(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) @@ -29751,13 +29822,13 @@ snapshots: optionalDependencies: '@types/node': 24.1.0 fsevents: 2.3.3 - jiti: 2.4.2 + jiti: 2.5.1 lightningcss: 1.30.1 terser: 5.39.1 tsx: 4.20.3 yaml: 2.7.0 - vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): + vite@7.0.5(@types/node@24.1.0)(jiti@2.5.1)(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) @@ -29768,17 +29839,17 @@ snapshots: optionalDependencies: '@types/node': 24.1.0 fsevents: 2.3.3 - jiti: 2.4.2 + jiti: 2.5.1 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.1.0)(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.1.0)(jiti@2.5.1)(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.1.0)(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.1.0)(jiti@2.5.1)(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 @@ -29796,8 +29867,8 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@24.1.0)(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.1.0)(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.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite-node: 3.2.4(@types/node@24.1.0)(jiti@2.5.1)(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 From b55dbc403b4c4a29303c6d48dcc948602a1cea1a Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Wed, 30 Jul 2025 12:31:15 -1000 Subject: [PATCH 2/3] feat(typesync v2 | cli): buildout cli tool to read and parse a Hypergraph schema/mapping and emit on stream --- packages/hypergraph/src/cli/Cli.ts | 2 +- .../hypergraph/src/cli/services/Typesync.ts | 45 +--- .../services/{schema-parser.ts => Utils.ts} | 64 ++++- packages/hypergraph/src/mapping/Mapping.ts | 20 +- .../test/cli/services/Typesync.test.ts | 10 - .../{schema-parser.test.ts => Utils.test.ts} | 238 ++++++++++++++++-- pnpm-lock.yaml | 16 +- scripts/package.mjs | 8 +- 8 files changed, 299 insertions(+), 104 deletions(-) rename packages/hypergraph/src/cli/services/{schema-parser.ts => Utils.ts} (72%) delete mode 100644 packages/hypergraph/test/cli/services/Typesync.test.ts rename packages/hypergraph/test/cli/services/{schema-parser.test.ts => Utils.test.ts} (54%) diff --git a/packages/hypergraph/src/cli/Cli.ts b/packages/hypergraph/src/cli/Cli.ts index a4a0e136..6ba0cdeb 100644 --- a/packages/hypergraph/src/cli/Cli.ts +++ b/packages/hypergraph/src/cli/Cli.ts @@ -11,5 +11,5 @@ const hypergraph = Command.make('hypergraph').pipe( export const run = Command.run(hypergraph, { name: 'hypergraph', - version: '0.0.1', + version: '0.3.0', }); diff --git a/packages/hypergraph/src/cli/services/Typesync.ts b/packages/hypergraph/src/cli/services/Typesync.ts index f5777b38..1d72a365 100644 --- a/packages/hypergraph/src/cli/services/Typesync.ts +++ b/packages/hypergraph/src/cli/services/Typesync.ts @@ -4,24 +4,7 @@ import { AnsiDoc } from '@effect/printer-ansi'; import { Cause, Data, Effect, Array as EffectArray, Option, Stream } from 'effect'; import type { NonEmptyReadonlyArray } from 'effect/Array'; import type { Schema as HypergraphSchema, Mapping } from '../../mapping/Mapping.js'; -import { parseSchema } from './schema-parser.js'; - -/** - * @internal - * - * Runtime check to see if a value looks like a Mapping - */ -function isMappingLike(value: unknown): value is Mapping { - if (!value || typeof value !== 'object') return false; - return Object.values(value).every( - (entry) => - entry && - typeof entry === 'object' && - 'typeIds' in entry && - // biome-ignore lint/suspicious/noExplicitAny: parsing so type unknown - EffectArray.isArray((entry as any).typeIds), - ); -} +import { parseHypergraphMapping, parseSchema } from './Utils.js'; export class TypesyncSchemaStreamBuilder extends Effect.Service()( '/Hypergraph/cli/services/TypesyncSchemaStreamBuilder', @@ -67,31 +50,7 @@ export class TypesyncSchemaStreamBuilder extends Effect.Service { - // Find all exports that look like Mapping objects - const mappingCandidates = Object.entries(moduleExports).filter(([, value]) => isMappingLike(value)); - - if (mappingCandidates.length === 0) { - return {} as Mapping; - } - - if (mappingCandidates.length === 1) { - return mappingCandidates[0][1] as Mapping; - } - - // Multiple candidates - prefer common names - const preferredNames = ['mapping', 'default', 'config']; - for (const preferredName of preferredNames) { - const found = mappingCandidates.find(([name]) => name === preferredName); - if (found) { - return found[1] as Mapping; - } - } - - // If no preferred names found, use the first one - return mappingCandidates[0][1] as Mapping; - }), + Effect.map(parseHypergraphMapping), Effect.mapError( (cause) => new MappingLoaderError({ cause, message: `Failed to load mapping file ${mappingFilePath}` }), ), diff --git a/packages/hypergraph/src/cli/services/schema-parser.ts b/packages/hypergraph/src/cli/services/Utils.ts similarity index 72% rename from packages/hypergraph/src/cli/services/schema-parser.ts rename to packages/hypergraph/src/cli/services/Utils.ts index d6855508..f0a794a5 100644 --- a/packages/hypergraph/src/cli/services/schema-parser.ts +++ b/packages/hypergraph/src/cli/services/Utils.ts @@ -1,4 +1,4 @@ -import { Data, Effect } from 'effect'; +import { Data, Effect, Array as EffectArray } from 'effect'; import ts from 'typescript'; import * as Mapping from '../../mapping/Mapping.js'; @@ -42,7 +42,7 @@ export const parseSchema = ( for (const prop of arg.properties) { if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) { const propName = prop.name.text; - let dataType: Mapping.SchemaDataType = 'Text'; + let dataType: Mapping.SchemaDataType = 'String'; let relationType: string | undefined; const mappingEntry = mapping[className]; @@ -125,3 +125,63 @@ export class SchemaParserFailure extends Data.TaggedError('/Hypergraph/cli/error readonly message: string; readonly cause: unknown; }> {} + +/** + * @internal + * + * Runtime check to see if a value looks like a Mapping + */ +function isMappingLike(value: unknown): value is Mapping.Mapping { + if (!value || typeof value !== 'object') return false; + return Object.values(value).every( + (entry) => + entry && + typeof entry === 'object' && + 'typeIds' in entry && + // biome-ignore lint/suspicious/noExplicitAny: parsing so type unknown + EffectArray.isArray((entry as any).typeIds), + ); +} + +/** + * @internal + * + * Look at the exported object from the mapping.ts file loaded via jiti and try to pull out the hypergraph mapping. + * Default should be: + * ```typescript + * export const mapping: Mapping + * ``` + * But this is not guaranteed. This function looks through the file to try to find it using some logical defaults/checks. + * + * @param moduleExport the object imported from jiti from the mapping.ts file + */ +// biome-ignore lint/suspicious/noExplicitAny: type should be import object from jiti +export function parseHypergraphMapping(moduleExport: any): Mapping.Mapping { + // Handle null/undefined inputs + if (!moduleExport || typeof moduleExport !== 'object') { + return {} as Mapping.Mapping; + } + + // Find all exports that look like Mapping objects + const mappingCandidates = Object.entries(moduleExport).filter(([, value]) => isMappingLike(value)); + + if (mappingCandidates.length === 0) { + return {} as Mapping.Mapping; + } + + if (mappingCandidates.length === 1) { + return mappingCandidates[0][1] as Mapping.Mapping; + } + + // Multiple candidates - prefer common names + const preferredNames = ['mapping', 'default', 'config']; + for (const preferredName of preferredNames) { + const found = mappingCandidates.find(([name]) => name === preferredName); + if (found) { + return found[1] as Mapping.Mapping; + } + } + + // If no preferred names found, use the first one + return mappingCandidates[0][1] as Mapping.Mapping; +} diff --git a/packages/hypergraph/src/mapping/Mapping.ts b/packages/hypergraph/src/mapping/Mapping.ts index 8735d5fc..88f74922 100644 --- a/packages/hypergraph/src/mapping/Mapping.ts +++ b/packages/hypergraph/src/mapping/Mapping.ts @@ -100,10 +100,10 @@ export const SchemaDataTypePrimitive = EffectSchema.Literal('String', 'Number', */ export type SchemaDataTypePrimitive = typeof SchemaDataTypePrimitive.Type; /** - * @since 0.3.0 + * @since 0.4.0 */ export function isDataTypePrimitive(val: string): val is SchemaDataTypePrimitive { - return ['Text', 'Number', 'Checkbox', 'Date', 'Point'].includes(val); + return ['String', 'Number', 'Boolean', 'Date', 'Point'].includes(val); } /** * @since 0.2.0 @@ -114,13 +114,13 @@ export const SchemaDataType = EffectSchema.Union(SchemaDataTypePrimitive, Schema */ export type SchemaDataType = typeof SchemaDataType.Type; /** - * @since 0.3.0 + * @since 0.4.0 */ export function isDataType(val: string): val is SchemaDataType { return isDataTypePrimitive(val) || isDataTypeRelation(val); } /** - * @since 0.3.0 + * @since 0.4.0 */ export function getDataType(val: string): SchemaDataType { const dataType = isDataTypePrimitive(val) || isDataTypeRelation(val); @@ -260,7 +260,7 @@ export const SchemaUnknownDecoder = EffectSchema.decodeUnknownSync(Schema); * properties: [ * { * name: "username", - * dataType: "Text", + * dataType: "String", * knowledgeGraphId: null * } * ] @@ -519,7 +519,7 @@ function processType(type: SchemaType, typeIdMap: TypeIdMapping): ProcessedType * properties: [ * { * name: "username", - * dataType: "Text", + * dataType: "String", * knowledgeGraphId: "994edcff-6996-4a77-9797-a13e5e3efad8" * }, * { @@ -535,12 +535,12 @@ function processType(type: SchemaType, typeIdMap: TypeIdMapping): ProcessedType * properties: [ * { * name: "name", - * dataType: "Text", + * dataType: "String", * knowledgeGraphId: "3808e060-fb4a-4d08-8069-35b8c8a1902b" * }, * { * name: "description", - * dataType: "Text", + * dataType: "String", * knowledgeGraphId: null * }, * { @@ -580,7 +580,7 @@ function processType(type: SchemaType, typeIdMap: TypeIdMapping): ProcessedType * type: "CREATE_PROPERTY", * property: { * id: Id.Id("8cd7d9ac-a878-4287-8000-e71e6f853117"), - * dataType: "TEXT" + * dataType: "String" * } * }, * // Graph.createProperty Op for Event.description property @@ -588,7 +588,7 @@ function processType(type: SchemaType, typeIdMap: TypeIdMapping): ProcessedType * type: "CREATE_PROPERTY", * property: { * id: Id.Id("8fc4e17c-7581-4d6c-a712-943385afc7b5"), - * dataType: "TEXT" + * dataType: "String" * } * }, * // Graph.createProperty Op for Event.speaker property diff --git a/packages/hypergraph/test/cli/services/Typesync.test.ts b/packages/hypergraph/test/cli/services/Typesync.test.ts deleted file mode 100644 index f4602f93..00000000 --- a/packages/hypergraph/test/cli/services/Typesync.test.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { describe, it } from '@effect/vitest'; -import { Effect } from 'effect'; - -import { TypesyncSchemaStreamBuilder } from '../../../src/cli/services/Typesync.js'; - -describe('TypesyncSchemaStreamBuilder', () => { - it.effect('Should return a stream of the parsed Schema from the given schema.ts and mapping.ts files', ({ expect }) => - Effect.gen(function* () {}), - ); -}); diff --git a/packages/hypergraph/test/cli/services/schema-parser.test.ts b/packages/hypergraph/test/cli/services/Utils.test.ts similarity index 54% rename from packages/hypergraph/test/cli/services/schema-parser.test.ts rename to packages/hypergraph/test/cli/services/Utils.test.ts index ffb6f2e5..be65951f 100644 --- a/packages/hypergraph/test/cli/services/schema-parser.test.ts +++ b/packages/hypergraph/test/cli/services/Utils.test.ts @@ -1,14 +1,14 @@ import { describe, it } from '@effect/vitest'; import { Id } from '@graphprotocol/grc-20'; -import type { Mapping } from '@graphprotocol/hypergraph'; import { Effect } from 'effect'; -import { parseSchema } from '../../../src/cli/services/schema-parser.js'; +import { parseHypergraphMapping, parseSchema } from '../../../src/cli/services/Utils.js'; +import type { Mapping } from '../../../src/mapping/Mapping.js'; describe('parseSchema', () => { it.effect('should return empty types array for empty schema file', ({ expect }) => Effect.gen(function* () { const emptySchemaContent = ''; - const emptyMapping: Mapping.Mapping = {}; + const emptyMapping: Mapping = {}; const result = yield* parseSchema(emptySchemaContent, emptyMapping); @@ -23,43 +23,43 @@ describe('parseSchema', () => { const schemaContent = `import { Entity, Type } from '@graphprotocol/hypergraph'; export class User extends Entity.Class('User')({ - name: Type.Text, + name: Type.String, }) {} export class Todo extends Entity.Class('Todo')({ - name: Type.Text, - completed: Type.Checkbox, + name: Type.String, + completed: Type.Boolean, assignees: Type.Relation(User), }) {} export class Todo2 extends Entity.Class('Todo2')({ - name: Type.Text, - checked: Type.Checkbox, + name: Type.String, + checked: Type.Boolean, assignees: Type.Relation(User), due: Type.Date, amount: Type.Number, point: Type.Point, - website: Type.Text, + website: Type.String, }) {} export class JobOffer extends Entity.Class('JobOffer')({ - name: Type.Text, + name: Type.String, salary: Type.Number, }) {} export class Company extends Entity.Class('Company')({ - name: Type.Text, - // address: Type.Text, + name: Type.String, + // address: Type.String, jobOffers: Type.Relation(JobOffer), }) {} export class Event extends Entity.Class('Event')({ - name: Type.Text, - // description: Type.Text, + name: Type.String, + // description: Type.String, sponsors: Type.Relation(Company), }) {}`; - const emptyMapping: Mapping.Mapping = {}; + const emptyMapping: Mapping = {}; const result = yield* parseSchema(schemaContent, emptyMapping); yield* Effect.sync(() => { @@ -71,7 +71,7 @@ export class Event extends Entity.Class('Event')({ expect(userEntity?.properties).toHaveLength(1); expect(userEntity?.properties[0]).toMatchObject({ name: 'name', - dataType: 'Text', + dataType: 'String', knowledgeGraphId: null, }); @@ -81,12 +81,12 @@ export class Event extends Entity.Class('Event')({ expect(todoEntity?.properties).toHaveLength(3); expect(todoEntity?.properties[0]).toMatchObject({ name: 'name', - dataType: 'Text', + dataType: 'String', knowledgeGraphId: null, }); expect(todoEntity?.properties[1]).toMatchObject({ name: 'completed', - dataType: 'Checkbox', + dataType: 'Boolean', knowledgeGraphId: null, }); expect(todoEntity?.properties[2]).toMatchObject({ @@ -135,22 +135,22 @@ export class Event extends Entity.Class('Event')({ const schemaContent = `import { Entity, Type } from '@graphprotocol/hypergraph'; export class Event extends Entity.Class('Event')({ - name: Type.Text, + name: Type.String, sponsors: Type.Relation(Company), }) {} export class Company extends Entity.Class('Company')({ - name: Type.Text, + name: Type.String, jobOffers: Type.Relation(JobOffer), }) {} export class JobOffer extends Entity.Class('JobOffer')({ - name: Type.Text, + name: Type.String, salary: Type.Number, }) {}`; // Use mapping from events app - const mapping: Mapping.Mapping = { + const mapping: Mapping = { Event: { typeIds: [Id.Id('7f9562d4-034d-4385-bf5c-f02cdebba47a')], properties: { @@ -190,7 +190,7 @@ export class JobOffer extends Entity.Class('JobOffer')({ expect(eventEntity?.properties).toHaveLength(2); expect(eventEntity?.properties[0]).toMatchObject({ name: 'name', - dataType: 'Text', + dataType: 'String', knowledgeGraphId: 'a126ca53-0c8e-48d5-b888-82c734c38935', }); expect(eventEntity?.properties[1]).toMatchObject({ @@ -207,7 +207,7 @@ export class JobOffer extends Entity.Class('JobOffer')({ expect(companyEntity?.properties).toHaveLength(2); expect(companyEntity?.properties[0]).toMatchObject({ name: 'name', - dataType: 'Text', + dataType: 'String', knowledgeGraphId: 'a126ca53-0c8e-48d5-b888-82c734c38935', }); expect(companyEntity?.properties[1]).toMatchObject({ @@ -224,7 +224,7 @@ export class JobOffer extends Entity.Class('JobOffer')({ expect(jobOfferEntity?.properties).toHaveLength(2); expect(jobOfferEntity?.properties[0]).toMatchObject({ name: 'name', - dataType: 'Text', + dataType: 'String', knowledgeGraphId: 'a126ca53-0c8e-48d5-b888-82c734c38935', }); expect(jobOfferEntity?.properties[1]).toMatchObject({ @@ -236,3 +236,191 @@ export class JobOffer extends Entity.Class('JobOffer')({ }), ); }); + +describe('parseHypergraphMapping', () => { + it('should return empty mapping for empty module export', ({ expect }) => { + const emptyModule = {}; + const result = parseHypergraphMapping(emptyModule); + expect(result).toEqual({}); + }); + + it('should return empty mapping for null/undefined module export', ({ expect }) => { + expect(parseHypergraphMapping(null)).toEqual({}); + expect(parseHypergraphMapping(undefined)).toEqual({}); + }); + + it('should return empty mapping when no valid mapping objects found', ({ expect }) => { + const moduleExport = { + someString: 'hello', + someNumber: 42, + someArray: [1, 2, 3], + invalidObject: { foo: 'bar' }, + }; + const result = parseHypergraphMapping(moduleExport); + expect(result).toEqual({}); + }); + + it('should return the single mapping when only one valid mapping found', ({ expect }) => { + const mapping: Mapping = { + User: { + typeIds: [Id.Id('a5fd07b1-120f-46c6-b46f-387ef98396a6')], + properties: { + name: Id.Id('994edcff-6996-4a77-9797-a13e5e3efad8'), + }, + }, + }; + + const moduleExport = { + someRandomExport: mapping, + otherStuff: 'not a mapping', + }; + + const result = parseHypergraphMapping(moduleExport); + expect(result).toEqual(mapping); + }); + + it('should prefer "mapping" when multiple valid mappings exist', ({ expect }) => { + const mappingPreferred: Mapping = { + User: { + typeIds: [Id.Id('a5fd07b1-120f-46c6-b46f-387ef98396a6')], + }, + }; + + const otherMapping: Mapping = { + Post: { + typeIds: [Id.Id('b5fd07b1-120f-46c6-b46f-387ef98396a6')], + }, + }; + + const moduleExport = { + mapping: mappingPreferred, + customMapping: otherMapping, + }; + + const result = parseHypergraphMapping(moduleExport); + expect(result).toEqual(mappingPreferred); + }); + + it('should prefer "default" when multiple valid mappings exist but no "mapping"', ({ expect }) => { + const defaultMapping: Mapping = { + User: { + typeIds: [Id.Id('a5fd07b1-120f-46c6-b46f-387ef98396a6')], + }, + }; + + const otherMapping: Mapping = { + Post: { + typeIds: [Id.Id('b5fd07b1-120f-46c6-b46f-387ef98396a6')], + }, + }; + + const moduleExport = { + default: defaultMapping, + customMapping: otherMapping, + }; + + const result = parseHypergraphMapping(moduleExport); + expect(result).toEqual(defaultMapping); + }); + + it('should prefer "config" when no "mapping" or "default" exists', ({ expect }) => { + const configMapping: Mapping = { + User: { + typeIds: [Id.Id('a5fd07b1-120f-46c6-b46f-387ef98396a6')], + }, + }; + + const otherMapping: Mapping = { + Post: { + typeIds: [Id.Id('b5fd07b1-120f-46c6-b46f-387ef98396a6')], + }, + }; + + const moduleExport = { + config: configMapping, + customMapping: otherMapping, + }; + + const result = parseHypergraphMapping(moduleExport); + expect(result).toEqual(configMapping); + }); + + it('should return first mapping when multiple exist with no preferred names', ({ expect }) => { + const firstMapping: Mapping = { + User: { + typeIds: [Id.Id('a5fd07b1-120f-46c6-b46f-387ef98396a6')], + }, + }; + + const secondMapping: Mapping = { + Post: { + typeIds: [Id.Id('b5fd07b1-120f-46c6-b46f-387ef98396a6')], + }, + }; + + const moduleExport = { + customMapping1: firstMapping, + customMapping2: secondMapping, + }; + + const result = parseHypergraphMapping(moduleExport); + expect(result).toEqual(firstMapping); + }); + + it('should handle mappings with full structure including properties and relations', ({ expect }) => { + const complexMapping: Mapping = { + Event: { + typeIds: [Id.Id('7f9562d4-034d-4385-bf5c-f02cdebba47a')], + properties: { + name: Id.Id('a126ca53-0c8e-48d5-b888-82c734c38935'), + }, + relations: { + sponsors: Id.Id('6860bfac-f703-4289-b789-972d0aaf3abe'), + }, + }, + Company: { + typeIds: [Id.Id('6c504df5-1a8f-43d1-bf2d-1ef9fa5b08b5')], + properties: { + name: Id.Id('a126ca53-0c8e-48d5-b888-82c734c38935'), + }, + relations: { + jobOffers: Id.Id('1203064e-9741-4235-89d4-97f4b22eddfb'), + }, + }, + }; + + const moduleExport = { mapping: complexMapping }; + const result = parseHypergraphMapping(moduleExport); + expect(result).toEqual(complexMapping); + }); + + it('should handle mappings with empty typeIds array', ({ expect }) => { + const mappingWithEmptyTypeIds: Mapping = { + User: { + typeIds: [], + properties: { + name: Id.Id('994edcff-6996-4a77-9797-a13e5e3efad8'), + }, + }, + }; + + const moduleExport = { mapping: mappingWithEmptyTypeIds }; + const result = parseHypergraphMapping(moduleExport); + expect(result).toEqual(mappingWithEmptyTypeIds); + }); + + it('should handle edge case where typeIds exists but is not an array', ({ expect }) => { + const invalidMapping = { + User: { + typeIds: 'not-an-array', + properties: { + name: Id.Id('994edcff-6996-4a77-9797-a13e5e3efad8'), + }, + }, + }; + + const moduleExport = { mapping: invalidMapping }; + const result = parseHypergraphMapping(moduleExport); + expect(result).toEqual({}); + }); +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 695df665..bdf78b5e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -770,7 +770,7 @@ importers: specifier: ^4.1.0 version: 4.1.0 effect: - specifier: ^3.17.3 + specifier: ^3.17.1 version: 3.17.3 graphql: specifier: ^16.11.0 @@ -813,7 +813,7 @@ importers: version: 2.1.1 docusaurus-plugin-generate-llms-txt: specifier: ^0.0.1 - version: 0.0.1(@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)) + version: 0.0.1(@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)) prism-react-renderer: specifier: ^2.3.0 version: 2.4.1(react@19.1.0) @@ -7968,9 +7968,6 @@ packages: effect@3.17.3: resolution: {integrity: sha512-FbFMr6xBXPII5Od8QJnkHz+2GTmQgq+8NPQev6C2k9cf1lcUjQ4vpw1kjbMc2X0UkjIkIWe0EtNK2RV6bl34UQ==} - effect@3.17.3: - resolution: {integrity: sha512-FbFMr6xBXPII5Od8QJnkHz+2GTmQgq+8NPQev6C2k9cf1lcUjQ4vpw1kjbMc2X0UkjIkIWe0EtNK2RV6bl34UQ==} - electron-to-chromium@1.5.152: resolution: {integrity: sha512-xBOfg/EBaIlVsHipHl2VdTPJRSvErNUaqW8ejTq5OlOlIYx1wOllCHsAvAIrr55jD1IYEfdR86miUEt8H5IeJg==} @@ -23144,9 +23141,9 @@ snapshots: dependencies: esutils: 2.0.3 - docusaurus-plugin-generate-llms-txt@0.0.1(@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)): + docusaurus-plugin-generate-llms-txt@0.0.1(@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)): dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.5.1))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) js-yaml: 4.1.0 dom-accessibility-api@0.5.16: {} @@ -23242,11 +23239,6 @@ snapshots: '@standard-schema/spec': 1.0.0 fast-check: 3.23.2 - effect@3.17.3: - dependencies: - '@standard-schema/spec': 1.0.0 - fast-check: 3.23.2 - electron-to-chromium@1.5.152: {} electron-to-chromium@1.5.52: {} diff --git a/scripts/package.mjs b/scripts/package.mjs index fe74c046..3474df71 100644 --- a/scripts/package.mjs +++ b/scripts/package.mjs @@ -23,6 +23,12 @@ const peerDependencies = pkgJson.peerDependencies; if (peerDependencies?.['@graphprotocol/hypergraph']) { peerDependencies['@graphprotocol/hypergraph'] = '*'; } +let bin = null; +if (pkgJson.publishConfig?.bin) { + bin = pkgJson.publishConfig.bin; +} else if (pkgJson.bin) { + bin = pkgJson.bin; +} const publishPkgJson = { name: pkgJson.name, version: pkgJson.version, @@ -39,7 +45,7 @@ const publishPkgJson = { exports: pkgJson.exports, peerDependencies: pkgJson.peerDependencies, dependencies: pkgJson.dependencies, - ...(pkgJson.bin ? { bin: pkgJson.bin } : {}), + ...(bin ? { bin } : {}), publishConfig: { provenance: false, }, From 56fbfaa580ce62980b5b924ac8fe1ce6ac46ffe0 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Thu, 31 Jul 2025 07:43:01 -1000 Subject: [PATCH 3/3] feat(typesync v2 | cli): return empty Schema if no schema.ts found --- .../hypergraph/src/cli/services/Typesync.ts | 51 ++++++++++--------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/packages/hypergraph/src/cli/services/Typesync.ts b/packages/hypergraph/src/cli/services/Typesync.ts index 1d72a365..55be0a5e 100644 --- a/packages/hypergraph/src/cli/services/Typesync.ts +++ b/packages/hypergraph/src/cli/services/Typesync.ts @@ -14,6 +14,8 @@ export class TypesyncSchemaStreamBuilder extends Effect.Service EffectArray.make( path.resolve(cwd, 'schema.ts'), @@ -77,12 +79,15 @@ export class TypesyncSchemaStreamBuilder extends Effect.Service, mappingFilePath: Option.Option, ): Stream.Stream => Stream.fromEffect( Effect.gen(function* () { - const schema = yield* fs.readFileString(schemaFilePath); + const schema = yield* Option.match(schemaFilePath, { + onNone: () => Effect.succeed(''), + onSome: fs.readFileString, + }); const mapping = yield* Option.match(mappingFilePath, { onNone: () => Effect.succeed({} as Mapping), onSome: loadMapping, @@ -110,20 +115,27 @@ export class TypesyncSchemaStreamBuilder extends Effect.Service, mappingFilePath: Option.Option, ): Stream.Stream => { - const schemaWatch = fs.watch(schemaFilePath); + const schemaWatch = Option.match(schemaFilePath, { + // @todo watch the root here so if a schema is created, it will get picked up + onNone: () => Stream.empty, + onSome: fs.watch, + }); const mappingWatch = Option.match(mappingFilePath, { onNone: () => Stream.empty, - onSome: (path) => fs.watch(path), + onSome: fs.watch, }); return Stream.mergeAll([schemaWatch, mappingWatch], { concurrency: 2 }).pipe( Stream.buffer({ capacity: 1, strategy: 'sliding' }), Stream.mapEffect(() => Effect.gen(function* () { - const schema = yield* fs.readFileString(schemaFilePath); + const schema = yield* Option.match(schemaFilePath, { + onNone: () => Effect.succeed(''), + onSome: fs.readFileString, + }); const mapping = yield* Option.match(mappingFilePath, { onNone: () => Effect.succeed({} as Mapping), onSome: loadMapping, @@ -142,24 +154,15 @@ export class TypesyncSchemaStreamBuilder extends Effect.Service Effect.gen(function* () { const schemaFileCandidates = schemaCandidates(cwd); - const schemaFile = yield* findHypergraphSchema(schemaFileCandidates).pipe( - Effect.flatMap( - Option.match({ - onSome(file) { - return Effect.succeed(Option.some(file)); - }, - onNone() { - return Effect.succeed(Option.none()); - }, - }), - ), - ); - if (Option.isNone(schemaFile)) { - yield* Effect.logWarning(AnsiDoc.text('No Hypergraph schema file found. Searched:'), schemaFileCandidates); - return Stream.empty; + // Fetch the Schema definition from any schema.ts in the directory. + // If exists, use it to parse the Hypergraph schema + const schemaFilePath = yield* findHypergraphSchema(schemaFileCandidates); + if (Option.isNone(schemaFilePath)) { + yield* Effect.logDebug( + AnsiDoc.text('No Hypergraph schema file found. Searched:'), + AnsiDoc.cats(schemaFileCandidates.map((candidate) => AnsiDoc.text(candidate))), + ); } - const schemaFilePath = schemaFile.value; - // Fetch the Mapping definition from any mapping.ts in the directory. // If exists, use it to get the knowledgeGraphId for each type/property in the parsed schema const mappingFilePath = yield* findHypergraphSchema(mappingCandidates(cwd)); @@ -169,7 +172,7 @@ export class TypesyncSchemaStreamBuilder extends Effect.Service { const jsonData = JSON.stringify(stream); const sseData = `data: ${jsonData}\n\n`; - return new TextEncoder().encode(sseData); + return encoder.encode(sseData); }), ); });