diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml
index 5e4377a..459d4b4 100644
--- a/.github/workflows/main.yaml
+++ b/.github/workflows/main.yaml
@@ -6,6 +6,9 @@ on:
branches: ["**"]
tags: ["*.*.*"]
+env:
+ AUBE_ALLOWED_UNPOPULAR_PACKAGES: pglite-cli
+
jobs:
check:
runs-on: ubuntu-latest
diff --git a/.gitignore b/.gitignore
index a2dc17f..ad4cc88 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,11 @@
.DS_Store
+*.graphql
+*.graphql.ts
+__generated__/
.pgdata/
+
node_modules/
packages/*/dist/
+
+index.db
diff --git a/.oxfmtrc.json b/.oxfmtrc.json
index dfd6973..0c1ebc8 100644
--- a/.oxfmtrc.json
+++ b/.oxfmtrc.json
@@ -8,6 +8,7 @@
"**/dist/*.{cjs,d.cts,d.mts,d.ts,js,mjs}",
".agents/skills/",
".claude/skills/",
- "plans/"
+ "plans/",
+ "**/__generated__/**"
]
}
diff --git a/.oxlintrc.json b/.oxlintrc.json
index 97a9e9d..9126f90 100644
--- a/.oxlintrc.json
+++ b/.oxlintrc.json
@@ -24,8 +24,12 @@
{ "ignoreConsecutiveComments": true }
],
"eslint/curly": ["error", "multi-line"],
+ "node/no-top-level-await": "off",
+ "oxc/no-optional-chaining": "off",
+ "oxc/no-async-await": "off",
"eslint/eqeqeq": ["off", "smart"],
"eslint/func-style": ["off"],
+ "eslint/max-lines-per-function": "off",
"eslint/id-length": ["warn", { "exceptionPatterns": ["^_", "^[Tertv]$"] }],
"eslint/init-declarations": "off",
"eslint/max-params": ["warn", { "max": 4 }],
diff --git a/mise.toml b/mise.toml
index ad24229..3ff244d 100644
--- a/mise.toml
+++ b/mise.toml
@@ -2,12 +2,12 @@ min_version = "2026.6.10"
[tools]
"aqua:dahlia/hongdown" = "0.4.3"
-"github:nushell/nushell" = "latest"
+"github:nushell/nushell" = "0.114.1"
node = "26"
"npm:@typescript/native-preview" = "7.0.0-dev.20260620.1"
-"npm:oxlint" = "latest"
-"npm:oxlint-tsgolint" = "latest"
-"npm:pglite-cli" = "latest"
+"npm:oxlint" = "1.75.0"
+"npm:oxlint-tsgolint" = "7.0.2001"
+"npm:pglite-cli" = "0.0.1"
oxfmt = "0.55.0"
pnpm = "11"
@@ -17,10 +17,26 @@ auto = true
[hooks]
postinstall = ["mise deps", "mise generate git-pre-commit --task check --write"]
+[tasks.build]
+description = "Build the project"
+depends = ["build:web"]
+silent = "stdout"
+
+[tasks."build:server"]
+description = "Build the project except web"
+run = "pnpm --parallel -F @drfed/graphql -F @drfed/models -F @drfed/drfed build"
+silent = "stdout"
+
[tasks."build:web"]
description = "Build SolidStart frontend server"
+depends = [
+ { task = "generate:graphql-schema", args = [
+ "--output-file",
+ "packages/web/schema.graphql",
+ ] },
+]
dir = "./packages/web"
-run = "pnpm run build"
+run = "pnpm exec relay-compiler --noWatchman && pnpm run build"
[tasks.check]
description = "Check all"
@@ -77,11 +93,6 @@ run = """
node scripts/add-license/main.mts
"""
-[tasks.build]
-description = "Build the project"
-run = "pnpm run --parallel --recursive build"
-silent = "stdout"
-
[tasks.test]
description = "Run tests"
depends = ["build"]
@@ -130,7 +141,7 @@ description = "Generate GraphQL schema"
usage = """
flag "-o --output-file " help="The output file for the generated GraphQL schema. - for stdout. Defaults to -"
"""
-depends = ["build"]
+depends = ["build:server"]
run = """
#!/usr/bin/env nu
let output_file = (if "usage_output_file" in $env { $env.usage_output_file } else { "-" })
@@ -154,7 +165,11 @@ run = "node scripts/dev.mts"
raw_args = true
description = "Run SolidStart frontend server"
dir = "./packages/web"
-run = "pnpm run dev"
+run = """
+#!/usr/bin/env nu
+mise run generate:graphql-schema --output-file ./packages/web/schema.graphql
+pnpm run dev
+"""
[tasks."drfed-server"]
description = "Invoke drfed-server command"
diff --git a/packages/graphql/src/index.ts b/packages/graphql/src/index.ts
index 115ec9a..9e991b4 100644
--- a/packages/graphql/src/index.ts
+++ b/packages/graphql/src/index.ts
@@ -62,6 +62,10 @@ export function createYogaServer(
): YogaServerInstance {
const options = fillOptions(_options);
return createYoga({
+ cors: {
+ origin: [...options.origins],
+ credentials: true,
+ },
async context(ctx) {
const anonymous = { db, request: ctx.request, ...options };
const accessToken = getAccessToken(ctx.request.headers);
@@ -92,7 +96,14 @@ function mockTransport() {
const fillOptions = (opt: YogaServerOptions): Required => ({
mailer: opt?.mailer ?? mockTransport(),
emailFrom: opt?.emailFrom ?? "noreply@drfed.org",
- origins: opt?.origins ?? new Set(["https://drfed.org"]),
+ // FIXME: Properly parametrize the following allowlist:
+ origins:
+ opt?.origins ??
+ new Set([
+ "https://drfed.org",
+ "http://localhost:5173",
+ "http://0.0.0.0:5173",
+ ]),
});
const getAccessToken = (headers: Headers) =>
diff --git a/packages/web/.env.example b/packages/web/.env.example
new file mode 100644
index 0000000..8ed9c2c
--- /dev/null
+++ b/packages/web/.env.example
@@ -0,0 +1 @@
+VITE_DRFED_URL=http://0.0.0.0:8888/graphql
diff --git a/packages/web/.oxlintrc.json b/packages/web/.oxlintrc.json
index 201f4f4..147817a 100644
--- a/packages/web/.oxlintrc.json
+++ b/packages/web/.oxlintrc.json
@@ -1,5 +1,6 @@
{
"extends": ["../../.oxlintrc.json"],
+ "ignorePatterns": ["**/__generated__/**"],
"jsPlugins": ["eslint-plugin-solid"],
"env": {
"browser": true,
diff --git a/packages/web/env.d.ts b/packages/web/env.d.ts
new file mode 100644
index 0000000..9f25370
--- /dev/null
+++ b/packages/web/env.d.ts
@@ -0,0 +1,7 @@
+interface ImportMetaEnv {
+ readonly VITE_DRFED_URL: string;
+}
+
+interface ImportMeta {
+ readonly env: ImportMetaEnv;
+}
diff --git a/packages/web/package.json b/packages/web/package.json
index f66e5c2..f956162 100644
--- a/packages/web/package.json
+++ b/packages/web/package.json
@@ -50,10 +50,16 @@
"@solidjs/router": "^0.15.0",
"@solidjs/start": "2.0.0-alpha.2",
"@solidjs/vite-plugin-nitro-2": "^0.1.0",
+ "relay-runtime": "^21.0.1",
"solid-js": "^1.9.5",
+ "solid-relay": "1.0.0-beta.27",
"vite": "^7.0.0"
},
"devDependencies": {
- "eslint-plugin-solid": "^0.14.5"
+ "@types/relay-runtime": "^20.1.1",
+ "eslint-plugin-solid": "^0.14.5",
+ "relay-compiler": "^21.0.1",
+ "vite-plugin-cjs-interop": "^4.0.3",
+ "vite-plugin-relay-lite": "^0.12.0"
}
}
diff --git a/packages/web/relay.config.json b/packages/web/relay.config.json
new file mode 100644
index 0000000..89f9e7e
--- /dev/null
+++ b/packages/web/relay.config.json
@@ -0,0 +1,6 @@
+{
+ "src": "./src",
+ "schema": "./schema.graphql",
+ "language": "typescript",
+ "eagerEsModules": true
+}
diff --git a/packages/web/src/RelayEnviroment.ts b/packages/web/src/RelayEnviroment.ts
new file mode 100644
index 0000000..0f6bfb9
--- /dev/null
+++ b/packages/web/src/RelayEnviroment.ts
@@ -0,0 +1,57 @@
+// DrFed: A web-based platform for developing and debugging ActivityPub apps
+// Copyright (C) 2026 DrFed team
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+import {
+ Environment,
+ type FetchFunction,
+ Network,
+ RecordSource,
+ Store,
+} from "relay-runtime";
+import { getRequestEvent } from "solid-js/web";
+
+import { readSessionCookie } from "./routes/session.ts";
+
+// oxlint-disable no-async-await
+const fetchFn: FetchFunction = async (params, variables) => {
+ const event = getRequestEvent();
+ const accessToken = readSessionCookie(event?.request);
+ const headers: Record = {
+ "Content-Type": "application/json",
+ };
+ if (accessToken !== undefined) {
+ headers.Authorization = `Bearer ${accessToken}`;
+ }
+ const response = await fetch(import.meta.env.VITE_DRFED_URL, {
+ method: "POST",
+ headers,
+ body: JSON.stringify({
+ query: params.text,
+ variables,
+ }),
+ credentials: "include"
+ });
+
+ // oxlint-disable return-await no-unsafe-return
+ return await response.json();
+};
+
+export function createRelayEnvironment() {
+ return new Environment({
+ network: Network.create(fetchFn),
+ store: new Store(new RecordSource()),
+ });
+}
diff --git a/packages/web/src/app.css b/packages/web/src/app.css
index 8187644..98da414 100644
--- a/packages/web/src/app.css
+++ b/packages/web/src/app.css
@@ -16,44 +16,300 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
+* {
+ box-sizing: border-box;
+}
+
+html {
+ background: var(--bg);
+ color: var(--ink);
+ font-family: var(--font-sans);
+ font-size: var(--text-body);
+}
+
body {
- font-family:
- Gordita, Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue",
- sans-serif;
+ margin: 0;
+}
+
+button,
+input {
+ font: inherit;
+}
+
+.app-shell {
+ min-height: 100svh;
+}
+
+.app-header {
+ background: color-mix(in srgb, var(--bg) 92%, transparent);
+ border-bottom: 1px solid var(--line);
+ position: sticky;
+ top: 0;
+ z-index: 10;
+}
+
+.app-header-inner {
+ align-items: center;
+ display: flex;
+ height: var(--header-h);
+ margin: 0 auto;
+ max-width: var(--container);
+ padding: 0 var(--gutter);
+}
+
+.brand {
+ align-items: center;
+ color: var(--ink);
+ display: flex;
+ font-family: var(--font-serif);
+ font-size: 1.25rem;
+ font-weight: 700;
+ gap: 0.65rem;
+ letter-spacing: var(--tracking-heading);
+ text-decoration: none;
+}
+
+.brand img {
+ border-radius: 50%;
+}
+
+.app-nav {
+ align-self: stretch;
+ display: flex;
+ gap: 0.25rem;
+ margin-left: clamp(1.5rem, 5vw, 4rem);
+}
+
+.app-nav a,
+.header-action {
+ align-items: center;
+ color: var(--ink-soft);
+ display: flex;
+ font-size: 0.9rem;
+ font-weight: 600;
+ padding: 0 0.85rem;
+ position: relative;
+ text-decoration: none;
}
-a {
- margin-right: 1rem;
+.app-nav a:hover,
+.header-action:hover,
+.app-nav a.is-active,
+.header-action.is-active {
+ color: var(--ink);
}
-main {
- text-align: center;
- padding: 1em;
+.app-nav a.is-active::after {
+ background: var(--accent);
+ bottom: -1px;
+ content: "";
+ height: 3px;
+ left: 0.85rem;
+ position: absolute;
+ right: 0.85rem;
+}
+
+.header-action {
+ border: 1px solid var(--line-strong);
+ border-radius: var(--radius-pill);
+ margin-left: auto;
+ min-height: 2.4rem;
+}
+
+.header-action.is-active {
+ background: var(--accent-tint);
+ border-color: var(--accent-soft);
+}
+
+.app-header a:focus-visible,
+.button:focus-visible {
+ outline: 3px solid var(--accent-soft);
+ outline-offset: 0.2rem;
+}
+
+.app-content {
margin: 0 auto;
+ max-width: var(--container);
+ min-height: calc(100svh - var(--header-h));
+ padding: clamp(2rem, 5vw, 4rem) var(--gutter);
+}
+
+.app-content > main:not(.auth-page) {
+ width: 100%;
+}
+
+.app-content > main:not(.auth-page) :is(h1, h2, p) {
+ margin-top: 0;
+}
+
+.app-content h1,
+.app-content h2 {
+ font-family: var(--font-serif);
+ letter-spacing: var(--tracking-heading);
+}
+
+.app-content h1 {
+ font-size: var(--text-heading-2);
+ line-height: var(--leading-heading);
+}
+
+.app-content p {
+ color: var(--ink-soft);
+ line-height: var(--leading-body);
+}
+
+.auth-page {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ min-height: calc(100svh - var(--header-h) - clamp(4rem, 10vw, 8rem));
+}
+
+.panel {
+ background: var(--card);
+ border: 1px solid var(--line);
+ border-radius: var(--radius);
+ box-shadow: var(--shadow-sm);
+}
+
+.auth-panel {
+ max-width: 28rem;
+ padding: clamp(1.5rem, 4vw, 2rem);
+ width: 100%;
+}
+
+.panel-header {
+ border-bottom: 1px solid var(--line);
+ margin: 0 calc(clamp(1.5rem, 4vw, 2rem) * -1) 1.5rem;
+ padding: 0 clamp(1.5rem, 4vw, 2rem) 1.5rem;
+}
+
+.panel-header h1 {
+ font-size: 1.65rem;
+ margin: 0 0 0.5rem;
+}
+
+.panel-header p {
+ font-size: 0.95rem;
+ margin: 0;
+}
+
+.auth-panel form {
+ display: grid;
+ gap: 1rem;
+}
+
+.field {
+ display: grid;
+ font-size: 0.9rem;
+ font-weight: 650;
+ gap: 0.75rem;
+}
+
+.field input {
+ background: var(--surface-2);
+ border: 1px solid var(--line-strong);
+ border-radius: var(--radius-sm);
+ color: var(--ink);
+ min-width: 0;
+ padding: 0.9rem 1rem;
+ transition:
+ border-color var(--duration-fast) var(--ease-standard),
+ box-shadow var(--duration-fast) var(--ease-standard);
+}
+
+.field input::placeholder {
+ color: var(--ink-faint);
+}
+
+.field input:focus {
+ border-color: var(--accent);
+ box-shadow: 0 0 0 3px var(--accent-tint);
+ outline: none;
+}
+
+.button {
+ align-items: center;
+ border: 0;
+ border-radius: var(--radius-sm);
+ cursor: pointer;
+ display: inline-flex;
+ font-weight: 700;
+ justify-content: center;
+ min-height: 2.9rem;
+ padding: 0.75rem 1.1rem;
}
-h1 {
- color: #335d92;
- text-transform: uppercase;
- font-size: 4rem;
- font-weight: 100;
- line-height: 1.1;
- margin: 4rem auto;
- max-width: 14rem;
+.button.primary {
+ background: var(--accent);
+ color: var(--on-accent);
+ transition:
+ background var(--duration-fast) var(--ease-standard),
+ transform var(--duration-fast) var(--ease-standard);
}
-p {
- max-width: 14rem;
- margin: 2rem auto;
- line-height: 1.35;
+.button.primary:hover:not(:disabled) {
+ background: var(--accent-strong);
}
-@media (min-width: 480px) {
- h1 {
- max-width: none;
+.button:disabled {
+ cursor: wait;
+ opacity: 0.65;
+}
+
+.notice {
+ background: var(--accent-tint);
+ border-radius: var(--radius-sm);
+ color: var(--ink);
+ line-height: 1.5;
+ margin: 1.25rem 0 0;
+ padding: 0.85rem 1rem;
+}
+
+.notice.error {
+ border-left: 3px solid var(--danger);
+}
+
+.notice.success {
+ border-left: 3px solid var(--accent);
+}
+
+@media (max-width: 600px) {
+ .app-header-inner {
+ padding: 0 1rem;
}
- p {
- max-width: none;
+ .brand span {
+ display: none;
+ }
+
+ .app-nav {
+ margin-left: 0.75rem;
+ }
+
+ .app-nav a,
+ .header-action {
+ padding-inline: 0.65rem;
+ }
+
+ .app-nav a.is-active::after {
+ left: 0.65rem;
+ right: 0.65rem;
+ }
+
+ .app-content {
+ padding: 1.5rem 1rem 3rem;
+ }
+
+ .auth-page {
+ align-items: flex-start;
+ min-height: auto;
+ }
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .button.primary,
+ .field input {
+ transition: none;
}
}
diff --git a/packages/web/src/app.tsx b/packages/web/src/app.tsx
index baa8157..f6373c9 100644
--- a/packages/web/src/app.tsx
+++ b/packages/web/src/app.tsx
@@ -15,25 +15,58 @@
// along with this program. If not, see .
import { MetaProvider, Title } from "@solidjs/meta";
-import { Router } from "@solidjs/router";
+import { A, Router } from "@solidjs/router";
import { FileRoutes } from "@solidjs/start/router";
import { Suspense } from "solid-js";
+import "./drfed.css";
import "./app.css";
+import { RelayEnvironmentProvider } from "solid-relay";
+
+import { createRelayEnvironment } from "./RelayEnviroment";
export default function App() {
+ const environment = createRelayEnvironment();
+
return (
- (
-
- SolidStart - Basic
- Index
- About
- {props.children}
-
- )}
- >
-
-
+
+ (
+
+ DrFed
+
+
+
+ {props.children}
+
+
+
+ )}
+ >
+
+
+
);
}
diff --git a/packages/web/src/drfed.css b/packages/web/src/drfed.css
new file mode 100644
index 0000000..b306ab6
--- /dev/null
+++ b/packages/web/src/drfed.css
@@ -0,0 +1,107 @@
+/*
+DrFed: A web-based platform for developing and debugging ActivityPub apps
+Copyright (C) 2026 DrFed team
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see .
+*/
+
+:root {
+ color-scheme: light;
+
+ /* Typography */
+ --font-serif:
+ "Fraunces Variable", Fraunces, Georgia, "Times New Roman", serif;
+ --font-sans:
+ "Hanken Grotesk Variable", "Hanken Grotesk", system-ui, -apple-system,
+ "Segoe UI", sans-serif;
+ --font-mono:
+ "IBM Plex Mono", ui-monospace, "SF Mono", "SFMono-Regular", Menlo, Consolas,
+ monospace;
+ --text-body: clamp(1rem, 0.96rem + 0.2vw, 1.0625rem);
+ --text-lede: clamp(1.15rem, 1.05rem + 0.5vw, 1.45rem);
+ --text-heading-1: clamp(2.7rem, 1.9rem + 3.9vw, 4.75rem);
+ --text-heading-2: clamp(1.9rem, 1.5rem + 1.9vw, 2.85rem);
+ --text-heading-3: 1.3rem;
+ --text-label: 0.78rem;
+ --leading-body: 1.65;
+ --leading-heading: 1.08;
+ --tracking-heading: -0.018em;
+ --tracking-label: 0.13em;
+
+ /* Light palette */
+ --bg: #fdfcfb;
+ --bg-tint: #f4f2f0;
+ --surface: #ffffff;
+ --surface-2: #f5f3f1;
+ --card: #ffffff;
+ --ink: #26211f;
+ --ink-soft: #6a615c;
+ --ink-faint: #998f89;
+ --accent: #e45b7d;
+ --accent-strong: #c23a5c;
+ --accent-soft: #f4a9b8;
+ --accent-tint: #f7e3e7;
+ --on-accent: #ffffff;
+ --line: #e9e5e1;
+ --line-strong: #dad4cf;
+ --danger: #cf3f43;
+
+ /* Elevation */
+ --shadow-sm: 0 1px 2px rgb(38 33 31 / 5%), 0 2px 8px rgb(38 33 31 / 4%);
+ --shadow-md: 0 4px 14px rgb(38 33 31 / 6%), 0 12px 36px rgb(38 33 31 / 7%);
+
+ /* Layout */
+ --container: 70rem;
+ --container-narrow: 48rem;
+ --gutter: clamp(1.25rem, 5vw, 3rem);
+ --section-space: clamp(4rem, 3rem + 6vw, 8rem);
+ --header-h: 4.25rem;
+
+ /* Shape */
+ --radius-sm: 0.5rem;
+ --radius: 0.875rem;
+ --radius-lg: 1.5rem;
+ --radius-pill: 999px;
+
+ /* Motion */
+ --duration-fast: 0.18s;
+ --duration-normal: 0.25s;
+ --ease-standard: ease;
+ --ease-reveal: cubic-bezier(0.2, 0.7, 0.2, 1);
+}
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ color-scheme: dark;
+
+ --bg: #181613;
+ --bg-tint: #1e1b17;
+ --surface: #201d19;
+ --surface-2: #272420;
+ --card: #201d19;
+ --ink: #f0ece8;
+ --ink-soft: #bab1aa;
+ --ink-faint: #887f78;
+ --accent: #ef6a88;
+ --accent-strong: #f78da4;
+ --accent-soft: #b34965;
+ --accent-tint: #322a27;
+ --line: #332f2a;
+ --line-strong: #453f39;
+ --danger: #ef726b;
+
+ --shadow-sm: 0 1px 2px rgb(0 0 0 / 30%);
+ --shadow-md: 0 6px 24px rgb(0 0 0 / 40%);
+ }
+}
diff --git a/packages/web/src/routes/confirm/[slug].tsx b/packages/web/src/routes/confirm/[slug].tsx
new file mode 100644
index 0000000..64d4325
--- /dev/null
+++ b/packages/web/src/routes/confirm/[slug].tsx
@@ -0,0 +1,108 @@
+// DrFed: A web-based platform for developing and debugging ActivityPub apps
+// Copyright (C) 2026 DrFed team
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+import { useParams, useSearchParams } from "@solidjs/router";
+import { graphql } from "relay-runtime";
+import { Show, createSignal, onMount } from "solid-js";
+import { createMutation } from "solid-relay";
+
+import type { CompleteLoginChallenge } from "./__generated__/CompleteLoginChallenge.graphql";
+
+const signCompleteMutation = graphql`
+ mutation CompleteLoginChallenge($token: UUID!, $code: String!) {
+ completeLoginChallenge(token: $token, code: $code) {
+ accessToken
+ expires
+ }
+ }
+`;
+
+export default function ConfirmPage() {
+ const params = useParams<{ slug: string }>();
+ const [searchParams] = useSearchParams<{ code?: string }>();
+ const [complete] =
+ createMutation(signCompleteMutation);
+ const [result, setResult] = createSignal<{
+ message: string;
+ status: "error" | "success";
+ }>();
+
+ function showSessionError() {
+ setResult({
+ message: "Unable to save a session",
+ status: "error",
+ });
+ }
+
+ onMount(() => {
+ const { code } = searchParams;
+ const { slug: token } = params;
+
+ if (token === "" || code == undefined || code === "") {
+ return;
+ }
+
+ async function saveSession(accessToken: string, expires: string) {
+ try {
+ const response = await fetch("/session", {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({
+ accessToken,
+ expires,
+ }),
+ });
+
+ if (!response.ok) {
+ showSessionError();
+ return;
+ }
+ // Redirect to the home page
+ globalThis.location.assign("/");
+ } catch {
+ showSessionError();
+ }
+ }
+
+ complete({
+ variables: { token, code },
+ onCompleted(data) {
+ const session = data.completeLoginChallenge;
+ if (
+ session?.accessToken == undefined ||
+ typeof session.expires !== "string"
+ ) {
+ setResult({
+ message: "The sign-in link is invalid or expired.",
+ status: "error",
+ });
+ return;
+ }
+
+ void saveSession(session.accessToken, session.expires);
+ },
+ onError: (error) => {
+ setResult({ message: error.message, status: "error" });
+ },
+ });
+ });
+
+ return (
+
+ {(value) => }
+
+ );
+}
diff --git a/packages/web/src/routes/index.tsx b/packages/web/src/routes/index.tsx
index 32cfe10..35f3258 100644
--- a/packages/web/src/routes/index.tsx
+++ b/packages/web/src/routes/index.tsx
@@ -15,15 +15,37 @@
// along with this program. If not, see .
import { Title } from "@solidjs/meta";
+import { graphql } from "relay-runtime";
+import { Show } from "solid-js";
+import { createLazyLoadQuery } from "solid-relay";
-import Counter from "~/components/Counter";
+import type { HomeViewerQuery } from "./__generated__/HomeViewerQuery.graphql";
+
+const homeViewerQuery = graphql`
+ query HomeViewerQuery {
+ viewer {
+ name
+ admin
+ }
+ }
+`;
export default function Home() {
+ const query = createLazyLoadQuery(homeViewerQuery, {});
+
return (
Hello World
Hello world!
-
+ You're not signed in.
}>
+ {(viewer) => (
+
+ {viewer().name}
+ {viewer().admin ? " (관리자)" : ""}
+
+ )}
+
+
Visit{" "}
diff --git a/packages/web/src/routes/session.ts b/packages/web/src/routes/session.ts
new file mode 100644
index 0000000..8e1c11a
--- /dev/null
+++ b/packages/web/src/routes/session.ts
@@ -0,0 +1,111 @@
+// DrFed: A web-based platform for developing and debugging ActivityPub apps
+// Copyright (C) 2026 DrFed team
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+import type { APIEvent } from "@solidjs/start/server";
+
+const SESSION_COOKIE = "session";
+const ACCESS_TOKEN_PATTERN = /^[A-Za-z0-9_-]{43}$/u;
+
+// Note: setCookie(nativeEvent, ...) from @solidjs/start/http is intentionally
+// NOT used here. In @solidjs/start 2.0.0-alpha.2, that function produces a
+// malformed Set-Cookie header in both "use server" RPCs and POST API route
+// handlers — the cookie name becomes "[METHOD] URL" instead of the intended
+// name.
+export async function POST({ request }: APIEvent) {
+ let body: unknown;
+ try {
+ body = await request.json();
+ } catch {
+ return new Response(undefined, { status: 400 });
+ }
+ if (typeof body !== "object" || body == undefined) {
+ return new Response(undefined, { status: 400 });
+ }
+
+ const accessToken =
+ "accessToken" in body && typeof body.accessToken === "string"
+ ? body.accessToken
+ : undefined;
+ const expiresValue =
+ "expires" in body && typeof body.expires === "string"
+ ? body.expires
+ : undefined;
+
+ if (accessToken == undefined || expiresValue == undefined) {
+ return new Response(undefined, { status: 400 });
+ }
+
+ if (!ACCESS_TOKEN_PATTERN.test(accessToken)) {
+ return new Response(undefined, { status: 400 });
+ }
+
+ let expires: Temporal.Instant;
+
+ try {
+ expires = Temporal.Instant.from(expiresValue);
+ } catch {
+ return new Response(undefined, { status: 400 });
+ }
+
+ if (expires.epochNanoseconds <= Temporal.Now.instant().epochNanoseconds) {
+ return new Response(undefined, { status: 400 });
+ }
+
+ const cookie = [
+ `${SESSION_COOKIE}=${encodeURIComponent(accessToken)}`,
+ "HttpOnly",
+ "Path=/",
+ "SameSite=Lax",
+ `Expires=${new Date(expires.epochMilliseconds).toUTCString()}`,
+ ...(new URL(request.url).protocol === "https:" ? ["Secure"] : []),
+ ].join("; ");
+
+ return new Response(undefined, {
+ status: 204,
+ headers: { "Set-Cookie": cookie },
+ });
+}
+
+export function readSessionCookie(
+ request: Request | undefined,
+): string | undefined {
+ const cookieHeader = request?.headers.get("cookie");
+
+ if (cookieHeader == undefined || cookieHeader == "") {
+ return undefined;
+ }
+ for (const part of cookieHeader.split(";")) {
+ const eq = part.indexOf("=");
+ if (eq === -1) {
+ continue;
+ }
+ if (part.slice(0, eq).trim() !== SESSION_COOKIE) {
+ continue;
+ }
+ const raw = part.slice(eq + 1).trim();
+ if (raw === "") {
+ return undefined;
+ }
+ let decoded: string;
+ try {
+ decoded = decodeURIComponent(raw);
+ } catch {
+ return undefined;
+ }
+ return ACCESS_TOKEN_PATTERN.test(decoded) ? decoded : undefined;
+ }
+ return undefined;
+}
diff --git a/packages/web/src/routes/sign-in.tsx b/packages/web/src/routes/sign-in.tsx
new file mode 100644
index 0000000..760f3ec
--- /dev/null
+++ b/packages/web/src/routes/sign-in.tsx
@@ -0,0 +1,117 @@
+// DrFed: A web-based platform for developing and debugging ActivityPub apps
+// Copyright (C) 2026 DrFed team
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+import { Title } from "@solidjs/meta";
+import { graphql } from "relay-runtime";
+import { type JSX, Show, createSignal } from "solid-js";
+import { createMutation } from "solid-relay";
+
+import type { SignInMutation } from "./__generated__/SignInMutation.graphql";
+
+const signInMutation = graphql`
+ mutation SignInMutation($email: Email!, $verifyUrl: URITemplate) {
+ loginByEmail(email: $email, verifyUrl: $verifyUrl) {
+ token
+ }
+ }
+`;
+
+export default function SignInPage() {
+ const [signIn, isPending] = createMutation(signInMutation);
+ const [result, setResult] = createSignal<{
+ message: string;
+ status: "error" | "success";
+ }>();
+ const buttonLabel = () => {
+ if (isPending()) {
+ return "Sending link…";
+ }
+ if (result()?.status === "success") {
+ return "Resend sign-in link";
+ }
+ return "Send sign-in link";
+ };
+
+ const handleSubmit: JSX.EventHandler = (e) => {
+ e.preventDefault();
+ const email = new FormData(e.currentTarget).get("email");
+ if (typeof email !== "string" || email === "") {
+ return;
+ }
+
+ setResult();
+ signIn({
+ variables: {
+ email,
+ verifyUrl: `${globalThis.location.origin}/confirm/{token}?code={code}`,
+ },
+ onCompleted: (_response, errors) => {
+ const [error] = errors ?? [];
+
+ setResult({
+ message:
+ error?.message ??
+ "Check your inbox for a secure sign-in link. You can close this page.",
+ status: error === undefined ? "success" : "error",
+ });
+ },
+ onError: (error) => {
+ setResult({ message: error.message, status: "error" });
+ },
+ });
+ };
+
+ return (
+
+ Sign in — DrFed
+
+
+
+
+
+
+
+ {(formResult) => (
+
+ {formResult().message}
+
+ )}
+
+
+
+ );
+}
diff --git a/packages/web/tsconfig.json b/packages/web/tsconfig.json
index fe104ea..46a2616 100644
--- a/packages/web/tsconfig.json
+++ b/packages/web/tsconfig.json
@@ -1,7 +1,7 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
- "lib": ["DOM", "DOM.Iterable"],
+ "lib": ["DOM", "DOM.Iterable", "ESNext"],
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "bundler",
diff --git a/packages/web/vite.config.ts b/packages/web/vite.config.ts
index 3ceb82f..948ba05 100644
--- a/packages/web/vite.config.ts
+++ b/packages/web/vite.config.ts
@@ -17,7 +17,14 @@
import { solidStart } from "@solidjs/start/config";
import { nitroV2Plugin as nitro } from "@solidjs/vite-plugin-nitro-2";
import { defineConfig } from "vite";
+import { cjsInterop } from "vite-plugin-cjs-interop";
+import relay from "vite-plugin-relay-lite";
-export default defineConfig({
- plugins: [solidStart(), nitro()],
-});
+export default defineConfig(({ command }) => ({
+ plugins: [
+ solidStart(),
+ nitro(),
+ relay({ codegen: command !== "build" }),
+ cjsInterop({ dependencies: ["relay-runtime"] }),
+ ],
+}));
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 6a82d5a..8976c7c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -241,20 +241,38 @@ importers:
version: 0.15.4(solid-js@1.9.14)
'@solidjs/start':
specifier: 2.0.0-alpha.2
- version: 2.0.0-alpha.2(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))
+ version: 2.0.0-alpha.2(supports-color@10.2.2)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))
'@solidjs/vite-plugin-nitro-2':
specifier: ^0.1.0
- version: 0.1.0(@electric-sql/pglite@0.5.3)(rolldown@1.1.1)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))
+ version: 0.1.0(@electric-sql/pglite@0.5.3)(oxc-parser@0.134.0)(rolldown@1.1.1)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))
+ relay-runtime:
+ specifier: ^21.0.1
+ version: 21.0.1
solid-js:
specifier: ^1.9.5
version: 1.9.14
+ solid-relay:
+ specifier: 1.0.0-beta.27
+ version: 1.0.0-beta.27(relay-runtime@21.0.1)(seroval@1.5.4)(solid-js@1.9.14)
vite:
specifier: ^7.0.0
version: 7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0)
devDependencies:
+ '@types/relay-runtime':
+ specifier: ^20.1.1
+ version: 20.1.1
eslint-plugin-solid:
specifier: ^0.14.5
- version: 0.14.5(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3)
+ version: 0.14.5(eslint@9.39.4(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
+ relay-compiler:
+ specifier: ^21.0.1
+ version: 21.0.1
+ vite-plugin-cjs-interop:
+ specifier: ^4.0.3
+ version: 4.0.3(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))
+ vite-plugin-relay-lite:
+ specifier: ^0.12.0
+ version: 0.12.0(graphql@16.14.2)(typescript@6.0.3)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))
packages:
@@ -400,6 +418,10 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/runtime@7.29.7':
+ resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==}
+ engines: {node: '>=6.9.0'}
+
'@babel/template@7.29.7':
resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==}
engines: {node: '>=6.9.0'}
@@ -426,12 +448,21 @@ packages:
'@electric-sql/pglite@0.5.3':
resolution: {integrity: sha512-iTTYbA5Uesrl+N7zss0J5LopT7KE4j9aymYo+EZZh+rZbARQCUQOs+n2pay64JRUpc3fCkpfrniTNJnvYzOE+g==}
+ '@emnapi/core@1.10.0':
+ resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==}
+
'@emnapi/core@1.11.0':
resolution: {integrity: sha512-l9Oo58x0HOP5znGzVhYW9U3e5wVuA4LAZU2AGezTmkhO1CgQRFDhDg4nneHsu/t3WniXg9QrG2nIXL/ZS8ln8Q==}
+ '@emnapi/runtime@1.10.0':
+ resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==}
+
'@emnapi/runtime@1.11.0':
resolution: {integrity: sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==}
+ '@emnapi/wasi-threads@1.2.1':
+ resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==}
+
'@emnapi/wasi-threads@1.2.2':
resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==}
@@ -971,6 +1002,136 @@ packages:
resolution: {integrity: sha512-4H+sJbpKlB0DsFYyJmyTj2atDdF+9j14MbH99zPTK7YGQysWQ4Vo8UR1O91+ssIDUnKkMNoss7zMvaMf6A52Jw==}
engines: {bun: '>=1.2.0', deno: '>=2.3.0', node: '>=20.0.0'}
+ '@oxc-parser/binding-android-arm-eabi@0.134.0':
+ resolution: {integrity: sha512-N9Us7l/X9ZC3LA6eWSzPyduvBPXV1eRyDPwM6/UWpxwwXGsatb8131+d2L8UsmyHrixnKLHBd6UeH8wangV7fw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
+
+ '@oxc-parser/binding-android-arm64@0.134.0':
+ resolution: {integrity: sha512-Ic2oPZESeCaD4+9cKRqp1GMYsTO9Q3Yi9HdY2x9x75ozbnC20sybFHzeBklmaVD9PBzd8KbkmNN0gy+SVlm7zw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxc-parser/binding-darwin-arm64@0.134.0':
+ resolution: {integrity: sha512-1z9+nVJ1Awq4CPyHAthx5zOUrg5T1zc3dWt6juxwDcuejFGbdYzWJITkS1rv4DCdSTphDU3IW71MzyLV3BjRGQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxc-parser/binding-darwin-x64@0.134.0':
+ resolution: {integrity: sha512-MpofofaRZnxmYrY3lE8RTLHmE1KkX2q0elEeJ8sMcLbS8At76BjYSL6axssqhx29prGGDzIZ5lYFD+IXqaTzFA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxc-parser/binding-freebsd-x64@0.134.0':
+ resolution: {integrity: sha512-OqnPQY27vqWAbMnHfLcF8CVOUv2cCvdlTiqyK5qz5WCbH3XOLpYVQATv8S5UrR8bbEJCAqJLsI7W6cRFXAxCoA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.134.0':
+ resolution: {integrity: sha512-0eqWl+PWrcwGC3b8DCB58w3QINAuZfpX2ULTGpI01GUMBc6zDKSpttWxvqPIydxuQEkGQTQRAXLLvc+vTDZbQw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-parser/binding-linux-arm-musleabihf@0.134.0':
+ resolution: {integrity: sha512-YToasuDmyzpyTC1ztrvkaSXz8tP+YUbx041M/4SGxaRGiyMzsKkQ869KPUTGA57A6aVsb1/DiPX8XZQQeSFkiw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-parser/binding-linux-arm64-gnu@0.134.0':
+ resolution: {integrity: sha512-qMS7NLc2o8G7LLz53wisol+O7/YbMhtaGVhlfsTVLnrraf9kLFgzpiGjtQALLbdxX8uhx0Zmd4l+vY3s1/K4Gg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-arm64-musl@0.134.0':
+ resolution: {integrity: sha512-jUEsnxPXhrCYxswQLYvUOxZEE5UWFMkK5kBnrcPMj7TONz1pD0yKgPmOQCAx2LPoysJ/v2Sjg4RBUVoO2VXoZQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-parser/binding-linux-ppc64-gnu@0.134.0':
+ resolution: {integrity: sha512-FU5xMUsXnMuWKVCGo43c6SJsnqHcsioqm32PHdDY39cIRJa/AZbo7RMYW0W5gYcNZqb8EMhELkMDwbJOFbUhtg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-riscv64-gnu@0.134.0':
+ resolution: {integrity: sha512-tPc7OAhslHVmNebho1RSEGL//7i7Nm39gbQ+gYreBYwzvDVqNwdQH3S13ccM+R1TpimQ+3bIyFMfnilJIGRtjQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-riscv64-musl@0.134.0':
+ resolution: {integrity: sha512-TtWEC4MUAHodX5a5kGsmK8g5K49V5ewWfwGrXdbw+gXWLXWXuhi+ectNELmOvYIwaqPSTAry1HNS/hfXssaPHQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-parser/binding-linux-s390x-gnu@0.134.0':
+ resolution: {integrity: sha512-mF4uls8TA8SPXSDLpclJ6z9S+vaeUnNp95iUEfqwv9oVJUAE7B2j4crOj8UvByRXpbO5N+aAlJadQEyFlnXU6g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-x64-gnu@0.134.0':
+ resolution: {integrity: sha512-hieAQplyJeCvzqdSAxpOOGvVCBVXo/ioIBxioHfsUrQu93Et7Hy52cCG/GHEnjImVyeqEIViyyjuB0nKghxz/w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-x64-musl@0.134.0':
+ resolution: {integrity: sha512-OQnJAK4sFuNSLgsh2s/K+14a3kwbmqf2yh1JiADU9XSfDuRooZYbAxmmBVPiyQ97+jBIIA1x2oPZeYNto3Ioow==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-parser/binding-openharmony-arm64@0.134.0':
+ resolution: {integrity: sha512-RYLooe6g31q/PqNFN0NjR80IK/ARGsfLasAXL42LXonL+5Cyy9Or76rjBKQLAjERikJwbRU/sYW9Q5Tnpt1A4Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@oxc-parser/binding-wasm32-wasi@0.134.0':
+ resolution: {integrity: sha512-h8bmHyvc0PxA811prUjfVpJlQAurOOiRbohY4QNGjCEz+L72G9CmWl28OOz3mevrYlURgUsprNuH8hDJXh1VOw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [wasm32]
+
+ '@oxc-parser/binding-win32-arm64-msvc@0.134.0':
+ resolution: {integrity: sha512-EPTfanpBMLNnSAWCDYpbJp1stmsf5x6hMsAwymf2J8ylRupIvO6FtKmHBMdc/wt43y08iz6ILlzFGIXe32/Kbw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxc-parser/binding-win32-ia32-msvc@0.134.0':
+ resolution: {integrity: sha512-yAwetF+fTr9lTMtmqvkkWiiMXvH/yjMxGzUDG2rTL/LV1lL37eZ2enUGIlIo0gwhBIKWgabDEidtil+kiqNpgQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxc-parser/binding-win32-x64-msvc@0.134.0':
+ resolution: {integrity: sha512-4VY39G5tuGlBYiH13XbWqfLcwKygQEv0iyf8vtZ5NyLAGjI8M0MiYyLhj91GkWRznr+5VC0I+5R55HUDV/Rklw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxc-project/types@0.134.0':
+ resolution: {integrity: sha512-T0xuRRKrQFmocH8y+jGfpmSkGcheaJExY9lEihmR1Gm2aH+75B8CzgU2rABRQSzzDxLjZ15Sc0bRVLj5lVeNXQ==}
+
'@oxc-project/types@0.135.0':
resolution: {integrity: sha512-wR+xRdFkUBMvcAjBJ2q2kcZM6d+DKu2NgoOyxZgYwZdLhmiv6+rnO8PZ/P68kMiZtIKm+pW7zyEJ4kSOs0vo+Q==}
@@ -1534,6 +1695,9 @@ packages:
'@types/pg@8.20.0':
resolution: {integrity: sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==}
+ '@types/relay-runtime@20.1.1':
+ resolution: {integrity: sha512-loM2iJteknnJcsxrynmBVb7pIDkSkJUuCMnAa/oDFcrvaxkDvq8iy0J2UshMdDy14iJJocDblXeAu7c6Q1+Ucw==}
+
'@types/resolve@1.20.2':
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
@@ -1697,6 +1861,9 @@ packages:
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+ asap@2.0.6:
+ resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
+
ast-kit@3.0.0:
resolution: {integrity: sha512-8OG92q3R35qjC/4i6BLBMg8IB+fClWu/1PEwg2Z9Rn+BuNaiEgJzpzn+pxWOdHJWDCAwu2JP0wCDTozAM4QirQ==}
engines: {node: ^22.18.0 || >=24.11.0}
@@ -1932,6 +2099,15 @@ packages:
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+ cosmiconfig@9.0.2:
+ resolution: {integrity: sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
crc-32@1.2.2:
resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
engines: {node: '>=0.8'}
@@ -1945,6 +2121,9 @@ packages:
resolution: {integrity: sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==}
engines: {node: '>=18.0'}
+ cross-fetch@3.2.0:
+ resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
+
cross-inspect@1.0.1:
resolution: {integrity: sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==}
engines: {node: '>=16.0.0'}
@@ -2217,6 +2396,13 @@ packages:
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
engines: {node: '>=0.12'}
+ env-paths@2.2.1:
+ resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
+ engines: {node: '>=6'}
+
+ error-ex@1.3.4:
+ resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
+
error-stack-parser-es@1.0.5:
resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==}
@@ -2351,6 +2537,12 @@ packages:
fastq@1.20.1:
resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
+ fbjs-css-vars@1.0.2:
+ resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==}
+
+ fbjs@3.0.5:
+ resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==}
+
fdir@6.5.0:
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
engines: {node: '>=12.0.0'}
@@ -2561,6 +2753,9 @@ packages:
inline-style-parser@0.2.7:
resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==}
+ invariant@2.2.4:
+ resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
+
ioredis@5.11.1:
resolution: {integrity: sha512-ehuGcf94bQXhfagULNXrJdfnWO38v070jxSx/qE87Kjzmu2fU7ro5EFAb+OPituLqgfyuQaym5DlrNydW2sJ9A==}
engines: {node: '>=12.22.0'}
@@ -2568,6 +2763,9 @@ packages:
iron-webcrypto@1.2.1:
resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==}
+ is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+
is-core-module@2.16.2:
resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==}
engines: {node: '>= 0.4'}
@@ -2662,6 +2860,9 @@ packages:
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
@@ -2701,6 +2902,9 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
listhen@1.10.0:
resolution: {integrity: sha512-kfz4C0OrC6IpaVMtYDJtf6PFjurxe9NBBoDAh/o2p587INryFOO4DQ9OetbCdDrWFt1m1CJKvYrzkGsuPHw8nQ==}
hasBin: true
@@ -2719,6 +2923,10 @@ packages:
lodash@4.18.1:
resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==}
+ loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
@@ -2864,6 +3072,10 @@ packages:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
obug@2.1.3:
resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==}
engines: {node: '>=12.20.0'}
@@ -2889,6 +3101,10 @@ packages:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
+ oxc-parser@0.134.0:
+ resolution: {integrity: sha512-Hs8fRG6A94BzMrMkGOtrUS7JQjmslfF+IvIXslf3QURzK3ud0QmFJRiYZjTe4TzAQnTfvlk4AwZnqIbrUjiE4w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
p-limit@3.1.0:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
@@ -2904,6 +3120,10 @@ packages:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+
parse5@7.3.0:
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
@@ -3032,6 +3252,9 @@ packages:
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
engines: {node: '>= 0.6.0'}
+ promise@7.3.1:
+ resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==}
+
property-information@7.2.0:
resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==}
@@ -3089,6 +3312,13 @@ packages:
regex@5.1.1:
resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==}
+ relay-compiler@21.0.1:
+ resolution: {integrity: sha512-Wqlg3MtHyBlAYByVo24Wy9H3n2bAw991gPmzdo3XfNv+TzhI8zuGogtiae+7NORI7zhghgZaHC7Sp8S8ZPRYEA==}
+ hasBin: true
+
+ relay-runtime@21.0.1:
+ resolution: {integrity: sha512-OS+We56sp6gkGVEcce9VCNOeg/sMbxT9unEoerQPgNAICHowSWrXNc6LJxF2OqjypxYF7kaLDSPPiaPii2Pw1g==}
+
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
@@ -3204,6 +3434,9 @@ packages:
resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==}
engines: {node: '>= 18'}
+ setimmediate@1.0.5:
+ resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
+
setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
@@ -3238,6 +3471,13 @@ packages:
peerDependencies:
solid-js: ^1.3
+ solid-relay@1.0.0-beta.27:
+ resolution: {integrity: sha512-/3sVLygnKi+iWpaf38EEhrnLnwZmr4Gy6BbMyxxjz2Zi5b6L9YSEdemk9P2c62+cm46uErRv4V4VVxg6oGeDNg==}
+ peerDependencies:
+ relay-runtime: ^18.1.0 || ^19 || ^20
+ seroval: ^1.1.0
+ solid-js: '>=1.4.0'
+
solid-use@0.9.1:
resolution: {integrity: sha512-UwvXDVPlrrbj/9ewG9ys5uL2IO4jSiwys2KPzK4zsnAcmEl7iDafZWW1Mo4BSEWOmQCGK6IvpmGHo1aou8iOFw==}
engines: {node: '>=10'}
@@ -3460,6 +3700,10 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
+ ua-parser-js@1.0.41:
+ resolution: {integrity: sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==}
+ hasBin: true
+
ufo@1.6.4:
resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==}
@@ -3654,6 +3898,19 @@ packages:
vfile@6.0.3:
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
+ vite-plugin-cjs-interop@4.0.3:
+ resolution: {integrity: sha512-MznW1ysV+8LXiKiZBKFuVAhYc1KKXNYlhCW7URruydtGtRzBPt1Cj5H66YVIdDo2laNNjejxaZD1g/s4UDQ6Xw==}
+ engines: {node: 22 || 24 || 25 || 26}
+ peerDependencies:
+ vite: ~6.4 || ~7.3 || 8
+
+ vite-plugin-relay-lite@0.12.0:
+ resolution: {integrity: sha512-oEQTf5VSHhOW8+jpnnA2uxSwVHYucH4LDa5sLdFNvVKcnHBE0A2QNsQjedmInd05sNla9PDjZs/rejhk6l6Heg==}
+ engines: {node: '>= 18.0.0'}
+ peerDependencies:
+ graphql: ^15.0.0 || ^16.0.0
+ vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
+
vite-plugin-solid@2.11.12:
resolution: {integrity: sha512-FgjPcx2OwX9h6f28jli7A4bG7PP3te8uyakE5iqsmpq3Jqi1TWLgSroC9N6cMfGRU2zXsl4Q6ISvTr2VL0QHpA==}
peerDependencies:
@@ -3802,20 +4059,20 @@ snapshots:
'@babel/compat-data@7.29.7': {}
- '@babel/core@7.29.7':
+ '@babel/core@7.29.7(supports-color@10.2.2)':
dependencies:
'@babel/code-frame': 7.29.7
'@babel/generator': 7.29.7
'@babel/helper-compilation-targets': 7.29.7
- '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7)
+ '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)
'@babel/helpers': 7.29.7
'@babel/parser': 7.29.7
'@babel/template': 7.29.7
- '@babel/traverse': 7.29.7
+ '@babel/traverse': 7.29.7(supports-color@10.2.2)
'@babel/types': 7.29.7
'@jridgewell/remapping': 2.3.5
convert-source-map: 2.0.0
- debug: 4.4.3
+ debug: 4.4.3(supports-color@10.2.2)
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
@@ -3851,24 +4108,24 @@ snapshots:
lru-cache: 5.1.1
semver: 6.3.1
- '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7)':
+ '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)':
dependencies:
- '@babel/core': 7.29.7
+ '@babel/core': 7.29.7(supports-color@10.2.2)
'@babel/helper-annotate-as-pure': 7.29.7
- '@babel/helper-member-expression-to-functions': 7.29.7
+ '@babel/helper-member-expression-to-functions': 7.29.7(supports-color@10.2.2)
'@babel/helper-optimise-call-expression': 7.29.7
- '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7)
- '@babel/helper-skip-transparent-expression-wrappers': 7.29.7
- '@babel/traverse': 7.29.7
+ '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2)
+ '@babel/traverse': 7.29.7(supports-color@10.2.2)
semver: 6.3.1
transitivePeerDependencies:
- supports-color
'@babel/helper-globals@7.29.7': {}
- '@babel/helper-member-expression-to-functions@7.29.7':
+ '@babel/helper-member-expression-to-functions@7.29.7(supports-color@10.2.2)':
dependencies:
- '@babel/traverse': 7.29.7
+ '@babel/traverse': 7.29.7(supports-color@10.2.2)
'@babel/types': 7.29.7
transitivePeerDependencies:
- supports-color
@@ -3877,19 +4134,19 @@ snapshots:
dependencies:
'@babel/types': 7.29.7
- '@babel/helper-module-imports@7.29.7':
+ '@babel/helper-module-imports@7.29.7(supports-color@10.2.2)':
dependencies:
- '@babel/traverse': 7.29.7
+ '@babel/traverse': 7.29.7(supports-color@10.2.2)
'@babel/types': 7.29.7
transitivePeerDependencies:
- supports-color
- '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)':
+ '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)':
dependencies:
- '@babel/core': 7.29.7
- '@babel/helper-module-imports': 7.29.7
+ '@babel/core': 7.29.7(supports-color@10.2.2)
+ '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2)
'@babel/helper-validator-identifier': 7.29.7
- '@babel/traverse': 7.29.7
+ '@babel/traverse': 7.29.7(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
@@ -3899,18 +4156,18 @@ snapshots:
'@babel/helper-plugin-utils@7.29.7': {}
- '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7)':
+ '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)':
dependencies:
- '@babel/core': 7.29.7
- '@babel/helper-member-expression-to-functions': 7.29.7
+ '@babel/core': 7.29.7(supports-color@10.2.2)
+ '@babel/helper-member-expression-to-functions': 7.29.7(supports-color@10.2.2)
'@babel/helper-optimise-call-expression': 7.29.7
- '@babel/traverse': 7.29.7
+ '@babel/traverse': 7.29.7(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
- '@babel/helper-skip-transparent-expression-wrappers@7.29.7':
+ '@babel/helper-skip-transparent-expression-wrappers@7.29.7(supports-color@10.2.2)':
dependencies:
- '@babel/traverse': 7.29.7
+ '@babel/traverse': 7.29.7(supports-color@10.2.2)
'@babel/types': 7.29.7
transitivePeerDependencies:
- supports-color
@@ -3938,53 +4195,55 @@ snapshots:
dependencies:
'@babel/types': 8.0.0
- '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)':
+ '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))':
dependencies:
- '@babel/core': 7.29.7
+ '@babel/core': 7.29.7(supports-color@10.2.2)
'@babel/helper-plugin-utils': 7.29.7
- '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7)':
+ '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))':
dependencies:
- '@babel/core': 7.29.7
+ '@babel/core': 7.29.7(supports-color@10.2.2)
'@babel/helper-plugin-utils': 7.29.7
- '@babel/plugin-transform-modules-commonjs@7.29.7(@babel/core@7.29.7)':
+ '@babel/plugin-transform-modules-commonjs@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)':
dependencies:
- '@babel/core': 7.29.7
- '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7)
+ '@babel/core': 7.29.7(supports-color@10.2.2)
+ '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)
'@babel/helper-plugin-utils': 7.29.7
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7)':
+ '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)':
dependencies:
- '@babel/core': 7.29.7
+ '@babel/core': 7.29.7(supports-color@10.2.2)
'@babel/helper-annotate-as-pure': 7.29.7
- '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7)
+ '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)
'@babel/helper-plugin-utils': 7.29.7
- '@babel/helper-skip-transparent-expression-wrappers': 7.29.7
- '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.29.7(supports-color@10.2.2)
+ '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))
transitivePeerDependencies:
- supports-color
- '@babel/preset-typescript@7.29.7(@babel/core@7.29.7)':
+ '@babel/preset-typescript@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)':
dependencies:
- '@babel/core': 7.29.7
+ '@babel/core': 7.29.7(supports-color@10.2.2)
'@babel/helper-plugin-utils': 7.29.7
'@babel/helper-validator-option': 7.29.7
- '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7)
- '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7)
- '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7)
+ '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))
+ '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)
+ '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
+ '@babel/runtime@7.29.7': {}
+
'@babel/template@7.29.7':
dependencies:
'@babel/code-frame': 7.29.7
'@babel/parser': 7.29.7
'@babel/types': 7.29.7
- '@babel/traverse@7.29.7':
+ '@babel/traverse@7.29.7(supports-color@10.2.2)':
dependencies:
'@babel/code-frame': 7.29.7
'@babel/generator': 7.29.7
@@ -3992,7 +4251,7 @@ snapshots:
'@babel/parser': 7.29.7
'@babel/template': 7.29.7
'@babel/types': 7.29.7
- debug: 4.4.3
+ debug: 4.4.3(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
@@ -4012,17 +4271,33 @@ snapshots:
'@electric-sql/pglite@0.5.3': {}
+ '@emnapi/core@1.10.0':
+ dependencies:
+ '@emnapi/wasi-threads': 1.2.1
+ tslib: 2.8.1
+ optional: true
+
'@emnapi/core@1.11.0':
dependencies:
'@emnapi/wasi-threads': 1.2.2
tslib: 2.8.1
optional: true
+ '@emnapi/runtime@1.10.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@emnapi/runtime@1.11.0':
dependencies:
tslib: 2.8.1
optional: true
+ '@emnapi/wasi-threads@1.2.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@emnapi/wasi-threads@1.2.2':
dependencies:
tslib: 2.8.1
@@ -4201,17 +4476,17 @@ snapshots:
'@esbuild/win32-x64@0.28.1':
optional: true
- '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.7.0))':
+ '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.7.0)(supports-color@10.2.2))':
dependencies:
- eslint: 9.39.4(jiti@2.7.0)
+ eslint: 9.39.4(jiti@2.7.0)(supports-color@10.2.2)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.2': {}
- '@eslint/config-array@0.21.2':
+ '@eslint/config-array@0.21.2(supports-color@10.2.2)':
dependencies:
'@eslint/object-schema': 2.1.7
- debug: 4.4.3
+ debug: 4.4.3(supports-color@10.2.2)
minimatch: 3.1.5
transitivePeerDependencies:
- supports-color
@@ -4224,10 +4499,10 @@ snapshots:
dependencies:
'@types/json-schema': 7.0.15
- '@eslint/eslintrc@3.3.5':
+ '@eslint/eslintrc@3.3.5(supports-color@10.2.2)':
dependencies:
ajv: 6.15.0
- debug: 4.4.3
+ debug: 4.4.3(supports-color@10.2.2)
espree: 10.4.0
globals: 14.0.0
ignore: 5.3.2
@@ -4390,11 +4665,11 @@ snapshots:
dependencies:
'@logtape/logtape': 2.3.0-dev.840
- '@mapbox/node-pre-gyp@2.0.3':
+ '@mapbox/node-pre-gyp@2.0.3(supports-color@10.2.2)':
dependencies:
consola: 3.4.2
detect-libc: 2.1.2
- https-proxy-agent: 7.0.6
+ https-proxy-agent: 7.0.6(supports-color@10.2.2)
node-fetch: 2.7.0
nopt: 8.1.0
semver: 7.8.4
@@ -4403,6 +4678,13 @@ snapshots:
- encoding
- supports-color
+ '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
+ dependencies:
+ '@emnapi/core': 1.10.0
+ '@emnapi/runtime': 1.10.0
+ '@tybys/wasm-util': 0.10.2
+ optional: true
+
'@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.11.0)(@emnapi/runtime@1.11.0)':
dependencies:
'@emnapi/core': 1.11.0
@@ -4433,6 +4715,72 @@ snapshots:
dependencies:
'@optique/core': 1.2.0
+ '@oxc-parser/binding-android-arm-eabi@0.134.0':
+ optional: true
+
+ '@oxc-parser/binding-android-arm64@0.134.0':
+ optional: true
+
+ '@oxc-parser/binding-darwin-arm64@0.134.0':
+ optional: true
+
+ '@oxc-parser/binding-darwin-x64@0.134.0':
+ optional: true
+
+ '@oxc-parser/binding-freebsd-x64@0.134.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.134.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm-musleabihf@0.134.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm64-gnu@0.134.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm64-musl@0.134.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-ppc64-gnu@0.134.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-riscv64-gnu@0.134.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-riscv64-musl@0.134.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-s390x-gnu@0.134.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-x64-gnu@0.134.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-x64-musl@0.134.0':
+ optional: true
+
+ '@oxc-parser/binding-openharmony-arm64@0.134.0':
+ optional: true
+
+ '@oxc-parser/binding-wasm32-wasi@0.134.0':
+ dependencies:
+ '@emnapi/core': 1.10.0
+ '@emnapi/runtime': 1.10.0
+ '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ optional: true
+
+ '@oxc-parser/binding-win32-arm64-msvc@0.134.0':
+ optional: true
+
+ '@oxc-parser/binding-win32-ia32-msvc@0.134.0':
+ optional: true
+
+ '@oxc-parser/binding-win32-x64-msvc@0.134.0':
+ optional: true
+
+ '@oxc-project/types@0.134.0': {}
+
'@oxc-project/types@0.135.0': {}
'@parcel/watcher-android-arm64@2.5.6':
@@ -4782,13 +5130,13 @@ snapshots:
dependencies:
solid-js: 1.9.14
- '@solidjs/start@2.0.0-alpha.2(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))':
+ '@solidjs/start@2.0.0-alpha.2(supports-color@10.2.2)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))':
dependencies:
- '@babel/core': 7.29.7
- '@babel/traverse': 7.29.7
+ '@babel/core': 7.29.7(supports-color@10.2.2)
+ '@babel/traverse': 7.29.7(supports-color@10.2.2)
'@babel/types': 7.29.7
'@solidjs/meta': 0.29.4(solid-js@1.9.14)
- '@tanstack/server-functions-plugin': 1.134.5(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))
+ '@tanstack/server-functions-plugin': 1.134.5(supports-color@10.2.2)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))
'@types/babel__traverse': 7.28.0
'@types/micromatch': 4.0.10
cookie-es: 2.0.1
@@ -4811,15 +5159,15 @@ snapshots:
srvx: 0.9.8
terracotta: 1.1.0(solid-js@1.9.14)
vite: 7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0)
- vite-plugin-solid: 2.11.12(solid-js@1.9.14)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))
+ vite-plugin-solid: 2.11.12(solid-js@1.9.14)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))
transitivePeerDependencies:
- '@testing-library/jest-dom'
- crossws
- supports-color
- '@solidjs/vite-plugin-nitro-2@0.1.0(@electric-sql/pglite@0.5.3)(rolldown@1.1.1)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))':
+ '@solidjs/vite-plugin-nitro-2@0.1.0(@electric-sql/pglite@0.5.3)(oxc-parser@0.134.0)(rolldown@1.1.1)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))':
dependencies:
- nitropack: 2.13.4(@electric-sql/pglite@0.5.3)(rolldown@1.1.1)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))
+ nitropack: 2.13.4(@electric-sql/pglite@0.5.3)(oxc-parser@0.134.0)(rolldown@1.1.1)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))
vite: 7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0)
transitivePeerDependencies:
- '@azure/app-configuration'
@@ -4861,26 +5209,26 @@ snapshots:
'@speed-highlight/core@1.2.17': {}
- '@tanstack/directive-functions-plugin@1.134.5(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))':
+ '@tanstack/directive-functions-plugin@1.134.5(supports-color@10.2.2)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))':
dependencies:
'@babel/code-frame': 7.27.1
- '@babel/core': 7.29.7
- '@babel/traverse': 7.29.7
+ '@babel/core': 7.29.7(supports-color@10.2.2)
+ '@babel/traverse': 7.29.7(supports-color@10.2.2)
'@babel/types': 7.29.7
- '@tanstack/router-utils': 1.133.19
- babel-dead-code-elimination: 1.0.12
+ '@tanstack/router-utils': 1.133.19(supports-color@10.2.2)
+ babel-dead-code-elimination: 1.0.12(supports-color@10.2.2)
pathe: 2.0.3
tiny-invariant: 1.3.3
vite: 7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0)
transitivePeerDependencies:
- supports-color
- '@tanstack/router-utils@1.133.19':
+ '@tanstack/router-utils@1.133.19(supports-color@10.2.2)':
dependencies:
- '@babel/core': 7.29.7
+ '@babel/core': 7.29.7(supports-color@10.2.2)
'@babel/generator': 7.29.7
'@babel/parser': 7.29.7
- '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7)
+ '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)
ansis: 4.3.1
diff: 8.0.4
pathe: 2.0.3
@@ -4888,17 +5236,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@tanstack/server-functions-plugin@1.134.5(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))':
+ '@tanstack/server-functions-plugin@1.134.5(supports-color@10.2.2)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))':
dependencies:
'@babel/code-frame': 7.27.1
- '@babel/core': 7.29.7
- '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7)
- '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7)
+ '@babel/core': 7.29.7(supports-color@10.2.2)
+ '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))
+ '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))
'@babel/template': 7.29.7
- '@babel/traverse': 7.29.7
+ '@babel/traverse': 7.29.7(supports-color@10.2.2)
'@babel/types': 7.29.7
- '@tanstack/directive-functions-plugin': 1.134.5(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))
- babel-dead-code-elimination: 1.0.12
+ '@tanstack/directive-functions-plugin': 1.134.5(supports-color@10.2.2)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))
+ babel-dead-code-elimination: 1.0.12(supports-color@10.2.2)
tiny-invariant: 1.3.3
transitivePeerDependencies:
- supports-color
@@ -4960,15 +5308,17 @@ snapshots:
pg-protocol: 1.14.0
pg-types: 2.2.0
+ '@types/relay-runtime@20.1.1': {}
+
'@types/resolve@1.20.2': {}
'@types/unist@3.0.3': {}
- '@typescript-eslint/project-service@8.62.1(typescript@6.0.3)':
+ '@typescript-eslint/project-service@8.62.1(supports-color@10.2.2)(typescript@6.0.3)':
dependencies:
'@typescript-eslint/tsconfig-utils': 8.62.1(typescript@6.0.3)
'@typescript-eslint/types': 8.62.1
- debug: 4.4.3
+ debug: 4.4.3(supports-color@10.2.2)
typescript: 6.0.3
transitivePeerDependencies:
- supports-color
@@ -4984,13 +5334,13 @@ snapshots:
'@typescript-eslint/types@8.62.1': {}
- '@typescript-eslint/typescript-estree@8.62.1(typescript@6.0.3)':
+ '@typescript-eslint/typescript-estree@8.62.1(supports-color@10.2.2)(typescript@6.0.3)':
dependencies:
- '@typescript-eslint/project-service': 8.62.1(typescript@6.0.3)
+ '@typescript-eslint/project-service': 8.62.1(supports-color@10.2.2)(typescript@6.0.3)
'@typescript-eslint/tsconfig-utils': 8.62.1(typescript@6.0.3)
'@typescript-eslint/types': 8.62.1
'@typescript-eslint/visitor-keys': 8.62.1
- debug: 4.4.3
+ debug: 4.4.3(supports-color@10.2.2)
minimatch: 10.2.5
semver: 7.8.4
tinyglobby: 0.2.17
@@ -4999,13 +5349,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.62.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3)':
+ '@typescript-eslint/utils@8.62.1(eslint@9.39.4(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0))
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)(supports-color@10.2.2))
'@typescript-eslint/scope-manager': 8.62.1
'@typescript-eslint/types': 8.62.1
- '@typescript-eslint/typescript-estree': 8.62.1(typescript@6.0.3)
- eslint: 9.39.4(jiti@2.7.0)
+ '@typescript-eslint/typescript-estree': 8.62.1(supports-color@10.2.2)(typescript@6.0.3)
+ eslint: 9.39.4(jiti@2.7.0)(supports-color@10.2.2)
typescript: 6.0.3
transitivePeerDependencies:
- supports-color
@@ -5032,9 +5382,9 @@ snapshots:
dependencies:
'@upyo/core': 0.6.0-dev.263
- '@vercel/nft@1.10.2(rollup@4.62.2)':
+ '@vercel/nft@1.10.2(rollup@4.62.2)(supports-color@10.2.2)':
dependencies:
- '@mapbox/node-pre-gyp': 2.0.3
+ '@mapbox/node-pre-gyp': 2.0.3(supports-color@10.2.2)
'@rollup/pluginutils': 5.4.0(rollup@4.62.2)
acorn: 8.17.0
acorn-import-attributes: 1.9.5(acorn@8.17.0)
@@ -5152,6 +5502,8 @@ snapshots:
argparse@2.0.1: {}
+ asap@2.0.6: {}
+
ast-kit@3.0.0:
dependencies:
'@babel/parser': 8.0.0
@@ -5164,28 +5516,28 @@ snapshots:
b4a@1.8.1: {}
- babel-dead-code-elimination@1.0.12:
+ babel-dead-code-elimination@1.0.12(supports-color@10.2.2):
dependencies:
- '@babel/core': 7.29.7
+ '@babel/core': 7.29.7(supports-color@10.2.2)
'@babel/parser': 7.29.7
- '@babel/traverse': 7.29.7
+ '@babel/traverse': 7.29.7(supports-color@10.2.2)
'@babel/types': 7.29.7
transitivePeerDependencies:
- supports-color
- babel-plugin-jsx-dom-expressions@0.40.7(@babel/core@7.29.7):
+ babel-plugin-jsx-dom-expressions@0.40.7(@babel/core@7.29.7(supports-color@10.2.2)):
dependencies:
- '@babel/core': 7.29.7
+ '@babel/core': 7.29.7(supports-color@10.2.2)
'@babel/helper-module-imports': 7.18.6
- '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7)
+ '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))
'@babel/types': 7.29.7
html-entities: 2.3.3
parse5: 7.3.0
- babel-preset-solid@1.9.12(@babel/core@7.29.7)(solid-js@1.9.14):
+ babel-preset-solid@1.9.12(@babel/core@7.29.7(supports-color@10.2.2))(solid-js@1.9.14):
dependencies:
- '@babel/core': 7.29.7
- babel-plugin-jsx-dom-expressions: 0.40.7(@babel/core@7.29.7)
+ '@babel/core': 7.29.7(supports-color@10.2.2)
+ babel-plugin-jsx-dom-expressions: 0.40.7(@babel/core@7.29.7(supports-color@10.2.2))
optionalDependencies:
solid-js: 1.9.14
@@ -5368,6 +5720,15 @@ snapshots:
core-util-is@1.0.3: {}
+ cosmiconfig@9.0.2(typescript@6.0.3):
+ dependencies:
+ env-paths: 2.2.1
+ import-fresh: 3.3.1
+ js-yaml: 4.3.0
+ parse-json: 5.2.0
+ optionalDependencies:
+ typescript: 6.0.3
+
crc-32@1.2.2: {}
crc32-stream@6.0.0:
@@ -5377,6 +5738,12 @@ snapshots:
croner@10.0.1: {}
+ cross-fetch@3.2.0:
+ dependencies:
+ node-fetch: 2.7.0
+ transitivePeerDependencies:
+ - encoding
+
cross-inspect@1.0.1:
dependencies:
tslib: 2.8.1
@@ -5397,9 +5764,11 @@ snapshots:
optionalDependencies:
'@electric-sql/pglite': 0.5.3
- debug@4.4.3:
+ debug@4.4.3(supports-color@10.2.2):
dependencies:
ms: 2.1.3
+ optionalDependencies:
+ supports-color: 10.2.2
deep-is@0.1.4: {}
@@ -5476,6 +5845,12 @@ snapshots:
entities@6.0.1: {}
+ env-paths@2.2.1: {}
+
+ error-ex@1.3.4:
+ dependencies:
+ is-arrayish: 0.2.1
+
error-stack-parser-es@1.0.5: {}
error-stack-parser@2.1.4:
@@ -5552,10 +5927,10 @@ snapshots:
escape-string-regexp@5.0.0: {}
- eslint-plugin-solid@0.14.5(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3):
+ eslint-plugin-solid@0.14.5(eslint@9.39.4(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3):
dependencies:
- '@typescript-eslint/utils': 8.62.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3)
- eslint: 9.39.4(jiti@2.7.0)
+ '@typescript-eslint/utils': 8.62.1(eslint@9.39.4(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
+ eslint: 9.39.4(jiti@2.7.0)(supports-color@10.2.2)
estraverse: 5.3.0
is-html: 2.0.0
kebab-case: 1.0.2
@@ -5576,14 +5951,14 @@ snapshots:
eslint-visitor-keys@5.0.1: {}
- eslint@9.39.4(jiti@2.7.0):
+ eslint@9.39.4(jiti@2.7.0)(supports-color@10.2.2):
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0))
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)(supports-color@10.2.2))
'@eslint-community/regexpp': 4.12.2
- '@eslint/config-array': 0.21.2
+ '@eslint/config-array': 0.21.2(supports-color@10.2.2)
'@eslint/config-helpers': 0.4.2
'@eslint/core': 0.17.0
- '@eslint/eslintrc': 3.3.5
+ '@eslint/eslintrc': 3.3.5(supports-color@10.2.2)
'@eslint/js': 9.39.4
'@eslint/plugin-kit': 0.4.1
'@humanfs/node': 0.16.8
@@ -5593,7 +5968,7 @@ snapshots:
ajv: 6.15.0
chalk: 4.1.2
cross-spawn: 7.0.6
- debug: 4.4.3
+ debug: 4.4.3(supports-color@10.2.2)
escape-string-regexp: 4.0.0
eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1
@@ -5675,6 +6050,20 @@ snapshots:
dependencies:
reusify: 1.1.0
+ fbjs-css-vars@1.0.2: {}
+
+ fbjs@3.0.5:
+ dependencies:
+ cross-fetch: 3.2.0
+ fbjs-css-vars: 1.0.2
+ loose-envify: 1.4.0
+ object-assign: 4.1.1
+ promise: 7.3.1
+ setimmediate: 1.0.5
+ ua-parser-js: 1.0.41
+ transitivePeerDependencies:
+ - encoding
+
fdir@6.5.0(picomatch@4.0.4):
optionalDependencies:
picomatch: 4.0.4
@@ -5857,10 +6246,10 @@ snapshots:
http-shutdown@1.2.2: {}
- https-proxy-agent@7.0.6:
+ https-proxy-agent@7.0.6(supports-color@10.2.2):
dependencies:
agent-base: 7.1.4
- debug: 4.4.3
+ debug: 4.4.3(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
@@ -5885,11 +6274,15 @@ snapshots:
inline-style-parser@0.2.7: {}
- ioredis@5.11.1:
+ invariant@2.2.4:
+ dependencies:
+ loose-envify: 1.4.0
+
+ ioredis@5.11.1(supports-color@10.2.2):
dependencies:
'@ioredis/commands': 1.10.0
cluster-key-slot: 1.1.1
- debug: 4.4.3
+ debug: 4.4.3(supports-color@10.2.2)
denque: 2.1.0
redis-errors: 1.2.0
redis-parser: 3.0.0
@@ -5899,6 +6292,8 @@ snapshots:
iron-webcrypto@1.2.1: {}
+ is-arrayish@0.2.1: {}
+
is-core-module@2.16.2:
dependencies:
hasown: 2.0.4
@@ -5967,6 +6362,8 @@ snapshots:
json-buffer@3.0.1: {}
+ json-parse-even-better-errors@2.3.1: {}
+
json-schema-traverse@0.4.1: {}
json-stable-stringify-without-jsonify@1.0.1: {}
@@ -5996,6 +6393,8 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
+ lines-and-columns@1.2.4: {}
+
listhen@1.10.0:
dependencies:
'@parcel/watcher': 2.5.6
@@ -6031,6 +6430,10 @@ snapshots:
lodash@4.18.1: {}
+ loose-envify@1.4.0:
+ dependencies:
+ js-tokens: 4.0.0
+
lru-cache@10.4.3: {}
lru-cache@11.5.1: {}
@@ -6132,7 +6535,7 @@ snapshots:
natural-compare@1.4.0: {}
- nitropack@2.13.4(@electric-sql/pglite@0.5.3)(rolldown@1.1.1)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0)):
+ nitropack@2.13.4(@electric-sql/pglite@0.5.3)(oxc-parser@0.134.0)(rolldown@1.1.1)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0)):
dependencies:
'@cloudflare/kv-asset-handler': 0.4.2
'@rollup/plugin-alias': 6.0.0(rollup@4.62.2)
@@ -6142,7 +6545,7 @@ snapshots:
'@rollup/plugin-node-resolve': 16.0.3(rollup@4.62.2)
'@rollup/plugin-replace': 6.0.3(rollup@4.62.2)
'@rollup/plugin-terser': 1.0.0(rollup@4.62.2)
- '@vercel/nft': 1.10.2(rollup@4.62.2)
+ '@vercel/nft': 1.10.2(rollup@4.62.2)(supports-color@10.2.2)
archiver: 7.0.1
c12: 3.3.4(magicast@0.5.3)
chokidar: 5.0.0
@@ -6166,7 +6569,7 @@ snapshots:
h3: 1.15.11
hookable: 5.5.3
httpxy: 0.5.4
- ioredis: 5.11.1
+ ioredis: 5.11.1(supports-color@10.2.2)
jiti: 2.7.0
klona: 2.0.6
knitwork: 1.3.0
@@ -6189,7 +6592,7 @@ snapshots:
scule: 1.3.0
semver: 7.8.4
serve-placeholder: 2.0.2
- serve-static: 2.2.1
+ serve-static: 2.2.1(supports-color@10.2.2)
source-map: 0.7.6
std-env: 4.1.0
ufo: 1.6.4
@@ -6197,9 +6600,9 @@ snapshots:
uncrypto: 0.1.3
unctx: 2.5.0
unenv: 2.0.0-rc.24
- unimport: 6.3.0(esbuild@0.28.1)(rolldown@1.1.1)(rollup@4.62.2)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))
+ unimport: 6.3.0(esbuild@0.28.1)(oxc-parser@0.134.0)(rolldown@1.1.1)(rollup@4.62.2)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))
unplugin-utils: 0.3.2
- unstorage: 1.17.5(db0@0.3.4(@electric-sql/pglite@0.5.3))(ioredis@5.11.1)
+ unstorage: 1.17.5(db0@0.3.4(@electric-sql/pglite@0.5.3))(ioredis@5.11.1(supports-color@10.2.2))
untyped: 2.0.0
unwasm: 0.5.3
youch: 4.1.1
@@ -6264,6 +6667,8 @@ snapshots:
normalize-path@3.0.0: {}
+ object-assign@4.1.1: {}
+
obug@2.1.3: {}
ofetch@1.5.1:
@@ -6302,6 +6707,31 @@ snapshots:
type-check: 0.4.0
word-wrap: 1.2.5
+ oxc-parser@0.134.0:
+ dependencies:
+ '@oxc-project/types': 0.134.0
+ optionalDependencies:
+ '@oxc-parser/binding-android-arm-eabi': 0.134.0
+ '@oxc-parser/binding-android-arm64': 0.134.0
+ '@oxc-parser/binding-darwin-arm64': 0.134.0
+ '@oxc-parser/binding-darwin-x64': 0.134.0
+ '@oxc-parser/binding-freebsd-x64': 0.134.0
+ '@oxc-parser/binding-linux-arm-gnueabihf': 0.134.0
+ '@oxc-parser/binding-linux-arm-musleabihf': 0.134.0
+ '@oxc-parser/binding-linux-arm64-gnu': 0.134.0
+ '@oxc-parser/binding-linux-arm64-musl': 0.134.0
+ '@oxc-parser/binding-linux-ppc64-gnu': 0.134.0
+ '@oxc-parser/binding-linux-riscv64-gnu': 0.134.0
+ '@oxc-parser/binding-linux-riscv64-musl': 0.134.0
+ '@oxc-parser/binding-linux-s390x-gnu': 0.134.0
+ '@oxc-parser/binding-linux-x64-gnu': 0.134.0
+ '@oxc-parser/binding-linux-x64-musl': 0.134.0
+ '@oxc-parser/binding-openharmony-arm64': 0.134.0
+ '@oxc-parser/binding-wasm32-wasi': 0.134.0
+ '@oxc-parser/binding-win32-arm64-msvc': 0.134.0
+ '@oxc-parser/binding-win32-ia32-msvc': 0.134.0
+ '@oxc-parser/binding-win32-x64-msvc': 0.134.0
+
p-limit@3.1.0:
dependencies:
yocto-queue: 0.1.0
@@ -6316,6 +6746,13 @@ snapshots:
dependencies:
callsites: 3.1.0
+ parse-json@5.2.0:
+ dependencies:
+ '@babel/code-frame': 7.29.7
+ error-ex: 1.3.4
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+
parse5@7.3.0:
dependencies:
entities: 6.0.1
@@ -6425,6 +6862,10 @@ snapshots:
process@0.11.10: {}
+ promise@7.3.1:
+ dependencies:
+ asap: 2.0.6
+
property-information@7.2.0: {}
punycode@2.3.1: {}
@@ -6485,6 +6926,16 @@ snapshots:
dependencies:
regex-utilities: 2.3.0
+ relay-compiler@21.0.1: {}
+
+ relay-runtime@21.0.1:
+ dependencies:
+ '@babel/runtime': 7.29.7
+ fbjs: 3.0.5
+ invariant: 2.2.4
+ transitivePeerDependencies:
+ - encoding
+
resolve-from@4.0.0: {}
resolve-from@5.0.0: {}
@@ -6596,9 +7047,9 @@ snapshots:
semver@7.8.4: {}
- send@1.2.1:
+ send@1.2.1(supports-color@10.2.2):
dependencies:
- debug: 4.4.3
+ debug: 4.4.3(supports-color@10.2.2)
encodeurl: 2.0.0
escape-html: 1.0.3
etag: 1.8.1
@@ -6624,15 +7075,17 @@ snapshots:
dependencies:
defu: 6.1.7
- serve-static@2.2.1:
+ serve-static@2.2.1(supports-color@10.2.2):
dependencies:
encodeurl: 2.0.0
escape-html: 1.0.3
parseurl: 1.3.3
- send: 1.2.1
+ send: 1.2.1(supports-color@10.2.2)
transitivePeerDependencies:
- supports-color
+ setimmediate@1.0.5: {}
+
setprototypeof@1.2.0: {}
shebang-command@2.0.0:
@@ -6664,15 +7117,23 @@ snapshots:
seroval: 1.5.4
seroval-plugins: 1.5.4(seroval@1.5.4)
- solid-refresh@0.6.3(solid-js@1.9.14):
+ solid-refresh@0.6.3(solid-js@1.9.14)(supports-color@10.2.2):
dependencies:
'@babel/generator': 7.29.7
- '@babel/helper-module-imports': 7.29.7
+ '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2)
'@babel/types': 7.29.7
solid-js: 1.9.14
transitivePeerDependencies:
- supports-color
+ solid-relay@1.0.0-beta.27(relay-runtime@21.0.1)(seroval@1.5.4)(solid-js@1.9.14):
+ dependencies:
+ dequal: 2.0.3
+ relay-runtime: 21.0.1
+ seroval: 1.5.4
+ solid-js: 1.9.14
+ tiny-invariant: 1.3.3
+
solid-use@0.9.1(solid-js@1.9.14):
dependencies:
solid-js: 1.9.14
@@ -6880,6 +7341,8 @@ snapshots:
typescript@6.0.3: {}
+ ua-parser-js@1.0.41: {}
+
ufo@1.6.4: {}
ultrahtml@1.6.0: {}
@@ -6906,7 +7369,7 @@ snapshots:
unicorn-magic@0.4.0: {}
- unimport@6.3.0(esbuild@0.28.1)(rolldown@1.1.1)(rollup@4.62.2)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0)):
+ unimport@6.3.0(esbuild@0.28.1)(oxc-parser@0.134.0)(rolldown@1.1.1)(rollup@4.62.2)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0)):
dependencies:
acorn: 8.17.0
escape-string-regexp: 5.0.0
@@ -6923,6 +7386,7 @@ snapshots:
unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.1.1)(rollup@4.62.2)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))
unplugin-utils: 0.3.2
optionalDependencies:
+ oxc-parser: 0.134.0
rolldown: 1.1.1
transitivePeerDependencies:
- '@farmfe/core'
@@ -6980,7 +7444,7 @@ snapshots:
rollup: 4.62.2
vite: 7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0)
- unstorage@1.17.5(db0@0.3.4(@electric-sql/pglite@0.5.3))(ioredis@5.11.1):
+ unstorage@1.17.5(db0@0.3.4(@electric-sql/pglite@0.5.3))(ioredis@5.11.1(supports-color@10.2.2)):
dependencies:
anymatch: 3.1.3
chokidar: 5.0.0
@@ -6992,7 +7456,7 @@ snapshots:
ufo: 1.6.4
optionalDependencies:
db0: 0.3.4(@electric-sql/pglite@0.5.3)
- ioredis: 5.11.1
+ ioredis: 5.11.1(supports-color@10.2.2)
untun@0.1.3:
dependencies:
@@ -7045,14 +7509,32 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
- vite-plugin-solid@2.11.12(solid-js@1.9.14)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0)):
+ vite-plugin-cjs-interop@4.0.3(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0)):
+ dependencies:
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ minimatch: 10.2.5
+ oxc-parser: 0.134.0
+ vite: 7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0)
+
+ vite-plugin-relay-lite@0.12.0(graphql@16.14.2)(typescript@6.0.3)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0)):
+ dependencies:
+ cosmiconfig: 9.0.2(typescript@6.0.3)
+ graphql: 16.14.2
+ kleur: 4.1.5
+ magic-string: 0.30.21
+ vite: 7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0)
+ transitivePeerDependencies:
+ - typescript
+
+ vite-plugin-solid@2.11.12(solid-js@1.9.14)(supports-color@10.2.2)(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0)):
dependencies:
- '@babel/core': 7.29.7
+ '@babel/core': 7.29.7(supports-color@10.2.2)
'@types/babel__core': 7.20.5
- babel-preset-solid: 1.9.12(@babel/core@7.29.7)(solid-js@1.9.14)
+ babel-preset-solid: 1.9.12(@babel/core@7.29.7(supports-color@10.2.2))(solid-js@1.9.14)
merge-anything: 5.1.7
solid-js: 1.9.14
- solid-refresh: 0.6.3(solid-js@1.9.14)
+ solid-refresh: 0.6.3(solid-js@1.9.14)(supports-color@10.2.2)
vite: 7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0)
vitefu: 1.1.3(vite@7.3.6(@types/node@26.0.0)(jiti@2.7.0)(terser@5.48.0))
transitivePeerDependencies:
diff --git a/scripts/add-license/main.mts b/scripts/add-license/main.mts
index 1946ae2..b73d833 100644
--- a/scripts/add-license/main.mts
+++ b/scripts/add-license/main.mts
@@ -24,7 +24,7 @@ import GPL from "./gpl.mts";
const ROOT = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
const INCLUDED = ["scripts/", "packages/*/src/", "packages/*/bin/"];
-const EXCLUDED = ["**/dist/"];
+const EXCLUDED = ["**/dist/", "**/__generated__/**"];
type Extension = keyof typeof GPL;