@@ -92,13 +90,13 @@ function XmtpLogin({ signer }: { signer: Signer }) {
let keys = loadKeys(address);
if (!keys) {
keys = await Client.getKeys(signer, {
- env: "dev",
+ env: 'dev',
});
storeKeys(address, keys);
}
- await initialize({ signer, options: { env: "dev" }, keys });
- console.log("wallet initialized");
- redirect({ to: "/space/$spaceId", params: { spaceId: "abc" } });
+ await initialize({ signer, options: { env: 'dev' }, keys });
+ console.log('wallet initialized');
+ redirect({ to: '/space/$spaceId', params: { spaceId: 'abc' } });
};
useEffect(() => {
diff --git a/apps/events/src/routes/playground.tsx b/apps/events/src/routes/playground.tsx
index 07613b95..580c3e2a 100644
--- a/apps/events/src/routes/playground.tsx
+++ b/apps/events/src/routes/playground.tsx
@@ -1,9 +1,9 @@
-import { Button } from "@/components/ui/button";
-import { createFileRoute } from "@tanstack/react-router";
-import { createIdentity, createSpace } from "graph-framework";
-import { useEffect, useState } from "react";
+import { Button } from '@/components/ui/button';
+import { createFileRoute } from '@tanstack/react-router';
+import { createIdentity, createSpace } from 'graph-framework';
+import { useEffect, useState } from 'react';
-export const Route = createFileRoute("/playground")({
+export const Route = createFileRoute('/playground')({
component: () =>
,
});
@@ -15,30 +15,30 @@ const Playground = () => {
setWebsocketConnection(websocketConnection);
const onMessage = (event: MessageEvent) => {
- console.log("message received", event.data);
+ console.log('message received', event.data);
};
- websocketConnection.addEventListener("message", onMessage);
+ websocketConnection.addEventListener('message', onMessage);
const onOpen = () => {
- console.log("websocket connected");
+ console.log('websocket connected');
};
- websocketConnection.addEventListener("open", onOpen);
+ websocketConnection.addEventListener('open', onOpen);
const onError = (event: Event) => {
- console.log("websocket error", event);
+ console.log('websocket error', event);
};
- websocketConnection.addEventListener("error", onError);
+ websocketConnection.addEventListener('error', onError);
const onClose = (event: CloseEvent) => {
- console.log("websocket close", event);
+ console.log('websocket close', event);
};
- websocketConnection.addEventListener("close", onClose);
+ websocketConnection.addEventListener('close', onClose);
return () => {
- websocketConnection.removeEventListener("message", onMessage);
- websocketConnection.removeEventListener("open", onOpen);
- websocketConnection.removeEventListener("error", onError);
- websocketConnection.removeEventListener("close", onClose);
+ websocketConnection.removeEventListener('message', onMessage);
+ websocketConnection.removeEventListener('open', onOpen);
+ websocketConnection.removeEventListener('error', onError);
+ websocketConnection.removeEventListener('close', onClose);
websocketConnection.close();
};
}, []);
diff --git a/apps/events/src/routes/schema2.tsx b/apps/events/src/routes/schema2.tsx
index 4a0b1074..39e39659 100644
--- a/apps/events/src/routes/schema2.tsx
+++ b/apps/events/src/routes/schema2.tsx
@@ -1,6 +1,6 @@
-import { Space } from "@/components/space";
-import { createFileRoute } from "@tanstack/react-router";
+import { Space } from '@/components/space';
+import { createFileRoute } from '@tanstack/react-router';
-export const Route = createFileRoute("/schema2")({
+export const Route = createFileRoute('/schema2')({
component: () =>
,
});
diff --git a/apps/events/src/routes/space/$spaceId.tsx b/apps/events/src/routes/space/$spaceId.tsx
index b86173fd..206f0157 100644
--- a/apps/events/src/routes/space/$spaceId.tsx
+++ b/apps/events/src/routes/space/$spaceId.tsx
@@ -1,11 +1,11 @@
-import { AddEvent } from "@/components/add-event";
-import { AddUser } from "@/components/add-user";
-import { Events } from "@/components/events";
-import { Users } from "@/components/users";
-import { SpaceProvider } from "@/schema";
-import { createFileRoute } from "@tanstack/react-router";
+import { AddEvent } from '@/components/add-event';
+import { AddUser } from '@/components/add-user';
+import { Events } from '@/components/events';
+import { Users } from '@/components/users';
+import { SpaceProvider } from '@/schema';
+import { createFileRoute } from '@tanstack/react-router';
-export const Route = createFileRoute("/space/$spaceId")({
+export const Route = createFileRoute('/space/$spaceId')({
component: Space,
});
diff --git a/apps/events/src/schema.ts b/apps/events/src/schema.ts
index a8a7a56e..d5eb35b2 100644
--- a/apps/events/src/schema.ts
+++ b/apps/events/src/schema.ts
@@ -1,4 +1,4 @@
-import { createFunctions, type } from "graph-framework";
+import { createFunctions, type } from 'graph-framework';
export const schema = {
types: {
@@ -6,8 +6,8 @@ export const schema = {
name: type.Text,
age: type.Number,
badge: type.Relation({
- types: ["Badge"] as const,
- cardinality: "one",
+ types: ['Badge'] as const,
+ cardinality: 'one',
}),
},
User: {
@@ -20,22 +20,16 @@ export const schema = {
Event: {
name: type.Text,
participants: type.Relation({
- types: ["Person"] as const,
- cardinality: "many",
+ types: ['Person'] as const,
+ cardinality: 'many',
}),
author: type.Relation({
- types: ["User", "Person"] as const,
- cardinality: "one",
+ types: ['User', 'Person'] as const,
+ cardinality: 'one',
}),
},
},
};
-export const {
- SpaceProvider,
- useCreateEntity,
- useDeleteEntity,
- useSpaceId,
- createDocumentId,
- useQuery,
-} = createFunctions(schema);
+export const { SpaceProvider, useCreateEntity, useDeleteEntity, useSpaceId, createDocumentId, useQuery } =
+ createFunctions(schema);
diff --git a/apps/events/tailwind.config.js b/apps/events/tailwind.config.js
index 511e0e87..550bd074 100644
--- a/apps/events/tailwind.config.js
+++ b/apps/events/tailwind.config.js
@@ -1,57 +1,57 @@
/** @type {import('tailwindcss').Config} */
export default {
- darkMode: ["class"],
- content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
+ darkMode: ['class'],
+ content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'],
theme: {
- extend: {
- borderRadius: {
- lg: 'var(--radius)',
- md: 'calc(var(--radius) - 2px)',
- sm: 'calc(var(--radius) - 4px)'
- },
- colors: {
- background: 'hsl(var(--background))',
- foreground: 'hsl(var(--foreground))',
- card: {
- DEFAULT: 'hsl(var(--card))',
- foreground: 'hsl(var(--card-foreground))'
- },
- popover: {
- DEFAULT: 'hsl(var(--popover))',
- foreground: 'hsl(var(--popover-foreground))'
- },
- primary: {
- DEFAULT: 'hsl(var(--primary))',
- foreground: 'hsl(var(--primary-foreground))'
- },
- secondary: {
- DEFAULT: 'hsl(var(--secondary))',
- foreground: 'hsl(var(--secondary-foreground))'
- },
- muted: {
- DEFAULT: 'hsl(var(--muted))',
- foreground: 'hsl(var(--muted-foreground))'
- },
- accent: {
- DEFAULT: 'hsl(var(--accent))',
- foreground: 'hsl(var(--accent-foreground))'
- },
- destructive: {
- DEFAULT: 'hsl(var(--destructive))',
- foreground: 'hsl(var(--destructive-foreground))'
- },
- border: 'hsl(var(--border))',
- input: 'hsl(var(--input))',
- ring: 'hsl(var(--ring))',
- chart: {
- '1': 'hsl(var(--chart-1))',
- '2': 'hsl(var(--chart-2))',
- '3': 'hsl(var(--chart-3))',
- '4': 'hsl(var(--chart-4))',
- '5': 'hsl(var(--chart-5))'
- }
- }
- }
+ extend: {
+ borderRadius: {
+ lg: 'var(--radius)',
+ md: 'calc(var(--radius) - 2px)',
+ sm: 'calc(var(--radius) - 4px)',
+ },
+ colors: {
+ background: 'hsl(var(--background))',
+ foreground: 'hsl(var(--foreground))',
+ card: {
+ DEFAULT: 'hsl(var(--card))',
+ foreground: 'hsl(var(--card-foreground))',
+ },
+ popover: {
+ DEFAULT: 'hsl(var(--popover))',
+ foreground: 'hsl(var(--popover-foreground))',
+ },
+ primary: {
+ DEFAULT: 'hsl(var(--primary))',
+ foreground: 'hsl(var(--primary-foreground))',
+ },
+ secondary: {
+ DEFAULT: 'hsl(var(--secondary))',
+ foreground: 'hsl(var(--secondary-foreground))',
+ },
+ muted: {
+ DEFAULT: 'hsl(var(--muted))',
+ foreground: 'hsl(var(--muted-foreground))',
+ },
+ accent: {
+ DEFAULT: 'hsl(var(--accent))',
+ foreground: 'hsl(var(--accent-foreground))',
+ },
+ destructive: {
+ DEFAULT: 'hsl(var(--destructive))',
+ foreground: 'hsl(var(--destructive-foreground))',
+ },
+ border: 'hsl(var(--border))',
+ input: 'hsl(var(--input))',
+ ring: 'hsl(var(--ring))',
+ chart: {
+ 1: 'hsl(var(--chart-1))',
+ 2: 'hsl(var(--chart-2))',
+ 3: 'hsl(var(--chart-3))',
+ 4: 'hsl(var(--chart-4))',
+ 5: 'hsl(var(--chart-5))',
+ },
+ },
+ },
},
- plugins: [require("tailwindcss-animate")],
+ plugins: [require('tailwindcss-animate')],
};
diff --git a/apps/events/tsconfig.json b/apps/events/tsconfig.json
index e9adb93f..cf3d558e 100644
--- a/apps/events/tsconfig.json
+++ b/apps/events/tsconfig.json
@@ -1,9 +1,6 @@
{
"files": [],
- "references": [
- { "path": "./tsconfig.app.json" },
- { "path": "./tsconfig.node.json" }
- ],
+ "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }],
"compilerOptions": {
/* Shadcn */
"baseUrl": ".",
diff --git a/apps/events/vite.config.ts b/apps/events/vite.config.ts
index 5d1a451d..907ea8a8 100644
--- a/apps/events/vite.config.ts
+++ b/apps/events/vite.config.ts
@@ -1,10 +1,10 @@
-import { TanStackRouterVite } from "@tanstack/router-plugin/vite";
-import react from "@vitejs/plugin-react";
-import path from "path";
-import { defineConfig } from "vite";
-import { nodePolyfills } from "vite-plugin-node-polyfills";
-import topLevelAwait from "vite-plugin-top-level-await";
-import wasm from "vite-plugin-wasm";
+import path from 'node:path';
+import { TanStackRouterVite } from '@tanstack/router-plugin/vite';
+import react from '@vitejs/plugin-react';
+import { defineConfig } from 'vite';
+import { nodePolyfills } from 'vite-plugin-node-polyfills';
+import topLevelAwait from 'vite-plugin-top-level-await';
+import wasm from 'vite-plugin-wasm';
// https://vitejs.dev/config/
export default defineConfig({
@@ -22,7 +22,7 @@ export default defineConfig({
],
resolve: {
alias: {
- "@": path.resolve(__dirname, "./src"),
+ '@': path.resolve(__dirname, './src'),
},
},
});
diff --git a/apps/server/package.json b/apps/server/package.json
index f8222feb..6d04ae2b 100644
--- a/apps/server/package.json
+++ b/apps/server/package.json
@@ -10,7 +10,12 @@
"start:prod": "PORT=$PORT NODE_ENV=production node ./dist/index.js",
"ts:check": "tsc --noEmit",
"test": "echo \"Error: no test specified\"",
- "lint": "echo \"Lint not setup\" # eslint . --ext .ts,.tsx"
+ "lint": "pnpm biome lint src/*",
+ "lint:fix": "pnpm biome lint --write src/*",
+ "format": "pnpm biome format src/*",
+ "format:fix": "pnpm biome format --write src/*",
+ "check": "pnpm biome check src/*",
+ "check:fix": "pnpm biome check --write src/*"
},
"dependencies": {
"@prisma/client": "5.22.0",
diff --git a/apps/server/src/index.ts b/apps/server/src/index.ts
index 4ee055e4..cc2a7bec 100755
--- a/apps/server/src/index.ts
+++ b/apps/server/src/index.ts
@@ -1,21 +1,21 @@
-import cors from "cors";
-import "dotenv/config";
-import { Schema } from "effect";
-import express from "express";
-import { SpaceEvent } from "graph-framework-space-events";
-import { IncomingMessage } from "http";
-import WebSocket, { WebSocketServer } from "ws";
+import cors from 'cors';
+import 'dotenv/config';
+import { Schema } from 'effect';
+import express from 'express';
+import { SpaceEvent } from 'graph-framework-space-events';
+import type WebSocket from 'ws';
+import { WebSocketServer } from 'ws';
const webSocketServer = new WebSocketServer({ noServer: true });
-const PORT = process.env.PORT !== undefined ? parseInt(process.env.PORT) : 3030;
+const PORT = process.env.PORT !== undefined ? Number.parseInt(process.env.PORT) : 3030;
const app = express();
app.use(express.json());
app.use(cors());
-app.get("/", (_req, res) => {
- res.send(`Server is running`);
+app.get('/', (_req, res) => {
+ res.send('Server is running');
});
const server = app.listen(PORT, () => {
@@ -24,26 +24,23 @@ const server = app.listen(PORT, () => {
const decodeEvent = Schema.decodeUnknownEither(SpaceEvent);
-webSocketServer.on(
- "connection",
- async (webSocket: WebSocket, request: IncomingMessage) => {
- console.log("Connection established");
- webSocket.on("message", async (message) => {
- const rawData = JSON.parse(message.toString());
- const result = decodeEvent(rawData);
- if (result._tag === "Right") {
- const data = result.right;
- console.log("Message received", data);
- }
- });
- webSocket.on("close", () => {
- console.log("Connection closed");
- });
- }
-);
-
-server.on("upgrade", async (request, socket, head) => {
+webSocketServer.on('connection', async (webSocket: WebSocket) => {
+ console.log('Connection established');
+ webSocket.on('message', async (message) => {
+ const rawData = JSON.parse(message.toString());
+ const result = decodeEvent(rawData);
+ if (result._tag === 'Right') {
+ const data = result.right;
+ console.log('Message received', data);
+ }
+ });
+ webSocket.on('close', () => {
+ console.log('Connection closed');
+ });
+});
+
+server.on('upgrade', async (request, socket, head) => {
webSocketServer.handleUpgrade(request, socket, head, (currentSocket) => {
- webSocketServer.emit("connection", currentSocket, request);
+ webSocketServer.emit('connection', currentSocket, request);
});
});
diff --git a/biome.jsonc b/biome.jsonc
new file mode 100644
index 00000000..e83e9619
--- /dev/null
+++ b/biome.jsonc
@@ -0,0 +1,37 @@
+{
+ "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
+ "vcs": {
+ "enabled": true,
+ "clientKind": "git",
+ "useIgnoreFile": true
+ },
+ "files": {
+ "ignoreUnknown": false,
+ "ignore": ["node_modules/", "**/node_modules", "**/dist"]
+ },
+ "formatter": {
+ "enabled": true,
+ "indentStyle": "space",
+ "indentWidth": 2,
+ "lineWidth": 120
+ },
+ "organizeImports": {
+ "enabled": true
+ },
+ "linter": {
+ "enabled": true,
+ "rules": {
+ "recommended": true
+ }
+ },
+ "javascript": {
+ "formatter": {
+ "enabled": true,
+ "quoteStyle": "single",
+ "indentStyle": "space",
+ "indentWidth": 2,
+ "lineWidth": 120,
+ "trailingCommas": "all"
+ }
+ }
+}
diff --git a/package.json b/package.json
index ccb23994..1853879a 100644
--- a/package.json
+++ b/package.json
@@ -2,11 +2,9 @@
"name": "graph-framework-monorepo",
"private": true,
"type": "module",
- "workspaces": [
- "apps/*",
- "packages/*"
- ],
+ "workspaces": ["apps/*", "packages/*"],
"devDependencies": {
+ "@biomejs/biome": "1.9.4",
"escape-string-regexp": "^5.0.0",
"typescript": "^5.6.3",
"vite": "^5.4.10",
@@ -16,6 +14,8 @@
"build": "pnpm --filter graph-framework-utils build",
"ts:check": "pnpm -r ts:check",
"test": "pnpm -r test",
- "lint": "pnpm -r lint"
+ "lint": "pnpm -r lint",
+ "format": "pnpm -r format",
+ "check": "pnpm -r check"
}
}
diff --git a/packages/graph-framework-identity/package.json b/packages/graph-framework-identity/package.json
index 2d0a38e7..f921b240 100644
--- a/packages/graph-framework-identity/package.json
+++ b/packages/graph-framework-identity/package.json
@@ -6,7 +6,12 @@
"scripts": {
"test": "vitest run --typecheck",
"ts:check": "tsc --noEmit",
- "lint": "echo 'No linting configured'"
+ "lint": "pnpm biome lint src/*",
+ "lint:fix": "pnpm biome lint --write src/*",
+ "format": "pnpm biome format src/*",
+ "format:fix": "pnpm biome format --write src/*",
+ "check": "pnpm biome check src/*",
+ "check:fix": "pnpm biome check --write src/*"
},
"exports": {
".": {
diff --git a/packages/graph-framework-identity/src/create-identity.test.ts b/packages/graph-framework-identity/src/create-identity.test.ts
index 11d1fbe9..9418db40 100644
--- a/packages/graph-framework-identity/src/create-identity.test.ts
+++ b/packages/graph-framework-identity/src/create-identity.test.ts
@@ -1,6 +1,6 @@
-import { expect, it } from "vitest";
-import { createIdentity } from "./create-identity.js";
+import { expect, it } from 'vitest';
+import { createIdentity } from './create-identity.js';
-it.skip("should generate an identity", () => {
+it.skip('should generate an identity', () => {
expect(createIdentity()).toEqual({});
});
diff --git a/packages/graph-framework-identity/src/create-identity.ts b/packages/graph-framework-identity/src/create-identity.ts
index ccddfb66..8dee7206 100644
--- a/packages/graph-framework-identity/src/create-identity.ts
+++ b/packages/graph-framework-identity/src/create-identity.ts
@@ -1,8 +1,8 @@
export const createIdentity = () => {
return {
- signaturePublicKey: "",
- signaturePrivateKey: "",
- encryptionPublicKey: "",
- encryptionPrivateKey: "",
+ signaturePublicKey: '',
+ signaturePrivateKey: '',
+ encryptionPublicKey: '',
+ encryptionPrivateKey: '',
};
};
diff --git a/packages/graph-framework-identity/src/index.tsx b/packages/graph-framework-identity/src/index.tsx
index b26e0952..b5632a12 100644
--- a/packages/graph-framework-identity/src/index.tsx
+++ b/packages/graph-framework-identity/src/index.tsx
@@ -1,2 +1,2 @@
-export * from "./create-identity.js";
-export * from "./restore-identity.js";
+export * from './create-identity.js';
+export * from './restore-identity.js';
diff --git a/packages/graph-framework-identity/src/restore-identity.ts b/packages/graph-framework-identity/src/restore-identity.ts
index 397977ad..5d4cbeeb 100644
--- a/packages/graph-framework-identity/src/restore-identity.ts
+++ b/packages/graph-framework-identity/src/restore-identity.ts
@@ -4,9 +4,9 @@ type Params = {
export const restoreIdentity = ({ preKey }: Params) => {
return {
- signaturePublicKey: "",
- signaturePrivateKey: "",
- encryptionPublicKey: "",
- encryptionPrivateKey: "",
+ signaturePublicKey: '',
+ signaturePrivateKey: '',
+ encryptionPublicKey: '',
+ encryptionPrivateKey: '',
};
};
diff --git a/packages/graph-framework-identity/vite.config.js b/packages/graph-framework-identity/vite.config.js
index 290663c3..d3102d41 100644
--- a/packages/graph-framework-identity/vite.config.js
+++ b/packages/graph-framework-identity/vite.config.js
@@ -1,4 +1,4 @@
-import { defineConfig } from "vite";
+import { defineConfig } from 'vite';
// https://vitejs.dev/config/
export default defineConfig({});
diff --git a/packages/graph-framework-schema/package.json b/packages/graph-framework-schema/package.json
index 2cfde47b..5d770975 100644
--- a/packages/graph-framework-schema/package.json
+++ b/packages/graph-framework-schema/package.json
@@ -6,7 +6,12 @@
"scripts": {
"test": "vitest run --typecheck",
"ts:check": "tsc --noEmit",
- "lint": "echo 'No linting configured'"
+ "lint": "pnpm biome lint src/*",
+ "lint:fix": "pnpm biome lint --write src/*",
+ "format": "pnpm biome format src/*",
+ "format:fix": "pnpm biome format --write src/*",
+ "check": "pnpm biome check src/*",
+ "check:fix": "pnpm biome check --write src/*"
},
"exports": {
".": {
diff --git a/packages/graph-framework-schema/src/context.tsx b/packages/graph-framework-schema/src/context.tsx
index e67f4154..759264b4 100644
--- a/packages/graph-framework-schema/src/context.tsx
+++ b/packages/graph-framework-schema/src/context.tsx
@@ -1,19 +1,11 @@
-import { AnyDocumentId, DocHandle, Repo } from "@automerge/automerge-repo";
-import {
- RepoContext,
- useDocument,
- useRepo,
-} from "@automerge/automerge-repo-react-hooks";
-import * as S from "effect/Schema";
-import fastDeepEqual from "fast-deep-equal";
-import {
- createContext,
- ReactNode,
- useCallback,
- useContext,
- useRef,
- useSyncExternalStore,
-} from "react";
+import { type AnyDocumentId, type DocHandle, Repo } from '@automerge/automerge-repo';
+import { RepoContext, useDocument, useRepo } from '@automerge/automerge-repo-react-hooks';
+import * as S from 'effect/Schema';
+import fastDeepEqual from 'fast-deep-equal';
+import { type ReactNode, createContext, useCallback, useContext, useRef, useSyncExternalStore } from 'react';
+
+// biome-ignore lint/suspicious/noExplicitAny: typedefs are unknown and determined by the schema. todo: figure out a way to make generic?
+type SchemaTypeUnknown = any;
interface SpaceProviderProps {
children: ReactNode;
@@ -21,7 +13,7 @@ interface SpaceProviderProps {
}
type DocumentContent = {
- entities: Record
;
+ entities: Record;
};
export const repo = new Repo({
@@ -32,13 +24,13 @@ export const type = {
Text: S.String,
Number: S.Number,
Checkbox: S.Boolean,
- Relation: (params: {
+ Relation: (params: {
types: K;
cardinality: C;
}): Relation => {
const { types, cardinality } = params;
return {
- _tag: "Relation",
+ _tag: 'Relation',
types,
cardinality,
};
@@ -51,11 +43,11 @@ type BaseEntity = {
};
// Helper type to extract schema type
-type SchemaType = T extends S.Schema ? A : never;
+type SchemaType = T extends S.Schema ? A : never;
// Generic Relation type
-type Relation = {
- _tag: "Relation";
+type Relation = {
+ _tag: 'Relation';
types: K;
cardinality?: C;
};
@@ -64,12 +56,12 @@ type Relation = {
export type SchemaDefinition = {
types: Record<
string,
- Record | Relation>
+ Record | Relation>
>;
};
// Extract all possible keys from schema types
-type EntityKeys = keyof T["types"] & string;
+type EntityKeys = keyof T['types'] & string;
// Get merged type from array of keys
type MergedEntityType<
@@ -79,18 +71,11 @@ type MergedEntityType<
> = UnionToIntersection<
{
[K in Keys[number]]: {
- [P in keyof T["types"][K]]: T["types"][K][P] extends Relation<
- infer R,
- infer C
- >
- ? C extends "many"
- ? MergedEntityType<
- T,
- Extract>[],
- Additional
- >[]
+ [P in keyof T['types'][K]]: T['types'][K][P] extends Relation
+ ? C extends 'many'
+ ? MergedEntityType>[], Additional>[]
: MergedEntityType>[], Additional>
- : SchemaType;
+ : SchemaType;
};
}[Keys[number]]
> &
@@ -98,15 +83,13 @@ type MergedEntityType<
// Helper function to check if a property is a Relation
function isRelation(
- prop: S.Schema | Relation
-): prop is Relation {
- return (prop as Relation)._tag === "Relation";
+ prop: S.Schema | Relation,
+): prop is Relation {
+ return (prop as Relation)._tag === 'Relation';
}
// Helper type to convert union to intersection
-type UnionToIntersection = (U extends any ? (k: U) => void : never) extends (
- k: infer I
-) => void
+type UnionToIntersection = (U extends SchemaTypeUnknown ? (k: U) => void : never) extends (k: infer I) => void
? I
: never;
@@ -118,8 +101,9 @@ export function createFunctions(schema: T) {
};
function buildMergedSchema[]>(
- types: [...K]
- ): S.Schema> {
+ types: [...K],
+ // biome-ignore lint/complexity/noBannedTypes:
+ ): S.Schema> {
// Create a record of all properties and their schemas
const propertySchemas = types.reduce(
(acc, type) => {
@@ -129,7 +113,7 @@ export function createFunctions(schema: T) {
for (const [key, prop] of Object.entries(typeSchema)) {
if (isRelation(prop)) {
// Handle Relation
- const relationProp = prop as Relation;
+ const relationProp = prop as Relation;
// Build schemas for each related type
// @ts-expect-error
@@ -138,14 +122,11 @@ export function createFunctions(schema: T) {
});
// Create a union of related schemas
- const unionSchema =
- relatedSchemas.length === 1
- ? relatedSchemas[0]
- : S.Union(...relatedSchemas);
+ const unionSchema = relatedSchemas.length === 1 ? relatedSchemas[0] : S.Union(...relatedSchemas);
- let schemaWithCardinality: S.Schema;
+ let schemaWithCardinality: S.Schema;
- if (relationProp.cardinality === "many") {
+ if (relationProp.cardinality === 'many') {
// Relation is an array
// @ts-expect-error
schemaWithCardinality = S.Array(unionSchema);
@@ -157,20 +138,18 @@ export function createFunctions(schema: T) {
acc[key] = schemaWithCardinality;
} else {
// Regular property
- acc[key] = prop as S.Schema;
+ acc[key] = prop as S.Schema;
}
}
return acc;
},
- {} as Record>
+ {} as Record>,
);
// Convert the record to a struct schema
- return S.Struct(propertySchemas) as unknown as S.Schema<
- any,
- MergedEntityType
- >;
+ // biome-ignore lint/complexity/noBannedTypes:
+ return S.Struct(propertySchemas) as unknown as S.Schema>;
}
const SpaceContext = createContext(undefined);
@@ -182,9 +161,7 @@ export function createFunctions(schema: T) {
return (
-
- {children}
-
+ {children}
);
}
@@ -192,7 +169,7 @@ export function createFunctions(schema: T) {
const useSpaceId = () => {
const context = useContext(SpaceContext);
if (!context) {
- throw new Error("useSpaceId must be used within a SpaceProvider");
+ throw new Error('useSpaceId must be used within a SpaceProvider');
}
return context?.id;
};
@@ -208,13 +185,15 @@ export function createFunctions(schema: T) {
function createEntity[]>(
types: [...K],
- data: MergedEntityType
+ // biome-ignore lint/complexity/noBannedTypes:
+ data: MergedEntityType,
+ // biome-ignore lint/complexity/noBannedTypes:
): MergedEntityType {
if (types.length === 0) {
- throw new Error("Entity must have at least one type");
+ throw new Error('Entity must have at least one type');
}
- const relationalEntities: Record = {};
+ const relationalEntities: Record = {};
const mergedSchema = buildMergedSchema(types);
const result = S.decodeUnknownSync(mergedSchema)(data);
@@ -239,9 +218,9 @@ export function createFunctions(schema: T) {
// Helper function to extract relational entities
function extractRelationalEntities(
- data: any,
- entityTypes: readonly EntityKeys[]
- ): any {
+ data: SchemaTypeUnknown,
+ entityTypes: readonly EntityKeys[],
+ ): SchemaTypeUnknown {
const resultData = { ...data };
for (const entityType of entityTypes) {
const typeSchema = schema.types[entityType];
@@ -251,19 +230,16 @@ export function createFunctions(schema: T) {
const prop = typeSchema[key];
// @ts-expect-error
if (isRelation(prop)) {
- const relationProp = prop as Relation;
+ const relationProp = prop as Relation;
const { types: relatedTypes, cardinality } = relationProp;
const relatedData = data[key];
if (relatedData !== undefined) {
- if (cardinality === "many") {
+ if (cardinality === 'many') {
// Handle array of related entities
if (Array.isArray(relatedData)) {
- const relatedEntityIds = relatedData.map((item: any) => {
+ const relatedEntityIds = relatedData.map((item: SchemaTypeUnknown) => {
const entityId = createDocumentId();
- const extractedData = extractRelationalEntities(
- item,
- relatedTypes
- );
+ const extractedData = extractRelationalEntities(item, relatedTypes);
relationalEntities[entityId] = {
...extractedData,
types: relatedTypes,
@@ -272,17 +248,12 @@ export function createFunctions(schema: T) {
});
resultData[key] = relatedEntityIds;
} else {
- throw new Error(
- `Expected an array for property "${key}" with cardinality "many"`
- );
+ throw new Error(`Expected an array for property "${key}" with cardinality "many"`);
}
} else {
// Handle single related entity
const entityId = createDocumentId();
- const extractedData = extractRelationalEntities(
- relatedData,
- relatedTypes
- );
+ const extractedData = extractRelationalEntities(relatedData, relatedTypes);
relationalEntities[entityId] = {
...extractedData,
types: relatedTypes,
@@ -311,6 +282,7 @@ export function createFunctions(schema: T) {
handleRef.current = handle;
}
+ // biome-ignore lint/correctness/useExhaustiveDependencies:
const deleteEntity = useCallback(
function deleteEntity(entityId: string) {
let result = false;
@@ -326,7 +298,7 @@ export function createFunctions(schema: T) {
return result;
},
- [id]
+ [id],
);
return deleteEntity;
@@ -354,150 +326,133 @@ export function createFunctions(schema: T) {
callback();
};
- handle?.on("change", handleChange);
- handle?.on("delete", handleDelete);
+ handle?.on('change', handleChange);
+ handle?.on('delete', handleDelete);
return () => {
- handle?.off("change", handleChange);
- handle?.off("delete", handleDelete);
+ handle?.off('change', handleChange);
+ handle?.off('delete', handleDelete);
};
};
- const entities = useSyncExternalStore(
- subscribe,
- (): MergedEntityType[] => {
- const doc = handle?.docSync();
- if (!doc) {
- if (fastDeepEqual(prevEntitiesRef.current, [])) {
- return prevEntitiesRef.current;
- } else {
- prevEntitiesRef.current = [];
- return prevEntitiesRef.current;
- }
+ const entities = useSyncExternalStore(subscribe, (): MergedEntityType[] => {
+ const doc = handle?.docSync();
+ if (!doc) {
+ if (fastDeepEqual(prevEntitiesRef.current, [])) {
+ return prevEntitiesRef.current;
+ // biome-ignore lint/style/noUselessElse:
+ } else {
+ prevEntitiesRef.current = [];
+ return prevEntitiesRef.current;
}
+ }
- // Create filteredEntities object with only entities that include all the types
- const filteredEntities: Record<
- string,
- MergedEntityType
- > = {};
- for (const entityId in doc.entities) {
- const entity = doc.entities[entityId];
- if (types.every((type) => entity.types.includes(type as string))) {
- filteredEntities[entityId] = entity as MergedEntityType<
- T,
- K,
- BaseEntity
- >;
- }
+ // Create filteredEntities object with only entities that include all the types
+ const filteredEntities: Record> = {};
+ for (const entityId in doc.entities) {
+ const entity = doc.entities[entityId];
+ if (types.every((type) => entity.types.includes(type as string))) {
+ filteredEntities[entityId] = entity as MergedEntityType;
}
+ }
- // Go through all filteredEntities and replace relational entity IDs with the actual entities recursively
- const visitedEntities = new Set();
- for (const entityId in filteredEntities) {
- const entity = filteredEntities[entityId];
- const resolvedEntity = resolveEntity(
- entityId,
- entity,
- // @ts-expect-error
- entity.types,
- visitedEntities
- );
- filteredEntities[entityId] = resolvedEntity;
- }
+ // Go through all filteredEntities and replace relational entity IDs with the actual entities recursively
+ const visitedEntities = new Set();
+ for (const entityId in filteredEntities) {
+ const entity = filteredEntities[entityId];
+ const resolvedEntity = resolveEntity(
+ entityId,
+ entity,
+ // @ts-expect-error
+ entity.types,
+ visitedEntities,
+ );
+ filteredEntities[entityId] = resolvedEntity;
+ }
- const filteredEntitiesArray = Object.values(filteredEntities);
+ const filteredEntitiesArray = Object.values(filteredEntities);
- if (fastDeepEqual(prevEntitiesRef.current, filteredEntitiesArray)) {
- return prevEntitiesRef.current;
- } else {
- prevEntitiesRef.current = filteredEntitiesArray;
- return prevEntitiesRef.current;
- }
+ if (fastDeepEqual(prevEntitiesRef.current, filteredEntitiesArray)) {
+ return prevEntitiesRef.current;
+ // biome-ignore lint/style/noUselessElse:
+ } else {
+ prevEntitiesRef.current = filteredEntitiesArray;
+ return prevEntitiesRef.current;
+ }
- // Helper function to resolve entities recursively
- function resolveEntity(
- entityId: string,
- entity: any,
- entityTypes: readonly EntityKeys[],
- visited: Set
- ): any {
- if (visited.has(entityId)) {
- // Circular reference detected
- return entity; // Return as is or handle accordingly
- }
- visited.add(entityId);
- const resolvedEntity = { ...entity, id: entityId };
- for (const entityType of entityTypes) {
- const typeSchema = schema.types[entityType];
- for (const key in typeSchema) {
- const prop = typeSchema[key];
- // @ts-expect-error
- if (isRelation(prop)) {
- const relationProp = prop as Relation;
- const { types: relatedTypes, cardinality } = relationProp;
- const relationValue = entity[key];
- if (relationValue !== undefined) {
- if (cardinality === "many") {
- // Relation is an array of IDs
- if (Array.isArray(relationValue)) {
- const resolvedArray = relationValue.map((id: string) => {
- if (visited.has(id)) {
- return null; // Handle circular reference
- }
- // @ts-expect-error
- const relatedEntity = doc.entities[id];
- if (relatedEntity) {
- return resolveEntity(
- id,
- relatedEntity,
- relatedEntity.types,
- new Set(visited)
- );
- } else {
- return null; // Or handle missing entities
- }
- });
- resolvedEntity[key] = resolvedArray;
- } else {
- // Expected an array, but got something else
- resolvedEntity[key] = [];
- }
- } else {
- // Relation is a single ID
- const id = relationValue;
- if (visited.has(id)) {
- resolvedEntity[key] = null; // Handle circular reference
- } else {
+ // Helper function to resolve entities recursively
+ function resolveEntity(
+ entityId: string,
+ entity: SchemaTypeUnknown,
+ entityTypes: readonly EntityKeys[],
+ visited: Set,
+ ): SchemaTypeUnknown {
+ if (visited.has(entityId)) {
+ // Circular reference detected
+ return entity; // Return as is or handle accordingly
+ }
+ visited.add(entityId);
+ const resolvedEntity = { ...entity, id: entityId };
+ for (const entityType of entityTypes) {
+ const typeSchema = schema.types[entityType];
+ for (const key in typeSchema) {
+ const prop = typeSchema[key];
+ // @ts-expect-error
+ if (isRelation(prop)) {
+ const relationProp = prop as Relation;
+ const { cardinality } = relationProp;
+ const relationValue = entity[key];
+ if (relationValue !== undefined) {
+ if (cardinality === 'many') {
+ // Relation is an array of IDs
+ if (Array.isArray(relationValue)) {
+ const resolvedArray = relationValue.map((id: string) => {
+ if (visited.has(id)) {
+ return null; // Handle circular reference
+ }
// @ts-expect-error
const relatedEntity = doc.entities[id];
if (relatedEntity) {
- resolvedEntity[key] = resolveEntity(
- id,
- relatedEntity,
- relatedEntity.types,
- new Set(visited)
- );
+ return resolveEntity(id, relatedEntity, relatedEntity.types, new Set(visited));
+ // biome-ignore lint/style/noUselessElse:
} else {
- resolvedEntity[key] = null; // Or handle missing entities
+ return null; // Or handle missing entities
}
+ });
+ resolvedEntity[key] = resolvedArray;
+ } else {
+ // Expected an array, but got something else
+ resolvedEntity[key] = [];
+ }
+ } else {
+ // Relation is a single ID
+ const id = relationValue;
+ if (visited.has(id)) {
+ resolvedEntity[key] = null; // Handle circular reference
+ } else {
+ // @ts-expect-error
+ const relatedEntity = doc.entities[id];
+ if (relatedEntity) {
+ resolvedEntity[key] = resolveEntity(id, relatedEntity, relatedEntity.types, new Set(visited));
+ } else {
+ resolvedEntity[key] = null; // Or handle missing entities
}
}
}
}
}
}
- return resolvedEntity;
}
+ return resolvedEntity;
+ }
- // Helper function to check if a property is a Relation
- function isRelation(
- prop: S.Schema | Relation
- ): prop is Relation {
- return (prop as Relation)._tag === "Relation";
- }
+ // Helper function to check if a property is a Relation
+ function isRelation(
+ prop: S.Schema | Relation,
+ ): prop is Relation {
+ return (prop as Relation)._tag === 'Relation';
}
- );
+ });
return entities;
}
diff --git a/packages/graph-framework-schema/src/index.test.tsx b/packages/graph-framework-schema/src/index.test.tsx
index 8cd52cc9..195bc673 100644
--- a/packages/graph-framework-schema/src/index.test.tsx
+++ b/packages/graph-framework-schema/src/index.test.tsx
@@ -1,29 +1,22 @@
-import "@testing-library/jest-dom/vitest";
-import { act, cleanup, renderHook } from "@testing-library/react";
-import React from "react";
-import {
- afterEach,
- beforeEach,
- describe,
- expect,
- expectTypeOf,
- it,
-} from "vitest";
-import { createFunctions, repo, type } from "./context.js";
+import '@testing-library/jest-dom/vitest';
+import { act, cleanup, renderHook } from '@testing-library/react';
+import type React from 'react';
+import { afterEach, beforeEach, describe, expect, expectTypeOf, it } from 'vitest';
+import { createFunctions, repo, type } from './context.js';
afterEach(() => {
cleanup();
});
-describe("Library Tests", () => {
+describe('Library Tests', () => {
const schema = {
types: {
Person: {
name: type.Text,
age: type.Number,
badges: type.Relation({
- types: ["Badge"] as const,
- cardinality: "many",
+ types: ['Badge'] as const,
+ cardinality: 'many',
}),
},
User: {
@@ -36,25 +29,19 @@ describe("Library Tests", () => {
Event: {
name: type.Text,
participants: type.Relation({
- types: ["Person"] as const,
- cardinality: "many",
+ types: ['Person'] as const,
+ cardinality: 'many',
}),
author: type.Relation({
- types: ["User", "Person"] as const,
- cardinality: "one",
+ types: ['User', 'Person'] as const,
+ cardinality: 'one',
}),
},
},
};
// Create functions from the schema
- const {
- useCreateEntity,
- useDeleteEntity,
- useQuery,
- SpaceProvider,
- createDocumentId,
- } = createFunctions(schema);
+ const { useCreateEntity, useDeleteEntity, useQuery, SpaceProvider } = createFunctions(schema);
let repoResult = repo.create();
let wrapper = ({ children }: { children: React.ReactNode }) => (
@@ -68,38 +55,35 @@ describe("Library Tests", () => {
);
});
- it("should create one entity successfully", () => {
+ it('should create one entity successfully', () => {
expect([1]).toHaveLength(1);
const { result: createResult } = renderHook(() => useCreateEntity(), {
wrapper,
});
- const { result: queryResult } = renderHook(
- () => useQuery({ types: ["Event"] }),
- { wrapper }
- );
+ const { result: queryResult } = renderHook(() => useQuery({ types: ['Event'] }), { wrapper });
act(() => {
- createResult.current(["Event"], {
- name: "Conference",
+ createResult.current(['Event'], {
+ name: 'Conference',
participants: [
{
- name: "Alice",
+ name: 'Alice',
age: 30,
- badges: [{ name: "Speaker" }],
+ badges: [{ name: 'Speaker' }],
},
{
- name: "Bob",
+ name: 'Bob',
age: 25,
- badges: [{ name: "Attendee" }],
+ badges: [{ name: 'Attendee' }],
},
],
author: {
- name: "Charlie",
- email: "charlie@example.com",
+ name: 'Charlie',
+ email: 'charlie@example.com',
age: 35,
- badges: [{ name: "VIP" }],
+ badges: [{ name: 'VIP' }],
},
});
});
@@ -108,36 +92,33 @@ describe("Library Tests", () => {
expect(events).toHaveLength(1);
});
- it("should create and query entities with relations", () => {
+ it('should create and query entities with relations', () => {
const { result: createResult } = renderHook(() => useCreateEntity(), {
wrapper,
});
- const { result: queryResult } = renderHook(
- () => useQuery({ types: ["Event"] }),
- { wrapper }
- );
+ const { result: queryResult } = renderHook(() => useQuery({ types: ['Event'] }), { wrapper });
act(() => {
- createResult.current(["Event"], {
- name: "Conference",
+ createResult.current(['Event'], {
+ name: 'Conference',
participants: [
{
- name: "Alice",
+ name: 'Alice',
age: 30,
- badges: [{ name: "Speaker" }],
+ badges: [{ name: 'Speaker' }],
},
{
- name: "Bob",
+ name: 'Bob',
age: 25,
- badges: [{ name: "Attendee" }],
+ badges: [{ name: 'Attendee' }],
},
],
author: {
- name: "Charlie",
- email: "charlie@example.com",
+ name: 'Charlie',
+ email: 'charlie@example.com',
age: 35,
- badges: [{ name: "VIP" }],
+ badges: [{ name: 'VIP' }],
},
});
});
@@ -148,11 +129,11 @@ describe("Library Tests", () => {
const event = events[0];
if (!event) {
- throw new Error("Event not found");
+ throw new Error('Event not found');
}
- expect(event.id).toBeTypeOf("string");
- expect(event.types).toStrictEqual(["Event"]);
- expect(event.name).toBe("Conference");
+ expect(event.id).toBeTypeOf('string');
+ expect(event.types).toStrictEqual(['Event']);
+ expect(event.name).toBe('Conference');
// Check participants
expect(event.participants).toHaveLength(2);
@@ -162,28 +143,28 @@ describe("Library Tests", () => {
!event.participants[0].badges[0] ||
!event.participants[1].badges[0]
) {
- throw new Error("Participants not found");
+ throw new Error('Participants not found');
}
- expect(event.participants[0].id).toBeTypeOf("string");
- expect(event.participants[0].types).toStrictEqual(["Person"]);
- expect(event.participants[0].name).toBe("Alice");
+ expect(event.participants[0].id).toBeTypeOf('string');
+ expect(event.participants[0].types).toStrictEqual(['Person']);
+ expect(event.participants[0].name).toBe('Alice');
expect(event.participants[0].age).toBe(30);
expect(event.participants[0].badges).toHaveLength(1);
- expect(event.participants[0].badges[0].name).toBe("Speaker");
+ expect(event.participants[0].badges[0].name).toBe('Speaker');
- expect(event.participants[1].id).toBeTypeOf("string");
- expect(event.participants[1].types).toStrictEqual(["Person"]);
- expect(event.participants[1].name).toBe("Bob");
+ expect(event.participants[1].id).toBeTypeOf('string');
+ expect(event.participants[1].types).toStrictEqual(['Person']);
+ expect(event.participants[1].name).toBe('Bob');
expect(event.participants[1].age).toBe(25);
expect(event.participants[1].badges).toHaveLength(1);
- expect(event.participants[1].badges[0].name).toBe("Attendee");
+ expect(event.participants[1].badges[0].name).toBe('Attendee');
// Check author
- expect(event.author.id).toBeTypeOf("string");
- expect(event.author.types).toStrictEqual(["User", "Person"]);
- expect(event.author.name).toBe("Charlie");
- expect(event.author.email).toBe("charlie@example.com");
+ expect(event.author.id).toBeTypeOf('string');
+ expect(event.author.types).toStrictEqual(['User', 'Person']);
+ expect(event.author.name).toBe('Charlie');
+ expect(event.author.email).toBe('charlie@example.com');
expectTypeOf(event).toMatchTypeOf<{
id: string;
@@ -215,21 +196,18 @@ describe("Library Tests", () => {
}>();
});
- it("should create entities with nested relations and query them", () => {
+ it('should create entities with nested relations and query them', () => {
const { result: createResult } = renderHook(() => useCreateEntity(), {
wrapper,
});
- const { result: queryResult } = renderHook(
- () => useQuery({ types: ["Person"] }),
- { wrapper }
- );
+ const { result: queryResult } = renderHook(() => useQuery({ types: ['Person'] }), { wrapper });
act(() => {
- createResult.current(["Person"], {
- name: "Dave",
+ createResult.current(['Person'], {
+ name: 'Dave',
age: 40,
- badges: [{ name: "VIP" }, { name: "Contributor" }],
+ badges: [{ name: 'VIP' }, { name: 'Contributor' }],
});
});
@@ -239,19 +217,19 @@ describe("Library Tests", () => {
const person = people[0];
if (!person) {
- throw new Error("Person not found");
+ throw new Error('Person not found');
}
- expect(person.name).toBe("Dave");
+ expect(person.name).toBe('Dave');
expect(person.age).toBe(40);
expect(person.badges).toHaveLength(2);
if (!person.badges[0] || !person.badges[1]) {
- throw new Error("Badges not found");
+ throw new Error('Badges not found');
}
- expect(person.badges[0].name).toBe("VIP");
- expect(person.badges[1].name).toBe("Contributor");
+ expect(person.badges[0].name).toBe('VIP');
+ expect(person.badges[1].name).toBe('Contributor');
});
- it("should delete an entity", () => {
+ it('should delete an entity', () => {
const { result: createResult } = renderHook(() => useCreateEntity(), {
wrapper,
});
@@ -260,15 +238,12 @@ describe("Library Tests", () => {
wrapper,
});
- const { result: queryResult } = renderHook(
- () => useQuery({ types: ["Badge"] }),
- { wrapper }
- );
+ const { result: queryResult } = renderHook(() => useQuery({ types: ['Badge'] }), { wrapper });
let badgeId: string | undefined;
act(() => {
- createResult.current(["Badge"], { name: "Exclusive" });
+ createResult.current(['Badge'], { name: 'Exclusive' });
});
act(() => {
@@ -278,8 +253,12 @@ describe("Library Tests", () => {
});
act(() => {
- const success = deleteResult.current(badgeId!);
- expect(success).toBe(true);
+ expect(badgeId).not.toBeNull();
+ expect(badgeId).not.toBeUndefined();
+ if (badgeId) {
+ const success = deleteResult.current(badgeId);
+ expect(success).toBe(true);
+ }
});
act(() => {
diff --git a/packages/graph-framework-schema/src/index.tsx b/packages/graph-framework-schema/src/index.tsx
index 45f75471..54ae8cb4 100644
--- a/packages/graph-framework-schema/src/index.tsx
+++ b/packages/graph-framework-schema/src/index.tsx
@@ -1 +1 @@
-export * from "./context.js";
+export * from './context.js';
diff --git a/packages/graph-framework-schema/vite.config.js b/packages/graph-framework-schema/vite.config.js
index b4f8c666..0a85b727 100644
--- a/packages/graph-framework-schema/vite.config.js
+++ b/packages/graph-framework-schema/vite.config.js
@@ -1,10 +1,10 @@
-import { defineConfig } from "vite";
-import react from "@vitejs/plugin-react";
+import react from '@vitejs/plugin-react';
+import { defineConfig } from 'vite';
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
test: {
- environment: "jsdom",
+ environment: 'jsdom',
},
});
diff --git a/packages/graph-framework-space-events/package.json b/packages/graph-framework-space-events/package.json
index e8748b90..98cd8035 100644
--- a/packages/graph-framework-space-events/package.json
+++ b/packages/graph-framework-space-events/package.json
@@ -6,7 +6,12 @@
"scripts": {
"test": "vitest run --typecheck",
"ts:check": "tsc --noEmit",
- "lint": "echo 'No linting configured'"
+ "lint": "pnpm biome lint src/*",
+ "lint:fix": "pnpm biome lint --write src/*",
+ "format": "pnpm biome format src/*",
+ "format:fix": "pnpm biome format --write src/*",
+ "check": "pnpm biome check src/*",
+ "check:fix": "pnpm biome check --write src/*"
},
"exports": {
".": {
diff --git a/packages/graph-framework-space-events/src/apply-event.ts b/packages/graph-framework-space-events/src/apply-event.ts
index d7770084..6b8aad93 100644
--- a/packages/graph-framework-space-events/src/apply-event.ts
+++ b/packages/graph-framework-space-events/src/apply-event.ts
@@ -1,9 +1,4 @@
-import {
- SpaceEvent,
- SpaceInvitation,
- SpaceMember,
- SpaceState,
-} from "./types.js";
+import type { SpaceEvent, SpaceInvitation, SpaceMember, SpaceState } from './types.js';
type Params = {
state?: SpaceState;
@@ -19,17 +14,17 @@ export const applyEvent = ({ state, event: rawEvent }: Params): SpaceState => {
// - verify that this event is based on the previous one
// - verify versioning
- let id = "";
+ let id = '';
let members: { [signaturePublicKey: string]: SpaceMember } = {};
let removedMembers: { [signaturePublicKey: string]: SpaceMember } = {};
let invitations: { [id: string]: SpaceInvitation } = {};
- if (event.transaction.type === "create-space") {
+ if (event.transaction.type === 'create-space') {
id = event.transaction.id;
members[event.transaction.creatorSignaturePublicKey] = {
signaturePublicKey: event.transaction.creatorSignaturePublicKey,
encryptionPublicKey: event.transaction.creatorEncryptionPublicKey,
- role: "admin",
+ role: 'admin',
};
} else if (state !== undefined) {
id = state.id;
@@ -37,18 +32,18 @@ export const applyEvent = ({ state, event: rawEvent }: Params): SpaceState => {
removedMembers = { ...state.removedMembers };
invitations = { ...state.invitations };
- if (event.transaction.type === "delete-space") {
+ if (event.transaction.type === 'delete-space') {
removedMembers = { ...members };
members = {};
invitations = {};
- } else if (event.transaction.type === "create-invitation") {
+ } else if (event.transaction.type === 'create-invitation') {
invitations[event.transaction.id] = {
signaturePublicKey: event.transaction.signaturePublicKey,
encryptionPublicKey: event.transaction.encryptionPublicKey,
};
}
} else {
- throw new Error("State is required for all events except create-space");
+ throw new Error('State is required for all events except create-space');
}
return {
@@ -56,6 +51,6 @@ export const applyEvent = ({ state, event: rawEvent }: Params): SpaceState => {
members,
removedMembers,
invitations,
- transactionHash: "", // TODO
+ transactionHash: '', // TODO
};
};
diff --git a/packages/graph-framework-space-events/src/create-invitation.test.ts b/packages/graph-framework-space-events/src/create-invitation.test.ts
index ce0ff226..b946d281 100644
--- a/packages/graph-framework-space-events/src/create-invitation.test.ts
+++ b/packages/graph-framework-space-events/src/create-invitation.test.ts
@@ -1,12 +1,13 @@
-import { expect, it } from "vitest";
-import { applyEvent } from "./apply-event.js";
-import { createInvitation } from "./create-invitation.js";
-import { createSpace } from "./create-space.js";
+import { expect, it } from 'vitest';
-it("should create an invitation", () => {
+import { applyEvent } from './apply-event.js';
+import { createInvitation } from './create-invitation.js';
+import { createSpace } from './create-space.js';
+
+it('should create an invitation', () => {
const author = {
- signaturePublicKey: "signature",
- encryptionPublicKey: "encryption",
+ signaturePublicKey: 'signature',
+ encryptionPublicKey: 'encryption',
};
const spaceEvent = createSpace({ author });
const state = applyEvent({ event: spaceEvent });
@@ -18,16 +19,16 @@ it("should create an invitation", () => {
[author.signaturePublicKey]: {
signaturePublicKey: author.signaturePublicKey,
encryptionPublicKey: author.encryptionPublicKey,
- role: "admin",
+ role: 'admin',
},
},
removedMembers: {},
invitations: {
[spaceEvent2.transaction.id]: {
- signaturePublicKey: "",
- encryptionPublicKey: "",
+ signaturePublicKey: '',
+ encryptionPublicKey: '',
},
},
- transactionHash: "",
+ transactionHash: '',
});
});
diff --git a/packages/graph-framework-space-events/src/create-invitation.ts b/packages/graph-framework-space-events/src/create-invitation.ts
index 3fa2b583..15bc4486 100644
--- a/packages/graph-framework-space-events/src/create-invitation.ts
+++ b/packages/graph-framework-space-events/src/create-invitation.ts
@@ -1,4 +1,4 @@
-import { Author, SpaceEvent } from "./types.js";
+import type { Author, SpaceEvent } from './types.js';
type Params = {
author: Author;
@@ -7,15 +7,15 @@ type Params = {
export const createInvitation = ({ author, id }: Params): SpaceEvent => {
const transaction = {
- type: "create-invitation" as const,
+ type: 'create-invitation' as const,
id,
- ciphertext: "",
- nonce: "",
- signaturePublicKey: "",
- encryptionPublicKey: "",
+ ciphertext: '',
+ nonce: '',
+ signaturePublicKey: '',
+ encryptionPublicKey: '',
};
// TODO canonicalize, hash and sign the transaction
- const signature = "";
+ const signature = '';
return {
transaction,
diff --git a/packages/graph-framework-space-events/src/create-space.test.ts b/packages/graph-framework-space-events/src/create-space.test.ts
index 1c7a16c7..d26bb3c3 100644
--- a/packages/graph-framework-space-events/src/create-space.test.ts
+++ b/packages/graph-framework-space-events/src/create-space.test.ts
@@ -1,11 +1,12 @@
-import { expect, it } from "vitest";
-import { applyEvent } from "./apply-event.js";
-import { createSpace } from "./create-space.js";
+import { expect, it } from 'vitest';
-it("should create a space state", () => {
+import { applyEvent } from './apply-event.js';
+import { createSpace } from './create-space.js';
+
+it('should create a space state', () => {
const author = {
- signaturePublicKey: "signature",
- encryptionPublicKey: "encryption",
+ signaturePublicKey: 'signature',
+ encryptionPublicKey: 'encryption',
};
const spaceEvent = createSpace({ author });
const state = applyEvent({ event: spaceEvent });
@@ -16,10 +17,10 @@ it("should create a space state", () => {
[author.signaturePublicKey]: {
signaturePublicKey: author.signaturePublicKey,
encryptionPublicKey: author.encryptionPublicKey,
- role: "admin",
+ role: 'admin',
},
},
removedMembers: {},
- transactionHash: "",
+ transactionHash: '',
});
});
diff --git a/packages/graph-framework-space-events/src/create-space.ts b/packages/graph-framework-space-events/src/create-space.ts
index 68fea193..19837069 100644
--- a/packages/graph-framework-space-events/src/create-space.ts
+++ b/packages/graph-framework-space-events/src/create-space.ts
@@ -1,5 +1,6 @@
-import { generateId } from "graph-framework-utils";
-import type { Author, SpaceEvent } from "./types.js";
+import { generateId } from 'graph-framework-utils';
+
+import type { Author, SpaceEvent } from './types.js';
type Params = {
author: Author;
@@ -7,13 +8,13 @@ type Params = {
export const createSpace = ({ author }: Params): SpaceEvent => {
const transaction = {
- type: "create-space" as const,
+ type: 'create-space' as const,
id: generateId(),
creatorSignaturePublicKey: author.signaturePublicKey,
creatorEncryptionPublicKey: author.encryptionPublicKey,
};
// TODO canonicalize, hash and sign the transaction
- const signature = "";
+ const signature = '';
return {
transaction,
diff --git a/packages/graph-framework-space-events/src/delete-space.test.ts b/packages/graph-framework-space-events/src/delete-space.test.ts
index 9769337c..a146bfa9 100644
--- a/packages/graph-framework-space-events/src/delete-space.test.ts
+++ b/packages/graph-framework-space-events/src/delete-space.test.ts
@@ -1,12 +1,13 @@
-import { expect, it } from "vitest";
-import { applyEvent } from "./apply-event.js";
-import { createSpace } from "./create-space.js";
-import { deleteSpace } from "./delete-space.js";
+import { expect, it } from 'vitest';
-it("should delete a space", () => {
+import { applyEvent } from './apply-event.js';
+import { createSpace } from './create-space.js';
+import { deleteSpace } from './delete-space.js';
+
+it('should delete a space', () => {
const author = {
- signaturePublicKey: "signature",
- encryptionPublicKey: "encryption",
+ signaturePublicKey: 'signature',
+ encryptionPublicKey: 'encryption',
};
const spaceEvent = createSpace({ author });
const state = applyEvent({ event: spaceEvent });
@@ -20,9 +21,9 @@ it("should delete a space", () => {
[author.signaturePublicKey]: {
signaturePublicKey: author.signaturePublicKey,
encryptionPublicKey: author.encryptionPublicKey,
- role: "admin",
+ role: 'admin',
},
},
- transactionHash: "",
+ transactionHash: '',
});
});
diff --git a/packages/graph-framework-space-events/src/delete-space.ts b/packages/graph-framework-space-events/src/delete-space.ts
index 1ce4056a..f6b7e748 100644
--- a/packages/graph-framework-space-events/src/delete-space.ts
+++ b/packages/graph-framework-space-events/src/delete-space.ts
@@ -1,4 +1,4 @@
-import { Author, SpaceEvent } from "./types.js";
+import type { Author, SpaceEvent } from './types.js';
type Params = {
author: Author;
@@ -7,11 +7,11 @@ type Params = {
export const deleteSpace = ({ author, id }: Params): SpaceEvent => {
const transaction = {
- type: "delete-space" as const,
+ type: 'delete-space' as const,
id,
};
// TODO canonicalize, hash and sign the transaction
- const signature = "";
+ const signature = '';
return {
transaction,
diff --git a/packages/graph-framework-space-events/src/index.ts b/packages/graph-framework-space-events/src/index.ts
index 7ccc70b9..41e4ba21 100644
--- a/packages/graph-framework-space-events/src/index.ts
+++ b/packages/graph-framework-space-events/src/index.ts
@@ -1,5 +1,5 @@
-export * from "./apply-event.js";
-export * from "./create-invitation.js";
-export * from "./create-space.js";
-export * from "./delete-space.js";
-export * from "./types.js";
+export * from './apply-event.js';
+export * from './create-invitation.js';
+export * from './create-space.js';
+export * from './delete-space.js';
+export * from './types.js';
diff --git a/packages/graph-framework-space-events/src/types.ts b/packages/graph-framework-space-events/src/types.ts
index a04267bb..bbcde1be 100644
--- a/packages/graph-framework-space-events/src/types.ts
+++ b/packages/graph-framework-space-events/src/types.ts
@@ -1,9 +1,9 @@
-import * as Schema from "effect/Schema";
+import * as Schema from 'effect/Schema';
export const SpaceMember = Schema.Struct({
signaturePublicKey: Schema.String,
encryptionPublicKey: Schema.String,
- role: Schema.Union(Schema.Literal("admin"), Schema.Literal("member")),
+ role: Schema.Union(Schema.Literal('admin'), Schema.Literal('member')),
});
export type SpaceMember = Schema.Schema.Type;
@@ -28,7 +28,7 @@ export type SpaceState = Schema.Schema.Type;
export const SpaceEvent = Schema.Union(
Schema.Struct({
transaction: Schema.Struct({
- type: Schema.Literal("create-space"),
+ type: Schema.Literal('create-space'),
id: Schema.String,
creatorSignaturePublicKey: Schema.String,
creatorEncryptionPublicKey: Schema.String,
@@ -40,7 +40,7 @@ export const SpaceEvent = Schema.Union(
}),
Schema.Struct({
transaction: Schema.Struct({
- type: Schema.Literal("delete-space"),
+ type: Schema.Literal('delete-space'),
id: Schema.String,
}),
author: Schema.Struct({
@@ -50,7 +50,7 @@ export const SpaceEvent = Schema.Union(
}),
Schema.Struct({
transaction: Schema.Struct({
- type: Schema.Literal("create-invitation"),
+ type: Schema.Literal('create-invitation'),
id: Schema.String,
ciphertext: Schema.String,
nonce: Schema.String,
@@ -61,7 +61,7 @@ export const SpaceEvent = Schema.Union(
publicKey: Schema.String,
signature: Schema.String,
}),
- })
+ }),
);
export type SpaceEvent = Schema.Schema.Type;
diff --git a/packages/graph-framework-space-events/vite.config.js b/packages/graph-framework-space-events/vite.config.js
index 290663c3..d3102d41 100644
--- a/packages/graph-framework-space-events/vite.config.js
+++ b/packages/graph-framework-space-events/vite.config.js
@@ -1,4 +1,4 @@
-import { defineConfig } from "vite";
+import { defineConfig } from 'vite';
// https://vitejs.dev/config/
export default defineConfig({});
diff --git a/packages/graph-framework-utils/package.json b/packages/graph-framework-utils/package.json
index 699916ab..145c9634 100644
--- a/packages/graph-framework-utils/package.json
+++ b/packages/graph-framework-utils/package.json
@@ -20,16 +20,18 @@
"default": "./dist/base58.mjs"
}
},
- "files": [
- "dist",
- "package.json"
- ],
+ "files": ["dist", "package.json"],
"sideEffects": false,
"scripts": {
"build": "vite build",
"test": "vitest run --typecheck",
"ts:check": "tsc --noEmit",
- "lint": "echo 'No linting configured'"
+ "lint": "pnpm biome lint src/*",
+ "lint:fix": "pnpm biome lint --write src/*",
+ "format": "pnpm biome format src/*",
+ "format:fix": "pnpm biome format --write src/*",
+ "check": "pnpm biome check src/*",
+ "check:fix": "pnpm biome check --write src/*"
},
"devDependencies": {
"@types/uuid": "^10.0.0",
diff --git a/packages/graph-framework-utils/src/base58.test.ts b/packages/graph-framework-utils/src/base58.test.ts
index 1f26a110..7888b733 100644
--- a/packages/graph-framework-utils/src/base58.test.ts
+++ b/packages/graph-framework-utils/src/base58.test.ts
@@ -1,12 +1,12 @@
-import { describe, expect, it } from "vitest";
-import { v4 } from "uuid";
+import { v4 } from 'uuid';
+import { describe, expect, it } from 'vitest';
-import { decodeBase58ToUUID, encodeBase58 } from "./base58.js";
+import { decodeBase58ToUUID, encodeBase58 } from './base58.js';
-describe("base58", () => {
- it("should be able to encoded a UUID to base58 and then decode it back to its original UUID", () => {
+describe('base58', () => {
+ it('should be able to encoded a UUID to base58 and then decode it back to its original UUID', () => {
const expected = v4();
- const given = expected.replaceAll(/-/g, "");
+ const given = expected.replaceAll(/-/g, '');
const encoded = encodeBase58(given);
expect(encoded).toHaveLength(22);
diff --git a/packages/graph-framework-utils/src/base58.ts b/packages/graph-framework-utils/src/base58.ts
index 0fe957ad..0375dc36 100644
--- a/packages/graph-framework-utils/src/base58.ts
+++ b/packages/graph-framework-utils/src/base58.ts
@@ -1,5 +1,4 @@
-const BASE58_ALLOWED_CHARS =
- "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
+const BASE58_ALLOWED_CHARS = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
export type Base58 = string;
@@ -26,12 +25,15 @@ export function encodeBase58(val: string): Base58 {
while (remainder > 0n) {
const mod = remainder % 58n;
- result.push(BASE58_ALLOWED_CHARS[Number(mod)]!);
+ const base58CharAtMod = BASE58_ALLOWED_CHARS[Number(mod)];
+ if (base58CharAtMod) {
+ result.push(base58CharAtMod);
+ }
remainder = remainder / 58n;
}
// Reverse and join the array to get the final Base58 encoded string
- return result.reverse().join("");
+ return result.reverse().join('');
}
export type UUID = string;
@@ -54,23 +56,19 @@ export type UUID = string;
export function decodeBase58ToUUID(encoded: string): UUID {
let decoded = 0n;
- for (let char of encoded) {
+ for (const char of encoded) {
const index = BASE58_ALLOWED_CHARS.indexOf(char);
if (index === -1) {
- throw new Error("Invalid Base58 character");
+ throw new Error('Invalid Base58 character');
}
decoded = decoded * 58n + BigInt(index);
}
// Convert the bigint to a hex string, padded to 32 characters
let hexStr = decoded.toString(16);
- hexStr = hexStr.padStart(32, "0"); // Ensure it is 32 characters
+ hexStr = hexStr.padStart(32, '0'); // Ensure it is 32 characters
- return [
- hexStr.slice(0, 8),
- hexStr.slice(8, 12),
- hexStr.slice(12, 16),
- hexStr.slice(16, 20),
- hexStr.slice(20),
- ].join("-");
+ return [hexStr.slice(0, 8), hexStr.slice(8, 12), hexStr.slice(12, 16), hexStr.slice(16, 20), hexStr.slice(20)].join(
+ '-',
+ );
}
diff --git a/packages/graph-framework-utils/src/generateId.test.ts b/packages/graph-framework-utils/src/generateId.test.ts
index 2f2b0741..588b0d3d 100644
--- a/packages/graph-framework-utils/src/generateId.test.ts
+++ b/packages/graph-framework-utils/src/generateId.test.ts
@@ -1,9 +1,9 @@
-import { expect, it } from "vitest";
+import { expect, it } from 'vitest';
-import { generateId } from "./generateId.js";
+import { generateId } from './generateId.js';
-it("should generate a base58 encoded uuid of 22 char length", () => {
+it('should generate a base58 encoded uuid of 22 char length', () => {
const id = generateId();
- expect(id).toBeTypeOf("string");
+ expect(id).toBeTypeOf('string');
expect(id).toHaveLength(22);
});
diff --git a/packages/graph-framework-utils/src/generateId.ts b/packages/graph-framework-utils/src/generateId.ts
index 9f126f57..dba4ca7b 100644
--- a/packages/graph-framework-utils/src/generateId.ts
+++ b/packages/graph-framework-utils/src/generateId.ts
@@ -1,6 +1,6 @@
-import { v4 as uuidv4 } from "uuid";
+import { v4 as uuidv4 } from 'uuid';
-import { encodeBase58 } from "./base58.js";
+import { encodeBase58 } from './base58.js';
/**
* Generate a v4 UUID.
@@ -19,6 +19,6 @@ import { encodeBase58 } from "./base58.js";
*/
export function generateId() {
const uuid = uuidv4();
- const stripped = uuid.replaceAll(/-/g, "");
+ const stripped = uuid.replaceAll(/-/g, '');
return encodeBase58(stripped);
}
diff --git a/packages/graph-framework-utils/src/index.ts b/packages/graph-framework-utils/src/index.ts
index 0bc65c4b..cee9d53b 100644
--- a/packages/graph-framework-utils/src/index.ts
+++ b/packages/graph-framework-utils/src/index.ts
@@ -1,2 +1,2 @@
-export * from "./base58.js";
-export * from "./generateId.js";
+export * from './base58.js';
+export * from './generateId.js';
diff --git a/packages/graph-framework-utils/vite.config.mts b/packages/graph-framework-utils/vite.config.mts
index b31ce7d7..89e35fa3 100644
--- a/packages/graph-framework-utils/vite.config.mts
+++ b/packages/graph-framework-utils/vite.config.mts
@@ -1,23 +1,23 @@
-import { defineConfig } from "vite";
-import dts from "vite-plugin-dts";
+import { defineConfig } from 'vite';
+import dts from 'vite-plugin-dts';
-import { vitePluginExternalizeDependencies } from "./vitePluginExternalizeDependencies.js";
+import { vitePluginExternalizeDependencies } from './vitePluginExternalizeDependencies.js';
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
- dts({ tsconfigPath: "./tsconfig.build.json", insertTypesEntry: true }),
+ dts({ tsconfigPath: './tsconfig.build.json', insertTypesEntry: true }),
vitePluginExternalizeDependencies(),
],
build: {
lib: {
entry: {
- index: "./src/index.ts",
- base58: "./src/base58.ts",
+ index: './src/index.ts',
+ base58: './src/base58.ts',
},
- formats: ["es", "cjs"],
+ formats: ['es', 'cjs'],
fileName(format, entryName) {
- return `${entryName}${format === "es" ? ".mjs" : ".cjs"}`;
+ return `${entryName}${format === 'es' ? '.mjs' : '.cjs'}`;
},
},
},
diff --git a/packages/graph-framework-utils/vitePluginExternalizeDependencies.ts b/packages/graph-framework-utils/vitePluginExternalizeDependencies.ts
index 36ba3330..d6d05463 100644
--- a/packages/graph-framework-utils/vitePluginExternalizeDependencies.ts
+++ b/packages/graph-framework-utils/vitePluginExternalizeDependencies.ts
@@ -1,7 +1,7 @@
-import escapeStringRegexp from "escape-string-regexp";
-import fs from "node:fs/promises";
-import path from "node:path";
-import type { Plugin } from "vite";
+import fs from 'node:fs/promises';
+import path from 'node:path';
+import escapeStringRegexp from 'escape-string-regexp';
+import type { Plugin } from 'vite';
/**
* Vite plugin to automatically externalize all `dependencies` and `peerDependencies` of the package.
@@ -10,15 +10,12 @@ import type { Plugin } from "vite";
*/
export function vitePluginExternalizeDependencies(): Plugin {
return {
- name: "vite-plugin-externalize-dependencies",
+ name: 'vite-plugin-externalize-dependencies',
async config(config, { command }) {
// Only run for the `build` command
- if (command !== "build") return;
+ if (command !== 'build') return;
- const packageJsonPath = path.join(
- config.root ?? process.cwd(),
- "package.json"
- );
+ const packageJsonPath = path.join(config.root ?? process.cwd(), 'package.json');
try {
await fs.access(packageJsonPath);
} catch {
@@ -31,12 +28,9 @@ export function vitePluginExternalizeDependencies(): Plugin {
peerDependencies?: Record;
} = {};
try {
- packageJson = JSON.parse(await fs.readFile(packageJsonPath, "utf-8"));
+ packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8'));
} catch (error) {
- console.error(
- `Failed to read or parse package.json at ${packageJsonPath}`,
- error
- );
+ console.error(`Failed to read or parse package.json at ${packageJsonPath}`, error);
return;
}
@@ -48,8 +42,7 @@ export function vitePluginExternalizeDependencies(): Plugin {
...Object.keys(packageJson.peerDependencies ?? {}),
].map(
// Match the exact dependency name and any path under it (except CSS files)
- (dependency) =>
- new RegExp(`^${escapeStringRegexp(dependency)}(/(?!.*\\.css$).*)?$`)
+ (dependency) => new RegExp(`^${escapeStringRegexp(dependency)}(/(?!.*\\.css$).*)?$`),
),
};
diff --git a/packages/graph-framework/package.json b/packages/graph-framework/package.json
index 002d016e..b0534ebe 100644
--- a/packages/graph-framework/package.json
+++ b/packages/graph-framework/package.json
@@ -6,7 +6,12 @@
"scripts": {
"test": "vitest run --typecheck",
"ts:check": "tsc --noEmit",
- "lint": "echo 'No linting configured'"
+ "lint": "pnpm biome lint src/*",
+ "lint:fix": "pnpm biome lint --write src/*",
+ "format": "pnpm biome format src/*",
+ "format:fix": "pnpm biome format --write src/*",
+ "check": "pnpm biome check src/*",
+ "check:fix": "pnpm biome check --write src/*"
},
"exports": {
".": {
diff --git a/packages/graph-framework/src/index.test.tsx b/packages/graph-framework/src/index.test.tsx
index 9a5838a7..2ae57ee2 100644
--- a/packages/graph-framework/src/index.test.tsx
+++ b/packages/graph-framework/src/index.test.tsx
@@ -1,5 +1,5 @@
-import { expect, it } from "vitest";
+import { expect, it } from 'vitest';
-it.skip("TODO test full integration", () => {
+it.skip('TODO test full integration', () => {
expect(true).toBe(false);
});
diff --git a/packages/graph-framework/src/index.tsx b/packages/graph-framework/src/index.tsx
index 14dd81c5..7cd563ed 100644
--- a/packages/graph-framework/src/index.tsx
+++ b/packages/graph-framework/src/index.tsx
@@ -1,4 +1,4 @@
-export * from "graph-framework-identity";
-export * from "graph-framework-schema";
-export * from "graph-framework-space-events";
-export * from "graph-framework-utils";
+export * from 'graph-framework-identity';
+export * from 'graph-framework-schema';
+export * from 'graph-framework-space-events';
+export * from 'graph-framework-utils';
diff --git a/packages/graph-framework/vite.config.js b/packages/graph-framework/vite.config.js
index b4f8c666..0a85b727 100644
--- a/packages/graph-framework/vite.config.js
+++ b/packages/graph-framework/vite.config.js
@@ -1,10 +1,10 @@
-import { defineConfig } from "vite";
-import react from "@vitejs/plugin-react";
+import react from '@vitejs/plugin-react';
+import { defineConfig } from 'vite';
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
test: {
- environment: "jsdom",
+ environment: 'jsdom',
},
});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 14b8758b..4da6a99e 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,6 +8,9 @@ importers:
.:
devDependencies:
+ '@biomejs/biome':
+ specifier: 1.9.4
+ version: 1.9.4
escape-string-regexp:
specifier: ^5.0.0
version: 5.0.0
@@ -90,9 +93,9 @@ importers:
specifier: ^0.22.0
version: 0.22.0(rollup@4.21.3)(vite@5.4.10(@types/node@22.9.0))
devDependencies:
- '@eslint/js':
- specifier: ^9.12.0
- version: 9.14.0
+ '@biomejs/biome':
+ specifier: 1.9.4
+ version: 1.9.4
'@tanstack/router-devtools':
specifier: ^1.62.1
version: 1.79.0(@tanstack/react-router@1.79.0(@tanstack/router-generator@1.79.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -117,15 +120,6 @@ importers:
autoprefixer:
specifier: ^10.4.20
version: 10.4.20(postcss@8.4.47)
- eslint:
- specifier: ^9.12.0
- version: 9.14.0(jiti@1.21.6)
- eslint-plugin-react-hooks:
- specifier: ^5.1.0-rc.0
- version: 5.1.0-rc-fb9a90fa48-20240614(eslint@9.14.0(jiti@1.21.6))
- eslint-plugin-react-refresh:
- specifier: ^0.4.9
- version: 0.4.14(eslint@9.14.0(jiti@1.21.6))
globals:
specifier: ^15.10.0
version: 15.12.0
@@ -135,12 +129,6 @@ importers:
tailwindcss:
specifier: ^3.4.13
version: 3.4.14(ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@22.9.0)(typescript@5.6.3))
- typescript:
- specifier: ^5.5.3
- version: 5.6.3
- typescript-eslint:
- specifier: ^8.8.0
- version: 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)
vite-plugin-top-level-await:
specifier: ^1.4.4
version: 1.4.4(@swc/helpers@0.5.13)(rollup@4.21.3)(vite@5.4.10(@types/node@22.9.0))
@@ -549,6 +537,59 @@ packages:
resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==}
engines: {node: '>=6.9.0'}
+ '@biomejs/biome@1.9.4':
+ resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==}
+ engines: {node: '>=14.21.3'}
+ hasBin: true
+
+ '@biomejs/cli-darwin-arm64@1.9.4':
+ resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@biomejs/cli-darwin-x64@1.9.4':
+ resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@biomejs/cli-linux-arm64-musl@1.9.4':
+ resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@biomejs/cli-linux-arm64@1.9.4':
+ resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@biomejs/cli-linux-x64-musl@1.9.4':
+ resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [linux]
+
+ '@biomejs/cli-linux-x64@1.9.4':
+ resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [linux]
+
+ '@biomejs/cli-win32-arm64@1.9.4':
+ resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@biomejs/cli-win32-x64@1.9.4':
+ resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [win32]
+
'@cbor-extract/cbor-extract-darwin-arm64@2.2.0':
resolution: {integrity: sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w==}
cpu: [arm64]
@@ -877,46 +918,6 @@ packages:
cpu: [x64]
os: [win32]
- '@eslint-community/eslint-utils@4.4.0':
- resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
-
- '@eslint-community/eslint-utils@4.4.1':
- resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
-
- '@eslint-community/regexpp@4.12.1':
- resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
- engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
-
- '@eslint/config-array@0.18.0':
- resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@eslint/core@0.7.0':
- resolution: {integrity: sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@eslint/eslintrc@3.1.0':
- resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@eslint/js@9.14.0':
- resolution: {integrity: sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@eslint/object-schema@2.1.4':
- resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@eslint/plugin-kit@0.2.0':
- resolution: {integrity: sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
'@ethereumjs/common@3.2.0':
resolution: {integrity: sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==}
@@ -1060,26 +1061,6 @@ packages:
peerDependencies:
react: '>= 16'
- '@humanfs/core@0.19.1':
- resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
- engines: {node: '>=18.18.0'}
-
- '@humanfs/node@0.16.6':
- resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
- engines: {node: '>=18.18.0'}
-
- '@humanwhocodes/module-importer@1.0.1':
- resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
- engines: {node: '>=12.22'}
-
- '@humanwhocodes/retry@0.3.1':
- resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
- engines: {node: '>=18.18'}
-
- '@humanwhocodes/retry@0.4.1':
- resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==}
- engines: {node: '>=18.18'}
-
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
@@ -1922,9 +1903,6 @@ packages:
'@types/http-errors@2.0.4':
resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==}
- '@types/json-schema@7.0.15':
- resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
-
'@types/mime@1.3.5':
resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
@@ -1982,63 +1960,6 @@ packages:
'@types/ws@8.5.13':
resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==}
- '@typescript-eslint/eslint-plugin@8.13.0':
- resolution: {integrity: sha512-nQtBLiZYMUPkclSeC3id+x4uVd1SGtHuElTxL++SfP47jR0zfkZBJHc+gL4qPsgTuypz0k8Y2GheaDYn6Gy3rg==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
- eslint: ^8.57.0 || ^9.0.0
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- '@typescript-eslint/parser@8.13.0':
- resolution: {integrity: sha512-w0xp+xGg8u/nONcGw1UXAr6cjCPU1w0XVyBs6Zqaj5eLmxkKQAByTdV/uGgNN5tVvN/kKpoQlP2cL7R+ajZZIQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- '@typescript-eslint/scope-manager@8.13.0':
- resolution: {integrity: sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@typescript-eslint/type-utils@8.13.0':
- resolution: {integrity: sha512-Rqnn6xXTR316fP4D2pohZenJnp+NwQ1mo7/JM+J1LWZENSLkJI8ID8QNtlvFeb0HnFSK94D6q0cnMX6SbE5/vA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- '@typescript-eslint/types@8.13.0':
- resolution: {integrity: sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@typescript-eslint/typescript-estree@8.13.0':
- resolution: {integrity: sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- '@typescript-eslint/utils@8.13.0':
- resolution: {integrity: sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
-
- '@typescript-eslint/visitor-keys@8.13.0':
- resolution: {integrity: sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
'@vitejs/plugin-react@4.3.3':
resolution: {integrity: sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==}
engines: {node: ^14.18.0 || >=16.0.0}
@@ -2289,11 +2210,6 @@ packages:
resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
engines: {node: '>= 0.6'}
- acorn-jsx@5.3.2:
- resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
- peerDependencies:
- acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
-
acorn-walk@8.3.4:
resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
engines: {node: '>=0.4.0'}
@@ -2338,9 +2254,6 @@ packages:
ajv:
optional: true
- ajv@6.12.6:
- resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
-
ajv@8.12.0:
resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
@@ -2387,9 +2300,6 @@ packages:
argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
- argparse@2.0.1:
- resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
-
aria-query@5.3.0:
resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
@@ -2557,10 +2467,6 @@ packages:
resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
engines: {node: '>= 0.4'}
- callsites@3.1.0:
- resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
- engines: {node: '>=6'}
-
camelcase-css@2.0.1:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
@@ -2850,9 +2756,6 @@ packages:
resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
engines: {node: '>=6'}
- deep-is@0.1.4:
- resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
-
define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
@@ -3042,77 +2945,20 @@ packages:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
- escape-string-regexp@4.0.0:
- resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
- engines: {node: '>=10'}
-
escape-string-regexp@5.0.0:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
- eslint-plugin-react-hooks@5.1.0-rc-fb9a90fa48-20240614:
- resolution: {integrity: sha512-xsiRwaDNF5wWNC4ZHLut+x/YcAxksUd9Rizt7LaEn3bV8VyYRpXnRJQlLOfYaVy9esk4DFP4zPPnoNVjq5Gc0w==}
- engines: {node: '>=10'}
- peerDependencies:
- eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
-
- eslint-plugin-react-refresh@0.4.14:
- resolution: {integrity: sha512-aXvzCTK7ZBv1e7fahFuR3Z/fyQQSIQ711yPgYRj+Oj64tyTgO4iQIDmYXDBqvSWQ/FA4OSCsXOStlF+noU0/NA==}
- peerDependencies:
- eslint: '>=7'
-
- eslint-scope@8.2.0:
- resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- eslint-visitor-keys@3.4.3:
- resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
- eslint-visitor-keys@4.2.0:
- resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- eslint@9.14.0:
- resolution: {integrity: sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- hasBin: true
- peerDependencies:
- jiti: '*'
- peerDependenciesMeta:
- jiti:
- optional: true
-
esniff@2.0.1:
resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==}
engines: {node: '>=0.10'}
- espree@10.3.0:
- resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- esquery@1.6.0:
- resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
- engines: {node: '>=0.10'}
-
- esrecurse@4.3.0:
- resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
- engines: {node: '>=4.0'}
-
- estraverse@5.3.0:
- resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
- engines: {node: '>=4.0'}
-
estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
- esutils@2.0.3:
- resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
- engines: {node: '>=0.10.0'}
-
etag@1.8.1:
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
engines: {node: '>= 0.6'}
@@ -3194,12 +3040,6 @@ packages:
resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
engines: {node: '>=8.6.0'}
- fast-json-stable-stringify@2.1.0:
- resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
-
- fast-levenshtein@2.0.6:
- resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
-
fast-password-entropy@1.1.1:
resolution: {integrity: sha512-dxm29/BPFrNgyEDygg/lf9c2xQR0vnQhG7+hZjAI39M/3um9fD4xiqG6F0ZjW6bya5m9CI0u6YryHGRtxCGCiw==}
@@ -3222,10 +3062,6 @@ packages:
fetch-retry@5.0.6:
resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==}
- file-entry-cache@8.0.0:
- resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
- engines: {node: '>=16.0.0'}
-
file-uri-to-path@1.0.0:
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
@@ -3249,13 +3085,6 @@ packages:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
- flat-cache@4.0.1:
- resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
- engines: {node: '>=16'}
-
- flatted@3.3.1:
- resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
-
for-each@0.3.3:
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
@@ -3332,10 +3161,6 @@ packages:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
engines: {node: '>=4'}
- globals@14.0.0:
- resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
- engines: {node: '>=18'}
-
globals@15.12.0:
resolution: {integrity: sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==}
engines: {node: '>=18'}
@@ -3351,9 +3176,6 @@ packages:
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
- graphemer@1.4.0:
- resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
-
h3@1.12.0:
resolution: {integrity: sha512-Zi/CcNeWBXDrFNlV0hUBJQR9F7a96RjMeAZweW/ZWkR9fuXrMcvKnSA63f/zZ9l0GgQOZDVHGvXivNN9PWOwhA==}
@@ -3458,22 +3280,10 @@ packages:
ignore-by-default@1.0.1:
resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==}
- ignore@5.3.2:
- resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
- engines: {node: '>= 4'}
-
- import-fresh@3.3.0:
- resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
- engines: {node: '>=6'}
-
import-lazy@4.0.0:
resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
engines: {node: '>=8'}
- imurmurhash@0.1.4:
- resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
- engines: {node: '>=0.8.19'}
-
indent-string@4.0.0:
resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
engines: {node: '>=8'}
@@ -3627,10 +3437,6 @@ packages:
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
- js-yaml@4.1.0:
- resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
- hasBin: true
-
jsdom@25.0.1:
resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==}
engines: {node: '>=18'}
@@ -3650,18 +3456,9 @@ packages:
engines: {node: '>=6'}
hasBin: true
- json-buffer@3.0.1:
- resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
-
- json-schema-traverse@0.4.1:
- resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
-
json-schema-traverse@1.0.0:
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
- json-stable-stringify-without-jsonify@1.0.1:
- resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
-
json-stringify-safe@5.0.1:
resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
@@ -3681,19 +3478,12 @@ packages:
resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==}
engines: {node: '>=10.0.0'}
- keyv@4.5.4:
- resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
-
keyvaluestorage-interface@1.0.0:
resolution: {integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==}
kolorist@1.8.0:
resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
- levn@0.4.1:
- resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
- engines: {node: '>= 0.8.0'}
-
libphonenumber-js@1.11.13:
resolution: {integrity: sha512-LIJmXxgs7o1njVZPcX5fkbtcFgDnXXPvJQQBH5Ho/8+r6BFlJaEbJ+bAiaUGaChWUhFtvawwdmXIOz4wZBANCg==}
@@ -3736,9 +3526,6 @@ packages:
lodash.isequal@4.5.0:
resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
- lodash.merge@4.6.2:
- resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
-
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
@@ -3913,9 +3700,6 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- natural-compare@1.4.0:
- resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
-
negotiator@1.0.0:
resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
engines: {node: '>= 0.6'}
@@ -4038,10 +3822,6 @@ packages:
resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
engines: {node: '>=12'}
- optionator@0.9.4:
- resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
- engines: {node: '>= 0.8.0'}
-
os-browserify@0.3.0:
resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==}
@@ -4071,10 +3851,6 @@ packages:
pako@1.0.11:
resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
- parent-module@1.0.1:
- resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
- engines: {node: '>=6'}
-
parse-asn1@5.1.7:
resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==}
engines: {node: '>= 0.10'}
@@ -4260,10 +4036,6 @@ packages:
preact@10.24.1:
resolution: {integrity: sha512-PnBAwFI3Yjxxcxw75n6VId/5TFxNW/81zexzWD9jn1+eSrOP84NdsS38H5IkF/UH3frqRPT+MvuCoVHjTDTnDw==}
- prelude-ls@1.2.1:
- resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
- engines: {node: '>= 0.8.0'}
-
prettier@3.3.3:
resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
engines: {node: '>=14'}
@@ -4430,10 +4202,6 @@ packages:
require-main-filename@2.0.0:
resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
- resolve-from@4.0.0:
- resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
- engines: {node: '>=4'}
-
resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
@@ -4724,9 +4492,6 @@ packages:
text-encoding-utf-8@1.0.2:
resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==}
- text-table@0.2.0:
- resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
-
thenify-all@1.6.0:
resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
engines: {node: '>=0.8'}
@@ -4808,12 +4573,6 @@ packages:
resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==}
engines: {node: '>=18'}
- ts-api-utils@1.4.0:
- resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==}
- engines: {node: '>=16'}
- peerDependencies:
- typescript: '>=4.2.0'
-
ts-interface-checker@0.1.13:
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
@@ -4857,10 +4616,6 @@ packages:
tweetnacl@1.0.3:
resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==}
- type-check@0.4.0:
- resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
- engines: {node: '>= 0.8.0'}
-
type-is@1.6.18:
resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
engines: {node: '>= 0.6'}
@@ -4875,15 +4630,6 @@ packages:
typedarray-to-buffer@3.1.5:
resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==}
- typescript-eslint@8.13.0:
- resolution: {integrity: sha512-vIMpDRJrQd70au2G8w34mPps0ezFSPMEX4pXkTzUkrNbRX+36ais2ksGWN0esZL+ZMaFJEneOBHzCgSqle7DHw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
-
typescript@5.4.2:
resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==}
engines: {node: '>=14.17'}
@@ -5286,10 +5032,6 @@ packages:
engines: {node: '>=8'}
hasBin: true
- word-wrap@1.2.5:
- resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
- engines: {node: '>=0.10.0'}
-
wrap-ansi@6.2.0:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'}
@@ -5725,6 +5467,41 @@ snapshots:
'@babel/helper-string-parser': 7.25.9
'@babel/helper-validator-identifier': 7.25.9
+ '@biomejs/biome@1.9.4':
+ optionalDependencies:
+ '@biomejs/cli-darwin-arm64': 1.9.4
+ '@biomejs/cli-darwin-x64': 1.9.4
+ '@biomejs/cli-linux-arm64': 1.9.4
+ '@biomejs/cli-linux-arm64-musl': 1.9.4
+ '@biomejs/cli-linux-x64': 1.9.4
+ '@biomejs/cli-linux-x64-musl': 1.9.4
+ '@biomejs/cli-win32-arm64': 1.9.4
+ '@biomejs/cli-win32-x64': 1.9.4
+
+ '@biomejs/cli-darwin-arm64@1.9.4':
+ optional: true
+
+ '@biomejs/cli-darwin-x64@1.9.4':
+ optional: true
+
+ '@biomejs/cli-linux-arm64-musl@1.9.4':
+ optional: true
+
+ '@biomejs/cli-linux-arm64@1.9.4':
+ optional: true
+
+ '@biomejs/cli-linux-x64-musl@1.9.4':
+ optional: true
+
+ '@biomejs/cli-linux-x64@1.9.4':
+ optional: true
+
+ '@biomejs/cli-win32-arm64@1.9.4':
+ optional: true
+
+ '@biomejs/cli-win32-x64@1.9.4':
+ optional: true
+
'@cbor-extract/cbor-extract-darwin-arm64@2.2.0':
optional: true
@@ -5905,50 +5682,6 @@ snapshots:
'@esbuild/win32-x64@0.23.1':
optional: true
- '@eslint-community/eslint-utils@4.4.0(eslint@9.14.0(jiti@1.21.6))':
- dependencies:
- eslint: 9.14.0(jiti@1.21.6)
- eslint-visitor-keys: 3.4.3
-
- '@eslint-community/eslint-utils@4.4.1(eslint@9.14.0(jiti@1.21.6))':
- dependencies:
- eslint: 9.14.0(jiti@1.21.6)
- eslint-visitor-keys: 3.4.3
-
- '@eslint-community/regexpp@4.12.1': {}
-
- '@eslint/config-array@0.18.0':
- dependencies:
- '@eslint/object-schema': 2.1.4
- debug: 4.3.7(supports-color@5.5.0)
- minimatch: 3.1.2
- transitivePeerDependencies:
- - supports-color
-
- '@eslint/core@0.7.0': {}
-
- '@eslint/eslintrc@3.1.0':
- dependencies:
- ajv: 6.12.6
- debug: 4.3.7(supports-color@5.5.0)
- espree: 10.3.0
- globals: 14.0.0
- ignore: 5.3.2
- import-fresh: 3.3.0
- js-yaml: 4.1.0
- minimatch: 3.1.2
- strip-json-comments: 3.1.1
- transitivePeerDependencies:
- - supports-color
-
- '@eslint/js@9.14.0': {}
-
- '@eslint/object-schema@2.1.4': {}
-
- '@eslint/plugin-kit@0.2.0':
- dependencies:
- levn: 0.4.1
-
'@ethereumjs/common@3.2.0':
dependencies:
'@ethereumjs/util': 8.1.0
@@ -6262,19 +5995,6 @@ snapshots:
dependencies:
react: 18.3.1
- '@humanfs/core@0.19.1': {}
-
- '@humanfs/node@0.16.6':
- dependencies:
- '@humanfs/core': 0.19.1
- '@humanwhocodes/retry': 0.3.1
-
- '@humanwhocodes/module-importer@1.0.1': {}
-
- '@humanwhocodes/retry@0.3.1': {}
-
- '@humanwhocodes/retry@0.4.1': {}
-
'@isaacs/cliui@8.0.2':
dependencies:
string-width: 5.1.2
@@ -7278,8 +6998,6 @@ snapshots:
'@types/http-errors@2.0.4': {}
- '@types/json-schema@7.0.15': {}
-
'@types/mime@1.3.5': {}
'@types/ms@0.7.34': {}
@@ -7342,87 +7060,6 @@ snapshots:
dependencies:
'@types/node': 22.9.0
- '@typescript-eslint/eslint-plugin@8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)':
- dependencies:
- '@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)
- '@typescript-eslint/scope-manager': 8.13.0
- '@typescript-eslint/type-utils': 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)
- '@typescript-eslint/utils': 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)
- '@typescript-eslint/visitor-keys': 8.13.0
- eslint: 9.14.0(jiti@1.21.6)
- graphemer: 1.4.0
- ignore: 5.3.2
- natural-compare: 1.4.0
- ts-api-utils: 1.4.0(typescript@5.6.3)
- optionalDependencies:
- typescript: 5.6.3
- transitivePeerDependencies:
- - supports-color
-
- '@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)':
- dependencies:
- '@typescript-eslint/scope-manager': 8.13.0
- '@typescript-eslint/types': 8.13.0
- '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3)
- '@typescript-eslint/visitor-keys': 8.13.0
- debug: 4.3.7(supports-color@5.5.0)
- eslint: 9.14.0(jiti@1.21.6)
- optionalDependencies:
- typescript: 5.6.3
- transitivePeerDependencies:
- - supports-color
-
- '@typescript-eslint/scope-manager@8.13.0':
- dependencies:
- '@typescript-eslint/types': 8.13.0
- '@typescript-eslint/visitor-keys': 8.13.0
-
- '@typescript-eslint/type-utils@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)':
- dependencies:
- '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3)
- '@typescript-eslint/utils': 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)
- debug: 4.3.7(supports-color@5.5.0)
- ts-api-utils: 1.4.0(typescript@5.6.3)
- optionalDependencies:
- typescript: 5.6.3
- transitivePeerDependencies:
- - eslint
- - supports-color
-
- '@typescript-eslint/types@8.13.0': {}
-
- '@typescript-eslint/typescript-estree@8.13.0(typescript@5.6.3)':
- dependencies:
- '@typescript-eslint/types': 8.13.0
- '@typescript-eslint/visitor-keys': 8.13.0
- debug: 4.3.7(supports-color@5.5.0)
- fast-glob: 3.3.2
- is-glob: 4.0.3
- minimatch: 9.0.5
- semver: 7.6.3
- ts-api-utils: 1.4.0(typescript@5.6.3)
- optionalDependencies:
- typescript: 5.6.3
- transitivePeerDependencies:
- - supports-color
-
- '@typescript-eslint/utils@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)':
- dependencies:
- '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0(jiti@1.21.6))
- '@typescript-eslint/scope-manager': 8.13.0
- '@typescript-eslint/types': 8.13.0
- '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3)
- eslint: 9.14.0(jiti@1.21.6)
- transitivePeerDependencies:
- - supports-color
- - typescript
-
- '@typescript-eslint/visitor-keys@8.13.0':
- dependencies:
- '@typescript-eslint/types': 8.13.0
- eslint-visitor-keys: 3.4.3
-
'@vitejs/plugin-react@4.3.3(vite@5.4.10(@types/node@22.9.0))':
dependencies:
'@babel/core': 7.25.2
@@ -7992,10 +7629,6 @@ snapshots:
mime-types: 3.0.0
negotiator: 1.0.0
- acorn-jsx@5.3.2(acorn@8.14.0):
- dependencies:
- acorn: 8.14.0
-
acorn-walk@8.3.4:
dependencies:
acorn: 8.12.1
@@ -8026,13 +7659,6 @@ snapshots:
optionalDependencies:
ajv: 8.13.0
- ajv@6.12.6:
- dependencies:
- fast-deep-equal: 3.1.3
- fast-json-stable-stringify: 2.1.0
- json-schema-traverse: 0.4.1
- uri-js: 4.4.1
-
ajv@8.12.0:
dependencies:
fast-deep-equal: 3.1.3
@@ -8078,8 +7704,6 @@ snapshots:
dependencies:
sprintf-js: 1.0.3
- argparse@2.0.1: {}
-
aria-query@5.3.0:
dependencies:
dequal: 2.0.3
@@ -8304,8 +7928,6 @@ snapshots:
get-intrinsic: 1.2.4
set-function-length: 1.2.2
- callsites@3.1.0: {}
-
camelcase-css@2.0.1: {}
camelcase@5.3.1: {}
@@ -8584,8 +8206,6 @@ snapshots:
deep-eql@5.0.2: {}
- deep-is@0.1.4: {}
-
define-data-property@1.1.4:
dependencies:
es-define-property: 1.0.0
@@ -8812,69 +8432,8 @@ snapshots:
escape-string-regexp@1.0.5: {}
- escape-string-regexp@4.0.0: {}
-
escape-string-regexp@5.0.0: {}
- eslint-plugin-react-hooks@5.1.0-rc-fb9a90fa48-20240614(eslint@9.14.0(jiti@1.21.6)):
- dependencies:
- eslint: 9.14.0(jiti@1.21.6)
-
- eslint-plugin-react-refresh@0.4.14(eslint@9.14.0(jiti@1.21.6)):
- dependencies:
- eslint: 9.14.0(jiti@1.21.6)
-
- eslint-scope@8.2.0:
- dependencies:
- esrecurse: 4.3.0
- estraverse: 5.3.0
-
- eslint-visitor-keys@3.4.3: {}
-
- eslint-visitor-keys@4.2.0: {}
-
- eslint@9.14.0(jiti@1.21.6):
- dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@1.21.6))
- '@eslint-community/regexpp': 4.12.1
- '@eslint/config-array': 0.18.0
- '@eslint/core': 0.7.0
- '@eslint/eslintrc': 3.1.0
- '@eslint/js': 9.14.0
- '@eslint/plugin-kit': 0.2.0
- '@humanfs/node': 0.16.6
- '@humanwhocodes/module-importer': 1.0.1
- '@humanwhocodes/retry': 0.4.1
- '@types/estree': 1.0.6
- '@types/json-schema': 7.0.15
- ajv: 6.12.6
- chalk: 4.1.2
- cross-spawn: 7.0.3
- debug: 4.3.7(supports-color@5.5.0)
- escape-string-regexp: 4.0.0
- eslint-scope: 8.2.0
- eslint-visitor-keys: 4.2.0
- espree: 10.3.0
- esquery: 1.6.0
- esutils: 2.0.3
- fast-deep-equal: 3.1.3
- file-entry-cache: 8.0.0
- find-up: 5.0.0
- glob-parent: 6.0.2
- ignore: 5.3.2
- imurmurhash: 0.1.4
- is-glob: 4.0.3
- json-stable-stringify-without-jsonify: 1.0.1
- lodash.merge: 4.6.2
- minimatch: 3.1.2
- natural-compare: 1.4.0
- optionator: 0.9.4
- text-table: 0.2.0
- optionalDependencies:
- jiti: 1.21.6
- transitivePeerDependencies:
- - supports-color
-
esniff@2.0.1:
dependencies:
d: 1.0.2
@@ -8882,30 +8441,12 @@ snapshots:
event-emitter: 0.3.5
type: 2.7.3
- espree@10.3.0:
- dependencies:
- acorn: 8.14.0
- acorn-jsx: 5.3.2(acorn@8.14.0)
- eslint-visitor-keys: 4.2.0
-
- esquery@1.6.0:
- dependencies:
- estraverse: 5.3.0
-
- esrecurse@4.3.0:
- dependencies:
- estraverse: 5.3.0
-
- estraverse@5.3.0: {}
-
estree-walker@2.0.2: {}
estree-walker@3.0.3:
dependencies:
'@types/estree': 1.0.6
- esutils@2.0.3: {}
-
etag@1.8.1: {}
ethereum-bloom-filters@1.2.0:
@@ -9071,10 +8612,6 @@ snapshots:
merge2: 1.4.1
micromatch: 4.0.8
- fast-json-stable-stringify@2.1.0: {}
-
- fast-levenshtein@2.0.6: {}
-
fast-password-entropy@1.1.1: {}
fast-redact@3.5.0: {}
@@ -9091,10 +8628,6 @@ snapshots:
fetch-retry@5.0.6: {}
- file-entry-cache@8.0.0:
- dependencies:
- flat-cache: 4.0.1
-
file-uri-to-path@1.0.0: {}
fill-range@7.1.1:
@@ -9125,13 +8658,6 @@ snapshots:
locate-path: 6.0.0
path-exists: 4.0.0
- flat-cache@4.0.1:
- dependencies:
- flatted: 3.3.1
- keyv: 4.5.4
-
- flatted@3.3.1: {}
-
for-each@0.3.3:
dependencies:
is-callable: 1.2.7
@@ -9205,8 +8731,6 @@ snapshots:
globals@11.12.0: {}
- globals@14.0.0: {}
-
globals@15.12.0: {}
goober@2.1.16(csstype@3.1.3):
@@ -9219,8 +8743,6 @@ snapshots:
graceful-fs@4.2.11: {}
- graphemer@1.4.0: {}
-
h3@1.12.0:
dependencies:
cookie-es: 1.2.2
@@ -9336,17 +8858,8 @@ snapshots:
ignore-by-default@1.0.1: {}
- ignore@5.3.2: {}
-
- import-fresh@3.3.0:
- dependencies:
- parent-module: 1.0.1
- resolve-from: 4.0.0
-
import-lazy@4.0.0: {}
- imurmurhash@0.1.4: {}
-
indent-string@4.0.0: {}
inherits@2.0.4: {}
@@ -9475,10 +8988,6 @@ snapshots:
js-tokens@4.0.0: {}
- js-yaml@4.1.0:
- dependencies:
- argparse: 2.0.1
-
jsdom@25.0.1(bufferutil@4.0.8)(utf-8-validate@5.0.10):
dependencies:
cssstyle: 4.1.0
@@ -9511,14 +9020,8 @@ snapshots:
jsesc@3.0.2: {}
- json-buffer@3.0.1: {}
-
- json-schema-traverse@0.4.1: {}
-
json-schema-traverse@1.0.0: {}
- json-stable-stringify-without-jsonify@1.0.1: {}
-
json-stringify-safe@5.0.1: {}
json5@2.2.3: {}
@@ -9535,19 +9038,10 @@ snapshots:
node-gyp-build: 4.8.2
readable-stream: 3.6.2
- keyv@4.5.4:
- dependencies:
- json-buffer: 3.0.1
-
keyvaluestorage-interface@1.0.0: {}
kolorist@1.8.0: {}
- levn@0.4.1:
- dependencies:
- prelude-ls: 1.2.1
- type-check: 0.4.0
-
libphonenumber-js@1.11.13: {}
lilconfig@2.1.0: {}
@@ -9610,8 +9104,6 @@ snapshots:
lodash.isequal@4.5.0: {}
- lodash.merge@4.6.2: {}
-
lodash@4.17.21: {}
lokijs@1.5.12: {}
@@ -9760,8 +9252,6 @@ snapshots:
nanoid@3.3.7: {}
- natural-compare@1.4.0: {}
-
negotiator@1.0.0: {}
next-tick@1.1.0: {}
@@ -9897,15 +9387,6 @@ snapshots:
dependencies:
mimic-fn: 4.0.0
- optionator@0.9.4:
- dependencies:
- deep-is: 0.1.4
- fast-levenshtein: 2.0.6
- levn: 0.4.1
- prelude-ls: 1.2.1
- type-check: 0.4.0
- word-wrap: 1.2.5
-
os-browserify@0.3.0: {}
p-limit@2.3.0:
@@ -9930,10 +9411,6 @@ snapshots:
pako@1.0.11: {}
- parent-module@1.0.1:
- dependencies:
- callsites: 3.1.0
-
parse-asn1@5.1.7:
dependencies:
asn1.js: 4.10.1
@@ -10123,8 +9600,6 @@ snapshots:
preact@10.24.1: {}
- prelude-ls@1.2.1: {}
-
prettier@3.3.3: {}
pretty-format@27.5.1:
@@ -10310,8 +9785,6 @@ snapshots:
require-main-filename@2.0.0: {}
- resolve-from@4.0.0: {}
-
resolve-pkg-maps@1.0.0: {}
resolve@1.22.8:
@@ -10652,8 +10125,6 @@ snapshots:
text-encoding-utf-8@1.0.2: {}
- text-table@0.2.0: {}
-
thenify-all@1.6.0:
dependencies:
thenify: 3.3.1
@@ -10716,10 +10187,6 @@ snapshots:
dependencies:
punycode: 2.3.1
- ts-api-utils@1.4.0(typescript@5.6.3):
- dependencies:
- typescript: 5.6.3
-
ts-interface-checker@0.1.13: {}
ts-node@10.9.2(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@22.9.0)(typescript@5.6.3):
@@ -10763,10 +10230,6 @@ snapshots:
tweetnacl@1.0.3: {}
- type-check@0.4.0:
- dependencies:
- prelude-ls: 1.2.1
-
type-is@1.6.18:
dependencies:
media-typer: 0.3.0
@@ -10784,17 +10247,6 @@ snapshots:
dependencies:
is-typedarray: 1.0.0
- typescript-eslint@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3):
- dependencies:
- '@typescript-eslint/eslint-plugin': 8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)
- '@typescript-eslint/parser': 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)
- '@typescript-eslint/utils': 8.13.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)
- optionalDependencies:
- typescript: 5.6.3
- transitivePeerDependencies:
- - eslint
- - supports-color
-
typescript@5.4.2: {}
typescript@5.6.3: {}
@@ -11234,8 +10686,6 @@ snapshots:
siginfo: 2.0.0
stackback: 0.0.2
- word-wrap@1.2.5: {}
-
wrap-ansi@6.2.0:
dependencies:
ansi-styles: 4.3.0
diff --git a/vitest.workspace.js b/vitest.workspace.js
new file mode 100644
index 00000000..84d0a667
--- /dev/null
+++ b/vitest.workspace.js
@@ -0,0 +1,10 @@
+import { defineWorkspace } from 'vitest/config';
+
+export default defineWorkspace([
+ './packages/graph-framework-utils/vite.config.mts',
+ './packages/graph-framework/vite.config.js',
+ './packages/graph-framework-schema/vite.config.js',
+ './packages/graph-framework-identity/vite.config.js',
+ './packages/graph-framework-space-events/vite.config.js',
+ './apps/events/vite.config.ts',
+]);