From 933ef2512ecc609a678525e1e9ae972e5a7b7777 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Mon, 21 Jul 2025 16:54:29 -1000 Subject: [PATCH 01/20] feat(#354 | create-hypergraph-app): move hypergraph-app-template into hypergraph monorepo --- apps/create-hypergraph-app/LICENSE | 21 + apps/create-hypergraph-app/README.md | 42 + apps/create-hypergraph-app/package.json | 36 + .../template-vite-react/.gitignore | 24 + .../template-vite-react/.prettierignore | 3 + .../template-vite-react/.prettierrc | 4 + .../template-vite-react/README.md | 3 + .../template-vite-react/components.json | 21 + .../template-vite-react/eslint.config.mjs | 28 + .../template-vite-react/index.html | 13 + .../template-vite-react/package.json | 50 + .../template-vite-react/public/hypergraph.svg | 1 + .../src/components/logout.tsx | 21 + .../src/components/navbar.tsx | 96 + .../src/components/spaces-menu.tsx | 73 + .../src/components/ui/button.tsx | 50 + .../src/components/ui/navigation-menu.tsx | 143 ++ .../src/components/ui/tooltip.tsx | 28 + .../template-vite-react/src/index.css | 120 ++ .../template-vite-react/src/lib/utils.ts | 6 + .../template-vite-react/src/routeTree.gen.ts | 168 ++ .../template-vite-react/src/routes/__root.tsx | 39 + .../src/routes/authenticate-success.tsx | 27 + .../src/routes/explore-public-knowledge.tsx | 74 + .../template-vite-react/src/routes/index.tsx | 131 ++ .../template-vite-react/src/routes/login.tsx | 36 + .../src/routes/private-space/$space-id.tsx | 196 ++ .../src/routes/public-space/$space-id.tsx | 122 ++ .../template-vite-react/src/schema.ts | 10 + .../template-vite-react/src/vite-env.d.ts | 1 + .../template-vite-react/tsconfig.app.json | 52 + .../template-vite-react/tsconfig.json | 17 + .../template-vite-react/tsconfig.node.json | 24 + .../template-vite-react/vite.config.ts | 22 + biome.jsonc | 1 + pnpm-lock.yaml | 1801 +++++++++++++---- 36 files changed, 3129 insertions(+), 375 deletions(-) create mode 100644 apps/create-hypergraph-app/LICENSE create mode 100644 apps/create-hypergraph-app/README.md create mode 100644 apps/create-hypergraph-app/package.json create mode 100644 apps/create-hypergraph-app/template-vite-react/.gitignore create mode 100644 apps/create-hypergraph-app/template-vite-react/.prettierignore create mode 100644 apps/create-hypergraph-app/template-vite-react/.prettierrc create mode 100644 apps/create-hypergraph-app/template-vite-react/README.md create mode 100644 apps/create-hypergraph-app/template-vite-react/components.json create mode 100644 apps/create-hypergraph-app/template-vite-react/eslint.config.mjs create mode 100644 apps/create-hypergraph-app/template-vite-react/index.html create mode 100644 apps/create-hypergraph-app/template-vite-react/package.json create mode 100644 apps/create-hypergraph-app/template-vite-react/public/hypergraph.svg create mode 100644 apps/create-hypergraph-app/template-vite-react/src/components/logout.tsx create mode 100644 apps/create-hypergraph-app/template-vite-react/src/components/navbar.tsx create mode 100644 apps/create-hypergraph-app/template-vite-react/src/components/spaces-menu.tsx create mode 100644 apps/create-hypergraph-app/template-vite-react/src/components/ui/button.tsx create mode 100644 apps/create-hypergraph-app/template-vite-react/src/components/ui/navigation-menu.tsx create mode 100644 apps/create-hypergraph-app/template-vite-react/src/components/ui/tooltip.tsx create mode 100644 apps/create-hypergraph-app/template-vite-react/src/index.css create mode 100644 apps/create-hypergraph-app/template-vite-react/src/lib/utils.ts create mode 100644 apps/create-hypergraph-app/template-vite-react/src/routeTree.gen.ts create mode 100644 apps/create-hypergraph-app/template-vite-react/src/routes/__root.tsx create mode 100644 apps/create-hypergraph-app/template-vite-react/src/routes/authenticate-success.tsx create mode 100644 apps/create-hypergraph-app/template-vite-react/src/routes/explore-public-knowledge.tsx create mode 100644 apps/create-hypergraph-app/template-vite-react/src/routes/index.tsx create mode 100644 apps/create-hypergraph-app/template-vite-react/src/routes/login.tsx create mode 100644 apps/create-hypergraph-app/template-vite-react/src/routes/private-space/$space-id.tsx create mode 100644 apps/create-hypergraph-app/template-vite-react/src/routes/public-space/$space-id.tsx create mode 100644 apps/create-hypergraph-app/template-vite-react/src/schema.ts create mode 100644 apps/create-hypergraph-app/template-vite-react/src/vite-env.d.ts create mode 100644 apps/create-hypergraph-app/template-vite-react/tsconfig.app.json create mode 100644 apps/create-hypergraph-app/template-vite-react/tsconfig.json create mode 100644 apps/create-hypergraph-app/template-vite-react/tsconfig.node.json create mode 100644 apps/create-hypergraph-app/template-vite-react/vite.config.ts diff --git a/apps/create-hypergraph-app/LICENSE b/apps/create-hypergraph-app/LICENSE new file mode 100644 index 00000000..3ddb85bf --- /dev/null +++ b/apps/create-hypergraph-app/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024-present Geo Browser, PB LLC and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/apps/create-hypergraph-app/README.md b/apps/create-hypergraph-app/README.md new file mode 100644 index 00000000..49bb1df3 --- /dev/null +++ b/apps/create-hypergraph-app/README.md @@ -0,0 +1,42 @@ +# @graphprotocol/create-hypergraph-app + +CLI toolchain to scaffold a [Hypergraph-enabled](https://github.com/graphprotocol/hypergraph) application with a given template. + +Inspiration takes from the `vite`, `nextjs`, and `effect` create app command tools. + +## Scaffolding a hypergraph app + +With NPM: + +```bash +npm create hypergraph-app@latest +``` + +With Yarn: + +```bash +yarn create hypergraph-app +``` + +With PNPM: + +```bash +pnpm create hypergraph-app@latest +``` + +With Bun: + +```bash +bun create hypergraph-app +``` + +Then follow the given prompts. + +### Currently Supported Templates + +- vite + react + +## References + +- [create vite app](https://github.com/vitejs/vite/tree/main/packages/create-vite) +- [create effect app](https://effect.website/docs/getting-started/create-effect-app/) \ No newline at end of file diff --git a/apps/create-hypergraph-app/package.json b/apps/create-hypergraph-app/package.json new file mode 100644 index 00000000..14204272 --- /dev/null +++ b/apps/create-hypergraph-app/package.json @@ -0,0 +1,36 @@ +{ + "name": "@graphprotocol/create-hypergraph-app", + "version": "0.0.1", + "description": "CLI toolchain to scaffold a hypergraph-enabled application with a given template.", + "type": "module", + "bin": { + "create-hypergraph-app": "dist/bin.js", + "cha": "dist/bin.js" + }, + "files": ["dist", "template-*"], + "repository": { + "type": "git", + "url": "git+https://github.com/graphprotocol/hypergraph.git", + "directory": "apps/create-hypergraph-app" + }, + "publishConfig": { + "access": "public", + "directory": "dist", + "linkDirectory": false + }, + "scripts": { + "test": "vitest run", + "dev": "pnpx tsx ./src/bin.ts", + "build": "tsup", + "check": "tsc --noEmit" + }, + "keywords": ["The Graph", "Web3", "Knowledge Graph", "Hypergraph", "TypeSyncs"], + "license": "MIT", + "engines": { + "node": ">=20" + }, + "bugs": { + "url": "https://github.com/graphprotocol/hypergraph/issues" + }, + "homepage": "https://github.com/graphprotocol/hypergraph/tree/main/apps/create-hypergraph-app#readme" +} diff --git a/apps/create-hypergraph-app/template-vite-react/.gitignore b/apps/create-hypergraph-app/template-vite-react/.gitignore new file mode 100644 index 00000000..54f07af5 --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? \ No newline at end of file diff --git a/apps/create-hypergraph-app/template-vite-react/.prettierignore b/apps/create-hypergraph-app/template-vite-react/.prettierignore new file mode 100644 index 00000000..3e98b250 --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/.prettierignore @@ -0,0 +1,3 @@ +# Ignore artifacts: +build +dist \ No newline at end of file diff --git a/apps/create-hypergraph-app/template-vite-react/.prettierrc b/apps/create-hypergraph-app/template-vite-react/.prettierrc new file mode 100644 index 00000000..f65aabcb --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "printWidth": 120 +} \ No newline at end of file diff --git a/apps/create-hypergraph-app/template-vite-react/README.md b/apps/create-hypergraph-app/template-vite-react/README.md new file mode 100644 index 00000000..de323c10 --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/README.md @@ -0,0 +1,3 @@ +# Hypergraph + Vite + React + +This template is a minimal setup for a [Hypergraph](https://github.com/graphprotocol/hypergraph) app using Vite and React. \ No newline at end of file diff --git a/apps/create-hypergraph-app/template-vite-react/components.json b/apps/create-hypergraph-app/template-vite-react/components.json new file mode 100644 index 00000000..62267910 --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "", + "css": "src/index.css", + "baseColor": "slate", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "iconLibrary": "lucide" +} diff --git a/apps/create-hypergraph-app/template-vite-react/eslint.config.mjs b/apps/create-hypergraph-app/template-vite-react/eslint.config.mjs new file mode 100644 index 00000000..fc7617f8 --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/eslint.config.mjs @@ -0,0 +1,28 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +) \ No newline at end of file diff --git a/apps/create-hypergraph-app/template-vite-react/index.html b/apps/create-hypergraph-app/template-vite-react/index.html new file mode 100644 index 00000000..c1ffa8ea --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/index.html @@ -0,0 +1,13 @@ + + + + + + Hypergraph App Template | Vite + React + + + +
+ + + diff --git a/apps/create-hypergraph-app/template-vite-react/package.json b/apps/create-hypergraph-app/template-vite-react/package.json new file mode 100644 index 00000000..61cb39ea --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/package.json @@ -0,0 +1,50 @@ +{ + "private": true, + "name": "hypergraph-vite-react-template", + "description": "A template for a Hypergraph app using vite+react", + "version": "v1.0.0", + "type": "module", + "scripts": { + "build": "tsc -b && vite build", + "dev": "vite --force", + "preview": "vite preview", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@graphprotocol/grc-20": "^0.21.6", + "@graphprotocol/hypergraph": "0.0.14", + "@graphprotocol/hypergraph-react": "0.0.14", + "@graphprotocol/typesync": "^0.0.3", + "@radix-ui/react-navigation-menu": "^1.2.13", + "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-tooltip": "^1.2.7", + "@tailwindcss/vite": "^4.1.11", + "@tanstack/react-query": "^5.83.0", + "@tanstack/react-router": "^1.129.2", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "effect": "^3.17.0", + "lucide-react": "^0.525.0", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "tailwind-merge": "^3.3.1", + "tailwindcss": "^4.1.11", + "vite": "^7.0.5" + }, + "devDependencies": { + "@eslint/js": "^9.31.0", + "@tanstack/router-plugin": "^1.129.2", + "@types/node": "^24.0.15", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "^4.7.0", + "eslint": "^9.31.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.3.0", + "prettier": "^3.6.2", + "tw-animate-css": "^1.3.5", + "typescript": "~5.8.3", + "typescript-eslint": "^8.38.0" + } +} diff --git a/apps/create-hypergraph-app/template-vite-react/public/hypergraph.svg b/apps/create-hypergraph-app/template-vite-react/public/hypergraph.svg new file mode 100644 index 00000000..f7378aad --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/public/hypergraph.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/create-hypergraph-app/template-vite-react/src/components/logout.tsx b/apps/create-hypergraph-app/template-vite-react/src/components/logout.tsx new file mode 100644 index 00000000..43f453bb --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/components/logout.tsx @@ -0,0 +1,21 @@ +import { useHypergraphApp, useHypergraphAuth } from '@graphprotocol/hypergraph-react'; +import { useRouter } from '@tanstack/react-router'; + +export function Logout() { + const { logout } = useHypergraphApp(); + const { authenticated } = useHypergraphAuth(); + const router = useRouter(); + + const handleLogout = () => { + logout(); + router.navigate({ + to: '/login', + }); + }; + + return ( + + ); +} diff --git a/apps/create-hypergraph-app/template-vite-react/src/components/navbar.tsx b/apps/create-hypergraph-app/template-vite-react/src/components/navbar.tsx new file mode 100644 index 00000000..8dad7ccc --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/components/navbar.tsx @@ -0,0 +1,96 @@ +import { Button } from '@/components/ui/button'; +import { + NavigationMenu, + NavigationMenuContent, + NavigationMenuItem, + NavigationMenuLink, + NavigationMenuList, + NavigationMenuTrigger, +} from '@/components/ui/navigation-menu'; +import { TooltipProvider } from '@/components/ui/tooltip'; +import { useHypergraphApp, useHypergraphAuth } from '@graphprotocol/hypergraph-react'; +import { Link, useRouter } from '@tanstack/react-router'; +import { SpacesMenu } from './spaces-menu'; + +export function Navbar() { + const { authenticated } = useHypergraphAuth(); + const { redirectToConnect, logout } = useHypergraphApp(); + const router = useRouter(); + + const handleSignIn = () => { + redirectToConnect({ + storage: localStorage, + connectUrl: 'https://hypergraph-connect.vercel.app/', + successUrl: `${window.location.origin}/authenticate-success`, + appId: '93bb8907-085a-4a0e-83dd-62b0dc98e793', + redirectFn: (url: URL) => { + window.location.href = url.toString(); + }, + }); + }; + + const handleLogout = () => { + logout(); + router.navigate({ + to: '/login', + }); + }; + + return ( + + + + ); +} diff --git a/apps/create-hypergraph-app/template-vite-react/src/components/spaces-menu.tsx b/apps/create-hypergraph-app/template-vite-react/src/components/spaces-menu.tsx new file mode 100644 index 00000000..3ea280f7 --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/components/spaces-menu.tsx @@ -0,0 +1,73 @@ +import { NavigationMenuContent, NavigationMenuLink } from '@/components/ui/navigation-menu'; +import { useSpaces } from '@graphprotocol/hypergraph-react'; +import { Link } from '@tanstack/react-router'; + +export function SpacesMenu() { + const { data: publicSpaces, isPending: publicSpacesPending } = useSpaces({ mode: 'public' }); + const { data: privateSpaces, isPending: privateSpacesPending } = useSpaces({ mode: 'private' }); + + const isLoading = publicSpacesPending || privateSpacesPending; + + if (isLoading) { + return ( + + + + ); + } + + return ( + + + + ); +} diff --git a/apps/create-hypergraph-app/template-vite-react/src/components/ui/button.tsx b/apps/create-hypergraph-app/template-vite-react/src/components/ui/button.tsx new file mode 100644 index 00000000..d05e4380 --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/components/ui/button.tsx @@ -0,0 +1,50 @@ +import { Slot } from '@radix-ui/react-slot'; +import { type VariantProps, cva } from 'class-variance-authority'; +import type * as React from 'react'; + +import { cn } from '@/lib/utils'; + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", + { + variants: { + variant: { + default: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90', + destructive: + 'bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60', + outline: + 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50', + secondary: 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80', + ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50', + link: 'text-primary underline-offset-4 hover:underline', + }, + size: { + default: 'h-9 px-4 py-2 has-[>svg]:px-3', + sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5', + lg: 'h-10 rounded-md px-6 has-[>svg]:px-4', + icon: 'size-9', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + }, +); + +function Button({ + className, + variant, + size, + asChild = false, + ...props +}: React.ComponentProps<'button'> & + VariantProps & { + asChild?: boolean; + }) { + const Comp = asChild ? Slot : 'button'; + + return ; +} + +export { Button, buttonVariants }; diff --git a/apps/create-hypergraph-app/template-vite-react/src/components/ui/navigation-menu.tsx b/apps/create-hypergraph-app/template-vite-react/src/components/ui/navigation-menu.tsx new file mode 100644 index 00000000..bfab9ea8 --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/components/ui/navigation-menu.tsx @@ -0,0 +1,143 @@ +import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu'; +import { cva } from 'class-variance-authority'; +import { ChevronDownIcon } from 'lucide-react'; +import type * as React from 'react'; + +import { cn } from '@/lib/utils'; + +function NavigationMenu({ + className, + children, + viewport = true, + ...props +}: React.ComponentProps & { + viewport?: boolean; +}) { + return ( + + {children} + {viewport && } + + ); +} + +function NavigationMenuList({ className, ...props }: React.ComponentProps) { + return ( + + ); +} + +function NavigationMenuItem({ className, ...props }: React.ComponentProps) { + return ( + + ); +} + +const navigationMenuTriggerStyle = cva( + 'group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1', +); + +function NavigationMenuTrigger({ + className, + children, + ...props +}: React.ComponentProps) { + return ( + + {children}{' '} + + ); +} + +function NavigationMenuContent({ className, ...props }: React.ComponentProps) { + return ( + + ); +} + +function NavigationMenuViewport({ + className, + ...props +}: React.ComponentProps) { + return ( +
+ +
+ ); +} + +function NavigationMenuLink({ className, ...props }: React.ComponentProps) { + return ( + + ); +} + +function NavigationMenuIndicator({ + className, + ...props +}: React.ComponentProps) { + return ( + +
+ + ); +} + +export { + NavigationMenu, + NavigationMenuContent, + NavigationMenuIndicator, + NavigationMenuItem, + NavigationMenuLink, + NavigationMenuList, + NavigationMenuTrigger, + navigationMenuTriggerStyle, + NavigationMenuViewport, +}; diff --git a/apps/create-hypergraph-app/template-vite-react/src/components/ui/tooltip.tsx b/apps/create-hypergraph-app/template-vite-react/src/components/ui/tooltip.tsx new file mode 100644 index 00000000..6a304fb3 --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/components/ui/tooltip.tsx @@ -0,0 +1,28 @@ +import * as TooltipPrimitive from '@radix-ui/react-tooltip'; +import * as React from 'react'; + +import { cn } from '@/lib/utils'; + +const TooltipProvider = TooltipPrimitive.Provider; + +const Tooltip = TooltipPrimitive.Root; + +const TooltipTrigger = TooltipPrimitive.Trigger; + +const TooltipContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + +)); +TooltipContent.displayName = TooltipPrimitive.Content.displayName; + +export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger }; diff --git a/apps/create-hypergraph-app/template-vite-react/src/index.css b/apps/create-hypergraph-app/template-vite-react/src/index.css new file mode 100644 index 00000000..cab93eb5 --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/index.css @@ -0,0 +1,120 @@ +@import 'tailwindcss'; +@import "tw-animate-css"; + +@custom-variant dark (&:is(.dark *)); + +@theme inline { + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); +} + +:root { + --radius: 0.625rem; + --background: oklch(1 0 0); + --foreground: oklch(0.129 0.042 264.695); + --card: oklch(1 0 0); + --card-foreground: oklch(0.129 0.042 264.695); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.129 0.042 264.695); + --primary: oklch(0.208 0.042 265.755); + --primary-foreground: oklch(0.984 0.003 247.858); + --secondary: oklch(0.968 0.007 247.896); + --secondary-foreground: oklch(0.208 0.042 265.755); + --muted: oklch(0.968 0.007 247.896); + --muted-foreground: oklch(0.554 0.046 257.417); + --accent: oklch(0.968 0.007 247.896); + --accent-foreground: oklch(0.208 0.042 265.755); + --destructive: oklch(0.577 0.245 27.325); + --border: oklch(0.929 0.013 255.508); + --input: oklch(0.929 0.013 255.508); + --ring: oklch(0.704 0.04 256.788); + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --sidebar: oklch(0.984 0.003 247.858); + --sidebar-foreground: oklch(0.129 0.042 264.695); + --sidebar-primary: oklch(0.208 0.042 265.755); + --sidebar-primary-foreground: oklch(0.984 0.003 247.858); + --sidebar-accent: oklch(0.968 0.007 247.896); + --sidebar-accent-foreground: oklch(0.208 0.042 265.755); + --sidebar-border: oklch(0.929 0.013 255.508); + --sidebar-ring: oklch(0.704 0.04 256.788); +} + +.dark { + --background: oklch(0.129 0.042 264.695); + --foreground: oklch(0.984 0.003 247.858); + --card: oklch(0.208 0.042 265.755); + --card-foreground: oklch(0.984 0.003 247.858); + --popover: oklch(0.208 0.042 265.755); + --popover-foreground: oklch(0.984 0.003 247.858); + --primary: oklch(0.929 0.013 255.508); + --primary-foreground: oklch(0.208 0.042 265.755); + --secondary: oklch(0.279 0.041 260.031); + --secondary-foreground: oklch(0.984 0.003 247.858); + --muted: oklch(0.279 0.041 260.031); + --muted-foreground: oklch(0.704 0.04 256.788); + --accent: oklch(0.279 0.041 260.031); + --accent-foreground: oklch(0.984 0.003 247.858); + --destructive: oklch(0.704 0.191 22.216); + --border: oklch(1 0 0 / 10%); + --input: oklch(1 0 0 / 15%); + --ring: oklch(0.551 0.027 264.364); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.208 0.042 265.755); + --sidebar-foreground: oklch(0.984 0.003 247.858); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.984 0.003 247.858); + --sidebar-accent: oklch(0.279 0.041 260.031); + --sidebar-accent-foreground: oklch(0.984 0.003 247.858); + --sidebar-border: oklch(1 0 0 / 10%); + --sidebar-ring: oklch(0.551 0.027 264.364); +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } +} \ No newline at end of file diff --git a/apps/create-hypergraph-app/template-vite-react/src/lib/utils.ts b/apps/create-hypergraph-app/template-vite-react/src/lib/utils.ts new file mode 100644 index 00000000..9ad0df42 --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from 'clsx'; +import { twMerge } from 'tailwind-merge'; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/apps/create-hypergraph-app/template-vite-react/src/routeTree.gen.ts b/apps/create-hypergraph-app/template-vite-react/src/routeTree.gen.ts new file mode 100644 index 00000000..6ea8f4ff --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/routeTree.gen.ts @@ -0,0 +1,168 @@ +/* eslint-disable */ + +// @ts-nocheck + +// noinspection JSUnusedGlobalSymbols + +// This file was automatically generated by TanStack Router. +// You should NOT make any changes in this file as it will be overwritten. +// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. + +import { Route as rootRouteImport } from './routes/__root' +import { Route as LoginRouteImport } from './routes/login' +import { Route as ExplorePublicKnowledgeRouteImport } from './routes/explore-public-knowledge' +import { Route as AuthenticateSuccessRouteImport } from './routes/authenticate-success' +import { Route as IndexRouteImport } from './routes/index' +import { Route as PublicSpaceSpaceIdRouteImport } from './routes/public-space/$space-id' +import { Route as PrivateSpaceSpaceIdRouteImport } from './routes/private-space/$space-id' + +const LoginRoute = LoginRouteImport.update({ + id: '/login', + path: '/login', + getParentRoute: () => rootRouteImport, +} as any) +const ExplorePublicKnowledgeRoute = ExplorePublicKnowledgeRouteImport.update({ + id: '/explore-public-knowledge', + path: '/explore-public-knowledge', + getParentRoute: () => rootRouteImport, +} as any) +const AuthenticateSuccessRoute = AuthenticateSuccessRouteImport.update({ + id: '/authenticate-success', + path: '/authenticate-success', + getParentRoute: () => rootRouteImport, +} as any) +const IndexRoute = IndexRouteImport.update({ + id: '/', + path: '/', + getParentRoute: () => rootRouteImport, +} as any) +const PublicSpaceSpaceIdRoute = PublicSpaceSpaceIdRouteImport.update({ + id: '/public-space/$space-id', + path: '/public-space/$space-id', + getParentRoute: () => rootRouteImport, +} as any) +const PrivateSpaceSpaceIdRoute = PrivateSpaceSpaceIdRouteImport.update({ + id: '/private-space/$space-id', + path: '/private-space/$space-id', + getParentRoute: () => rootRouteImport, +} as any) + +export interface FileRoutesByFullPath { + '/': typeof IndexRoute + '/authenticate-success': typeof AuthenticateSuccessRoute + '/explore-public-knowledge': typeof ExplorePublicKnowledgeRoute + '/login': typeof LoginRoute + '/private-space/$space-id': typeof PrivateSpaceSpaceIdRoute + '/public-space/$space-id': typeof PublicSpaceSpaceIdRoute +} +export interface FileRoutesByTo { + '/': typeof IndexRoute + '/authenticate-success': typeof AuthenticateSuccessRoute + '/explore-public-knowledge': typeof ExplorePublicKnowledgeRoute + '/login': typeof LoginRoute + '/private-space/$space-id': typeof PrivateSpaceSpaceIdRoute + '/public-space/$space-id': typeof PublicSpaceSpaceIdRoute +} +export interface FileRoutesById { + __root__: typeof rootRouteImport + '/': typeof IndexRoute + '/authenticate-success': typeof AuthenticateSuccessRoute + '/explore-public-knowledge': typeof ExplorePublicKnowledgeRoute + '/login': typeof LoginRoute + '/private-space/$space-id': typeof PrivateSpaceSpaceIdRoute + '/public-space/$space-id': typeof PublicSpaceSpaceIdRoute +} +export interface FileRouteTypes { + fileRoutesByFullPath: FileRoutesByFullPath + fullPaths: + | '/' + | '/authenticate-success' + | '/explore-public-knowledge' + | '/login' + | '/private-space/$space-id' + | '/public-space/$space-id' + fileRoutesByTo: FileRoutesByTo + to: + | '/' + | '/authenticate-success' + | '/explore-public-knowledge' + | '/login' + | '/private-space/$space-id' + | '/public-space/$space-id' + id: + | '__root__' + | '/' + | '/authenticate-success' + | '/explore-public-knowledge' + | '/login' + | '/private-space/$space-id' + | '/public-space/$space-id' + fileRoutesById: FileRoutesById +} +export interface RootRouteChildren { + IndexRoute: typeof IndexRoute + AuthenticateSuccessRoute: typeof AuthenticateSuccessRoute + ExplorePublicKnowledgeRoute: typeof ExplorePublicKnowledgeRoute + LoginRoute: typeof LoginRoute + PrivateSpaceSpaceIdRoute: typeof PrivateSpaceSpaceIdRoute + PublicSpaceSpaceIdRoute: typeof PublicSpaceSpaceIdRoute +} + +declare module '@tanstack/react-router' { + interface FileRoutesByPath { + '/login': { + id: '/login' + path: '/login' + fullPath: '/login' + preLoaderRoute: typeof LoginRouteImport + parentRoute: typeof rootRouteImport + } + '/explore-public-knowledge': { + id: '/explore-public-knowledge' + path: '/explore-public-knowledge' + fullPath: '/explore-public-knowledge' + preLoaderRoute: typeof ExplorePublicKnowledgeRouteImport + parentRoute: typeof rootRouteImport + } + '/authenticate-success': { + id: '/authenticate-success' + path: '/authenticate-success' + fullPath: '/authenticate-success' + preLoaderRoute: typeof AuthenticateSuccessRouteImport + parentRoute: typeof rootRouteImport + } + '/': { + id: '/' + path: '/' + fullPath: '/' + preLoaderRoute: typeof IndexRouteImport + parentRoute: typeof rootRouteImport + } + '/public-space/$space-id': { + id: '/public-space/$space-id' + path: '/public-space/$space-id' + fullPath: '/public-space/$space-id' + preLoaderRoute: typeof PublicSpaceSpaceIdRouteImport + parentRoute: typeof rootRouteImport + } + '/private-space/$space-id': { + id: '/private-space/$space-id' + path: '/private-space/$space-id' + fullPath: '/private-space/$space-id' + preLoaderRoute: typeof PrivateSpaceSpaceIdRouteImport + parentRoute: typeof rootRouteImport + } + } +} + +const rootRouteChildren: RootRouteChildren = { + IndexRoute: IndexRoute, + AuthenticateSuccessRoute: AuthenticateSuccessRoute, + ExplorePublicKnowledgeRoute: ExplorePublicKnowledgeRoute, + LoginRoute: LoginRoute, + PrivateSpaceSpaceIdRoute: PrivateSpaceSpaceIdRoute, + PublicSpaceSpaceIdRoute: PublicSpaceSpaceIdRoute, +} +export const routeTree = rootRouteImport + ._addFileChildren(rootRouteChildren) + ._addFileTypes() diff --git a/apps/create-hypergraph-app/template-vite-react/src/routes/__root.tsx b/apps/create-hypergraph-app/template-vite-react/src/routes/__root.tsx new file mode 100644 index 00000000..5b51fe2e --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/routes/__root.tsx @@ -0,0 +1,39 @@ +import { useHypergraphAuth } from '@graphprotocol/hypergraph-react'; +import { Outlet, createRootRoute, useLayoutEffect, useRouter } from '@tanstack/react-router'; +import { Navbar } from '../components/navbar'; + +const Root = () => { + const { authenticated } = useHypergraphAuth(); + const router = useRouter(); + + useLayoutEffect(() => { + // Don't redirect on login or authenticate-success pages + if ( + router.state.location.href.startsWith('/login') || + router.state.location.href.startsWith('/authenticate-success') || + router.state.location.href.startsWith('/') + ) { + return; + } + + // Only redirect to login if not authenticated and not already on login page + if (!authenticated) { + router.navigate({ + to: '/login', + }); + } + }, [authenticated, router]); + + return ( + <> + +
+ +
+ + ); +}; + +export const Route = createRootRoute({ + component: Root, +}); diff --git a/apps/create-hypergraph-app/template-vite-react/src/routes/authenticate-success.tsx b/apps/create-hypergraph-app/template-vite-react/src/routes/authenticate-success.tsx new file mode 100644 index 00000000..b546efec --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/routes/authenticate-success.tsx @@ -0,0 +1,27 @@ +import { useHypergraphApp } from '@graphprotocol/hypergraph-react'; +import { createFileRoute, useNavigate } from '@tanstack/react-router'; +import { useEffect } from 'react'; + +export const Route = createFileRoute('/authenticate-success')({ + component: RouteComponent, + validateSearch: (search: Record): { ciphertext: string; nonce: string } => { + return { + ciphertext: search.ciphertext as string, + nonce: search.nonce as string, + }; + }, +}); + +function RouteComponent() { + const { ciphertext, nonce } = Route.useSearch(); + const { processConnectAuthSuccess } = useHypergraphApp(); + const navigate = useNavigate(); + + useEffect(() => { + processConnectAuthSuccess({ storage: localStorage, ciphertext, nonce }); + console.log('redirecting to /'); + navigate({ to: '/', replace: true }); + }, [ciphertext, nonce, processConnectAuthSuccess, navigate]); + + return
Authenticating …
; +} diff --git a/apps/create-hypergraph-app/template-vite-react/src/routes/explore-public-knowledge.tsx b/apps/create-hypergraph-app/template-vite-react/src/routes/explore-public-knowledge.tsx new file mode 100644 index 00000000..86476fb7 --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/routes/explore-public-knowledge.tsx @@ -0,0 +1,74 @@ +import { Project } from '@/schema'; +import { useQuery } from '@graphprotocol/hypergraph-react'; +import { createFileRoute } from '@tanstack/react-router'; + +export const Route = createFileRoute('/explore-public-knowledge')({ + component: ExplorePublicKnowledge, +}); + +function ExplorePublicKnowledge() { + const { data: projects, isPending } = useQuery(Project, { + mode: 'public', + space: 'b2565802-3118-47be-91f2-e59170735bac', + first: 40, + }); + + return ( +
+
+

+ Explore Public Knowledge +

+

+ This page demonstrates how to query public data from a space. No authentication is required. +

+
+ +
+ {projects.map((project) => ( +
+ {/* Gradient overlay */} +
+ + {/* Content */} +
+ {/* Project icon/avatar */} +
+ {project.name.charAt(0).toUpperCase()} +
+ + {/* Project name */} +

+ {project.name} +

+
+ + {/* Decorative corner accent */} +
+
+ ))} +
+ + {/* Empty state */} + {isPending === false && projects.length === 0 && ( +
+
+ + + +
+

No Projects Found

+

There are currently no public projects available to explore.

+
+ )} +
+ ); +} diff --git a/apps/create-hypergraph-app/template-vite-react/src/routes/index.tsx b/apps/create-hypergraph-app/template-vite-react/src/routes/index.tsx new file mode 100644 index 00000000..aeb2f0de --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/routes/index.tsx @@ -0,0 +1,131 @@ +import { Button } from '@/components/ui/button'; +import { useHypergraphApp } from '@graphprotocol/hypergraph-react'; +import { Link, createFileRoute } from '@tanstack/react-router'; + +export const Route = createFileRoute('/')({ + component: Index, +}); + +function Index() { + const { redirectToConnect } = useHypergraphApp(); + + const handleSignIn = () => { + redirectToConnect({ + storage: localStorage, + connectUrl: 'https://hypergraph-connect.vercel.app/', + successUrl: `${window.location.origin}/authenticate-success`, + appId: '93bb8907-085a-4a0e-83dd-62b0dc98e793', + redirectFn: (url: URL) => { + window.location.href = url.toString(); + }, + }); + }; + + return ( +
+
+ Hypergraph Logo +

+ Welcome to Hypergraph +

+

Your web3 app template powered by Hypergraph

+
+ +
+ {/* Section 1: Explore existing public knowledge */} +
+
+
+ + + +
+

Explore Public Knowledge

+

+ Discover and explore the vast network of knowledge already available in the public Knowledge Graph. +

+ + + +
+
+ + {/* Section 2: Sign in with Geo Connect */} +
+
+
+ + + +
+

Manage Your Data

+

+ Sign in with Geo Connect to manage your private data and publish it to the public Knowledge Graph. +

+ +
+
+ + {/* Section 3: Explore the docs */} +
+
+
+ + + +
+

Explore the Docs

+

+ Learn how to build with Hypergraph and discover all the features available in our comprehensive + documentation. +

+ + + +
+
+
+
+ ); +} diff --git a/apps/create-hypergraph-app/template-vite-react/src/routes/login.tsx b/apps/create-hypergraph-app/template-vite-react/src/routes/login.tsx new file mode 100644 index 00000000..fad0d7cd --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/routes/login.tsx @@ -0,0 +1,36 @@ +import { useHypergraphApp } from '@graphprotocol/hypergraph-react'; +import { createFileRoute } from '@tanstack/react-router'; + +function Login() { + const { redirectToConnect } = useHypergraphApp(); + return ( +
+
+

Sign in to access your spaces and start building.

+ +
+
+ ); +} + +export const Route = createFileRoute('/login')({ + component: Login, +}); diff --git a/apps/create-hypergraph-app/template-vite-react/src/routes/private-space/$space-id.tsx b/apps/create-hypergraph-app/template-vite-react/src/routes/private-space/$space-id.tsx new file mode 100644 index 00000000..764c62e3 --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/routes/private-space/$space-id.tsx @@ -0,0 +1,196 @@ +import { Button } from '@/components/ui/button'; +import { Address } from '@/schema'; +import { + HypergraphSpaceProvider, + preparePublish, + publishOps, + useCreateEntity, + useHypergraphApp, + useQuery, + useSpace, + useSpaces, +} from '@graphprotocol/hypergraph-react'; +import { createFileRoute } from '@tanstack/react-router'; +import { useState } from 'react'; + +export const Route = createFileRoute('/private-space/$space-id')({ + component: RouteComponent, +}); + +function RouteComponent() { + const { 'space-id': spaceId } = Route.useParams(); + + return ( + + + + ); +} + +function PrivateSpace() { + const { name, ready } = useSpace({ mode: 'private' }); + const { data: addresses } = useQuery(Address, { mode: 'private' }); + const { data: publicSpaces } = useSpaces({ mode: 'public' }); + const [selectedSpace, setSelectedSpace] = useState(''); + const createAddress = useCreateEntity(Address); + const [addressName, setAddressName] = useState(''); + const { getSmartSessionClient } = useHypergraphApp(); + + if (!ready) { + return ( +
+
+
+

Loading space...

+
+
+ ); + } + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + createAddress({ name: addressName, description: 'Beautiful address' }); + setAddressName(''); + }; + + const publishToPublicSpace = async (address: Address) => { + if (!selectedSpace) { + alert('No space selected'); + return; + } + try { + const { ops } = await preparePublish({ entity: address, publicSpace: selectedSpace }); + const smartSessionClient = await getSmartSessionClient(); + if (!smartSessionClient) { + throw new Error('Missing smartSessionClient'); + } + const publishResult = await publishOps({ + ops, + space: selectedSpace, + name: 'Publish Address', + walletClient: smartSessionClient, + }); + console.log(publishResult, ops); + alert('Address published to public space'); + } catch (error) { + console.error(error); + alert('Error publishing address to public space'); + } + }; + + return ( +
+
+ {/* Header */} +
+

{name}

+

Manage your private addresses and publish them to public spaces

+
+ +
+ {/* Create Address Form */} +
+
+

Create New Address

+
+
+ + setAddressName(e.target.value)} + placeholder="Enter address name..." + className="w-full px-3 py-2 border border-input bg-background rounded-md text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent" + required + /> +
+ +
+
+
+ + {/* Addresses List */} +
+
+

+ Your Addresses ({addresses?.length || 0}) +

+ + {addresses && addresses.length > 0 ? ( +
+ {addresses.map((address) => ( +
+
+

{address.name}

+ + ID: {address.id.slice(0, 8)}... + +
+ +
+
+ + +
+ + +
+
+ ))} +
+ ) : ( +
+
+ + + +
+

No addresses created yet

+

Create your first address using the form

+
+ )} +
+
+
+
+
+ ); +} +s; diff --git a/apps/create-hypergraph-app/template-vite-react/src/routes/public-space/$space-id.tsx b/apps/create-hypergraph-app/template-vite-react/src/routes/public-space/$space-id.tsx new file mode 100644 index 00000000..2a83a651 --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/routes/public-space/$space-id.tsx @@ -0,0 +1,122 @@ +import { Address } from '@/schema'; +import { HypergraphSpaceProvider, useQuery, useSpace } from '@graphprotocol/hypergraph-react'; +import { createFileRoute } from '@tanstack/react-router'; + +export const Route = createFileRoute('/public-space/$space-id')({ + component: RouteComponent, +}); + +function RouteComponent() { + const { 'space-id': spaceId } = Route.useParams(); + + return ( + + + + ); +} + +function PublicSpace() { + const { ready, name } = useSpace({ mode: 'public' }); + const { data: addresses } = useQuery(Address, { mode: 'public' }); + + if (!ready) { + return ( +
+
+
+

Loading space...

+
+
+ ); + } + + return ( +
+ {/* Header */} +
+
+
+

{name}

+

Public Space

+
+
+
+ + {/* Main Content */} +
+
+
+

Addresses

+

+ {addresses ? `${addresses.length} addresses found` : 'Loading addresses...'} +

+
+ +
+ {!addresses ? ( +
+ {[...Array(3)].map((_, i) => ( +
+
+
+ ))} +
+ ) : addresses.length > 0 ? ( +
+ {addresses.map((address) => ( +
+
+
+
+ + {address.name.charAt(0).toUpperCase()} + +
+
+

+ {address.name} +

+

Address ID: {address.id}

+
+
+
+ + + +
+
+
+ ))} +
+ ) : ( +
+
+ + + + +
+

No addresses found

+

This space doesn't have any addresses yet.

+
+ )} +
+
+
+
+ ); +} diff --git a/apps/create-hypergraph-app/template-vite-react/src/schema.ts b/apps/create-hypergraph-app/template-vite-react/src/schema.ts new file mode 100644 index 00000000..ed50614a --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/schema.ts @@ -0,0 +1,10 @@ +import { Entity, Type } from '@graphprotocol/hypergraph'; + +export class Address extends Entity.Class
('Address')({ + name: Type.Text, + description: Type.Text, +}) {} + +export class Project extends Entity.Class('Project')({ + name: Type.Text, +}) {} diff --git a/apps/create-hypergraph-app/template-vite-react/src/vite-env.d.ts b/apps/create-hypergraph-app/template-vite-react/src/vite-env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/apps/create-hypergraph-app/template-vite-react/tsconfig.app.json b/apps/create-hypergraph-app/template-vite-react/tsconfig.app.json new file mode 100644 index 00000000..ce6a27b7 --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/tsconfig.app.json @@ -0,0 +1,52 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ESNext", + "useDefineForClassFields": true, + "lib": [ + "ESNext", + "DOM", + "DOM.Iterable" + ], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + "strict": true, + "strictNullChecks": true, + "exactOptionalPropertyTypes": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true, + "composite": true, + "downlevelIteration": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "declaration": true, + "sourceMap": true, + "declarationMap": true, + "noImplicitReturns": false, + "noEmitOnError": false, + "noErrorTruncation": false, + "allowJs": false, + "checkJs": false, + "forceConsistentCasingInFileNames": true, + "noImplicitAny": true, + "noImplicitThis": true, + "noUncheckedIndexedAccess": false, + "baseUrl": ".", + "paths": { + "@/*": [ + "./src/*" + ] + } + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/apps/create-hypergraph-app/template-vite-react/tsconfig.json b/apps/create-hypergraph-app/template-vite-react/tsconfig.json new file mode 100644 index 00000000..a2313e81 --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + }, + "files": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.node.json" + } + ] +} \ No newline at end of file diff --git a/apps/create-hypergraph-app/template-vite-react/tsconfig.node.json b/apps/create-hypergraph-app/template-vite-react/tsconfig.node.json new file mode 100644 index 00000000..3d47fb03 --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ESNext", + "lib": [ + "ESNext" + ], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": [ + "vite.config.ts" + ] +} \ No newline at end of file diff --git a/apps/create-hypergraph-app/template-vite-react/vite.config.ts b/apps/create-hypergraph-app/template-vite-react/vite.config.ts new file mode 100644 index 00000000..8cc5545b --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/vite.config.ts @@ -0,0 +1,22 @@ +import path from 'node:path'; +import tailwindcss from '@tailwindcss/vite'; +import { tanstackRouter } from '@tanstack/router-plugin/vite'; +import react from '@vitejs/plugin-react'; +import { defineConfig } from 'vite'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + tanstackRouter({ + target: 'react', + autoCodeSplitting: true, + }), + react(), + tailwindcss(), + ], + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + }, + }, +}); diff --git a/biome.jsonc b/biome.jsonc index f1b0e06c..74d8c711 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -16,6 +16,7 @@ "tsconfig.*.json", "**/variant-schema.ts", "apps/typesync/client/src/generated", + "apps/create-hypergraph-app/template-*/**", "*.css" ] }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fbf7cfd7..9dd4342a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,7 +37,7 @@ importers: version: 5.8.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.15)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) apps/connect: dependencies: @@ -64,7 +64,7 @@ importers: version: 1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/react-router-devtools': specifier: ^1.122.0 - version: 1.122.0(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.127.3)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) + version: 1.122.0(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.129.2)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) '@xstate/store': specifier: ^3.5.1 version: 3.5.1(react@19.1.0)(solid-js@1.9.5) @@ -136,6 +136,112 @@ importers: specifier: ^4.3.0 version: 4.3.0(rollup@4.45.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + apps/create-hypergraph-app: + publishDirectory: dist + + apps/create-hypergraph-app/template-vite-react: + dependencies: + '@graphprotocol/grc-20': + specifier: ^0.21.6 + version: 0.21.6(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) + '@graphprotocol/hypergraph': + specifier: 0.0.14 + version: 0.0.14(@effect/platform@0.88.0(effect@3.17.0))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react@19.1.0)(solid-js@1.9.5)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) + '@graphprotocol/hypergraph-react': + specifier: 0.0.14 + version: 0.0.14(@graphprotocol/hypergraph@0.0.14(@effect/platform@0.88.0(effect@3.17.0))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react@19.1.0)(solid-js@1.9.5)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) + '@graphprotocol/typesync': + specifier: ^0.0.3 + version: 0.0.3(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) + '@radix-ui/react-navigation-menu': + specifier: ^1.2.13 + version: 1.2.13(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': + specifier: ^1.2.3 + version: 1.2.3(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-tooltip': + specifier: ^1.2.7 + version: 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tailwindcss/vite': + specifier: ^4.1.11 + version: 4.1.11(vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + '@tanstack/react-query': + specifier: ^5.83.0 + version: 5.83.0(react@19.1.0) + '@tanstack/react-router': + specifier: ^1.129.2 + version: 1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + effect: + specifier: ^3.17.0 + version: 3.17.0 + lucide-react: + specifier: ^0.525.0 + version: 0.525.0(react@19.1.0) + react: + specifier: ^19.1.0 + version: 19.1.0 + react-dom: + specifier: ^19.1.0 + version: 19.1.0(react@19.1.0) + tailwind-merge: + specifier: ^3.3.1 + version: 3.3.1 + tailwindcss: + specifier: ^4.1.11 + version: 4.1.11 + vite: + specifier: ^7.0.5 + version: 7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + devDependencies: + '@eslint/js': + specifier: ^9.31.0 + version: 9.31.0 + '@tanstack/router-plugin': + specifier: ^1.129.2 + version: 1.129.2(@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) + '@types/node': + specifier: ^24.0.15 + version: 24.0.15 + '@types/react': + specifier: ^19.1.8 + version: 19.1.8 + '@types/react-dom': + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.8) + '@vitejs/plugin-react': + specifier: ^4.7.0 + version: 4.7.0(vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + eslint: + specifier: ^9.31.0 + version: 9.31.0(jiti@2.4.2) + eslint-plugin-react-hooks: + specifier: ^5.2.0 + version: 5.2.0(eslint@9.31.0(jiti@2.4.2)) + eslint-plugin-react-refresh: + specifier: ^0.4.20 + version: 0.4.20(eslint@9.31.0(jiti@2.4.2)) + globals: + specifier: ^16.3.0 + version: 16.3.0 + prettier: + specifier: ^3.6.2 + version: 3.6.2 + tw-animate-css: + specifier: ^1.3.5 + version: 1.3.5 + typescript: + specifier: ~5.8.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.38.0 + version: 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + apps/events: dependencies: '@graphprotocol/grc-20': @@ -167,7 +273,7 @@ importers: version: 1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/react-router-devtools': specifier: ^1.122.0 - version: 1.122.0(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.127.3)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) + version: 1.122.0(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.129.2)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) '@xstate/store': specifier: ^3.5.1 version: 3.5.1(react@19.1.0)(solid-js@1.9.5) @@ -392,7 +498,7 @@ importers: version: 1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/react-router-devtools': specifier: ^1.127.3 - version: 1.127.3(@tanstack/react-router@1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.127.3)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) + version: 1.127.3(@tanstack/react-router@1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.129.2)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) better-sqlite3: specifier: ^12.2.0 version: 12.2.0 @@ -500,6 +606,9 @@ importers: '@graphprotocol/grc-20': specifier: ^0.21.6 version: 0.21.6(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) + '@graphprotocol/typesync': + specifier: workspace:* + version: link:../../../packages/typesync/publish '@graphql-typed-document-node/core': specifier: ^3.2.0 version: 3.2.0(graphql@16.11.0) @@ -517,7 +626,7 @@ importers: version: 1.1.12(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.1.11(vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@tanstack/react-form': specifier: ^1.14.1 version: 1.14.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -528,11 +637,11 @@ importers: specifier: ^5.83.0 version: 5.83.0(@tanstack/react-query@5.83.0(react@19.1.0))(react@19.1.0) '@tanstack/react-router': - specifier: ^1.127.1 - version: 1.127.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^1.128.0 + version: 1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/react-router-devtools': - specifier: ^1.127.1 - version: 1.127.1(@tanstack/react-router@1.127.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.127.3)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) + specifier: ^1.128.0 + version: 1.129.2(@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.129.2)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) better-sqlite3: specifier: ^12.2.0 version: 12.2.0 @@ -540,8 +649,8 @@ importers: specifier: ^4.1.0 version: 4.1.0 effect: - specifier: ^3.16.12 - version: 3.16.12 + specifier: ^3.16.16 + version: 3.17.0 graphql: specifier: ^16.11.0 version: 16.11.0 @@ -552,8 +661,8 @@ importers: specifier: ^2.12.5 version: 2.12.5(@types/react@19.1.8)(react@19.1.0) open: - specifier: ^10.1.2 - version: 10.1.2 + specifier: ^10.2.0 + version: 10.2.0 react: specifier: ^19.1.0 version: 19.1.0 @@ -561,8 +670,8 @@ importers: specifier: ^19.1.0 version: 19.1.0(react@19.1.0) shiki: - specifier: ^3.7.0 - version: 3.7.0 + specifier: ^3.8.0 + version: 3.8.0 tailwindcss: specifier: ^4.1.11 version: 4.1.11 @@ -571,10 +680,10 @@ importers: dependencies: '@docusaurus/core': specifier: 3.7.0 - version: 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + version: 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/preset-classic': specifier: 3.7.0 - version: 3.7.0(@algolia/client-search@5.25.0)(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(search-insights@2.17.3)(typescript@5.8.3)(utf-8-validate@5.0.10) + version: 3.7.0(@algolia/client-search@5.25.0)(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(search-insights@2.17.3)(typescript@5.8.3)(utf-8-validate@5.0.10) '@mdx-js/react': specifier: ^3.0.0 version: 3.1.0(@types/react@19.1.8)(react@19.1.0) @@ -707,7 +816,7 @@ importers: version: 19.1.3 '@vitejs/plugin-react': specifier: ^4.4.1 - version: 4.4.1(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.4.1(vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@xstate/store': specifier: ^3.5.1 version: 3.5.1(react@19.1.0)(solid-js@1.9.5) @@ -2634,16 +2743,12 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.20.1': - resolution: {integrity: sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.2.3': - resolution: {integrity: sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==} + '@eslint/config-array@0.21.0': + resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.14.0': - resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} + '@eslint/config-helpers@0.3.0': + resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/core@0.15.1': @@ -2654,8 +2759,8 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.29.0': - resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==} + '@eslint/js@9.31.0': + resolution: {integrity: sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': @@ -2808,6 +2913,18 @@ packages: '@graphprotocol/grc-20@0.21.6': resolution: {integrity: sha512-xN8kejQfRdeC5LsantOD9aajwR+/JHnsK5IUEE7rMJbbHGeRTzAhWGike8k1+nIPRKooOyrocgly24KXxChcgw==} + '@graphprotocol/hypergraph-react@0.0.14': + resolution: {integrity: sha512-Hr7x45xFO+MFAeuaWs+1+EgX0JNxftclpP9ClfisuQs01bgHwJpy9jYZ+oeJ02ODSaDd82st12XQ/1kfEsn9aw==} + peerDependencies: + '@graphprotocol/hypergraph': '*' + react: ^18.0.0 || ^19.0.0 + + '@graphprotocol/hypergraph@0.0.14': + resolution: {integrity: sha512-kr1Vhl7G/uYSamnZJzTtOuHaPklUtcWyTl6oMNbd2NWaAjBNNqD3A2hvelQJ8XAQHpbjbh2xgRjLzZ6M422vyg==} + + '@graphprotocol/typesync@0.0.3': + resolution: {integrity: sha512-8+agAOyyftY7itiQgXHkcKZy+n98xvzpcf6AfygUb4FY7GSpmRl8BX/gTn2Wu8gIigr7AZyL6NFnSpBrSr7OPQ==} + '@graphql-codegen/add@5.0.3': resolution: {integrity: sha512-SxXPmramkth8XtBlAHu4H4jYcYXM/o3p01+psU+0NADQowA8jtYkK6MW5rV6T+CxkEaNZItfSmZRPgIuypcqnA==} peerDependencies: @@ -3765,6 +3882,19 @@ packages: '@radix-ui/primitive@1.1.2': resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==} + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-avatar@1.1.9': resolution: {integrity: sha512-10tQokfvZdFvnvDkcOJPjm2pWiP8A0R4T83MoD7tb15bC/k2GU7B1YBuzJi8lNQ8V1QqhP8ocNqp27ByZaNagQ==} peerDependencies: @@ -3818,6 +3948,19 @@ packages: '@types/react': optional: true + '@radix-ui/react-dismissable-layer@1.1.10': + resolution: {integrity: sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-icons@1.3.2': resolution: {integrity: sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==} peerDependencies: @@ -3832,6 +3975,45 @@ packages: '@types/react': optional: true + '@radix-ui/react-navigation-menu@1.2.13': + resolution: {integrity: sha512-WG8wWfDiJlSF5hELjwfjSGOXcBR/ZMhBFCGYe8vERpC39CQYZeq1PQ2kaYHdye3V95d06H89KGMsVCIE4LWo3g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.2.7': + resolution: {integrity: sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-presence@1.1.4': resolution: {integrity: sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==} peerDependencies: @@ -3915,6 +4097,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-tooltip@1.2.7': + resolution: {integrity: sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-use-callback-ref@1.1.1': resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} peerDependencies: @@ -3942,6 +4137,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-is-hydrated@0.1.0': resolution: {integrity: sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==} peerDependencies: @@ -3960,6 +4164,49 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-previous@1.1.1': + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.1.1': + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.1.1': + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + '@react-aria/focus@3.19.1': resolution: {integrity: sha512-bix9Bu1Ue7RPcYmjwcjhB14BMu2qzfJ3tMQLqDc9pweJA66nOw8DThy3IfVr8Z7j2PHktOLf9kcbiZpydKHqzg==} peerDependencies: @@ -4071,6 +4318,9 @@ packages: '@rolldown/pluginutils@1.0.0-beta.19': resolution: {integrity: sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==} + '@rolldown/pluginutils@1.0.0-beta.27': + resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} + '@rollup/plugin-inject@5.0.5': resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==} engines: {node: '>=14.0.0'} @@ -4316,39 +4566,21 @@ packages: '@serenity-kit/noble-sodium@0.2.1': resolution: {integrity: sha512-023EjSl/ZMl8yNmnzeeWJh/V44QyBC82I8xuHltITeWdcyrQHbGnmMZRZOm/uTRinhgqoMzRBNQqbrfyuI5idg==} - '@shikijs/core@3.7.0': - resolution: {integrity: sha512-yilc0S9HvTPyahHpcum8eonYrQtmGTU0lbtwxhA6jHv4Bm1cAdlPFRCJX4AHebkCm75aKTjjRAW+DezqD1b/cg==} - '@shikijs/core@3.8.0': resolution: {integrity: sha512-gWt8NNZFurL6FMESO4lEsmspDh0H1fyUibhx1NnEH/S3kOXgYiWa6ZFqy+dcjBLhZqCXsepuUaL1QFXk6PrpsQ==} - '@shikijs/engine-javascript@3.7.0': - resolution: {integrity: sha512-0t17s03Cbv+ZcUvv+y33GtX75WBLQELgNdVghnsdhTgU3hVcWcMsoP6Lb0nDTl95ZJfbP1mVMO0p3byVh3uuzA==} - '@shikijs/engine-javascript@3.8.0': resolution: {integrity: sha512-IBULFFpQ1N5Cg/C7jPCGnjIKz72CcRtD0BIbNhSuXPUOxLG0bF1URsP/uLfxQFQ9ORfunCQwL7UuSX1RSRBwUQ==} - '@shikijs/engine-oniguruma@3.7.0': - resolution: {integrity: sha512-5BxcD6LjVWsGu4xyaBC5bu8LdNgPCVBnAkWTtOCs/CZxcB22L8rcoWfv7Hh/3WooVjBZmFtyxhgvkQFedPGnFw==} - '@shikijs/engine-oniguruma@3.8.0': resolution: {integrity: sha512-Tx7kR0oFzqa+rY7t80LjN8ZVtHO3a4+33EUnBVx2qYP3fGxoI9H0bvnln5ySelz9SIUTsS0/Qn+9dg5zcUMsUw==} - '@shikijs/langs@3.7.0': - resolution: {integrity: sha512-1zYtdfXLr9xDKLTGy5kb7O0zDQsxXiIsw1iIBcNOO8Yi5/Y1qDbJ+0VsFoqTlzdmneO8Ij35g7QKF8kcLyznCQ==} - '@shikijs/langs@3.8.0': resolution: {integrity: sha512-mfGYuUgjQ5GgXinB5spjGlBVhG2crKRpKkfADlp8r9k/XvZhtNXxyOToSnCEnF0QNiZnJjlt5MmU9PmhRdwAbg==} - '@shikijs/themes@3.7.0': - resolution: {integrity: sha512-VJx8497iZPy5zLiiCTSIaOChIcKQwR0FebwE9S3rcN0+J/GTWwQ1v/bqhTbpbY3zybPKeO8wdammqkpXc4NVjQ==} - '@shikijs/themes@3.8.0': resolution: {integrity: sha512-yaZiLuyO23sXe16JFU76KyUMTZCJi4EMQKIrdQt7okoTzI4yAaJhVXT2Uy4k8yBIEFRiia5dtD7gC1t8m6y3oQ==} - '@shikijs/types@3.7.0': - resolution: {integrity: sha512-MGaLeaRlSWpnP0XSAum3kP3a8vtcTsITqoEPYdt3lQG3YCdQH4DnEhodkYcNMcU0uW0RffhoD1O3e0vG5eSBBg==} - '@shikijs/types@3.8.0': resolution: {integrity: sha512-I/b/aNg0rP+kznVDo7s3UK8jMcqEGTtoPDdQ+JlQ2bcJIyu/e2iRvl42GLIDMK03/W1YOHOuhlhQ7aM+XbKUeg==} @@ -4958,19 +5190,19 @@ packages: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router-devtools@1.127.1': - resolution: {integrity: sha512-vKIO9ccqPNXqIU1mfZ4FRGNSeJAjvCqi9ZDxQkOb88euMkejzmN+4VTGFRQ51LwCOZaIgdy1l4JPaxH2tgq+vQ==} + '@tanstack/react-router-devtools@1.127.3': + resolution: {integrity: sha512-MS8+ArGAoRpFaVWpXnQxNpq2bU5e2WGwV/3Gskh9YB09gqX3t6knp9im4kJ0kam16+A8Vohq1yOpCliyHzQawA==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.127.1 + '@tanstack/react-router': ^1.127.3 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router-devtools@1.127.3': - resolution: {integrity: sha512-MS8+ArGAoRpFaVWpXnQxNpq2bU5e2WGwV/3Gskh9YB09gqX3t6knp9im4kJ0kam16+A8Vohq1yOpCliyHzQawA==} + '@tanstack/react-router-devtools@1.129.2': + resolution: {integrity: sha512-8ipEnUv5lWcZYQ5ia0L2wOGqt1CJpfU8iSN9xaX7z93U9cRQg0G1IOf0iYkHpjfUe8WxRY6+5siST+qlKbdtJA==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.127.3 + '@tanstack/react-router': ^1.129.2 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' @@ -4981,15 +5213,15 @@ packages: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router@1.127.1': - resolution: {integrity: sha512-6Ofe9VxvmuGmaJ1qUBSOsCimsPHlq4nx75EC8JhIwnkc95AQaFCZce7mTp++qECVf6HlkE5El12YwpeTz8wnpQ==} + '@tanstack/react-router@1.127.3': + resolution: {integrity: sha512-QprmWHJrGbEKXJiP7WZ+dilTJRc7nMbsFCUnfAUw8PsOYanhgvBkBwAU05YEo8WTIZ9atCc1R90hyzqbiBFkdA==} engines: {node: '>=12'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router@1.127.3': - resolution: {integrity: sha512-QprmWHJrGbEKXJiP7WZ+dilTJRc7nMbsFCUnfAUw8PsOYanhgvBkBwAU05YEo8WTIZ9atCc1R90hyzqbiBFkdA==} + '@tanstack/react-router@1.129.2': + resolution: {integrity: sha512-ERGkvtb4qlo1ihrKUMJn2RfiC3T7rE/PpRtsATCmC0Gy0NmaO8S1+XvgriYl2bzdqTnBliwwIzqkKB9A2xPqDQ==} engines: {node: '>=12'} peerDependencies: react: '>=18.0.0 || >=19.0.0' @@ -5001,12 +5233,6 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/react-store@0.7.1': - resolution: {integrity: sha512-qUTEKdId6QPWGiWyKAPf/gkN29scEsz6EUSJ0C3HgLMgaqTAyBsQ2sMCfGVcqb+kkhEXAdjleCgH6LAPD6f2sA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/react-store@0.7.3': resolution: {integrity: sha512-3Dnqtbw9P2P0gw8uUM8WP2fFfg8XMDSZCTsywRPZe/XqqYW8PGkXKZTvP0AHkE4mpqP9Y43GpOg9vwO44azu6Q==} peerDependencies: @@ -5029,14 +5255,14 @@ packages: resolution: {integrity: sha512-3dZYP5cCq3jJYgnRDzKR3w4sYzrXP5sw1st303ye87VV26r31I8UaIuUEs7kiJaxgWBvqHglWCiygBWQODZXVw==} engines: {node: '>=12'} - '@tanstack/router-core@1.127.0': - resolution: {integrity: sha512-hHgbtLOAnN61LFqBrE2bq3mctRLfXvJefBlTFakZJavSoMEniX6bMQ5ZMDwMtpo57Hbyzx2rTD4yZfYu74Eydg==} - engines: {node: '>=12'} - '@tanstack/router-core@1.127.3': resolution: {integrity: sha512-08JlfwsMIDkMyCQsRviMVBn0cVUzlNzkll4pZgf6QRSO1RASBsci5hMojcsdH0d/yXLH0FBJ6fINbj0ctBm63Q==} engines: {node: '>=12'} + '@tanstack/router-core@1.129.2': + resolution: {integrity: sha512-M7OuzxbSkEFa1WWQoLOg7RtJUHzfaURMiRCLbKLEJWJkw1Cuylj7oBbzbawDAJFTHry9UUDZNPP0MSCfcXypPA==} + engines: {node: '>=12'} + '@tanstack/router-devtools-core@1.122.0': resolution: {integrity: sha512-3AWnGAlC6GBrS9ral+CeThwHt690T0RtxMoRpTYdK5aJ5qyegWeQXqIjd6WPWNRjxYSKsDjPY2h77HPoAm7F5Q==} engines: {node: '>=12'} @@ -5049,11 +5275,11 @@ packages: csstype: optional: true - '@tanstack/router-devtools-core@1.127.0': - resolution: {integrity: sha512-K/UFaru0sVonaRoqQFUoNiqDt4AvXLxcRd2+9HjbGSC1xckAUNEEAcVl7jwQfERg89e9IVfHiPOIuDdQFjFBtA==} + '@tanstack/router-devtools-core@1.127.3': + resolution: {integrity: sha512-TaLa0h7efSTmIMckTJ1s4PuvJSRGGv4PBSDQE9QnrtCn3SJAlzjK6VIcGq3C72QKJiVDyDtCcDas4q0YeT8I+A==} engines: {node: '>=12'} peerDependencies: - '@tanstack/router-core': ^1.127.0 + '@tanstack/router-core': ^1.127.3 csstype: ^3.0.10 solid-js: '>=1.9.5' tiny-invariant: ^1.3.3 @@ -5061,11 +5287,11 @@ packages: csstype: optional: true - '@tanstack/router-devtools-core@1.127.3': - resolution: {integrity: sha512-TaLa0h7efSTmIMckTJ1s4PuvJSRGGv4PBSDQE9QnrtCn3SJAlzjK6VIcGq3C72QKJiVDyDtCcDas4q0YeT8I+A==} + '@tanstack/router-devtools-core@1.129.2': + resolution: {integrity: sha512-PlGJ5A54P0J8FAe7biiLARN9U6VCDPbnoNjqL9jsvf2A0X/cQw4fgediR+jsMjVuXNoL4kMDprVTpGT5PoVUaQ==} engines: {node: '>=12'} peerDependencies: - '@tanstack/router-core': ^1.127.3 + '@tanstack/router-core': ^1.129.2 csstype: ^3.0.10 solid-js: '>=1.9.5' tiny-invariant: ^1.3.3 @@ -5086,6 +5312,10 @@ packages: resolution: {integrity: sha512-bPrUKJIo7cIBSF6FwKfZyYAl+FjoMU/HswWaYXr+rEdOw1EA86M3euuK33rfHNlVcxHTmZJk8AQ5p7ZYP6DogQ==} engines: {node: '>=12'} + '@tanstack/router-generator@1.129.2': + resolution: {integrity: sha512-xCZYd4sgPFdlgEten7x+uJx+0y6iUm2d8cnE3cHHzzc5COf5jO+FFh9kVRa9Ouh4h/binv5dpKRBhB33TqPRfw==} + engines: {node: '>=12'} + '@tanstack/router-plugin@1.120.2': resolution: {integrity: sha512-LVwvd/QKFrxtsKfm1Oiv6+NzAB79hcuhlbu14NwmRfdexPYmfjvJJPK0E3IlLmh/mRlEHmfYajutwuqvBONM9w==} engines: {node: '>=12'} @@ -5128,6 +5358,27 @@ packages: webpack: optional: true + '@tanstack/router-plugin@1.129.2': + resolution: {integrity: sha512-uchyp0fMG6MmMJMxydmp4JTyIfW0FHVE4hwGSnP9dgoncQHbqZQt3qNEYbzPIV+JRp6DKjb8Ax5DAUgL7/LVCA==} + engines: {node: '>=12'} + peerDependencies: + '@rsbuild/core': '>=1.0.2' + '@tanstack/react-router': ^1.129.2 + vite: '>=5.0.0 || >=6.0.0' + vite-plugin-solid: ^2.11.2 + webpack: '>=5.92.0' + peerDependenciesMeta: + '@rsbuild/core': + optional: true + '@tanstack/react-router': + optional: true + vite: + optional: true + vite-plugin-solid: + optional: true + webpack: + optional: true + '@tanstack/router-utils@1.115.0': resolution: {integrity: sha512-Dng4y+uLR9b5zPGg7dHReHOTHQa6x+G6nCoZshsDtWrYsrdCcJEtLyhwZ5wG8OyYS6dVr/Cn+E5Bd2b6BhJ89w==} engines: {node: '>=12'} @@ -5139,9 +5390,6 @@ packages: '@tanstack/store@0.7.0': resolution: {integrity: sha512-CNIhdoUsmD2NolYuaIs8VfWM467RK6oIBAW4nPEKZhg1smZ+/CwtCdpURgp7nxSqOaV9oKkzdWD80+bC66F/Jg==} - '@tanstack/store@0.7.1': - resolution: {integrity: sha512-PjUQKXEXhLYj2X5/6c1Xn/0/qKY0IVFxTJweopRfF26xfjVyb14yALydJrHupDh3/d+1WKmfEgZPBVCmDkzzwg==} - '@tanstack/store@0.7.2': resolution: {integrity: sha512-RP80Z30BYiPX2Pyo0Nyw4s1SJFH2jyM6f9i3HfX4pA+gm5jsnYryscdq2aIQLnL4TaGuQMO+zXmN9nh1Qck+Pg==} @@ -5321,6 +5569,9 @@ packages: '@types/node@24.0.13': resolution: {integrity: sha512-Qm9OYVOFHFYg3wJoTSrz80hoec5Lia/dPp84do3X7dZvLikQvM1YpmvTBEdIr/e+U8HTkFjLHLnl78K/qjf+jQ==} + '@types/node@24.0.15': + resolution: {integrity: sha512-oaeTSbCef7U/z7rDeJA138xpG3NuKc64/rZ2qmUFkFJmnMsAPaluIifqyWd8hSSMxyP9oie3dLAqYPblag9KgA==} + '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -5414,6 +5665,65 @@ packages: '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + '@typescript-eslint/eslint-plugin@8.38.0': + resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.38.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/parser@8.38.0': + resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/project-service@8.38.0': + resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/scope-manager@8.38.0': + resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.38.0': + resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/type-utils@8.38.0': + resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/types@8.38.0': + resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.38.0': + resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/utils@8.38.0': + resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/visitor-keys@8.38.0': + resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -5429,6 +5739,12 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 + '@vitejs/plugin-react@4.7.0': + resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + '@vitest/expect@3.2.4': resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} @@ -6998,6 +7314,9 @@ packages: effect@3.16.13: resolution: {integrity: sha512-xJDgOhD7+3qIY1d8PGfkaPZMfmdJuSp2XAQgc9dVF8pSl1FJL6WK4ZUpMh177R+GH8XgPloT8dlZsEYUYDo1Ag==} + effect@3.17.0: + resolution: {integrity: sha512-szMlUsbPhP9lsrU+sDPXL9pQT2ew8PhcZvPm0p5dzYFbc+Jn/lH2i5thtmPQdm6Ut1rS4fS67SbuG7Qm0E0oZA==} + electron-to-chromium@1.5.152: resolution: {integrity: sha512-xBOfg/EBaIlVsHipHl2VdTPJRSvErNUaqW8ejTq5OlOlIYx1wOllCHsAvAIrr55jD1IYEfdR86miUEt8H5IeJg==} @@ -7124,6 +7443,17 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} + eslint-plugin-react-hooks@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + 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.20: + resolution: {integrity: sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==} + peerDependencies: + eslint: '>=8.40' + eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} @@ -7140,8 +7470,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.29.0: - resolution: {integrity: sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==} + eslint@9.31.0: + resolution: {integrity: sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -7655,6 +7985,10 @@ packages: resolution: {integrity: sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==} engines: {node: '>=18'} + globals@16.3.0: + resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} + engines: {node: '>=18'} + globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -7682,6 +8016,9 @@ 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==} + graphql-config@5.1.3: resolution: {integrity: sha512-RBhejsPjrNSuwtckRlilWzLVt2j8itl74W9Gke1KejDTz7oaA5kVd6wRn9zK9TS5mcmIYGxf7zN7a1ORMdxp1Q==} engines: {node: '>= 16.0.0'} @@ -7953,6 +8290,10 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + image-size@1.2.1: resolution: {integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==} engines: {node: '>=16.x'} @@ -8720,6 +9061,11 @@ packages: peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + lucide-react@0.525.0: + resolution: {integrity: sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -9363,10 +9709,6 @@ packages: oniguruma-to-es@4.3.3: resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} - open@10.1.2: - resolution: {integrity: sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==} - engines: {node: '>=18'} - open@10.2.0: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} @@ -10210,6 +10552,11 @@ packages: engines: {node: '>=14'} hasBin: true + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + engines: {node: '>=14'} + hasBin: true + pretty-error@4.0.0: resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} @@ -10908,9 +11255,6 @@ packages: engines: {node: '>=4'} hasBin: true - shiki@3.7.0: - resolution: {integrity: sha512-ZcI4UT9n6N2pDuM2n3Jbk0sR4Swzq43nLPgS/4h0E3B/NrFn2HKElrDtceSf8Zx/OWYOo7G1SAtBLypCp+YXqg==} - shiki@3.8.0: resolution: {integrity: sha512-yPqK0y68t20aakv+3aMTpUMJZd6UHaBY2/SBUDowh9M70gVUwqT0bf7Kz5CWG0AXfHtFvXCHhBBHVAzdp0ILoQ==} @@ -11271,6 +11615,9 @@ packages: tailwind-merge@3.2.0: resolution: {integrity: sha512-FQT/OVqCD+7edmmJpsgCsY820RTD5AkBryuG5IUqR5YQZSdj5xlH5nLgH7YPths7WsLPSpSBNneJdM8aS8aeFA==} + tailwind-merge@3.3.1: + resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==} + tailwindcss-animate@1.0.7: resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} peerDependencies: @@ -11451,6 +11798,12 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-case-convert@2.1.0: resolution: {integrity: sha512-Ye79el/pHYXfoew6kqhMwCoxp4NWjKNcm2kBzpmEMIU9dd9aBmHNNFtZ+WTm0rz1ngyDmfqDXDlyUnBXayiD0w==} @@ -11521,6 +11874,9 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + tw-animate-css@1.3.5: + resolution: {integrity: sha512-t3u+0YNoloIhj1mMXs779P6MO9q3p3mvGn4k1n3nJPqJw/glZcuijG2qTSN4z4mgNRfW5ZC3aXJFLwDtiipZXA==} + tweetnacl-util@0.15.1: resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} @@ -11566,6 +11922,13 @@ packages: typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + typescript-eslint@8.38.0: + resolution: {integrity: sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + typescript@5.8.3: resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} @@ -12021,6 +12384,46 @@ packages: yaml: optional: true + vite@7.0.5: + resolution: {integrity: sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + vitest@3.2.4: resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -12644,7 +13047,7 @@ snapshots: '@babel/generator@7.27.5': dependencies: '@babel/parser': 7.27.7 - '@babel/types': 7.27.7 + '@babel/types': 7.28.0 '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 @@ -12659,7 +13062,7 @@ snapshots: '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.27.7 + '@babel/types': 7.28.0 '@babel/helper-annotate-as-pure@7.27.1': dependencies: @@ -12782,7 +13185,7 @@ snapshots: '@babel/core': 7.28.0 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.27.7 + '@babel/traverse': 7.28.0 transitivePeerDependencies: - supports-color @@ -12791,7 +13194,7 @@ snapshots: '@babel/core': 7.28.0 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.27.7 + '@babel/traverse': 7.28.0 transitivePeerDependencies: - supports-color @@ -14160,7 +14563,7 @@ snapshots: '@babel/preset-typescript': 7.27.1(@babel/core@7.28.0) '@babel/runtime': 7.27.6 '@babel/runtime-corejs3': 7.27.1 - '@babel/traverse': 7.27.7 + '@babel/traverse': 7.28.0 '@docusaurus/logger': 3.7.0 '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) babel-plugin-dynamic-import-node: 2.3.3 @@ -14176,7 +14579,7 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/bundler@3.7.0(acorn@8.15.0)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@docusaurus/bundler@3.7.0(acorn@8.15.0)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': dependencies: '@babel/core': 7.28.0 '@docusaurus/babel': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -14197,7 +14600,7 @@ snapshots: postcss: 8.5.3 postcss-loader: 7.3.4(postcss@8.5.3)(typescript@5.8.3)(webpack@5.99.8) postcss-preset-env: 10.1.6(postcss@8.5.3) - react-dev-utils: 12.0.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)(webpack@5.99.8) + react-dev-utils: 12.0.1(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)(webpack@5.99.8) terser-webpack-plugin: 5.3.14(webpack@5.99.8) tslib: 2.8.1 url-loader: 4.1.1(file-loader@6.2.0(webpack@5.99.8))(webpack@5.99.8) @@ -14221,10 +14624,10 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@docusaurus/babel': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@docusaurus/bundler': 3.7.0(acorn@8.15.0)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + '@docusaurus/bundler': 3.7.0(acorn@8.15.0)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) '@docusaurus/logger': 3.7.0 '@docusaurus/mdx-loader': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -14251,7 +14654,7 @@ snapshots: p-map: 4.0.0 prompts: 2.4.2 react: 19.1.0 - react-dev-utils: 12.0.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)(webpack@5.99.8) + react-dev-utils: 12.0.1(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)(webpack@5.99.8) react-dom: 19.1.0(react@19.1.0) react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)' react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.1.0)' @@ -14290,9 +14693,9 @@ snapshots: '@docusaurus/cssnano-preset@3.7.0': dependencies: - cssnano-preset-advanced: 6.1.2(postcss@8.5.3) - postcss: 8.5.3 - postcss-sort-media-queries: 5.2.0(postcss@8.5.3) + cssnano-preset-advanced: 6.1.2(postcss@8.5.6) + postcss: 8.5.6 + postcss-sort-media-queries: 5.2.0(postcss@8.5.6) tslib: 2.8.1 '@docusaurus/logger@3.7.0': @@ -14355,13 +14758,13 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/plugin-content-blog@3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-content-blog@3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/logger': 3.7.0 '@docusaurus/mdx-loader': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils-common': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -14399,13 +14802,13 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/logger': 3.7.0 '@docusaurus/mdx-loader': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/module-type-aliases': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils-common': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -14441,9 +14844,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-pages@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-content-pages@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/mdx-loader': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -14474,9 +14877,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-debug@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-debug@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) fs-extra: 11.3.0 @@ -14505,9 +14908,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-analytics@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-google-analytics@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils-validation': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 @@ -14534,9 +14937,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-gtag@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-google-gtag@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils-validation': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@types/gtag.js': 0.0.12 @@ -14564,9 +14967,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-tag-manager@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-google-tag-manager@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils-validation': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 @@ -14593,9 +14996,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-sitemap@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-sitemap@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/logger': 3.7.0 '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -14627,9 +15030,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-svgr@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-svgr@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils-validation': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -14660,21 +15063,21 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/preset-classic@3.7.0(@algolia/client-search@5.25.0)(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(search-insights@2.17.3)(typescript@5.8.3)(utf-8-validate@5.0.10)': - dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-content-blog': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-content-pages': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-debug': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-google-analytics': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-google-gtag': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-google-tag-manager': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-sitemap': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-svgr': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/theme-classic': 3.7.0(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@docusaurus/theme-search-algolia': 3.7.0(@algolia/client-search@5.25.0)(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(search-insights@2.17.3)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/preset-classic@3.7.0(@algolia/client-search@5.25.0)(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(search-insights@2.17.3)(typescript@5.8.3)(utf-8-validate@5.0.10)': + dependencies: + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-content-blog': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-content-pages': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-debug': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-google-analytics': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-google-gtag': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-google-tag-manager': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-sitemap': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-svgr': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/theme-classic': 3.7.0(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@docusaurus/theme-search-algolia': 3.7.0(@algolia/client-search@5.25.0)(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(search-insights@2.17.3)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -14707,16 +15110,16 @@ snapshots: '@types/react': 19.1.8 react: 19.1.0 - '@docusaurus/theme-classic@3.7.0(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/theme-classic@3.7.0(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/logger': 3.7.0 '@docusaurus/mdx-loader': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/module-type-aliases': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@docusaurus/plugin-content-blog': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-content-pages': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@docusaurus/plugin-content-blog': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-content-pages': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/theme-translations': 3.7.0 '@docusaurus/types': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -14758,11 +15161,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/theme-common@3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@docusaurus/theme-common@3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@docusaurus/mdx-loader': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/module-type-aliases': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils-common': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@types/history': 4.7.11 @@ -14783,13 +15186,13 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/theme-search-algolia@3.7.0(@algolia/client-search@5.25.0)(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(search-insights@2.17.3)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@docusaurus/theme-search-algolia@3.7.0(@algolia/client-search@5.25.0)(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(@types/react@19.1.8)(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(search-insights@2.17.3)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@docsearch/react': 3.9.0(@algolia/client-search@5.25.0)(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(search-insights@2.17.3) - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@docusaurus/logger': 3.7.0 - '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) - '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.29.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0))(acorn@8.15.0)(bufferutil@4.0.9)(eslint@9.31.0(jiti@2.4.2))(lightningcss@1.30.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10))(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/theme-translations': 3.7.0 '@docusaurus/utils': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@docusaurus/utils-validation': 3.7.0(acorn@8.15.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -14943,6 +15346,12 @@ snapshots: effect: 3.16.12 uuid: 11.1.0 + '@effect/experimental@0.51.1(@effect/platform@0.88.0(effect@3.17.0))(effect@3.17.0)': + dependencies: + '@effect/platform': 0.88.0(effect@3.17.0) + effect: 3.17.0 + uuid: 11.1.0 + '@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13)': dependencies: '@effect/platform': 0.88.0(effect@3.16.13) @@ -14994,6 +15403,13 @@ snapshots: msgpackr: 1.11.4 multipasta: 0.2.5 + '@effect/platform@0.88.0(effect@3.17.0)': + dependencies: + effect: 3.17.0 + find-my-way-ts: 0.1.6 + msgpackr: 1.11.4 + multipasta: 0.2.5 + '@effect/printer-ansi@0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13)': dependencies: '@effect/printer': 0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13) @@ -15201,36 +15617,26 @@ snapshots: '@esbuild/win32-x64@0.25.2': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.7.0(eslint@9.31.0(jiti@2.4.2))': dependencies: - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.31.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 - optional: true - '@eslint-community/regexpp@4.12.1': - optional: true + '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.20.1': + '@eslint/config-array@0.21.0': dependencies: '@eslint/object-schema': 2.1.6 debug: 4.4.1 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - optional: true - '@eslint/config-helpers@0.2.3': - optional: true - - '@eslint/core@0.14.0': - dependencies: - '@types/json-schema': 7.0.15 - optional: true + '@eslint/config-helpers@0.3.0': {} '@eslint/core@0.15.1': dependencies: '@types/json-schema': 7.0.15 - optional: true '@eslint/eslintrc@3.3.1': dependencies: @@ -15245,19 +15651,15 @@ snapshots: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - optional: true - '@eslint/js@9.29.0': - optional: true + '@eslint/js@9.31.0': {} - '@eslint/object-schema@2.1.6': - optional: true + '@eslint/object-schema@2.1.6': {} '@eslint/plugin-kit@0.3.3': dependencies: '@eslint/core': 0.15.1 levn: 0.4.1 - optional: true '@ethereumjs/common@3.2.0': dependencies: @@ -15594,6 +15996,78 @@ snapshots: - utf-8-validate - zod + '@graphprotocol/hypergraph-react@0.0.14(@graphprotocol/hypergraph@0.0.14(@effect/platform@0.88.0(effect@3.17.0))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react@19.1.0)(solid-js@1.9.5)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51)': + dependencies: + '@automerge/automerge': 2.2.9 + '@automerge/automerge-repo': 2.0.6 + '@automerge/automerge-repo-react-hooks': 2.0.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@graphprotocol/grc-20': 0.21.6(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) + '@graphprotocol/hypergraph': 0.0.14(@effect/platform@0.88.0(effect@3.17.0))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react@19.1.0)(solid-js@1.9.5)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) + '@noble/hashes': 1.8.0 + '@tanstack/react-query': 5.83.0(react@19.1.0) + effect: 3.17.0 + graphql-request: 7.2.0(graphql@16.11.0) + react: 19.1.0 + siwe: 3.0.0(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + uuid: 11.1.0 + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) + transitivePeerDependencies: + - bufferutil + - ethers + - graphql + - ox + - react-dom + - supports-color + - typescript + - utf-8-validate + - zod + + '@graphprotocol/hypergraph@0.0.14(@effect/platform@0.88.0(effect@3.17.0))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react@19.1.0)(solid-js@1.9.5)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51)': + dependencies: + '@automerge/automerge': 2.2.9 + '@automerge/automerge-repo': 2.0.6 + '@effect/experimental': 0.51.1(@effect/platform@0.88.0(effect@3.17.0))(effect@3.17.0) + '@graphprotocol/grc-20': 0.21.6(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@noble/secp256k1': 2.2.3 + '@rhinestone/module-sdk': 0.2.8(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51)) + '@serenity-kit/noble-sodium': 0.2.1 + '@xstate/store': 3.5.1(react@19.1.0)(solid-js@1.9.5) + bs58check: 4.0.0 + effect: 3.17.0 + permissionless: 0.2.47(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51)) + siwe: 3.0.0(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + uuid: 11.1.0 + viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) + transitivePeerDependencies: + - '@effect/platform' + - bufferutil + - ethers + - graphql + - ioredis + - lmdb + - ox + - react + - solid-js + - supports-color + - typescript + - utf-8-validate + - zod + + '@graphprotocol/typesync@0.0.3(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51)': + dependencies: + '@graphprotocol/grc-20': 0.21.6(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) + effect: 3.17.0 + transitivePeerDependencies: + - bufferutil + - graphql + - ox + - typescript + - utf-8-validate + - zod + '@graphql-codegen/add@5.0.3(graphql@16.11.0)': dependencies: '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.11.0) @@ -16099,23 +16573,18 @@ snapshots: dependencies: '@hpke/common': 1.7.3 - '@humanfs/core@0.19.1': - optional: true + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.6': dependencies: '@humanfs/core': 0.19.1 '@humanwhocodes/retry': 0.3.1 - optional: true - '@humanwhocodes/module-importer@1.0.1': - optional: true + '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/retry@0.3.1': - optional: true + '@humanwhocodes/retry@0.3.1': {} - '@humanwhocodes/retry@0.4.3': - optional: true + '@humanwhocodes/retry@0.4.3': {} '@img/sharp-darwin-arm64@0.34.1': optionalDependencies: @@ -16301,7 +16770,7 @@ snapshots: '@mdx-js/mdx@3.1.0(acorn@8.15.0)': dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdx': 2.0.13 @@ -16871,6 +17340,15 @@ snapshots: '@radix-ui/primitive@1.1.2': {} + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-avatar@1.1.9(@types/react-dom@19.1.3(@types/react@19.1.3))(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-context': 1.1.2(@types/react@19.1.3)(react@19.1.0) @@ -16926,6 +17404,19 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-icons@1.3.2(react@19.1.0)': dependencies: react: 19.1.0 @@ -16937,6 +17428,56 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-navigation-menu@1.2.13(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + + '@radix-ui/react-popper@1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@floating-ui/react-dom': 2.1.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/rect': 1.1.1 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) @@ -17012,6 +17553,26 @@ snapshots: '@types/react': 19.1.8 '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-tooltip@1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.3)(react@19.1.0)': dependencies: react: 19.1.0 @@ -17039,6 +17600,13 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.8)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.8 + '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.1.3)(react@19.1.0)': dependencies: react: 19.1.0 @@ -17058,26 +17626,57 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 - '@react-aria/focus@3.19.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.8)(react@19.1.0)': dependencies: - '@react-aria/interactions': 3.23.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/utils': 3.27.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-types/shared': 3.27.0(react@19.1.0) - '@swc/helpers': 0.5.15 - clsx: 2.1.1 react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 - '@react-aria/focus@3.20.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.8)(react@19.1.0)': dependencies: - '@react-aria/interactions': 3.25.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-aria/utils': 3.29.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-types/shared': 3.29.1(react@19.1.0) - '@swc/helpers': 0.5.17 - clsx: 2.1.1 + '@radix-ui/rect': 1.1.1 react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - + optionalDependencies: + '@types/react': 19.1.8 + + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.8)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.8 + + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + + '@radix-ui/rect@1.1.1': {} + + '@react-aria/focus@3.19.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@react-aria/interactions': 3.23.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/utils': 3.27.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-types/shared': 3.27.0(react@19.1.0) + '@swc/helpers': 0.5.15 + clsx: 2.1.1 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@react-aria/focus@3.20.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@react-aria/interactions': 3.25.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-aria/utils': 3.29.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-types/shared': 3.29.1(react@19.1.0) + '@swc/helpers': 0.5.17 + clsx: 2.1.1 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + '@react-aria/interactions@3.23.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@react-aria/ssr': 3.9.7(react@19.1.0) @@ -17415,6 +18014,8 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.19': {} + '@rolldown/pluginutils@1.0.0-beta.27': {} + '@rollup/plugin-inject@5.0.5(rollup@4.45.0)': dependencies: '@rollup/pluginutils': 5.2.0(rollup@4.45.0) @@ -17594,13 +18195,6 @@ snapshots: '@noble/curves': 1.9.0 '@noble/hashes': 1.8.0 - '@shikijs/core@3.7.0': - dependencies: - '@shikijs/types': 3.7.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.5 - '@shikijs/core@3.8.0': dependencies: '@shikijs/types': 3.8.0 @@ -17608,49 +18202,25 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/engine-javascript@3.7.0': - dependencies: - '@shikijs/types': 3.7.0 - '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 4.3.3 - '@shikijs/engine-javascript@3.8.0': dependencies: '@shikijs/types': 3.8.0 '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.3 - '@shikijs/engine-oniguruma@3.7.0': - dependencies: - '@shikijs/types': 3.7.0 - '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/engine-oniguruma@3.8.0': dependencies: '@shikijs/types': 3.8.0 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@3.7.0': - dependencies: - '@shikijs/types': 3.7.0 - '@shikijs/langs@3.8.0': dependencies: '@shikijs/types': 3.8.0 - '@shikijs/themes@3.7.0': - dependencies: - '@shikijs/types': 3.7.0 - '@shikijs/themes@3.8.0': dependencies: '@shikijs/types': 3.8.0 - '@shikijs/types@3.7.0': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - '@shikijs/types@3.8.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 @@ -18167,6 +18737,13 @@ snapshots: tailwindcss: 4.1.11 vite: 7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + '@tailwindcss/vite@4.1.11(vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + dependencies: + '@tailwindcss/node': 4.1.11 + '@tailwindcss/oxide': 4.1.11 + tailwindcss: 4.1.11 + vite: 7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + '@tailwindcss/vite@4.1.5(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@tailwindcss/node': 4.1.5 @@ -18214,10 +18791,10 @@ snapshots: '@tanstack/query-core': 5.83.0 react: 19.1.0 - '@tanstack/react-router-devtools@1.122.0(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.127.3)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)': + '@tanstack/react-router-devtools@1.122.0(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.129.2)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)': dependencies: '@tanstack/react-router': 1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-devtools-core': 1.122.0(@tanstack/router-core@1.127.3)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3) + '@tanstack/router-devtools-core': 1.122.0(@tanstack/router-core@1.129.2)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) transitivePeerDependencies: @@ -18226,10 +18803,10 @@ snapshots: - solid-js - tiny-invariant - '@tanstack/react-router-devtools@1.127.1(@tanstack/react-router@1.127.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.127.3)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)': + '@tanstack/react-router-devtools@1.127.3(@tanstack/react-router@1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.129.2)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)': dependencies: - '@tanstack/react-router': 1.127.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-devtools-core': 1.127.0(@tanstack/router-core@1.127.3)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3) + '@tanstack/react-router': 1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/router-devtools-core': 1.127.3(@tanstack/router-core@1.129.2)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) transitivePeerDependencies: @@ -18238,10 +18815,10 @@ snapshots: - solid-js - tiny-invariant - '@tanstack/react-router-devtools@1.127.3(@tanstack/react-router@1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.127.3)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)': + '@tanstack/react-router-devtools@1.129.2(@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.129.2)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)': dependencies: - '@tanstack/react-router': 1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-devtools-core': 1.127.3(@tanstack/router-core@1.127.3)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3) + '@tanstack/react-router': 1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/router-devtools-core': 1.129.2(@tanstack/router-core@1.129.2)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) transitivePeerDependencies: @@ -18261,23 +18838,22 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/react-router@1.127.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/react-router@1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@tanstack/history': 1.121.34 - '@tanstack/react-store': 0.7.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-core': 1.127.0 + '@tanstack/react-store': 0.7.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/router-core': 1.127.3 isbot: 5.1.28 - jsesc: 3.1.0 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/react-router@1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@tanstack/history': 1.121.34 '@tanstack/react-store': 0.7.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-core': 1.127.3 + '@tanstack/router-core': 1.129.2 isbot: 5.1.28 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -18291,13 +18867,6 @@ snapshots: react-dom: 19.1.0(react@19.1.0) use-sync-external-store: 1.4.0(react@19.1.0) - '@tanstack/react-store@0.7.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@tanstack/store': 0.7.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - use-sync-external-store: 1.5.0(react@19.1.0) - '@tanstack/react-store@0.7.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@tanstack/store': 0.7.2 @@ -18323,18 +18892,17 @@ snapshots: '@tanstack/store': 0.7.0 tiny-invariant: 1.3.3 - '@tanstack/router-core@1.127.0': + '@tanstack/router-core@1.127.3': dependencies: '@tanstack/history': 1.121.34 - '@tanstack/store': 0.7.1 + '@tanstack/store': 0.7.2 cookie-es: 1.2.2 - jsesc: 3.1.0 seroval: 1.3.2 seroval-plugins: 1.3.2(seroval@1.3.2) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-core@1.127.3': + '@tanstack/router-core@1.129.2': dependencies: '@tanstack/history': 1.121.34 '@tanstack/store': 0.7.2 @@ -18344,9 +18912,9 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.122.0(@tanstack/router-core@1.127.3)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': + '@tanstack/router-devtools-core@1.122.0(@tanstack/router-core@1.129.2)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': dependencies: - '@tanstack/router-core': 1.127.3 + '@tanstack/router-core': 1.129.2 clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) solid-js: 1.9.5 @@ -18354,9 +18922,9 @@ snapshots: optionalDependencies: csstype: 3.1.3 - '@tanstack/router-devtools-core@1.127.0(@tanstack/router-core@1.127.3)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': + '@tanstack/router-devtools-core@1.127.3(@tanstack/router-core@1.129.2)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': dependencies: - '@tanstack/router-core': 1.127.3 + '@tanstack/router-core': 1.129.2 clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) solid-js: 1.9.5 @@ -18364,9 +18932,9 @@ snapshots: optionalDependencies: csstype: 3.1.3 - '@tanstack/router-devtools-core@1.127.3(@tanstack/router-core@1.127.3)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': + '@tanstack/router-devtools-core@1.129.2(@tanstack/router-core@1.129.2)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': dependencies: - '@tanstack/router-core': 1.127.3 + '@tanstack/router-core': 1.129.2 clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) solid-js: 1.9.5 @@ -18377,7 +18945,7 @@ snapshots: '@tanstack/router-generator@1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))': dependencies: '@tanstack/virtual-file-routes': 1.115.0 - prettier: 3.6.1 + prettier: 3.6.2 tsx: 4.20.3 zod: 3.24.2 optionalDependencies: @@ -18388,7 +18956,20 @@ snapshots: '@tanstack/router-core': 1.127.3 '@tanstack/router-utils': 1.121.21 '@tanstack/virtual-file-routes': 1.121.21 - prettier: 3.6.1 + prettier: 3.6.2 + recast: 0.23.11 + source-map: 0.7.4 + tsx: 4.20.3 + zod: 3.25.51 + transitivePeerDependencies: + - supports-color + + '@tanstack/router-generator@1.129.2': + dependencies: + '@tanstack/router-core': 1.129.2 + '@tanstack/router-utils': 1.121.21 + '@tanstack/virtual-file-routes': 1.121.21 + prettier: 3.6.2 recast: 0.23.11 source-map: 0.7.4 tsx: 4.20.3 @@ -18445,6 +19026,29 @@ snapshots: transitivePeerDependencies: - supports-color + '@tanstack/router-plugin@1.129.2(@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8)': + dependencies: + '@babel/core': 7.28.0 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.0) + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.0 + '@tanstack/router-core': 1.129.2 + '@tanstack/router-generator': 1.129.2 + '@tanstack/router-utils': 1.121.21 + '@tanstack/virtual-file-routes': 1.121.21 + babel-dead-code-elimination: 1.0.10 + chokidar: 3.6.0 + unplugin: 2.1.2 + zod: 3.25.51 + optionalDependencies: + '@tanstack/react-router': 1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + vite: 7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + webpack: 5.99.8 + transitivePeerDependencies: + - supports-color + '@tanstack/router-utils@1.115.0': dependencies: '@babel/generator': 7.27.5 @@ -18465,8 +19069,6 @@ snapshots: '@tanstack/store@0.7.0': {} - '@tanstack/store@0.7.1': {} - '@tanstack/store@0.7.2': {} '@tanstack/virtual-core@3.13.6': {} @@ -18557,7 +19159,7 @@ snapshots: '@types/cors@2.8.17': dependencies: - '@types/node': 22.15.15 + '@types/node': 22.15.29 '@types/debug@4.1.12': dependencies: @@ -18577,7 +19179,7 @@ snapshots: '@types/estree-jsx@1.0.5': dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/estree@1.0.7': {} @@ -18676,11 +19278,15 @@ snapshots: dependencies: undici-types: 7.8.0 + '@types/node@24.0.15': + dependencies: + undici-types: 7.8.0 + '@types/parse-json@4.0.2': {} '@types/pg@8.15.0': dependencies: - '@types/node': 22.15.15 + '@types/node': 22.15.29 pg-protocol: 1.7.0 pg-types: 4.0.2 @@ -18783,6 +19389,99 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/type-utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.38.0 + eslint: 9.31.0(jiti@2.4.2) + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.38.0 + debug: 4.4.1 + eslint: 9.31.0(jiti@2.4.2) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.38.0(typescript@5.8.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 + debug: 4.4.1 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.38.0': + dependencies: + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 + + '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 + + '@typescript-eslint/type-utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + dependencies: + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + debug: 4.4.1 + eslint: 9.31.0(jiti@2.4.2) + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.38.0': {} + + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)': + dependencies: + '@typescript-eslint/project-service': 8.38.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 + debug: 4.4.1 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + eslint: 9.31.0(jiti@2.4.2) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.38.0': + dependencies: + '@typescript-eslint/types': 8.38.0 + eslint-visitor-keys: 4.2.1 + '@ungap/structured-clone@1.3.0': {} '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': @@ -18796,14 +19495,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.4.1(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@vitejs/plugin-react@4.4.1(vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.28.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.28.0) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -18819,6 +19518,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitejs/plugin-react@4.7.0(vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + dependencies: + '@babel/core': 7.28.0 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.0) + '@rolldown/pluginutils': 1.0.0-beta.27 + '@types/babel__core': 7.20.5 + react-refresh: 0.17.0 + vite: 7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + transitivePeerDependencies: + - supports-color + '@vitest/expect@3.2.4': dependencies: '@types/chai': 5.2.2 @@ -18835,6 +19546,14 @@ snapshots: optionalDependencies: vite: 6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + dependencies: + '@vitest/spy': 3.2.4 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + vite: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 @@ -19735,6 +20454,16 @@ snapshots: postcss: 8.5.3 postcss-value-parser: 4.2.0 + autoprefixer@10.4.21(postcss@8.5.6): + dependencies: + browserslist: 4.24.5 + caniuse-lite: 1.0.30001718 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 @@ -20608,6 +21337,10 @@ snapshots: dependencies: postcss: 8.5.3 + css-declaration-sorter@7.2.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + css-has-pseudo@7.0.2(postcss@8.5.3): dependencies: '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) @@ -20617,12 +21350,12 @@ snapshots: css-loader@6.11.0(webpack@5.99.8): dependencies: - icss-utils: 5.1.0(postcss@8.5.3) - postcss: 8.5.3 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.3) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.3) - postcss-modules-scope: 3.2.1(postcss@8.5.3) - postcss-modules-values: 4.0.0(postcss@8.5.3) + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) + postcss-modules-scope: 3.2.1(postcss@8.5.6) + postcss-modules-values: 4.0.0(postcss@8.5.6) postcss-value-parser: 4.2.0 semver: 7.7.1 optionalDependencies: @@ -20631,9 +21364,9 @@ snapshots: css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(lightningcss@1.30.1)(webpack@5.99.8): dependencies: '@jridgewell/trace-mapping': 0.3.25 - cssnano: 6.1.2(postcss@8.5.3) + cssnano: 6.1.2(postcss@8.5.6) jest-worker: 29.7.0 - postcss: 8.5.3 + postcss: 8.5.6 schema-utils: 4.3.2 serialize-javascript: 6.0.2 webpack: 5.99.8 @@ -20685,16 +21418,16 @@ snapshots: cssesc@3.0.0: {} - cssnano-preset-advanced@6.1.2(postcss@8.5.3): + cssnano-preset-advanced@6.1.2(postcss@8.5.6): dependencies: - autoprefixer: 10.4.21(postcss@8.5.3) + autoprefixer: 10.4.21(postcss@8.5.6) browserslist: 4.24.5 - cssnano-preset-default: 6.1.2(postcss@8.5.3) - postcss: 8.5.3 - postcss-discard-unused: 6.0.5(postcss@8.5.3) - postcss-merge-idents: 6.0.3(postcss@8.5.3) - postcss-reduce-idents: 6.0.3(postcss@8.5.3) - postcss-zindex: 6.0.2(postcss@8.5.3) + cssnano-preset-default: 6.1.2(postcss@8.5.6) + postcss: 8.5.6 + postcss-discard-unused: 6.0.5(postcss@8.5.6) + postcss-merge-idents: 6.0.3(postcss@8.5.6) + postcss-reduce-idents: 6.0.3(postcss@8.5.6) + postcss-zindex: 6.0.2(postcss@8.5.6) cssnano-preset-default@6.1.2(postcss@8.5.3): dependencies: @@ -20730,16 +21463,60 @@ snapshots: postcss-svgo: 6.0.3(postcss@8.5.3) postcss-unique-selectors: 6.0.4(postcss@8.5.3) + cssnano-preset-default@6.1.2(postcss@8.5.6): + dependencies: + browserslist: 4.24.5 + css-declaration-sorter: 7.2.0(postcss@8.5.6) + cssnano-utils: 4.0.2(postcss@8.5.6) + postcss: 8.5.6 + postcss-calc: 9.0.1(postcss@8.5.6) + postcss-colormin: 6.1.0(postcss@8.5.6) + postcss-convert-values: 6.1.0(postcss@8.5.6) + postcss-discard-comments: 6.0.2(postcss@8.5.6) + postcss-discard-duplicates: 6.0.3(postcss@8.5.6) + postcss-discard-empty: 6.0.3(postcss@8.5.6) + postcss-discard-overridden: 6.0.2(postcss@8.5.6) + postcss-merge-longhand: 6.0.5(postcss@8.5.6) + postcss-merge-rules: 6.1.1(postcss@8.5.6) + postcss-minify-font-values: 6.1.0(postcss@8.5.6) + postcss-minify-gradients: 6.0.3(postcss@8.5.6) + postcss-minify-params: 6.1.0(postcss@8.5.6) + postcss-minify-selectors: 6.0.4(postcss@8.5.6) + postcss-normalize-charset: 6.0.2(postcss@8.5.6) + postcss-normalize-display-values: 6.0.2(postcss@8.5.6) + postcss-normalize-positions: 6.0.2(postcss@8.5.6) + postcss-normalize-repeat-style: 6.0.2(postcss@8.5.6) + postcss-normalize-string: 6.0.2(postcss@8.5.6) + postcss-normalize-timing-functions: 6.0.2(postcss@8.5.6) + postcss-normalize-unicode: 6.1.0(postcss@8.5.6) + postcss-normalize-url: 6.0.2(postcss@8.5.6) + postcss-normalize-whitespace: 6.0.2(postcss@8.5.6) + postcss-ordered-values: 6.0.2(postcss@8.5.6) + postcss-reduce-initial: 6.1.0(postcss@8.5.6) + postcss-reduce-transforms: 6.0.2(postcss@8.5.6) + postcss-svgo: 6.0.3(postcss@8.5.6) + postcss-unique-selectors: 6.0.4(postcss@8.5.6) + cssnano-utils@4.0.2(postcss@8.5.3): dependencies: postcss: 8.5.3 + cssnano-utils@4.0.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + cssnano@6.1.2(postcss@8.5.3): dependencies: cssnano-preset-default: 6.1.2(postcss@8.5.3) lilconfig: 3.1.3 postcss: 8.5.3 + cssnano@6.1.2(postcss@8.5.6): + dependencies: + cssnano-preset-default: 6.1.2(postcss@8.5.6) + lilconfig: 3.1.3 + postcss: 8.5.6 + csso@5.0.5: dependencies: css-tree: 2.2.1 @@ -20802,8 +21579,7 @@ snapshots: deep-extend@0.6.0: {} - deep-is@0.1.4: - optional: true + deep-is@0.1.4: {} deepmerge@4.3.1: {} @@ -21022,6 +21798,11 @@ snapshots: '@standard-schema/spec': 1.0.0 fast-check: 3.23.2 + effect@3.17.0: + dependencies: + '@standard-schema/spec': 1.0.0 + fast-check: 3.23.2 + electron-to-chromium@1.5.152: {} electron-to-chromium@1.5.52: {} @@ -21167,6 +21948,14 @@ snapshots: escape-string-regexp@5.0.0: {} + eslint-plugin-react-hooks@5.2.0(eslint@9.31.0(jiti@2.4.2)): + dependencies: + eslint: 9.31.0(jiti@2.4.2) + + eslint-plugin-react-refresh@0.4.20(eslint@9.31.0(jiti@2.4.2)): + dependencies: + eslint: 9.31.0(jiti@2.4.2) + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 @@ -21176,23 +21965,20 @@ snapshots: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - optional: true - eslint-visitor-keys@3.4.3: - optional: true + eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.2.1: - optional: true + eslint-visitor-keys@4.2.1: {} - eslint@9.29.0(jiti@2.4.2): + eslint@9.31.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.20.1 - '@eslint/config-helpers': 0.2.3 - '@eslint/core': 0.14.0 + '@eslint/config-array': 0.21.0 + '@eslint/config-helpers': 0.3.0 + '@eslint/core': 0.15.1 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.29.0 + '@eslint/js': 9.31.0 '@eslint/plugin-kit': 0.3.3 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 @@ -21225,21 +22011,18 @@ snapshots: jiti: 2.4.2 transitivePeerDependencies: - supports-color - optional: true espree@10.4.0: dependencies: acorn: 8.15.0 acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 4.2.1 - optional: true esprima@4.0.1: {} esquery@1.6.0: dependencies: estraverse: 5.3.0 - optional: true esrecurse@4.3.0: dependencies: @@ -21251,7 +22034,7 @@ snapshots: estree-util-attach-comments@3.0.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 estree-util-build-jsx@3.0.1: dependencies: @@ -21264,7 +22047,7 @@ snapshots: estree-util-scope@1.0.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 devlop: 1.1.0 estree-util-to-js@2.0.0: @@ -21275,7 +22058,7 @@ snapshots: estree-util-value-to-estree@3.4.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 estree-util-visit@2.0.0: dependencies: @@ -21493,8 +22276,7 @@ snapshots: fast-json-stable-stringify@2.1.0: {} - fast-levenshtein@2.0.6: - optional: true + fast-levenshtein@2.0.6: {} fast-password-entropy@1.1.1: {} @@ -21566,7 +22348,6 @@ snapshots: file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 - optional: true file-loader@6.2.0(webpack@5.99.8): dependencies: @@ -21647,12 +22428,10 @@ snapshots: dependencies: flatted: 3.3.3 keyv: 4.5.4 - optional: true flat@5.0.2: {} - flatted@3.3.3: - optional: true + flatted@3.3.3: {} follow-redirects@1.15.9: {} @@ -21670,7 +22449,7 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@6.5.3(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)(webpack@5.99.8): + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)(webpack@5.99.8): dependencies: '@babel/code-frame': 7.27.1 '@types/json-schema': 7.0.15 @@ -21688,7 +22467,7 @@ snapshots: typescript: 5.8.3 webpack: 5.99.8 optionalDependencies: - eslint: 9.29.0(jiti@2.4.2) + eslint: 9.31.0(jiti@2.4.2) form-data-encoder@2.1.4: {} @@ -21843,11 +22622,12 @@ snapshots: globals@11.12.0: {} - globals@14.0.0: - optional: true + globals@14.0.0: {} globals@16.1.0: {} + globals@16.3.0: {} + globby@11.1.0: dependencies: array-union: 2.1.0 @@ -21889,6 +22669,8 @@ snapshots: graceful-fs@4.2.11: {} + graphemer@1.4.0: {} + graphql-config@5.1.3(@types/node@24.0.13)(bufferutil@4.0.9)(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10): dependencies: '@graphql-tools/graphql-file-loader': 8.0.12(graphql@16.11.0) @@ -22034,7 +22816,7 @@ snapshots: hast-util-to-estree@3.1.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 @@ -22069,7 +22851,7 @@ snapshots: hast-util-to-jsx-runtime@2.3.6: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/hast': 3.0.4 '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 @@ -22280,9 +23062,9 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.5.3): + icss-utils@5.1.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 idb-keyval@6.2.1: {} @@ -22290,6 +23072,8 @@ snapshots: ignore@5.3.2: {} + ignore@7.0.5: {} + image-size@1.2.1: dependencies: queue: 6.0.2 @@ -22689,8 +23473,7 @@ snapshots: json-schema-traverse@1.0.0: {} - json-stable-stringify-without-jsonify@1.0.1: - optional: true + json-stable-stringify-without-jsonify@1.0.1: {} json-stringify-safe@5.0.1: {} @@ -22738,7 +23521,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - optional: true libphonenumber-js@1.11.18: {} @@ -22920,8 +23702,7 @@ snapshots: lodash.memoize@4.1.2: {} - lodash.merge@4.6.2: - optional: true + lodash.merge@4.6.2: {} lodash.sortby@4.7.0: {} @@ -22977,6 +23758,10 @@ snapshots: dependencies: react: 19.1.0 + lucide-react@0.525.0(react@19.1.0): + dependencies: + react: 19.1.0 + lz-string@1.5.0: {} magic-string@0.30.17: @@ -23326,7 +24111,7 @@ snapshots: micromark-extension-mdx-expression@3.0.1: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 devlop: 1.1.0 micromark-factory-mdx-expression: 2.0.3 micromark-factory-space: 2.0.1 @@ -23337,7 +24122,7 @@ snapshots: micromark-extension-mdx-jsx@3.0.2: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 micromark-factory-mdx-expression: 2.0.3 @@ -23354,7 +24139,7 @@ snapshots: micromark-extension-mdxjs-esm@3.0.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 micromark-util-character: 2.1.1 @@ -23390,7 +24175,7 @@ snapshots: micromark-factory-mdx-expression@2.0.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 devlop: 1.1.0 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 @@ -23464,7 +24249,7 @@ snapshots: micromark-util-events-to-acorn@2.0.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/unist': 3.0.3 devlop: 1.1.0 estree-util-visit: 2.0.0 @@ -23678,8 +24463,7 @@ snapshots: napi-build-utils@2.0.0: {} - natural-compare@1.4.0: - optional: true + natural-compare@1.4.0: {} negotiator@0.6.3: {} @@ -23885,13 +24669,6 @@ snapshots: regex: 6.0.1 regex-recursion: 6.0.2 - open@10.1.2: - dependencies: - default-browser: 5.2.1 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - is-wsl: 3.1.0 - open@10.2.0: dependencies: default-browser: 5.2.1 @@ -23915,7 +24692,6 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 word-wrap: 1.2.5 - optional: true ora@5.4.1: dependencies: @@ -24311,6 +25087,12 @@ snapshots: postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 + postcss-calc@9.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + postcss-value-parser: 4.2.0 + postcss-clamp@4.1.0(postcss@8.5.3): dependencies: postcss: 8.5.3 @@ -24345,12 +25127,26 @@ snapshots: postcss: 8.5.3 postcss-value-parser: 4.2.0 + postcss-colormin@6.1.0(postcss@8.5.6): + dependencies: + browserslist: 4.24.5 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + postcss-convert-values@6.1.0(postcss@8.5.3): dependencies: browserslist: 4.24.5 postcss: 8.5.3 postcss-value-parser: 4.2.0 + postcss-convert-values@6.1.0(postcss@8.5.6): + dependencies: + browserslist: 4.24.5 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + postcss-custom-media@11.0.5(postcss@8.5.3): dependencies: '@csstools/cascade-layer-name-parser': 2.0.4(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) @@ -24385,21 +25181,37 @@ snapshots: dependencies: postcss: 8.5.3 + postcss-discard-comments@6.0.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-discard-duplicates@6.0.3(postcss@8.5.3): dependencies: postcss: 8.5.3 + postcss-discard-duplicates@6.0.3(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-discard-empty@6.0.3(postcss@8.5.3): dependencies: postcss: 8.5.3 + postcss-discard-empty@6.0.3(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-discard-overridden@6.0.2(postcss@8.5.3): dependencies: postcss: 8.5.3 - postcss-discard-unused@6.0.5(postcss@8.5.3): + postcss-discard-overridden@6.0.2(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 + + postcss-discard-unused@6.0.5(postcss@8.5.6): + dependencies: + postcss: 8.5.6 postcss-selector-parser: 6.1.2 postcss-double-position-gradients@6.0.1(postcss@8.5.3): @@ -24466,10 +25278,10 @@ snapshots: postcss: 8.5.3 postcss-value-parser: 4.2.0 - postcss-merge-idents@6.0.3(postcss@8.5.3): + postcss-merge-idents@6.0.3(postcss@8.5.6): dependencies: - cssnano-utils: 4.0.2(postcss@8.5.3) - postcss: 8.5.3 + cssnano-utils: 4.0.2(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 postcss-merge-longhand@6.0.5(postcss@8.5.3): @@ -24478,6 +25290,12 @@ snapshots: postcss-value-parser: 4.2.0 stylehacks: 6.1.1(postcss@8.5.3) + postcss-merge-longhand@6.0.5(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + stylehacks: 6.1.1(postcss@8.5.6) + postcss-merge-rules@6.1.1(postcss@8.5.3): dependencies: browserslist: 4.24.5 @@ -24486,11 +25304,24 @@ snapshots: postcss: 8.5.3 postcss-selector-parser: 6.1.2 + postcss-merge-rules@6.1.1(postcss@8.5.6): + dependencies: + browserslist: 4.24.5 + caniuse-api: 3.0.0 + cssnano-utils: 4.0.2(postcss@8.5.6) + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + postcss-minify-font-values@6.1.0(postcss@8.5.3): dependencies: postcss: 8.5.3 postcss-value-parser: 4.2.0 + postcss-minify-font-values@6.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + postcss-minify-gradients@6.0.3(postcss@8.5.3): dependencies: colord: 2.9.3 @@ -24498,6 +25329,13 @@ snapshots: postcss: 8.5.3 postcss-value-parser: 4.2.0 + postcss-minify-gradients@6.0.3(postcss@8.5.6): + dependencies: + colord: 2.9.3 + cssnano-utils: 4.0.2(postcss@8.5.6) + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + postcss-minify-params@6.1.0(postcss@8.5.3): dependencies: browserslist: 4.24.5 @@ -24505,31 +25343,43 @@ snapshots: postcss: 8.5.3 postcss-value-parser: 4.2.0 + postcss-minify-params@6.1.0(postcss@8.5.6): + dependencies: + browserslist: 4.24.5 + cssnano-utils: 4.0.2(postcss@8.5.6) + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + postcss-minify-selectors@6.0.4(postcss@8.5.3): dependencies: postcss: 8.5.3 postcss-selector-parser: 6.1.2 - postcss-modules-extract-imports@3.1.0(postcss@8.5.3): + postcss-minify-selectors@6.0.4(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 - postcss-modules-local-by-default@4.2.0(postcss@8.5.3): + postcss-modules-extract-imports@3.1.0(postcss@8.5.6): dependencies: - icss-utils: 5.1.0(postcss@8.5.3) - postcss: 8.5.3 + postcss: 8.5.6 + + postcss-modules-local-by-default@4.2.0(postcss@8.5.6): + dependencies: + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.5.3): + postcss-modules-scope@3.2.1(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-selector-parser: 7.1.0 - postcss-modules-values@4.0.0(postcss@8.5.3): + postcss-modules-values@4.0.0(postcss@8.5.6): dependencies: - icss-utils: 5.1.0(postcss@8.5.3) - postcss: 8.5.3 + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 postcss-nesting@13.0.1(postcss@8.5.3): dependencies: @@ -24542,47 +25392,92 @@ snapshots: dependencies: postcss: 8.5.3 + postcss-normalize-charset@6.0.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-normalize-display-values@6.0.2(postcss@8.5.3): dependencies: postcss: 8.5.3 postcss-value-parser: 4.2.0 + postcss-normalize-display-values@6.0.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + postcss-normalize-positions@6.0.2(postcss@8.5.3): dependencies: postcss: 8.5.3 postcss-value-parser: 4.2.0 + postcss-normalize-positions@6.0.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + postcss-normalize-repeat-style@6.0.2(postcss@8.5.3): dependencies: postcss: 8.5.3 postcss-value-parser: 4.2.0 + postcss-normalize-repeat-style@6.0.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + postcss-normalize-string@6.0.2(postcss@8.5.3): dependencies: postcss: 8.5.3 postcss-value-parser: 4.2.0 + postcss-normalize-string@6.0.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + postcss-normalize-timing-functions@6.0.2(postcss@8.5.3): dependencies: postcss: 8.5.3 postcss-value-parser: 4.2.0 + postcss-normalize-timing-functions@6.0.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + postcss-normalize-unicode@6.1.0(postcss@8.5.3): dependencies: browserslist: 4.24.5 postcss: 8.5.3 postcss-value-parser: 4.2.0 + postcss-normalize-unicode@6.1.0(postcss@8.5.6): + dependencies: + browserslist: 4.24.5 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + postcss-normalize-url@6.0.2(postcss@8.5.3): dependencies: postcss: 8.5.3 postcss-value-parser: 4.2.0 + postcss-normalize-url@6.0.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + postcss-normalize-whitespace@6.0.2(postcss@8.5.3): dependencies: postcss: 8.5.3 postcss-value-parser: 4.2.0 + postcss-normalize-whitespace@6.0.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + postcss-opacity-percentage@3.0.0(postcss@8.5.3): dependencies: postcss: 8.5.3 @@ -24593,6 +25488,12 @@ snapshots: postcss: 8.5.3 postcss-value-parser: 4.2.0 + postcss-ordered-values@6.0.2(postcss@8.5.6): + dependencies: + cssnano-utils: 4.0.2(postcss@8.5.6) + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + postcss-overflow-shorthand@6.0.0(postcss@8.5.3): dependencies: postcss: 8.5.3 @@ -24679,9 +25580,9 @@ snapshots: postcss: 8.5.3 postcss-selector-parser: 7.1.0 - postcss-reduce-idents@6.0.3(postcss@8.5.3): + postcss-reduce-idents@6.0.3(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 postcss-reduce-initial@6.1.0(postcss@8.5.3): @@ -24690,11 +25591,22 @@ snapshots: caniuse-api: 3.0.0 postcss: 8.5.3 + postcss-reduce-initial@6.1.0(postcss@8.5.6): + dependencies: + browserslist: 4.24.5 + caniuse-api: 3.0.0 + postcss: 8.5.6 + postcss-reduce-transforms@6.0.2(postcss@8.5.3): dependencies: postcss: 8.5.3 postcss-value-parser: 4.2.0 + postcss-reduce-transforms@6.0.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + postcss-replace-overflow-wrap@4.0.0(postcss@8.5.3): dependencies: postcss: 8.5.3 @@ -24714,9 +25626,9 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-sort-media-queries@5.2.0(postcss@8.5.3): + postcss-sort-media-queries@5.2.0(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 sort-css-media-queries: 2.2.0 postcss-svgo@6.0.3(postcss@8.5.3): @@ -24725,16 +25637,27 @@ snapshots: postcss-value-parser: 4.2.0 svgo: 3.3.2 + postcss-svgo@6.0.3(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + svgo: 3.3.2 + postcss-unique-selectors@6.0.4(postcss@8.5.3): dependencies: postcss: 8.5.3 postcss-selector-parser: 6.1.2 + postcss-unique-selectors@6.0.4(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + postcss-value-parser@4.2.0: {} - postcss-zindex@6.0.2(postcss@8.5.3): + postcss-zindex@6.0.2(postcss@8.5.6): dependencies: - postcss: 8.5.3 + postcss: 8.5.6 postcss@8.4.31: dependencies: @@ -24789,8 +25712,7 @@ snapshots: tar-fs: 2.1.2 tunnel-agent: 0.6.0 - prelude-ls@1.2.1: - optional: true + prelude-ls@1.2.1: {} prettier-plugin-tailwindcss@0.6.13(prettier@3.6.1): dependencies: @@ -24800,6 +25722,8 @@ snapshots: prettier@3.6.1: {} + prettier@3.6.2: {} + pretty-error@4.0.0: dependencies: lodash: 4.17.21 @@ -24986,7 +25910,7 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-dev-utils@12.0.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)(webpack@5.99.8): + react-dev-utils@12.0.1(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)(webpack@5.99.8): dependencies: '@babel/code-frame': 7.27.1 address: 1.2.2 @@ -24997,7 +25921,7 @@ snapshots: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)(webpack@5.99.8) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)(webpack@5.99.8) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -25168,7 +26092,7 @@ snapshots: recma-build-jsx@1.0.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 estree-util-build-jsx: 3.0.1 vfile: 6.0.3 @@ -25184,14 +26108,14 @@ snapshots: recma-parse@1.0.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 esast-util-from-js: 2.0.1 unified: 11.0.5 vfile: 6.0.3 recma-stringify@1.0.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 estree-util-to-js: 2.0.0 unified: 11.0.5 vfile: 6.0.3 @@ -25254,7 +26178,7 @@ snapshots: rehype-recma@1.0.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/hast': 3.0.4 hast-util-to-estree: 3.1.3 transitivePeerDependencies: @@ -25761,17 +26685,6 @@ snapshots: interpret: 1.4.0 rechoir: 0.6.2 - shiki@3.7.0: - dependencies: - '@shikijs/core': 3.7.0 - '@shikijs/engine-javascript': 3.7.0 - '@shikijs/engine-oniguruma': 3.7.0 - '@shikijs/langs': 3.7.0 - '@shikijs/themes': 3.7.0 - '@shikijs/types': 3.7.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - shiki@3.8.0: dependencies: '@shikijs/core': 3.8.0 @@ -26096,6 +27009,12 @@ snapshots: postcss: 8.5.3 postcss-selector-parser: 6.1.2 + stylehacks@6.1.1(postcss@8.5.6): + dependencies: + browserslist: 4.24.5 + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + stylis@4.2.0: {} stylis@4.3.2: {} @@ -26172,6 +27091,8 @@ snapshots: tailwind-merge@3.2.0: {} + tailwind-merge@3.3.1: {} + tailwindcss-animate@1.0.7(tailwindcss@4.1.5): dependencies: tailwindcss: 4.1.5 @@ -26343,6 +27264,10 @@ snapshots: trough@2.2.0: {} + ts-api-utils@2.1.0(typescript@5.8.3): + dependencies: + typescript: 5.8.3 + ts-case-convert@2.1.0: {} ts-interface-checker@0.1.13: {} @@ -26427,6 +27352,8 @@ snapshots: dependencies: safe-buffer: 5.2.1 + tw-animate-css@1.3.5: {} + tweetnacl-util@0.15.1: {} tweetnacl@1.0.3: {} @@ -26434,7 +27361,6 @@ snapshots: type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - optional: true type-detect@4.1.0: {} @@ -26467,6 +27393,17 @@ snapshots: dependencies: is-typedarray: 1.0.0 + typescript-eslint@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + eslint: 9.31.0(jiti@2.4.2) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + typescript@5.8.3: {} ua-parser-js@1.0.40: {} @@ -26834,7 +27771,28 @@ snapshots: debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 7.0.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite-node@3.2.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): + dependencies: + cac: 6.7.14 + debug: 4.4.1 + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -26902,6 +27860,23 @@ snapshots: tsx: 4.20.3 yaml: 2.7.0 + vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): + dependencies: + esbuild: 0.25.2 + fdir: 6.4.4(picomatch@4.0.2) + picomatch: 4.0.2 + postcss: 8.5.3 + rollup: 4.39.0 + tinyglobby: 0.2.13 + optionalDependencies: + '@types/node': 24.0.15 + fsevents: 2.3.3 + jiti: 2.4.2 + lightningcss: 1.30.1 + terser: 5.39.1 + tsx: 4.20.3 + yaml: 2.7.0 + vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): dependencies: esbuild: 0.25.2 @@ -26919,6 +27894,40 @@ snapshots: tsx: 4.20.3 yaml: 2.7.0 + vite@7.0.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): + dependencies: + esbuild: 0.25.2 + fdir: 6.4.6(picomatch@4.0.2) + picomatch: 4.0.2 + postcss: 8.5.6 + rollup: 4.45.0 + tinyglobby: 0.2.14 + optionalDependencies: + '@types/node': 24.0.13 + fsevents: 2.3.3 + jiti: 2.4.2 + lightningcss: 1.30.1 + terser: 5.39.1 + tsx: 4.20.3 + yaml: 2.7.0 + + vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): + dependencies: + esbuild: 0.25.2 + fdir: 6.4.6(picomatch@4.0.2) + picomatch: 4.0.2 + postcss: 8.5.6 + rollup: 4.45.0 + tinyglobby: 0.2.14 + optionalDependencies: + '@types/node': 24.0.15 + fsevents: 2.3.3 + jiti: 2.4.2 + lightningcss: 1.30.1 + terser: 5.39.1 + tsx: 4.20.3 + yaml: 2.7.0 + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): dependencies: '@types/chai': 5.2.2 @@ -26962,6 +27971,49 @@ snapshots: - tsx - yaml + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.15)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): + dependencies: + '@types/chai': 5.2.2 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.2.0 + debug: 4.4.1 + expect-type: 1.2.1 + magic-string: 0.30.17 + pathe: 2.0.3 + picomatch: 4.0.2 + std-env: 3.9.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.14 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite-node: 3.2.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 24.0.15 + jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + vm-browserify@1.1.2: {} w3c-xmlserializer@5.0.0: @@ -27212,8 +28264,7 @@ snapshots: wildcard@2.0.1: {} - word-wrap@1.2.5: - optional: true + word-wrap@1.2.5: {} wrap-ansi@6.2.0: dependencies: From 506177e5c4e63977a0b9725f526a3e033ff6368b Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Mon, 21 Jul 2025 17:13:14 -1000 Subject: [PATCH 02/20] feat(#354 | create-hypergraph-app): remove scripts until ready --- apps/create-hypergraph-app/package.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/apps/create-hypergraph-app/package.json b/apps/create-hypergraph-app/package.json index 14204272..43820100 100644 --- a/apps/create-hypergraph-app/package.json +++ b/apps/create-hypergraph-app/package.json @@ -18,12 +18,6 @@ "directory": "dist", "linkDirectory": false }, - "scripts": { - "test": "vitest run", - "dev": "pnpx tsx ./src/bin.ts", - "build": "tsup", - "check": "tsc --noEmit" - }, "keywords": ["The Graph", "Web3", "Knowledge Graph", "Hypergraph", "TypeSyncs"], "license": "MIT", "engines": { From 4798e01a06458c1581809bb510fcfd0728f2ebc3 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Mon, 21 Jul 2025 17:21:37 -1000 Subject: [PATCH 03/20] feat(#354 | create-hypergraph-app): add missing mapping.ts and main.tsx entrypoint --- .../template-vite-react/src/main.tsx | 31 +++++++++++++++++++ .../template-vite-react/src/mapping.ts | 18 +++++++++++ 2 files changed, 49 insertions(+) create mode 100644 apps/create-hypergraph-app/template-vite-react/src/main.tsx create mode 100644 apps/create-hypergraph-app/template-vite-react/src/mapping.ts diff --git a/apps/create-hypergraph-app/template-vite-react/src/main.tsx b/apps/create-hypergraph-app/template-vite-react/src/main.tsx new file mode 100644 index 00000000..87dd928c --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/main.tsx @@ -0,0 +1,31 @@ +import { HypergraphAppProvider } from '@graphprotocol/hypergraph-react'; +import { RouterProvider, createRouter } from '@tanstack/react-router'; +import ReactDOM from 'react-dom/client'; +import './index.css'; +import { mapping } from './mapping'; + +// Import the generated route tree +import { routeTree } from './routeTree.gen'; + +// Create a new router instance +const router = createRouter({ routeTree }); + +// Register the router instance for type safety +declare module '@tanstack/react-router' { + interface Register { + router: typeof router; + } +} + +// Render the app +const rootElement = document.getElementById('root'); +if (rootElement && !rootElement.innerHTML) { + const root = ReactDOM.createRoot(rootElement); + root.render( + // + + + , + // , + ); +} \ No newline at end of file diff --git a/apps/create-hypergraph-app/template-vite-react/src/mapping.ts b/apps/create-hypergraph-app/template-vite-react/src/mapping.ts new file mode 100644 index 00000000..b345a5f0 --- /dev/null +++ b/apps/create-hypergraph-app/template-vite-react/src/mapping.ts @@ -0,0 +1,18 @@ +import { Id } from '@graphprotocol/grc-20'; +import type { Mapping } from '@graphprotocol/hypergraph'; + +export const mapping: Mapping = { + Address: { + typeIds: [Id.Id('5c6e72fb-8340-47c0-8281-8be159ecd495')], + properties: { + name: Id.Id('a126ca53-0c8e-48d5-b888-82c734c38935'), + description: Id.Id('9b1f76ff-9711-404c-861e-59dc3fa7d037'), + }, + }, + Project: { + typeIds: [Id.Id('484a18c5-030a-499c-b0f2-ef588ff16d50')], + properties: { + name: Id.Id('a126ca53-0c8e-48d5-b888-82c734c38935'), + }, + }, +}; \ No newline at end of file From 5a4c19323f38ac9511d4571dfc22315f6108fc01 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Tue, 22 Jul 2025 07:06:25 -1000 Subject: [PATCH 04/20] feat(#351 | create-hypergraph-app): working on building create-hypergraph-app cli tool --- apps/connect/package.json | 4 +- apps/create-hypergraph-app/package.json | 20 +- apps/create-hypergraph-app/src/Cli.ts | 48 + apps/create-hypergraph-app/src/bin.ts | 12 + .../create-hypergraph-app/tsconfig.build.json | 8 + apps/create-hypergraph-app/tsconfig.json | 10 + .../tsconfig.scripts.json | 12 + apps/create-hypergraph-app/tsconfig.src.json | 13 + apps/create-hypergraph-app/tsdown.config.ts | 13 + apps/events/package.json | 4 +- apps/server/package.json | 4 +- apps/typesync/package.json | 20 +- packages/hypergraph-react/package.json | 2 +- packages/hypergraph/package.json | 2 +- packages/typesync/package.json | 2 +- pnpm-lock.yaml | 1023 ++++++++++------- 16 files changed, 783 insertions(+), 414 deletions(-) create mode 100644 apps/create-hypergraph-app/src/Cli.ts create mode 100644 apps/create-hypergraph-app/src/bin.ts create mode 100644 apps/create-hypergraph-app/tsconfig.build.json create mode 100644 apps/create-hypergraph-app/tsconfig.json create mode 100644 apps/create-hypergraph-app/tsconfig.scripts.json create mode 100644 apps/create-hypergraph-app/tsconfig.src.json create mode 100644 apps/create-hypergraph-app/tsdown.config.ts diff --git a/apps/connect/package.json b/apps/connect/package.json index e4411dc3..063436d5 100644 --- a/apps/connect/package.json +++ b/apps/connect/package.json @@ -24,7 +24,7 @@ "@tanstack/react-router-devtools": "^1.122.0", "@xstate/store": "^3.5.1", "clsx": "^2.1.1", - "effect": "^3.16.12", + "effect": "^3.17.0", "framer-motion": "^12.10.1", "graphql-request": "^7.2.0", "lucide-react": "^0.508.0", @@ -37,7 +37,7 @@ "devDependencies": { "@tailwindcss/vite": "^4.1.10", "@tanstack/router-plugin": "^1.120.2", - "@types/node": "^22.15.15", + "@types/node": "^24.0.15", "@types/react": "^19.1.3", "@types/react-dom": "^19.1.3", "@vitejs/plugin-react": "^4.4.1", diff --git a/apps/create-hypergraph-app/package.json b/apps/create-hypergraph-app/package.json index 43820100..527dae54 100644 --- a/apps/create-hypergraph-app/package.json +++ b/apps/create-hypergraph-app/package.json @@ -18,6 +18,13 @@ "directory": "dist", "linkDirectory": false }, + "scripts": { + "test": "vitest run", + "dev": "pnpx tsx ./src/bin.ts", + "build": "tsdown", + "check": "tsc --noEmit", + "start": "node ./dist/bin.js" + }, "keywords": ["The Graph", "Web3", "Knowledge Graph", "Hypergraph", "TypeSyncs"], "license": "MIT", "engines": { @@ -26,5 +33,16 @@ "bugs": { "url": "https://github.com/graphprotocol/hypergraph/issues" }, - "homepage": "https://github.com/graphprotocol/hypergraph/tree/main/apps/create-hypergraph-app#readme" + "homepage": "https://github.com/graphprotocol/hypergraph/tree/main/apps/create-hypergraph-app#readme", + "devDependencies": { + "@effect/cli": "^0.68.0", + "@effect/language-service": "^0.28.0", + "@effect/platform": "^0.89.0", + "@effect/platform-node": "^0.92.0", + "@effect/printer-ansi": "^0.45.0", + "@effect/vitest": "^0.25.0", + "@types/node": "^24.0.15", + "effect": "^3.17.0", + "tsdown": "^0.12.9" + } } diff --git a/apps/create-hypergraph-app/src/Cli.ts b/apps/create-hypergraph-app/src/Cli.ts new file mode 100644 index 00000000..e5517d14 --- /dev/null +++ b/apps/create-hypergraph-app/src/Cli.ts @@ -0,0 +1,48 @@ +import { Command, Options, Span } from '@effect/cli'; +import { descriptionList } from '@effect/cli/HelpDoc'; +import { Console, Effect, Option, Schema } from 'effect'; + +const AvailableFrameworkKey = Schema.Union(Schema.Literal('vite-react')); +type AvailableFrameworkKey = typeof AvailableFrameworkKey.Type; + +const Framework = Schema.Record({ + key: AvailableFrameworkKey, + value: Schema.Struct({ + directory: Schema.NonEmptyTrimmedString, + }), +}); +type Framework = typeof Framework.Type; + +const availableFrameworks = { + 'vite-react': { + directory: 'template-vite-react', + }, +} as const satisfies Framework; + +const createHypergraphApp = Command.make('create-hypergraph-app', { + args: { + template: Options.choice('template', Object.keys(availableFrameworks) as ReadonlyArray).pipe( + Options.withAlias('t'), + Options.withDescription('The template to scaffold'), + Options.optional, + Options.withDefault(Option.some('vite-react')), + Options.map((templOpt) => + Option.getOrElse(templOpt, () => 'vite-react'), + ), + ), + }, +}).pipe( + Command.withDescription(descriptionList([[]])), + Command.withHandler(({ args }) => + Effect.gen(function* () { + const template = args.template; + + return yield* Console.log('selected template', { template }); + }), + ), +); + +export const run = Command.run(createHypergraphApp, { + name: 'create-hypergraph-app', + version: '0.0.1', +}); diff --git a/apps/create-hypergraph-app/src/bin.ts b/apps/create-hypergraph-app/src/bin.ts new file mode 100644 index 00000000..50f1abb5 --- /dev/null +++ b/apps/create-hypergraph-app/src/bin.ts @@ -0,0 +1,12 @@ +#!/usr/bin/env node + +import { NodeContext, NodeFileSystem, NodeRuntime } from '@effect/platform-node'; +import * as Effect from 'effect/Effect'; + +import { run } from './Cli.js'; + +const runnable = Effect.suspend(() => run(process.argv)).pipe( + Effect.provide(NodeFileSystem.layer), + Effect.provide(NodeContext.layer), +); +runnable.pipe(NodeRuntime.runMain({ disableErrorReporting: process.env.NODE_ENV === 'prod' })); diff --git a/apps/create-hypergraph-app/tsconfig.build.json b/apps/create-hypergraph-app/tsconfig.build.json new file mode 100644 index 00000000..fc59560f --- /dev/null +++ b/apps/create-hypergraph-app/tsconfig.build.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.src.json", + "compilerOptions": { + "tsBuildInfoFile": ".tsbuildinfo/build.tsbuildinfo", + "outDir": "dist", + "stripInternal": true + } +} diff --git a/apps/create-hypergraph-app/tsconfig.json b/apps/create-hypergraph-app/tsconfig.json new file mode 100644 index 00000000..b35721c3 --- /dev/null +++ b/apps/create-hypergraph-app/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.base.json", + "include": [], + "references": [ + { "path": "./tsconfig.src.json" }, + { "path": "tsconfig.scripts.json" }, + // templates + { "path": "./template-vite-react/tsconfig.json"} + ] +} diff --git a/apps/create-hypergraph-app/tsconfig.scripts.json b/apps/create-hypergraph-app/tsconfig.scripts.json new file mode 100644 index 00000000..7b037fdc --- /dev/null +++ b/apps/create-hypergraph-app/tsconfig.scripts.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["tsdown.config.ts"], + "compilerOptions": { + "tsBuildInfoFile": ".tsbuildinfo/scripts.tsbuildinfo", + "types": [ + "node" + ], + "rootDir": ".", + "noEmit": true + } +} diff --git a/apps/create-hypergraph-app/tsconfig.src.json b/apps/create-hypergraph-app/tsconfig.src.json new file mode 100644 index 00000000..0e5649dd --- /dev/null +++ b/apps/create-hypergraph-app/tsconfig.src.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["src"], + "compilerOptions": { + "types": ["node"], + "tsBuildInfoFile": ".tsbuildinfo/src.tsbuildinfo", + "rootDir": "src", + "noEmit": true, + "composite": false, + "declaration": false, + "declarationMap": false + } +} diff --git a/apps/create-hypergraph-app/tsdown.config.ts b/apps/create-hypergraph-app/tsdown.config.ts new file mode 100644 index 00000000..c652d6f0 --- /dev/null +++ b/apps/create-hypergraph-app/tsdown.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from 'tsdown'; + +export default defineConfig(() => ({ + entry: ['src/bin.ts'], + target: 'node20', + minify: true, + tsconfig: 'tsconfig.build.json', + platform: 'node', + format: 'esm', + outDir: 'dist', + clean: true, + external: ['@parcel/watcher'], +})); diff --git a/apps/events/package.json b/apps/events/package.json index e511914b..33b5bc1a 100644 --- a/apps/events/package.json +++ b/apps/events/package.json @@ -21,7 +21,7 @@ "@xstate/store": "^3.5.1", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "effect": "^3.16.12", + "effect": "^3.17.0", "framer-motion": "^12.10.1", "graphql-request": "^7.1.2", "isomorphic-ws": "^5.0.0", @@ -40,7 +40,7 @@ "@biomejs/biome": "1.9.4", "@tailwindcss/vite": "^4.1.5", "@tanstack/router-plugin": "^1.120.2", - "@types/node": "^22.15.15", + "@types/node": "^24.0.15", "@types/react": "^19.1.3", "@types/react-dom": "^19.1.3", "@types/uuid": "^10.0.0", diff --git a/apps/server/package.json b/apps/server/package.json index 26d279f8..fe63b884 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -19,7 +19,7 @@ "@privy-io/server-auth": "^1.26.0", "body-parser": "^2.2.0", "cors": "^2.8.5", - "effect": "^3.16.12", + "effect": "^3.17.0", "express": "^5.1.0", "prisma": "^6.7.0", "siwe": "^3.0.0", @@ -29,7 +29,7 @@ "devDependencies": { "@types/cors": "^2.8.17", "@types/express": "^5.0.1", - "@types/node": "^22.15.15", + "@types/node": "^24.0.15", "@types/pg": "^8.15.0", "@types/ws": "^8.18.1", "tsup": "^8.4.0", diff --git a/apps/typesync/package.json b/apps/typesync/package.json index b92cf742..86bab805 100644 --- a/apps/typesync/package.json +++ b/apps/typesync/package.json @@ -38,20 +38,20 @@ "hypergraph": "pnpx tsx ./src/bin.ts typesync" }, "devDependencies": { - "@effect/cli": "^0.67.0", - "@effect/experimental": "^0.52.0", - "@effect/language-service": "^0.26.0", - "@effect/platform": "^0.88.0", - "@effect/platform-node": "^0.90.0", - "@effect/sql": "^0.41.0", - "@effect/sql-sqlite-node": "^0.42.0", - "@effect/vitest": "^0.24.0", + "@effect/cli": "^0.68.0", + "@effect/experimental": "^0.53.0", + "@effect/language-service": "^0.28.0", + "@effect/platform": "^0.89.0", + "@effect/platform-node": "^0.92.0", + "@effect/sql": "^0.43.0", + "@effect/sql-sqlite-node": "^0.44.0", + "@effect/vitest": "^0.25.0", "@graphql-codegen/cli": "^5.0.7", "@graphql-codegen/client-preset": "^4.8.3", "@graphql-codegen/typescript": "^4.1.6", "@graphql-codegen/typescript-operations": "^4.6.1", "@tanstack/router-plugin": "^1.127.5", - "@types/node": "^24.0.13", + "@types/node": "^24.0.15", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "^4.6.0", @@ -76,7 +76,7 @@ "@tanstack/react-router-devtools": "^1.127.3", "better-sqlite3": "^12.2.0", "date-fns": "^4.1.0", - "effect": "^3.16.13", + "effect": "^3.17.0", "graphql": "^16.11.0", "graphql-request": "^7.2.0", "jotai": "^2.12.5", diff --git a/packages/hypergraph-react/package.json b/packages/hypergraph-react/package.json index 78111416..aeca5d93 100644 --- a/packages/hypergraph-react/package.json +++ b/packages/hypergraph-react/package.json @@ -44,7 +44,7 @@ "@graphprotocol/grc-20": "^0.21.6", "@noble/hashes": "^1.8.0", "@tanstack/react-query": "^5.75.5", - "effect": "^3.16.12", + "effect": "^3.17.0", "graphql-request": "^7.1.2", "siwe": "^3.0.0", "uuid": "^11.1.0", diff --git a/packages/hypergraph/package.json b/packages/hypergraph/package.json index 7ce427f3..08cd8bf0 100644 --- a/packages/hypergraph/package.json +++ b/packages/hypergraph/package.json @@ -54,7 +54,7 @@ "@serenity-kit/noble-sodium": "^0.2.1", "@xstate/store": "^3.5.1", "bs58check": "^4.0.0", - "effect": "^3.16.12", + "effect": "^3.17.0", "permissionless": "^0.2.47", "siwe": "^3.0.0", "uuid": "^11.1.0", diff --git a/packages/typesync/package.json b/packages/typesync/package.json index 78243b51..8c5ca082 100644 --- a/packages/typesync/package.json +++ b/packages/typesync/package.json @@ -39,6 +39,6 @@ }, "dependencies": { "@graphprotocol/grc-20": "^0.21.6", - "effect": "^3.16.12" + "effect": "^3.17.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9dd4342a..0655eeba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -72,8 +72,8 @@ importers: specifier: ^2.1.1 version: 2.1.1 effect: - specifier: ^3.16.12 - version: 3.16.12 + specifier: ^3.17.0 + version: 3.17.0 framer-motion: specifier: ^12.10.1 version: 12.10.1(@emotion/is-prop-valid@1.2.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -97,17 +97,17 @@ importers: version: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) vite: specifier: ^6.3.5 - version: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + version: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) devDependencies: '@tailwindcss/vite': specifier: ^4.1.10 - version: 4.1.10(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.1.10(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@tanstack/router-plugin': specifier: ^1.120.2 - version: 1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) + version: 1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) '@types/node': - specifier: ^22.15.15 - version: 22.15.15 + specifier: ^24.0.15 + version: 24.0.15 '@types/react': specifier: ^19.1.3 version: 19.1.3 @@ -116,7 +116,7 @@ importers: version: 19.1.3(@types/react@19.1.3) '@vitejs/plugin-react': specifier: ^4.4.1 - version: 4.4.1(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.4.1(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) prettier: specifier: ^3.6.0 version: 3.6.1 @@ -128,15 +128,43 @@ importers: version: 4.1.10 unplugin-fonts: specifier: ^1.3.1 - version: 1.3.1(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 1.3.1(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) vite-plugin-node-polyfills: specifier: ^0.23.0 - version: 0.23.0(rollup@4.45.0)(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 0.23.0(rollup@4.45.0)(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) vite-plugin-svgr: specifier: ^4.3.0 - version: 4.3.0(rollup@4.45.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.3.0(rollup@4.45.0)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) apps/create-hypergraph-app: + devDependencies: + '@effect/cli': + specifier: ^0.68.0 + version: 0.68.0(@effect/platform@0.89.0(effect@3.17.0))(@effect/printer-ansi@0.45.0(@effect/typeclass@0.31.10(effect@3.17.0))(effect@3.17.0))(@effect/printer@0.45.0(@effect/typeclass@0.31.10(effect@3.17.0))(effect@3.17.0))(effect@3.17.0) + '@effect/language-service': + specifier: ^0.28.0 + version: 0.28.0 + '@effect/platform': + specifier: ^0.89.0 + version: 0.89.0(effect@3.17.0) + '@effect/platform-node': + specifier: ^0.92.0 + version: 0.92.0(@effect/cluster@0.37.2(@effect/platform@0.89.0(effect@3.17.0))(@effect/rpc@0.61.4(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/sql@0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/workflow@0.1.2(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(@effect/rpc@0.61.4(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/sql@0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(bufferutil@4.0.9)(effect@3.17.0)(utf-8-validate@5.0.10) + '@effect/printer-ansi': + specifier: ^0.45.0 + version: 0.45.0(@effect/typeclass@0.31.10(effect@3.17.0))(effect@3.17.0) + '@effect/vitest': + specifier: ^0.25.0 + version: 0.25.0(effect@3.17.0)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.15)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + '@types/node': + specifier: ^24.0.15 + version: 24.0.15 + effect: + specifier: ^3.17.0 + version: 3.17.0 + tsdown: + specifier: ^0.12.9 + version: 0.12.9(typescript@5.8.3) publishDirectory: dist apps/create-hypergraph-app/template-vite-react: @@ -146,10 +174,10 @@ importers: version: 0.21.6(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) '@graphprotocol/hypergraph': specifier: 0.0.14 - version: 0.0.14(@effect/platform@0.88.0(effect@3.17.0))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react@19.1.0)(solid-js@1.9.5)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) + version: 0.0.14(@effect/platform@0.89.0(effect@3.17.0))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react@19.1.0)(solid-js@1.9.5)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) '@graphprotocol/hypergraph-react': specifier: 0.0.14 - version: 0.0.14(@graphprotocol/hypergraph@0.0.14(@effect/platform@0.88.0(effect@3.17.0))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react@19.1.0)(solid-js@1.9.5)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) + version: 0.0.14(@graphprotocol/hypergraph@0.0.14(@effect/platform@0.89.0(effect@3.17.0))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react@19.1.0)(solid-js@1.9.5)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) '@graphprotocol/typesync': specifier: ^0.0.3 version: 0.0.3(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) @@ -284,8 +312,8 @@ importers: specifier: ^2.1.1 version: 2.1.1 effect: - specifier: ^3.16.12 - version: 3.16.12 + specifier: ^3.17.0 + version: 3.17.0 framer-motion: specifier: ^12.10.1 version: 12.10.1(@emotion/is-prop-valid@1.2.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -324,20 +352,20 @@ importers: version: 2.29.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) vite: specifier: ^6.3.5 - version: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + version: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) devDependencies: '@biomejs/biome': specifier: 1.9.4 version: 1.9.4 '@tailwindcss/vite': specifier: ^4.1.5 - version: 4.1.5(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.1.5(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@tanstack/router-plugin': specifier: ^1.120.2 - version: 1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) + version: 1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) '@types/node': - specifier: ^22.15.15 - version: 22.15.15 + specifier: ^24.0.15 + version: 24.0.15 '@types/react': specifier: ^19.1.3 version: 19.1.3 @@ -349,7 +377,7 @@ importers: version: 10.0.0 '@vitejs/plugin-react': specifier: ^4.4.1 - version: 4.4.1(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.4.1(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) globals: specifier: ^16.1.0 version: 16.1.0 @@ -421,8 +449,8 @@ importers: specifier: ^2.8.5 version: 2.8.5 effect: - specifier: ^3.16.12 - version: 3.16.12 + specifier: ^3.17.0 + version: 3.17.0 express: specifier: ^5.1.0 version: 5.1.0 @@ -446,8 +474,8 @@ importers: specifier: ^5.0.1 version: 5.0.1 '@types/node': - specifier: ^22.15.15 - version: 22.15.15 + specifier: ^24.0.15 + version: 24.0.15 '@types/pg': specifier: ^8.15.0 version: 8.15.0 @@ -483,7 +511,7 @@ importers: version: 1.1.12(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.1.11(vite@7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@tanstack/react-form': specifier: ^1.14.1 version: 1.14.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -506,8 +534,8 @@ importers: specifier: ^4.1.0 version: 4.1.0 effect: - specifier: ^3.16.13 - version: 3.16.13 + specifier: ^3.17.0 + version: 3.17.0 graphql: specifier: ^16.11.0 version: 16.11.0 @@ -534,32 +562,32 @@ importers: version: 4.1.11 devDependencies: '@effect/cli': - specifier: ^0.67.0 - version: 0.67.0(@effect/platform@0.88.0(effect@3.16.13))(@effect/printer-ansi@0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13))(@effect/printer@0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13))(effect@3.16.13) + specifier: ^0.68.0 + version: 0.68.0(@effect/platform@0.89.0(effect@3.17.0))(@effect/printer-ansi@0.45.0(@effect/typeclass@0.31.10(effect@3.17.0))(effect@3.17.0))(@effect/printer@0.45.0(@effect/typeclass@0.31.10(effect@3.17.0))(effect@3.17.0))(effect@3.17.0) '@effect/experimental': - specifier: ^0.52.0 - version: 0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) + specifier: ^0.53.0 + version: 0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0) '@effect/language-service': - specifier: ^0.26.0 - version: 0.26.0 + specifier: ^0.28.0 + version: 0.28.0 '@effect/platform': - specifier: ^0.88.0 - version: 0.88.0(effect@3.16.13) + specifier: ^0.89.0 + version: 0.89.0(effect@3.17.0) '@effect/platform-node': - specifier: ^0.90.0 - version: 0.90.0(@effect/cluster@0.37.2(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/workflow@0.1.2(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(bufferutil@4.0.9)(effect@3.16.13)(utf-8-validate@5.0.10) + specifier: ^0.92.0 + version: 0.92.0(@effect/cluster@0.37.2(@effect/platform@0.89.0(effect@3.17.0))(@effect/rpc@0.61.4(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/sql@0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/workflow@0.1.2(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(@effect/rpc@0.61.4(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/sql@0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(bufferutil@4.0.9)(effect@3.17.0)(utf-8-validate@5.0.10) '@effect/sql': - specifier: ^0.41.0 - version: 0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) + specifier: ^0.43.0 + version: 0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0) '@effect/sql-sqlite-node': - specifier: ^0.42.0 - version: 0.42.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(effect@3.16.13) + specifier: ^0.44.0 + version: 0.44.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(@effect/sql@0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(effect@3.17.0) '@effect/vitest': - specifier: ^0.24.0 - version: 0.24.0(effect@3.16.13)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + specifier: ^0.25.0 + version: 0.25.0(effect@3.17.0)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.15)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@graphql-codegen/cli': specifier: ^5.0.7 - version: 5.0.7(@babel/core@7.28.0)(@parcel/watcher@2.5.1)(@types/node@24.0.13)(bufferutil@4.0.9)(encoding@0.1.13)(enquirer@2.4.1)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + version: 5.0.7(@babel/core@7.28.0)(@parcel/watcher@2.5.1)(@types/node@24.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(enquirer@2.4.1)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@graphql-codegen/client-preset': specifier: ^4.8.3 version: 4.8.3(@babel/core@7.28.0)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0) @@ -571,10 +599,10 @@ importers: version: 4.6.1(@babel/core@7.28.0)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0) '@tanstack/router-plugin': specifier: ^1.127.5 - version: 1.127.5(@tanstack/react-router@1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2)) + version: 1.127.5(@tanstack/react-router@1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2)) '@types/node': - specifier: ^24.0.13 - version: 24.0.13 + specifier: ^24.0.15 + version: 24.0.15 '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -583,7 +611,7 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.6.0 - version: 4.6.0(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.6.0(vite@7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) glob: specifier: ^11.0.3 version: 11.0.3 @@ -598,7 +626,7 @@ importers: version: 4.20.3 vite: specifier: ^7.0.4 - version: 7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + version: 7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) publishDirectory: dist apps/typesync/dist: @@ -717,7 +745,7 @@ importers: version: 2.0.6 '@effect/experimental': specifier: ^0.51.1 - version: 0.51.1(@effect/platform@0.88.0(effect@3.16.12))(effect@3.16.12) + version: 0.51.1(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0) '@graphprotocol/grc-20': specifier: ^0.21.6 version: 0.21.6(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) @@ -746,8 +774,8 @@ importers: specifier: ^4.0.0 version: 4.0.0 effect: - specifier: ^3.16.12 - version: 3.16.12 + specifier: ^3.17.0 + version: 3.17.0 permissionless: specifier: ^0.2.47 version: 0.2.47(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(viem@2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51)) @@ -787,8 +815,8 @@ importers: specifier: ^5.75.5 version: 5.75.5(react@19.1.0) effect: - specifier: ^3.16.12 - version: 3.16.12 + specifier: ^3.17.0 + version: 3.17.0 graphql-request: specifier: ^7.1.2 version: 7.1.2(graphql@16.11.0) @@ -834,8 +862,8 @@ importers: specifier: ^0.21.6 version: 0.21.6(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) effect: - specifier: ^3.16.12 - version: 3.16.12 + specifier: ^3.17.0 + version: 3.17.0 publishDirectory: publish packages: @@ -1805,6 +1833,10 @@ packages: resolution: {integrity: sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==} engines: {node: '>=6.9.0'} + '@babel/types@7.28.1': + resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==} + engines: {node: '>=6.9.0'} + '@base-ui-components/react@1.0.0-beta.0': resolution: {integrity: sha512-lPw5/40g/TbpSG1e1g4drl10kaSY2VBOFFQ9axmGhwPGqrQmTuW42jcUq/7OPdXQAyMakfWMWLSXyk3NXbRk+Q==} engines: {node: '>=14.0.0'} @@ -2403,13 +2435,13 @@ packages: resolution: {integrity: sha512-e7zcB6TPnVzyUaHMJyLSArKa2AG3h9+4CfvKXKKWNx6hRs+p0a+u7HHTJBgo6KW2m+vqDnuIHK4X+bhmoghAFA==} engines: {node: '>=18.0'} - '@effect/cli@0.67.0': - resolution: {integrity: sha512-gBbt43yibW7Nh5TJtTP2OwqCeSa+lixAcM5PYFV2cM32oPlgdtWYyl1m8rcIZwWJBhQyjNXFtuxlYFk9A8alog==} + '@effect/cli@0.68.0': + resolution: {integrity: sha512-OlKMbGKCuF/z8Bb4P/9lQreljzbQSUjpnkJ9U6Sb7cSRVuFoTglCEGUKb73yC8CnxZoV/rqk0LVcb/tJsXPBsQ==} peerDependencies: - '@effect/platform': ^0.88.0 - '@effect/printer': ^0.44.13 - '@effect/printer-ansi': ^0.44.13 - effect: ^3.16.13 + '@effect/platform': ^0.89.0 + '@effect/printer': ^0.45.0 + '@effect/printer-ansi': ^0.45.0 + effect: ^3.17.0 '@effect/cluster@0.37.2': resolution: {integrity: sha512-9U4P/Fk8C6fN/s0e4nvA++prZmELtV7k5RwG2AOw4NgqBZqptiJMutgaT10ltwgdvddRF/77PVjgORyzNTBmbg==} @@ -2433,11 +2465,11 @@ packages: lmdb: optional: true - '@effect/experimental@0.52.0': - resolution: {integrity: sha512-SqTmGQMNJTq8IZ0XKu3hDOD09YRiZLDbHfODu4r1yhhAfh93vn2x9waELQtiAbXcsjG/eMpbajcCc0KvFgFFIA==} + '@effect/experimental@0.53.0': + resolution: {integrity: sha512-EUYWW6g8CsobKDnOyX6a+NIPFOVVU8X1/tGddfagmuB7ukhT0QAppHqnqTqWgvZ6icbN8G5Z1Ui2xB4P80GrAA==} peerDependencies: - '@effect/platform': ^0.88.0 - effect: ^3.16.13 + '@effect/platform': ^0.89.0 + effect: ^3.17.0 ioredis: ^5 lmdb: ^3 peerDependenciesMeta: @@ -2446,44 +2478,44 @@ packages: lmdb: optional: true - '@effect/language-service@0.26.0': - resolution: {integrity: sha512-flHqsDIotdAq3whQb0fjpiYIFd6OR078TDPbxgBY5sDO+7ZNgGZ7kKH51bEIKNz+dFhw0NJjowT0qypyhPpUDw==} + '@effect/language-service@0.28.0': + resolution: {integrity: sha512-Vz3Ax/6sQbzEJDR/wqZkXB0XDfxZQSydWUD/7CRl6HmGCrw0wgIMd0xqKNF7LgE9uX6EgwQASHTOr0BSFCmYZA==} hasBin: true - '@effect/platform-node-shared@0.43.0': - resolution: {integrity: sha512-kYlGo5eNDsfOkirBC4B4a83OtESc9x4r+JWCHNtnRswBnKKj8GgC90vL1ksNbfTnESzRCQ8/bfjPeyxHAffDAg==} + '@effect/platform-node-shared@0.45.0': + resolution: {integrity: sha512-6pChbcUvZBXZY0fUJQ+WJaDhEk0Y0713YLpOQmrmIo92Uth+5ipbfoNHky+ickOsfi6eUOi7UPMaXkUzGHQwIQ==} peerDependencies: - '@effect/cluster': ^0.42.0 - '@effect/platform': ^0.88.0 - '@effect/rpc': ^0.65.0 - '@effect/sql': ^0.41.0 - effect: ^3.16.13 + '@effect/cluster': ^0.44.0 + '@effect/platform': ^0.89.0 + '@effect/rpc': ^0.66.0 + '@effect/sql': ^0.43.0 + effect: ^3.17.0 - '@effect/platform-node@0.90.0': - resolution: {integrity: sha512-U6WBUghdXYELtg5h+p5nzRV2ih0oPOoxnVrfvmR4UHQaOtvYbwu/Lexho59HBYdIqnYzHCi5KH12z8b6E0kv+Q==} + '@effect/platform-node@0.92.0': + resolution: {integrity: sha512-4ZIRY+1PhIY/bux/Khbr0nyTfWjMTYa8a1qHuaHBC2bBa5Ed5LjbP7T+TMrIB5cmp8s6L+pGkdvJTaxjGuoGvQ==} peerDependencies: - '@effect/cluster': ^0.42.0 - '@effect/platform': ^0.88.0 - '@effect/rpc': ^0.65.0 - '@effect/sql': ^0.41.0 - effect: ^3.16.13 + '@effect/cluster': ^0.44.0 + '@effect/platform': ^0.89.0 + '@effect/rpc': ^0.66.0 + '@effect/sql': ^0.43.0 + effect: ^3.17.0 - '@effect/platform@0.88.0': - resolution: {integrity: sha512-ObTXedf/DshoKtM2ygEcoP7Kj9rop0KeDvLriQE2HD4Fgo1pxjgbOivkCbSq03MErpNE2/lMYTY6Si6bo4qMqQ==} + '@effect/platform@0.89.0': + resolution: {integrity: sha512-9nTaD1h/X4M4qdl/4E1atwoe+p4VoH0SJiYd2mJrDJC18alwqlI/xaKNGRnJVPbIrhbKC62YJ9h2mqfkE4t2YA==} peerDependencies: - effect: ^3.16.13 + effect: ^3.17.0 - '@effect/printer-ansi@0.40.10': - resolution: {integrity: sha512-XMmAcHxojINGZKnNGJSrG1fMvMYLOlHGVAvvD/5pbp2Yi5Rh8PGDJjtaPmrj5PmO+WssovevLHGonrbKa8xybA==} + '@effect/printer-ansi@0.45.0': + resolution: {integrity: sha512-3MS02RP83eZaBJX98PRI4f5kyoEVyNfg2Qu/XUWQMFRp4wvmgNwEy18RjO9G6s7uB8NaYXTpQVDmtUoKARx7fA==} peerDependencies: - '@effect/typeclass': ^0.31.10 - effect: ^3.12.10 + '@effect/typeclass': ^0.36.0 + effect: ^3.17.0 - '@effect/printer@0.40.10': - resolution: {integrity: sha512-vu3ZndS4XVYjq6ctZXd/QXMz9LgqRsJJAX3bCiP+9DBVna2b4z/nVJsPfYwVA/1PmSJUiSpOXv/MDUCHwYxN7w==} + '@effect/printer@0.45.0': + resolution: {integrity: sha512-UpFBH2JKAgakSWpue6yKkIAXMq+3md/CPb9s/NGl28vDu1P33cvDeeDL/1EOzFk8WqhIs3oKwPMDnd3jUhjzdg==} peerDependencies: - '@effect/typeclass': ^0.31.10 - effect: ^3.12.10 + '@effect/typeclass': ^0.36.0 + effect: ^3.17.0 '@effect/rpc@0.61.4': resolution: {integrity: sha512-i1U/RuIRGqLJ2xxhgAPEsMwqfLW7mqtQYcj8Za2ouJejpqAN+6s3OIYxlsR4YZ6EDYfCZlD2eJ/wAD54xtAXDQ==} @@ -2491,30 +2523,30 @@ packages: '@effect/platform': ^0.84.4 effect: ^3.16.3 - '@effect/sql-sqlite-node@0.42.0': - resolution: {integrity: sha512-DZ+08CuE8SPrTfmtALHR7rjJSASOCd5yGZBVyDrj8De0g4R1YoyTHryii2VmopOUTPZu0g39bvz40OFJkqnajw==} + '@effect/sql-sqlite-node@0.44.0': + resolution: {integrity: sha512-RBGeOAiKUAGzscrANeJBOYz26z1rhjvpGTxJhsprYgW14uwGjEkOw2bgNbJHmn47GHrd8UaXSn8zy57QX7nOqQ==} peerDependencies: - '@effect/experimental': ^0.52.0 - '@effect/platform': ^0.88.0 - '@effect/sql': ^0.41.0 - effect: ^3.16.13 + '@effect/experimental': ^0.53.0 + '@effect/platform': ^0.89.0 + '@effect/sql': ^0.43.0 + effect: ^3.17.0 - '@effect/sql@0.41.0': - resolution: {integrity: sha512-P3RuRm/PHEYInkFE0VUijWCWGyCviq2rnLLcTpdIRCy9quwGTh53kOnh9Go1pL+owGkq3WrP1T1hiAr5LzeNfg==} + '@effect/sql@0.43.0': + resolution: {integrity: sha512-Q894sLjh7nV/DnbKq2i1HXVA4RQs05OEaN/cCSpLj+37c3ToKR5SmHNMA2Z1HGxauZDi5kenKG1dHKFxRApN5Q==} peerDependencies: - '@effect/experimental': ^0.52.0 - '@effect/platform': ^0.88.0 - effect: ^3.16.13 + '@effect/experimental': ^0.53.0 + '@effect/platform': ^0.89.0 + effect: ^3.17.0 '@effect/typeclass@0.31.10': resolution: {integrity: sha512-mDuQ44IfyDUSnltcFS+cEQGWhMg37IwNiPmATLw/NYBYHDBkqUc77vzlCpSlBiKDzExSI8vjMVWqGjL22MLHGQ==} peerDependencies: effect: ^3.12.10 - '@effect/vitest@0.24.0': - resolution: {integrity: sha512-t3o9OH+UskMIsZSoYv1cpG7PA/wBLbO+5Bzhlhrjp+5TxO1gaAE7/Up6SVUVwckXRprcthzxA1LPITtDHAEOCw==} + '@effect/vitest@0.25.0': + resolution: {integrity: sha512-FpOKYdhe3LaOoYn0cm5W9cD9bk2qwr2A+ujMhiDVxN7MMgndFsOd8uxcWjZRX6tWjzU2aKvZXFKGEp93GAmXug==} peerDependencies: - effect: ^3.16.13 + effect: ^3.17.0 vitest: ^3.2.0 '@effect/workflow@0.1.2': @@ -2522,9 +2554,18 @@ packages: peerDependencies: effect: ^3.16.3 + '@emnapi/core@1.4.5': + resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} + '@emnapi/runtime@1.4.3': resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + '@emnapi/runtime@1.4.5': + resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} + + '@emnapi/wasi-threads@1.0.4': + resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} + '@emotion/babel-plugin@11.13.5': resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} @@ -3494,6 +3535,9 @@ packages: cpu: [x64] os: [win32] + '@napi-rs/wasm-runtime@1.0.1': + resolution: {integrity: sha512-KVlQ/jgywZpixGCKMNwxStmmbYEMyokZpCf2YuIChhfJA2uqfAKNEM8INz7zzTo55iEXfBhIIs3VqYyqzDLj8g==} + '@next/env@15.3.2': resolution: {integrity: sha512-xURk++7P7qR9JG1jJtLzPzf0qEvqCN0A/T3DXf8IPMKo9/6FfjxtEffRJIIew/bIL4T3C2jLLqBor8B/zVlx6g==} @@ -3681,6 +3725,13 @@ packages: resolution: {integrity: sha512-aKcOkyrorBGlajjRdVoJWHTxfxO1vCNHLJVlSDaRHDIdjU+pX8IYQPvPDkYiujKLbRnWU+1TBwEt0QRgSm4SGA==} engines: {node: '>=14'} + '@oxc-project/runtime@0.77.2': + resolution: {integrity: sha512-oqzN82vVbqK6BnUuYDlBMlMr8mEeysMn/P8HbiB3j5rD04JvIfONCfh6SbtJTxhp1C4cjLi1evrtVTIptrln7Q==} + engines: {node: '>=6.9.0'} + + '@oxc-project/types@0.77.2': + resolution: {integrity: sha512-+ZFWJF8ZBTOIO5PiNohNIw7JBzJCybScfrhLh65tcHCAtqaQkVDonjRD1HmMV/RF3rtt3r88hzSyTqvXs4j7vw==} + '@parcel/watcher-android-arm64@2.5.1': resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} engines: {node: '>= 10.0.0'} @@ -3879,6 +3930,10 @@ packages: viem: optional: true + '@quansync/fs@0.1.3': + resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==} + engines: {node: '>=20.0.0'} + '@radix-ui/primitive@1.1.2': resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==} @@ -4315,12 +4370,85 @@ packages: peerDependencies: viem: ^2.0.0 + '@rolldown/binding-android-arm64@1.0.0-beta.28': + resolution: {integrity: sha512-hLb7k11KBXtO8xc7DO1OWriXWM/2FKv/R510NChqpzoI6au2aJbGUQTKJw4D8Mj7oHfY2Nwzy+sJBgWx/P8IKw==} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-beta.28': + resolution: {integrity: sha512-yRhjS3dcjfAasnJ2pTyCVm5rtfOmkGIglrFh+n9J7Zi4owJFsVVpbY7dOE3T1Op3mQ94apGN+Twtv6CIk6GFIQ==} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-beta.28': + resolution: {integrity: sha512-eOX0pjz++yVdqcDqnoZeVXUHxak2AcEgQBlEKJYaeJj+O5V3r3wSnlDVSkgD6YEAHo2IlIa89+qFHv529esY6w==} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-beta.28': + resolution: {integrity: sha512-WV1QYVMkkp/568iaEBoZhD1axFLhSO+ybCJlbmHkTFMub4wb5bmKtfuaBgjUVDDSB6JfZ6UL3Z0Q9VVHENOgsg==} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.28': + resolution: {integrity: sha512-ug/Wh9Tz4XB/CsYvaI2r5uC3vE3zrP5iDIsD+uEgFPV71BOQOfXFgZbC1zv+J1adkzWACr578aGQqW9jRj0gVA==} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.28': + resolution: {integrity: sha512-h3hzQuP+5l47wxn9+A39n1Q3i4mAvbNFJCZ8EZLrkqfsecfeZ5btIbDJTVAIQTy+uPr7uluAHIf11Jw+YkWjOQ==} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.28': + resolution: {integrity: sha512-oW5LydGtfdT8TI5HTybxi1DdMCXCmVE1ak4VrSmVKsbBZyE0bDgL1UvTS1OOvuq4PM24zQHIuSNOpgLXgVj4vQ==} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.28': + resolution: {integrity: sha512-yeAAPMgssEkTCouUSYLrSWm+EXYBFI+ZTe8BVQkY5le51OCbqFNibtYkKZNHZBdhNRjWcSKSIuXN4MAXBz1j+g==} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.28': + resolution: {integrity: sha512-xWsylmva9L4ZFc28A9VGlF9fnrFpVxVC+kKqrBoqz2l/p5b4zRoFNtnSecivnxuPeR5Ga6W6lnpwGeWDvqBZ1Q==} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.28': + resolution: {integrity: sha512-IdtRNm70EH7/1mjqXJc4pa2MoAxo/xl9hN8VySG9BQuYfhQz+JDC+FZBc+krlVUO3cTJz/o4xI/x4kA+rLKTwA==} + cpu: [x64] + os: [linux] + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.28': + resolution: {integrity: sha512-jS2G0+GtUCVcglCefScxgXeLJal0UAvVwvpy3reoC07K16k8WM/lXoYsZdpw34d5ONg0XcZpcokzA9R5K2o0lQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.28': + resolution: {integrity: sha512-K6SO4e48aqpE/E6iEaXYG1kVX3owLierZUngP44f7s6WcnNUXsX8aborZZkKDKjgfk654M/EjSI7riPQXfynIA==} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.28': + resolution: {integrity: sha512-IIAecHvlUY/oxADfA6sZFfmRx0ajY+U1rAPFT77COp11kf7irUJeD9GskFzCm+7Wm+q8Vogyh0KWqqd6f5Azgg==} + cpu: [ia32] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.28': + resolution: {integrity: sha512-eMGdPBhNkylib+7eaeC69axEjg5Y1Vie5LoKDBVaZ71jYTmtrUdna9PTUblkCIChNTQKlgxpi/eCaYmhId0aYA==} + cpu: [x64] + os: [win32] + '@rolldown/pluginutils@1.0.0-beta.19': resolution: {integrity: sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==} '@rolldown/pluginutils@1.0.0-beta.27': resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} + '@rolldown/pluginutils@1.0.0-beta.28': + resolution: {integrity: sha512-fe3/1HZ3qJmXvkGv1kacKq2b+x9gbcyF1hnmLBVrRFEQWoOcRapQjXf8+hgyxI0EJAbnKEtrp5yhohQCFCjycw==} + '@rollup/plugin-inject@5.0.5': resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==} engines: {node: '>=14.0.0'} @@ -5434,6 +5562,9 @@ packages: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} + '@tybys/wasm-util@0.10.0': + resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} + '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -5566,9 +5697,6 @@ packages: '@types/node@22.7.5': resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} - '@types/node@24.0.13': - resolution: {integrity: sha512-Qm9OYVOFHFYg3wJoTSrz80hoec5Lia/dPp84do3X7dZvLikQvM1YpmvTBEdIr/e+U8HTkFjLHLnl78K/qjf+jQ==} - '@types/node@24.0.15': resolution: {integrity: sha512-oaeTSbCef7U/z7rDeJA138xpG3NuKc64/rZ2qmUFkFJmnMsAPaluIifqyWd8hSSMxyP9oie3dLAqYPblag9KgA==} @@ -6153,6 +6281,10 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + ast-kit@2.1.1: + resolution: {integrity: sha512-mfh6a7gKXE8pDlxTvqIc/syH/P3RkzbOF6LeHdcKztLEzYe6IMsRCL7N8vI7hqTGWNxpkCuuRTpT21xNWqhRtQ==} + engines: {node: '>=20.18.0'} + ast-types@0.16.1: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} @@ -6285,6 +6417,9 @@ packages: bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + birpc@2.5.0: + resolution: {integrity: sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==} + bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -7292,6 +7427,15 @@ packages: resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} engines: {node: '>=4'} + dts-resolver@2.1.1: + resolution: {integrity: sha512-3BiGFhB6mj5Kv+W2vdJseQUYW+SKVzAFJL6YNP6ursbrwy1fXHRotfHi3xLNxe4wZl/K8qbAFeCDjZLjzqxxRw==} + engines: {node: '>=20.18.0'} + peerDependencies: + oxc-resolver: '>=11.0.0' + peerDependenciesMeta: + oxc-resolver: + optional: true + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -7311,9 +7455,6 @@ packages: effect@3.16.12: resolution: {integrity: sha512-N39iBk0K71F9nb442TLbTkjl24FLUzuvx2i1I2RsEAQsdAdUTuUoW0vlfUXgkMTUOnYqKnWcFfqw4hK4Pw27hg==} - effect@3.16.13: - resolution: {integrity: sha512-xJDgOhD7+3qIY1d8PGfkaPZMfmdJuSp2XAQgc9dVF8pSl1FJL6WK4ZUpMh177R+GH8XgPloT8dlZsEYUYDo1Ag==} - effect@3.17.0: resolution: {integrity: sha512-szMlUsbPhP9lsrU+sDPXL9pQT2ew8PhcZvPm0p5dzYFbc+Jn/lH2i5thtmPQdm6Ut1rS4fS67SbuG7Qm0E0oZA==} @@ -7345,6 +7486,10 @@ packages: emoticon@4.1.0: resolution: {integrity: sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==} + empathic@2.0.0: + resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} + engines: {node: '>=14'} + encode-utf8@1.0.3: resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} @@ -7928,6 +8073,9 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} + get-tsconfig@4.10.1: + resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + get-tsconfig@4.8.1: resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} @@ -8162,6 +8310,9 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + hpack.js@2.1.6: resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} @@ -9485,8 +9636,8 @@ packages: multiformats@9.9.0: resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} - multipasta@0.2.5: - resolution: {integrity: sha512-c8eMDb1WwZcE02WVjHoOmUVk7fnKU/RmUcosHACglrWAuPQsEJv+E8430sXj6jNc1jHw0zrS16aCjQh4BcEb4A==} + multipasta@0.2.7: + resolution: {integrity: sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA==} mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} @@ -10664,6 +10815,9 @@ packages: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} + quansync@0.2.10: + resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + query-registry@3.0.1: resolution: {integrity: sha512-M9RxRITi2mHMVPU5zysNjctUT8bAPx6ltEXo/ir9+qmiM47Y7f0Ir3+OxUO5OjYAWdicBQRew7RtHtqUXydqlg==} engines: {node: '>=20'} @@ -11040,6 +11194,26 @@ packages: ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + rolldown-plugin-dts@0.13.14: + resolution: {integrity: sha512-wjNhHZz9dlN6PTIXyizB6u/mAg1wEFMW9yw7imEVe3CxHSRnNHVyycIX0yDEOVJfDNISLPbkCIPEpFpizy5+PQ==} + engines: {node: '>=20.18.0'} + peerDependencies: + '@typescript/native-preview': '>=7.0.0-dev.20250601.1' + rolldown: ^1.0.0-beta.9 + typescript: ^5.0.0 + vue-tsc: ^2.2.0 || ^3.0.0 + peerDependenciesMeta: + '@typescript/native-preview': + optional: true + typescript: + optional: true + vue-tsc: + optional: true + + rolldown@1.0.0-beta.28: + resolution: {integrity: sha512-QOANlVluwwrLP5snQqKfC2lv/KJphMkjh4V0gpw0K40GdKmhd8eShIGOJNAC51idk5cn3xI08SZTRWj0R2XlDw==} + hasBin: true + rollup@4.39.0: resolution: {integrity: sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -11161,6 +11335,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + send@0.19.0: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} @@ -11721,6 +11900,9 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyexec@1.0.1: + resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + tinyglobby@0.2.13: resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} engines: {node: '>=12.0.0'} @@ -11813,6 +11995,28 @@ packages: ts-log@2.2.7: resolution: {integrity: sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg==} + tsdown@0.12.9: + resolution: {integrity: sha512-MfrXm9PIlT3saovtWKf/gCJJ/NQCdE0SiREkdNC+9Qy6UHhdeDPxnkFaBD7xttVUmgp0yUHtGirpoLB+OVLuLA==} + engines: {node: '>=18.0.0'} + hasBin: true + peerDependencies: + '@arethetypeswrong/core': ^0.18.1 + publint: ^0.3.0 + typescript: ^5.0.0 + unplugin-lightningcss: ^0.4.0 + unplugin-unused: ^0.5.0 + peerDependenciesMeta: + '@arethetypeswrong/core': + optional: true + publint: + optional: true + typescript: + optional: true + unplugin-lightningcss: + optional: true + unplugin-unused: + optional: true + tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -11948,6 +12152,9 @@ packages: resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} engines: {node: '>=0.10.0'} + unconfig@7.3.2: + resolution: {integrity: sha512-nqG5NNL2wFVGZ0NA/aCFw0oJ2pxSf1lwg4Z5ill8wd7K4KX/rQbHlwbh+bjctXL5Ly1xtzHenHGOK0b+lG6JVg==} + uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} @@ -13125,7 +13332,7 @@ snapshots: '@babel/helper-member-expression-to-functions@7.25.9': dependencies: '@babel/traverse': 7.27.7 - '@babel/types': 7.27.7 + '@babel/types': 7.28.0 transitivePeerDependencies: - supports-color @@ -13161,7 +13368,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.25.9': dependencies: - '@babel/types': 7.27.7 + '@babel/types': 7.28.0 '@babel/helper-optimise-call-expression@7.27.1': dependencies: @@ -14064,6 +14271,11 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@babel/types@7.28.1': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@base-ui-components/react@1.0.0-beta.0(@types/react@19.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@babel/runtime': 7.27.1 @@ -15322,66 +15534,60 @@ snapshots: - uglify-js - webpack-cli - '@effect/cli@0.67.0(@effect/platform@0.88.0(effect@3.16.13))(@effect/printer-ansi@0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13))(@effect/printer@0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13))(effect@3.16.13)': + '@effect/cli@0.68.0(@effect/platform@0.89.0(effect@3.17.0))(@effect/printer-ansi@0.45.0(@effect/typeclass@0.31.10(effect@3.17.0))(effect@3.17.0))(@effect/printer@0.45.0(@effect/typeclass@0.31.10(effect@3.17.0))(effect@3.17.0))(effect@3.17.0)': dependencies: - '@effect/platform': 0.88.0(effect@3.16.13) - '@effect/printer': 0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13) - '@effect/printer-ansi': 0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13) - effect: 3.16.13 + '@effect/platform': 0.89.0(effect@3.17.0) + '@effect/printer': 0.45.0(@effect/typeclass@0.31.10(effect@3.17.0))(effect@3.17.0) + '@effect/printer-ansi': 0.45.0(@effect/typeclass@0.31.10(effect@3.17.0))(effect@3.17.0) + effect: 3.17.0 ini: 4.1.3 toml: 3.0.0 yaml: 2.7.0 - '@effect/cluster@0.37.2(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/workflow@0.1.2(effect@3.16.13))(effect@3.16.13)': + '@effect/cluster@0.37.2(@effect/platform@0.89.0(effect@3.17.0))(@effect/rpc@0.61.4(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/sql@0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/workflow@0.1.2(effect@3.17.0))(effect@3.17.0)': dependencies: - '@effect/platform': 0.88.0(effect@3.16.13) - '@effect/rpc': 0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) - '@effect/sql': 0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) - '@effect/workflow': 0.1.2(effect@3.16.13) - effect: 3.16.13 - - '@effect/experimental@0.51.1(@effect/platform@0.88.0(effect@3.16.12))(effect@3.16.12)': - dependencies: - '@effect/platform': 0.88.0(effect@3.16.12) - effect: 3.16.12 - uuid: 11.1.0 + '@effect/platform': 0.89.0(effect@3.17.0) + '@effect/rpc': 0.61.4(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0) + '@effect/sql': 0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0) + '@effect/workflow': 0.1.2(effect@3.17.0) + effect: 3.17.0 - '@effect/experimental@0.51.1(@effect/platform@0.88.0(effect@3.17.0))(effect@3.17.0)': + '@effect/experimental@0.51.1(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0)': dependencies: - '@effect/platform': 0.88.0(effect@3.17.0) + '@effect/platform': 0.89.0(effect@3.17.0) effect: 3.17.0 uuid: 11.1.0 - '@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13)': + '@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0)': dependencies: - '@effect/platform': 0.88.0(effect@3.16.13) - effect: 3.16.13 + '@effect/platform': 0.89.0(effect@3.17.0) + effect: 3.17.0 uuid: 11.1.0 - '@effect/language-service@0.26.0': {} + '@effect/language-service@0.28.0': {} - '@effect/platform-node-shared@0.43.0(@effect/cluster@0.37.2(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/workflow@0.1.2(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(bufferutil@4.0.9)(effect@3.16.13)(utf-8-validate@5.0.10)': + '@effect/platform-node-shared@0.45.0(@effect/cluster@0.37.2(@effect/platform@0.89.0(effect@3.17.0))(@effect/rpc@0.61.4(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/sql@0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/workflow@0.1.2(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(@effect/rpc@0.61.4(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/sql@0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(bufferutil@4.0.9)(effect@3.17.0)(utf-8-validate@5.0.10)': dependencies: - '@effect/cluster': 0.37.2(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/workflow@0.1.2(effect@3.16.13))(effect@3.16.13) - '@effect/platform': 0.88.0(effect@3.16.13) - '@effect/rpc': 0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) - '@effect/sql': 0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) + '@effect/cluster': 0.37.2(@effect/platform@0.89.0(effect@3.17.0))(@effect/rpc@0.61.4(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/sql@0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/workflow@0.1.2(effect@3.17.0))(effect@3.17.0) + '@effect/platform': 0.89.0(effect@3.17.0) + '@effect/rpc': 0.61.4(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0) + '@effect/sql': 0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0) '@parcel/watcher': 2.5.1 - effect: 3.16.13 - multipasta: 0.2.5 + effect: 3.17.0 + multipasta: 0.2.7 ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate - '@effect/platform-node@0.90.0(@effect/cluster@0.37.2(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/workflow@0.1.2(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(bufferutil@4.0.9)(effect@3.16.13)(utf-8-validate@5.0.10)': + '@effect/platform-node@0.92.0(@effect/cluster@0.37.2(@effect/platform@0.89.0(effect@3.17.0))(@effect/rpc@0.61.4(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/sql@0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/workflow@0.1.2(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(@effect/rpc@0.61.4(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/sql@0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(bufferutil@4.0.9)(effect@3.17.0)(utf-8-validate@5.0.10)': dependencies: - '@effect/cluster': 0.37.2(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/workflow@0.1.2(effect@3.16.13))(effect@3.16.13) - '@effect/platform': 0.88.0(effect@3.16.13) - '@effect/platform-node-shared': 0.43.0(@effect/cluster@0.37.2(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/workflow@0.1.2(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(bufferutil@4.0.9)(effect@3.16.13)(utf-8-validate@5.0.10) - '@effect/rpc': 0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) - '@effect/sql': 0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) - effect: 3.16.13 + '@effect/cluster': 0.37.2(@effect/platform@0.89.0(effect@3.17.0))(@effect/rpc@0.61.4(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/sql@0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/workflow@0.1.2(effect@3.17.0))(effect@3.17.0) + '@effect/platform': 0.89.0(effect@3.17.0) + '@effect/platform-node-shared': 0.45.0(@effect/cluster@0.37.2(@effect/platform@0.89.0(effect@3.17.0))(@effect/rpc@0.61.4(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/sql@0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/workflow@0.1.2(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(@effect/rpc@0.61.4(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/sql@0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(bufferutil@4.0.9)(effect@3.17.0)(utf-8-validate@5.0.10) + '@effect/rpc': 0.61.4(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0) + '@effect/sql': 0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0) + effect: 3.17.0 mime: 3.0.0 undici: 7.10.0 ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -15389,78 +15595,81 @@ snapshots: - bufferutil - utf-8-validate - '@effect/platform@0.88.0(effect@3.16.12)': - dependencies: - effect: 3.16.12 - find-my-way-ts: 0.1.6 - msgpackr: 1.11.4 - multipasta: 0.2.5 - - '@effect/platform@0.88.0(effect@3.16.13)': - dependencies: - effect: 3.16.13 - find-my-way-ts: 0.1.6 - msgpackr: 1.11.4 - multipasta: 0.2.5 - - '@effect/platform@0.88.0(effect@3.17.0)': + '@effect/platform@0.89.0(effect@3.17.0)': dependencies: + '@opentelemetry/semantic-conventions': 1.34.0 effect: 3.17.0 find-my-way-ts: 0.1.6 msgpackr: 1.11.4 - multipasta: 0.2.5 + multipasta: 0.2.7 - '@effect/printer-ansi@0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13)': + '@effect/printer-ansi@0.45.0(@effect/typeclass@0.31.10(effect@3.17.0))(effect@3.17.0)': dependencies: - '@effect/printer': 0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13) - '@effect/typeclass': 0.31.10(effect@3.16.13) - effect: 3.16.13 + '@effect/printer': 0.45.0(@effect/typeclass@0.31.10(effect@3.17.0))(effect@3.17.0) + '@effect/typeclass': 0.31.10(effect@3.17.0) + effect: 3.17.0 - '@effect/printer@0.40.10(@effect/typeclass@0.31.10(effect@3.16.13))(effect@3.16.13)': + '@effect/printer@0.45.0(@effect/typeclass@0.31.10(effect@3.17.0))(effect@3.17.0)': dependencies: - '@effect/typeclass': 0.31.10(effect@3.16.13) - effect: 3.16.13 + '@effect/typeclass': 0.31.10(effect@3.17.0) + effect: 3.17.0 - '@effect/rpc@0.61.4(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13)': + '@effect/rpc@0.61.4(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0)': dependencies: - '@effect/platform': 0.88.0(effect@3.16.13) - effect: 3.16.13 + '@effect/platform': 0.89.0(effect@3.17.0) + effect: 3.17.0 - '@effect/sql-sqlite-node@0.42.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(effect@3.16.13)': + '@effect/sql-sqlite-node@0.44.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(@effect/sql@0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(effect@3.17.0)': dependencies: - '@effect/experimental': 0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) - '@effect/platform': 0.88.0(effect@3.16.13) - '@effect/sql': 0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) + '@effect/experimental': 0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0) + '@effect/platform': 0.89.0(effect@3.17.0) + '@effect/sql': 0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0) '@opentelemetry/semantic-conventions': 1.34.0 better-sqlite3: 11.10.0 - effect: 3.16.13 + effect: 3.17.0 - '@effect/sql@0.41.0(@effect/experimental@0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13))(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13)': + '@effect/sql@0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0)': dependencies: - '@effect/experimental': 0.52.0(@effect/platform@0.88.0(effect@3.16.13))(effect@3.16.13) - '@effect/platform': 0.88.0(effect@3.16.13) + '@effect/experimental': 0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0) + '@effect/platform': 0.89.0(effect@3.17.0) '@opentelemetry/semantic-conventions': 1.34.0 - effect: 3.16.13 + effect: 3.17.0 uuid: 11.1.0 - '@effect/typeclass@0.31.10(effect@3.16.13)': + '@effect/typeclass@0.31.10(effect@3.17.0)': dependencies: - effect: 3.16.13 + effect: 3.17.0 + + '@effect/vitest@0.25.0(effect@3.17.0)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.15)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + dependencies: + effect: 3.17.0 + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.15)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) - '@effect/vitest@0.24.0(effect@3.16.13)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@effect/workflow@0.1.2(effect@3.17.0)': dependencies: - effect: 3.16.13 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + effect: 3.17.0 - '@effect/workflow@0.1.2(effect@3.16.13)': + '@emnapi/core@1.4.5': dependencies: - effect: 3.16.13 + '@emnapi/wasi-threads': 1.0.4 + tslib: 2.8.1 + optional: true '@emnapi/runtime@1.4.3': dependencies: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.4.5': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.0.4': + dependencies: + tslib: 2.8.1 + optional: true + '@emotion/babel-plugin@11.13.5': dependencies: '@babel/helper-module-imports': 7.27.1 @@ -15996,13 +16205,13 @@ snapshots: - utf-8-validate - zod - '@graphprotocol/hypergraph-react@0.0.14(@graphprotocol/hypergraph@0.0.14(@effect/platform@0.88.0(effect@3.17.0))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react@19.1.0)(solid-js@1.9.5)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51)': + '@graphprotocol/hypergraph-react@0.0.14(@graphprotocol/hypergraph@0.0.14(@effect/platform@0.89.0(effect@3.17.0))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react@19.1.0)(solid-js@1.9.5)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51)': dependencies: '@automerge/automerge': 2.2.9 '@automerge/automerge-repo': 2.0.6 '@automerge/automerge-repo-react-hooks': 2.0.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@graphprotocol/grc-20': 0.21.6(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) - '@graphprotocol/hypergraph': 0.0.14(@effect/platform@0.88.0(effect@3.17.0))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react@19.1.0)(solid-js@1.9.5)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) + '@graphprotocol/hypergraph': 0.0.14(@effect/platform@0.89.0(effect@3.17.0))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react@19.1.0)(solid-js@1.9.5)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) '@noble/hashes': 1.8.0 '@tanstack/react-query': 5.83.0(react@19.1.0) effect: 3.17.0 @@ -16022,11 +16231,11 @@ snapshots: - utf-8-validate - zod - '@graphprotocol/hypergraph@0.0.14(@effect/platform@0.88.0(effect@3.17.0))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react@19.1.0)(solid-js@1.9.5)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51)': + '@graphprotocol/hypergraph@0.0.14(@effect/platform@0.89.0(effect@3.17.0))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react@19.1.0)(solid-js@1.9.5)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51)': dependencies: '@automerge/automerge': 2.2.9 '@automerge/automerge-repo': 2.0.6 - '@effect/experimental': 0.51.1(@effect/platform@0.88.0(effect@3.17.0))(effect@3.17.0) + '@effect/experimental': 0.51.1(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0) '@graphprotocol/grc-20': 0.21.6(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) '@noble/ciphers': 1.3.0 '@noble/curves': 1.9.1 @@ -16074,7 +16283,7 @@ snapshots: graphql: 16.11.0 tslib: 2.6.2 - '@graphql-codegen/cli@5.0.7(@babel/core@7.28.0)(@parcel/watcher@2.5.1)(@types/node@24.0.13)(bufferutil@4.0.9)(encoding@0.1.13)(enquirer@2.4.1)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@graphql-codegen/cli@5.0.7(@babel/core@7.28.0)(@parcel/watcher@2.5.1)(@types/node@24.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(enquirer@2.4.1)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@babel/generator': 7.27.1 '@babel/template': 7.27.1 @@ -16085,12 +16294,12 @@ snapshots: '@graphql-tools/apollo-engine-loader': 8.0.13(graphql@16.11.0) '@graphql-tools/code-file-loader': 8.1.13(graphql@16.11.0) '@graphql-tools/git-loader': 8.0.17(graphql@16.11.0) - '@graphql-tools/github-loader': 8.0.13(@types/node@24.0.13)(graphql@16.11.0) + '@graphql-tools/github-loader': 8.0.13(@types/node@24.0.15)(graphql@16.11.0) '@graphql-tools/graphql-file-loader': 8.0.12(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.11(graphql@16.11.0) '@graphql-tools/load': 8.1.0(graphql@16.11.0) - '@graphql-tools/prisma-loader': 8.0.17(@types/node@24.0.13)(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(utf-8-validate@5.0.10) - '@graphql-tools/url-loader': 8.0.24(@types/node@24.0.13)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) + '@graphql-tools/prisma-loader': 8.0.17(@types/node@24.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.24(@types/node@24.0.15)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) '@whatwg-node/fetch': 0.10.3 chalk: 4.1.2 @@ -16098,7 +16307,7 @@ snapshots: debounce: 1.2.1 detect-indent: 6.1.0 graphql: 16.11.0 - graphql-config: 5.1.3(@types/node@24.0.13)(bufferutil@4.0.9)(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + graphql-config: 5.1.3(@types/node@24.0.15)(bufferutil@4.0.9)(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10) inquirer: 8.2.6 is-glob: 4.0.3 jiti: 1.21.7 @@ -16320,7 +16529,7 @@ snapshots: - bufferutil - utf-8-validate - '@graphql-tools/executor-http@1.2.6(@types/node@24.0.13)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.2.6(@types/node@24.0.15)(graphql@16.11.0)': dependencies: '@graphql-tools/executor-common': 0.0.1(graphql@16.11.0) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) @@ -16329,7 +16538,7 @@ snapshots: '@whatwg-node/fetch': 0.10.3 extract-files: 11.0.0 graphql: 16.11.0 - meros: 1.3.0(@types/node@24.0.13) + meros: 1.3.0(@types/node@24.0.15) tslib: 2.8.1 value-or-promise: 1.0.12 transitivePeerDependencies: @@ -16369,9 +16578,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/github-loader@8.0.13(@types/node@24.0.13)(graphql@16.11.0)': + '@graphql-tools/github-loader@8.0.13(@types/node@24.0.15)(graphql@16.11.0)': dependencies: - '@graphql-tools/executor-http': 1.2.6(@types/node@24.0.13)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.2.6(@types/node@24.0.15)(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.12(graphql@16.11.0) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) '@whatwg-node/fetch': 0.10.3 @@ -16439,9 +16648,9 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/prisma-loader@8.0.17(@types/node@24.0.13)(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(utf-8-validate@5.0.10)': + '@graphql-tools/prisma-loader@8.0.17(@types/node@24.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(utf-8-validate@5.0.10)': dependencies: - '@graphql-tools/url-loader': 8.0.24(@types/node@24.0.13)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.24(@types/node@24.0.15)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) '@types/js-yaml': 4.0.9 '@whatwg-node/fetch': 0.10.3 @@ -16483,10 +16692,10 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.24(@types/node@24.0.13)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10)': + '@graphql-tools/url-loader@8.0.24(@types/node@24.0.15)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10)': dependencies: '@graphql-tools/executor-graphql-ws': 1.3.7(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) - '@graphql-tools/executor-http': 1.2.6(@types/node@24.0.13)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.2.6(@types/node@24.0.15)(graphql@16.11.0) '@graphql-tools/executor-legacy-ws': 1.1.10(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) '@graphql-tools/wrap': 10.0.29(graphql@16.11.0) @@ -16692,7 +16901,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.15.29 + '@types/node': 24.0.15 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -16905,6 +17114,13 @@ snapshots: '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': optional: true + '@napi-rs/wasm-runtime@1.0.1': + dependencies: + '@emnapi/core': 1.4.5 + '@emnapi/runtime': 1.4.5 + '@tybys/wasm-util': 0.10.0 + optional: true + '@next/env@15.3.2': {} '@next/swc-darwin-arm64@15.3.2': @@ -17066,6 +17282,10 @@ snapshots: '@opentelemetry/semantic-conventions@1.34.0': {} + '@oxc-project/runtime@0.77.2': {} + + '@oxc-project/types@0.77.2': {} + '@parcel/watcher-android-arm64@2.5.1': optional: true @@ -17338,6 +17558,10 @@ snapshots: - typescript - utf-8-validate + '@quansync/fs@0.1.3': + dependencies: + quansync: 0.2.10 + '@radix-ui/primitive@1.1.2': {} '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': @@ -18012,10 +18236,56 @@ snapshots: tslib: 2.8.1 viem: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) + '@rolldown/binding-android-arm64@1.0.0-beta.28': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-beta.28': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-beta.28': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-beta.28': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.28': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.28': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.28': + optional: true + + '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.28': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.28': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.28': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.28': + dependencies: + '@napi-rs/wasm-runtime': 1.0.1 + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.28': + optional: true + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.28': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.28': + optional: true + '@rolldown/pluginutils@1.0.0-beta.19': {} '@rolldown/pluginutils@1.0.0-beta.27': {} + '@rolldown/pluginutils@1.0.0-beta.28': {} + '@rollup/plugin-inject@5.0.5(rollup@4.45.0)': dependencies: '@rollup/pluginutils': 5.2.0(rollup@4.45.0) @@ -18723,19 +18993,19 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.1.5 '@tailwindcss/oxide-win32-x64-msvc': 4.1.5 - '@tailwindcss/vite@4.1.10(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@tailwindcss/vite@4.1.10(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@tailwindcss/node': 4.1.10 '@tailwindcss/oxide': 4.1.10 tailwindcss: 4.1.10 - vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) - '@tailwindcss/vite@4.1.11(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@tailwindcss/vite@4.1.11(vite@7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@tailwindcss/node': 4.1.11 '@tailwindcss/oxide': 4.1.11 tailwindcss: 4.1.11 - vite: 7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) '@tailwindcss/vite@4.1.11(vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: @@ -18744,12 +19014,12 @@ snapshots: tailwindcss: 4.1.11 vite: 7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) - '@tailwindcss/vite@4.1.5(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@tailwindcss/vite@4.1.5(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@tailwindcss/node': 4.1.5 '@tailwindcss/oxide': 4.1.5 tailwindcss: 4.1.5 - vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) '@tanstack/form-core@1.14.0': dependencies: @@ -18977,7 +19247,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8)': + '@tanstack/router-plugin@1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8)': dependencies: '@babel/core': 7.28.0 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.28.0) @@ -18998,12 +19268,12 @@ snapshots: zod: 3.24.2 optionalDependencies: '@tanstack/react-router': 1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) webpack: 5.99.8 transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.127.5(@tanstack/react-router@1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2))': + '@tanstack/router-plugin@1.127.5(@tanstack/react-router@1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) @@ -19021,7 +19291,7 @@ snapshots: zod: 3.25.51 optionalDependencies: '@tanstack/react-router': 1.127.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) webpack: 5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2) transitivePeerDependencies: - supports-color @@ -19112,6 +19382,11 @@ snapshots: '@trysound/sax@0.2.0': {} + '@tybys/wasm-util@0.10.0': + dependencies: + tslib: 2.8.1 + optional: true + '@types/aria-query@5.0.4': {} '@types/babel__core@7.20.5': @@ -19138,11 +19413,11 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.15.29 + '@types/node': 24.0.15 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.15 '@types/chai@5.2.2': dependencies: @@ -19151,15 +19426,15 @@ snapshots: '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.0.1 - '@types/node': 22.15.29 + '@types/node': 24.0.15 '@types/connect@3.4.38': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.15 '@types/cors@2.8.17': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.15 '@types/debug@4.1.12': dependencies: @@ -19187,14 +19462,14 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.15 '@types/qs': 6.9.17 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 '@types/express-serve-static-core@5.0.1': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.15 '@types/qs': 6.9.17 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -19228,7 +19503,7 @@ snapshots: '@types/http-proxy@1.17.16': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.15 '@types/istanbul-lib-coverage@2.0.6': {} @@ -19256,7 +19531,7 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.15 '@types/node@12.20.55': {} @@ -19274,10 +19549,6 @@ snapshots: dependencies: undici-types: 6.19.8 - '@types/node@24.0.13': - dependencies: - undici-types: 7.8.0 - '@types/node@24.0.15': dependencies: undici-types: 7.8.0 @@ -19286,7 +19557,7 @@ snapshots: '@types/pg@8.15.0': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.15 pg-protocol: 1.7.0 pg-types: 4.0.2 @@ -19342,12 +19613,12 @@ snapshots: '@types/sax@1.2.7': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.15 '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.15.29 + '@types/node': 24.0.15 '@types/serve-index@1.9.4': dependencies: @@ -19356,12 +19627,12 @@ snapshots: '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.15.29 + '@types/node': 24.0.15 '@types/send': 0.17.4 '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.15 '@types/stylis@4.2.5': {} @@ -19377,11 +19648,11 @@ snapshots: '@types/ws@7.4.7': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.15 '@types/ws@8.18.1': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.15 '@types/yargs-parser@21.0.3': {} @@ -19484,14 +19755,14 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.28.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.28.0) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -19506,7 +19777,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.6.0(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@vitejs/plugin-react@4.6.0(vite@7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.0) @@ -19514,7 +19785,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.19 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -19538,14 +19809,6 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': - dependencies: - '@vitest/spy': 3.2.4 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - vite: 6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) - '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.2.4 @@ -20430,6 +20693,11 @@ snapshots: assertion-error@2.0.1: {} + ast-kit@2.1.1: + dependencies: + '@babel/parser': 7.28.0 + pathe: 2.0.3 + ast-types@0.16.1: dependencies: tslib: 2.8.1 @@ -20601,6 +20869,8 @@ snapshots: dependencies: file-uri-to-path: 1.0.0 + birpc@2.5.0: {} + bl@4.1.0: dependencies: buffer: 5.7.1 @@ -21769,6 +22039,8 @@ snapshots: dset@3.1.4: {} + dts-resolver@2.1.1: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -21793,11 +22065,6 @@ snapshots: '@standard-schema/spec': 1.0.0 fast-check: 3.23.2 - effect@3.16.13: - dependencies: - '@standard-schema/spec': 1.0.0 - fast-check: 3.23.2 - effect@3.17.0: dependencies: '@standard-schema/spec': 1.0.0 @@ -21837,6 +22104,8 @@ snapshots: emoticon@4.1.0: {} + empathic@2.0.0: {} + encode-utf8@1.0.3: {} encodeurl@1.0.2: {} @@ -22140,7 +22409,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.15 require-like: 0.1.2 event-target-shim@5.0.1: {} @@ -22561,6 +22830,10 @@ snapshots: get-stream@6.0.1: {} + get-tsconfig@4.10.1: + dependencies: + resolve-pkg-maps: 1.0.0 + get-tsconfig@4.8.1: dependencies: resolve-pkg-maps: 1.0.0 @@ -22671,13 +22944,13 @@ snapshots: graphemer@1.4.0: {} - graphql-config@5.1.3(@types/node@24.0.13)(bufferutil@4.0.9)(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10): + graphql-config@5.1.3(@types/node@24.0.15)(bufferutil@4.0.9)(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10): dependencies: '@graphql-tools/graphql-file-loader': 8.0.12(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.11(graphql@16.11.0) '@graphql-tools/load': 8.1.0(graphql@16.11.0) '@graphql-tools/merge': 9.0.24(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.24(@types/node@24.0.13)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.24(@types/node@24.0.15)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) cosmiconfig: 8.3.6(typescript@5.8.3) graphql: 16.11.0 @@ -22921,6 +23194,8 @@ snapshots: dependencies: react-is: 16.13.1 + hookable@5.5.3: {} + hpack.js@2.1.6: dependencies: inherits: 2.0.4 @@ -23375,7 +23650,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.15.29 + '@types/node': 24.0.15 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -23383,13 +23658,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.15 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.15.29 + '@types/node': 24.0.15 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -24007,9 +24282,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.0(@types/node@24.0.13): + meros@1.3.0(@types/node@24.0.15): optionalDependencies: - '@types/node': 24.0.13 + '@types/node': 24.0.15 methods@1.1.2: {} @@ -24447,7 +24722,7 @@ snapshots: multiformats@9.9.0: {} - multipasta@0.2.5: {} + multipasta@0.2.7: {} mute-stream@0.0.8: {} @@ -25836,6 +26111,8 @@ snapshots: dependencies: side-channel: 1.1.0 + quansync@0.2.10: {} + query-registry@3.0.1: dependencies: query-string: 9.1.1 @@ -26337,6 +26614,45 @@ snapshots: hash-base: 3.0.5 inherits: 2.0.4 + rolldown-plugin-dts@0.13.14(rolldown@1.0.0-beta.28)(typescript@5.8.3): + dependencies: + '@babel/generator': 7.28.0 + '@babel/parser': 7.28.0 + '@babel/types': 7.28.1 + ast-kit: 2.1.1 + birpc: 2.5.0 + debug: 4.4.1 + dts-resolver: 2.1.1 + get-tsconfig: 4.10.1 + rolldown: 1.0.0-beta.28 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - oxc-resolver + - supports-color + + rolldown@1.0.0-beta.28: + dependencies: + '@oxc-project/runtime': 0.77.2 + '@oxc-project/types': 0.77.2 + '@rolldown/pluginutils': 1.0.0-beta.28 + ansis: 4.1.0 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-beta.28 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.28 + '@rolldown/binding-darwin-x64': 1.0.0-beta.28 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.28 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.28 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.28 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.28 + '@rolldown/binding-linux-arm64-ohos': 1.0.0-beta.28 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.28 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.28 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.28 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.28 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.28 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.28 + rollup@4.39.0: dependencies: '@types/estree': 1.0.7 @@ -26506,6 +26822,8 @@ snapshots: semver@7.7.1: {} + semver@7.7.2: {} + send@0.19.0: dependencies: debug: 2.6.9 @@ -27198,6 +27516,8 @@ snapshots: tinyexec@0.3.2: {} + tinyexec@1.0.1: {} + tinyglobby@0.2.13: dependencies: fdir: 6.4.4(picomatch@4.0.2) @@ -27274,6 +27594,29 @@ snapshots: ts-log@2.2.7: {} + tsdown@0.12.9(typescript@5.8.3): + dependencies: + ansis: 4.1.0 + cac: 6.7.14 + chokidar: 4.0.3 + debug: 4.4.1 + diff: 8.0.2 + empathic: 2.0.0 + hookable: 5.5.3 + rolldown: 1.0.0-beta.28 + rolldown-plugin-dts: 0.13.14(rolldown@1.0.0-beta.28)(typescript@5.8.3) + semver: 7.7.2 + tinyexec: 1.0.1 + tinyglobby: 0.2.14 + unconfig: 7.3.2 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@typescript/native-preview' + - oxc-resolver + - supports-color + - vue-tsc + tslib@1.14.1: {} tslib@2.6.2: {} @@ -27416,6 +27759,13 @@ snapshots: unc-path-regex@0.1.2: {} + unconfig@7.3.2: + dependencies: + '@quansync/fs': 0.1.3 + defu: 6.1.4 + jiti: 2.4.2 + quansync: 0.2.10 + uncrypto@0.1.3: {} undici-types@6.19.8: {} @@ -27502,11 +27852,11 @@ snapshots: unpipe@1.0.0: {} - unplugin-fonts@1.3.1(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)): + unplugin-fonts@1.3.1(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)): dependencies: fast-glob: 3.3.3 unplugin: 2.0.0-beta.1 - vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) unplugin@2.0.0-beta.1: dependencies: @@ -27765,27 +28115,6 @@ snapshots: - utf-8-validate - zod - vite-node@3.2.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): - dependencies: - cac: 6.7.14 - debug: 4.4.1 - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 7.0.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - vite-node@3.2.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): dependencies: cac: 6.7.14 @@ -27807,59 +28136,25 @@ snapshots: - tsx - yaml - vite-plugin-node-polyfills@0.23.0(rollup@4.45.0)(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)): + vite-plugin-node-polyfills@0.23.0(rollup@4.45.0)(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)): dependencies: '@rollup/plugin-inject': 5.0.5(rollup@4.45.0) node-stdlib-browser: 1.3.1 - vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - rollup - vite-plugin-svgr@4.3.0(rollup@4.45.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)): + vite-plugin-svgr@4.3.0(rollup@4.45.0)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)): dependencies: '@rollup/pluginutils': 5.2.0(rollup@4.45.0) '@svgr/core': 8.1.0(typescript@5.8.3) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.8.3)) - vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - rollup - supports-color - typescript - vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): - dependencies: - esbuild: 0.25.2 - fdir: 6.4.4(picomatch@4.0.2) - picomatch: 4.0.2 - postcss: 8.5.3 - rollup: 4.39.0 - tinyglobby: 0.2.13 - optionalDependencies: - '@types/node': 22.15.15 - fsevents: 2.3.3 - jiti: 2.4.2 - lightningcss: 1.30.1 - terser: 5.39.1 - tsx: 4.20.3 - yaml: 2.7.0 - - vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): - dependencies: - esbuild: 0.25.2 - fdir: 6.4.4(picomatch@4.0.2) - picomatch: 4.0.2 - postcss: 8.5.3 - rollup: 4.39.0 - tinyglobby: 0.2.13 - optionalDependencies: - '@types/node': 24.0.13 - fsevents: 2.3.3 - jiti: 2.4.2 - lightningcss: 1.30.1 - terser: 5.39.1 - tsx: 4.20.3 - yaml: 2.7.0 - vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): dependencies: esbuild: 0.25.2 @@ -27877,7 +28172,7 @@ snapshots: tsx: 4.20.3 yaml: 2.7.0 - vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): + vite@7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): dependencies: esbuild: 0.25.2 fdir: 6.4.6(picomatch@4.0.2) @@ -27886,24 +28181,7 @@ snapshots: rollup: 4.45.0 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 24.0.13 - fsevents: 2.3.3 - jiti: 2.4.2 - lightningcss: 1.30.1 - terser: 5.39.1 - tsx: 4.20.3 - yaml: 2.7.0 - - vite@7.0.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): - dependencies: - esbuild: 0.25.2 - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 - postcss: 8.5.6 - rollup: 4.45.0 - tinyglobby: 0.2.14 - optionalDependencies: - '@types/node': 24.0.13 + '@types/node': 24.0.15 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 @@ -27928,49 +28206,6 @@ snapshots: tsx: 4.20.3 yaml: 2.7.0 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): - dependencies: - '@types/chai': 5.2.2 - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) - '@vitest/pretty-format': 3.2.4 - '@vitest/runner': 3.2.4 - '@vitest/snapshot': 3.2.4 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.2.0 - debug: 4.4.1 - expect-type: 1.2.1 - magic-string: 0.30.17 - pathe: 2.0.3 - picomatch: 4.0.2 - std-env: 3.9.0 - tinybench: 2.9.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.14 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) - vite-node: 3.2.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/debug': 4.1.12 - '@types/node': 24.0.13 - jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.15)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): dependencies: '@types/chai': 5.2.2 From a004e4f59fa6d9956af1618cd60f232f92b1f682 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Tue, 22 Jul 2025 08:17:26 -1000 Subject: [PATCH 05/20] feat(#351 | create-hypergraph-app): use prompts instead of options --- apps/create-hypergraph-app/src/Cli.ts | 71 ++++++++++++++++++--------- 1 file changed, 47 insertions(+), 24 deletions(-) diff --git a/apps/create-hypergraph-app/src/Cli.ts b/apps/create-hypergraph-app/src/Cli.ts index e5517d14..0796ddf2 100644 --- a/apps/create-hypergraph-app/src/Cli.ts +++ b/apps/create-hypergraph-app/src/Cli.ts @@ -1,6 +1,8 @@ -import { Command, Options, Span } from '@effect/cli'; -import { descriptionList } from '@effect/cli/HelpDoc'; -import { Console, Effect, Option, Schema } from 'effect'; +import { Command, Prompt } from '@effect/cli'; +import { FileSystem, Path } from '@effect/platform'; +import { NodeFileSystem } from '@effect/platform-node'; +import { Console, Data, Effect, Array as EffectArray, Schema } from 'effect'; +import type { NonEmptyReadonlyArray } from 'effect/Array'; const AvailableFrameworkKey = Schema.Union(Schema.Literal('vite-react')); type AvailableFrameworkKey = typeof AvailableFrameworkKey.Type; @@ -19,27 +21,48 @@ const availableFrameworks = { }, } as const satisfies Framework; -const createHypergraphApp = Command.make('create-hypergraph-app', { - args: { - template: Options.choice('template', Object.keys(availableFrameworks) as ReadonlyArray).pipe( - Options.withAlias('t'), - Options.withDescription('The template to scaffold'), - Options.optional, - Options.withDefault(Option.some('vite-react')), - Options.map((templOpt) => - Option.getOrElse(templOpt, () => 'vite-react'), - ), - ), - }, -}).pipe( - Command.withDescription(descriptionList([[]])), - Command.withHandler(({ args }) => - Effect.gen(function* () { - const template = args.template; - - return yield* Console.log('selected template', { template }); - }), - ), +const appNamePrompt = Prompt.text({ + message: 'What is your app named?', + default: 'my-hypergraph-app', +}); +const templatePrompt = Prompt.select({ + message: 'Choose your template', + choices: [ + { + title: 'Vite + React', + value: 'vite-react', + description: 'Scaffolds a vite + react app using @tanstack/react-router', + }, + ] as NonEmptyReadonlyArray>, +}); + +const prompts = Prompt.all([appNamePrompt, templatePrompt]); + +const createHypergraphApp = Command.prompt('create-hypergraph-app', prompts, ([appName, template]) => + Effect.gen(function* () { + const fs = yield* FileSystem.FileSystem; + const path = yield* Path.Path; + + const framework = availableFrameworks[template]; + + // check if directory already exists, if exists, and is not empty, throw an error + const targetDirectory = path.resolve('.', appName); + const exists = yield* fs.exists(targetDirectory); + if (exists) { + const targetDirRead = yield* fs.readDirectory(targetDirectory, { recursive: true }); + if (EffectArray.isNonEmptyArray(targetDirRead)) { + return yield* Console.error('The selected directory is not empty'); + } + } else { + // create the target directory + yield* fs.makeDirectory(targetDirectory, { recursive: true }); + } + + return yield* Console.log('selected template', { template, appName, targetDirectory }); + }), +).pipe( + Command.withDescription('Command line interface to scaffold a Hypergraph-enabled application'), + Command.provide(NodeFileSystem.layer), ); export const run = Command.run(createHypergraphApp, { From 8ea798fcde27bde3b3875586f8ad5a9bcf0055f3 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Tue, 22 Jul 2025 08:40:19 -1000 Subject: [PATCH 06/20] feat(#351 | create-hypergraph-app): bump @types/node to latest --- apps/connect/package.json | 2 +- apps/create-hypergraph-app/package.json | 2 +- .../template-vite-react/package.json | 2 +- apps/events/package.json | 2 +- apps/server/package.json | 2 +- apps/typesync/package.json | 2 +- pnpm-lock.yaml | 246 +++++++++--------- 7 files changed, 129 insertions(+), 129 deletions(-) diff --git a/apps/connect/package.json b/apps/connect/package.json index 063436d5..e56926ac 100644 --- a/apps/connect/package.json +++ b/apps/connect/package.json @@ -37,7 +37,7 @@ "devDependencies": { "@tailwindcss/vite": "^4.1.10", "@tanstack/router-plugin": "^1.120.2", - "@types/node": "^24.0.15", + "@types/node": "^24.1.0", "@types/react": "^19.1.3", "@types/react-dom": "^19.1.3", "@vitejs/plugin-react": "^4.4.1", diff --git a/apps/create-hypergraph-app/package.json b/apps/create-hypergraph-app/package.json index 527dae54..bde529e1 100644 --- a/apps/create-hypergraph-app/package.json +++ b/apps/create-hypergraph-app/package.json @@ -41,7 +41,7 @@ "@effect/platform-node": "^0.92.0", "@effect/printer-ansi": "^0.45.0", "@effect/vitest": "^0.25.0", - "@types/node": "^24.0.15", + "@types/node": "^24.1.0", "effect": "^3.17.0", "tsdown": "^0.12.9" } diff --git a/apps/create-hypergraph-app/template-vite-react/package.json b/apps/create-hypergraph-app/template-vite-react/package.json index 61cb39ea..42ca3ee5 100644 --- a/apps/create-hypergraph-app/template-vite-react/package.json +++ b/apps/create-hypergraph-app/template-vite-react/package.json @@ -34,7 +34,7 @@ "devDependencies": { "@eslint/js": "^9.31.0", "@tanstack/router-plugin": "^1.129.2", - "@types/node": "^24.0.15", + "@types/node": "^24.1.0", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "^4.7.0", diff --git a/apps/events/package.json b/apps/events/package.json index b6bdfddc..7c0fc26b 100644 --- a/apps/events/package.json +++ b/apps/events/package.json @@ -41,7 +41,7 @@ "@biomejs/biome": "1.9.4", "@tailwindcss/vite": "^4.1.5", "@tanstack/router-plugin": "^1.120.2", - "@types/node": "^24.0.15", + "@types/node": "^24.1.0", "@types/react": "^19.1.3", "@types/react-dom": "^19.1.3", "@types/uuid": "^10.0.0", diff --git a/apps/server/package.json b/apps/server/package.json index fe63b884..355561f7 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -29,7 +29,7 @@ "devDependencies": { "@types/cors": "^2.8.17", "@types/express": "^5.0.1", - "@types/node": "^24.0.15", + "@types/node": "^24.1.0", "@types/pg": "^8.15.0", "@types/ws": "^8.18.1", "tsup": "^8.4.0", diff --git a/apps/typesync/package.json b/apps/typesync/package.json index d9837127..d6c4afe0 100644 --- a/apps/typesync/package.json +++ b/apps/typesync/package.json @@ -51,7 +51,7 @@ "@graphql-codegen/typescript": "^4.1.6", "@graphql-codegen/typescript-operations": "^4.6.1", "@tanstack/router-plugin": "^1.129.5", - "@types/node": "^24.0.15", + "@types/node": "^24.1.0", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", "@vitejs/plugin-react": "^4.6.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 541c1846..57c4d8bd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,7 +37,7 @@ importers: version: 5.8.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.15)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) apps/connect: dependencies: @@ -97,17 +97,17 @@ importers: version: 2.30.6(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) vite: specifier: ^6.3.5 - version: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + version: 6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) devDependencies: '@tailwindcss/vite': specifier: ^4.1.10 - version: 4.1.10(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.1.10(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@tanstack/router-plugin': specifier: ^1.120.2 - version: 1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) + version: 1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) '@types/node': - specifier: ^24.0.15 - version: 24.0.15 + specifier: ^24.1.0 + version: 24.1.0 '@types/react': specifier: ^19.1.3 version: 19.1.3 @@ -116,7 +116,7 @@ importers: version: 19.1.3(@types/react@19.1.3) '@vitejs/plugin-react': specifier: ^4.4.1 - version: 4.4.1(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.4.1(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) prettier: specifier: ^3.6.0 version: 3.6.1 @@ -128,13 +128,13 @@ importers: version: 4.1.10 unplugin-fonts: specifier: ^1.3.1 - version: 1.3.1(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 1.3.1(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) vite-plugin-node-polyfills: specifier: ^0.23.0 - version: 0.23.0(rollup@4.45.0)(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 0.23.0(rollup@4.45.0)(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) vite-plugin-svgr: specifier: ^4.3.0 - version: 4.3.0(rollup@4.45.0)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.3.0(rollup@4.45.0)(typescript@5.8.3)(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) apps/create-hypergraph-app: devDependencies: @@ -155,10 +155,10 @@ importers: version: 0.45.0(@effect/typeclass@0.31.10(effect@3.17.0))(effect@3.17.0) '@effect/vitest': specifier: ^0.25.0 - version: 0.25.0(effect@3.17.0)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.15)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 0.25.0(effect@3.17.0)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@types/node': - specifier: ^24.0.15 - version: 24.0.15 + specifier: ^24.1.0 + version: 24.1.0 effect: specifier: ^3.17.0 version: 3.17.0 @@ -192,7 +192,7 @@ importers: version: 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.1.11(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@tanstack/react-query': specifier: ^5.83.0 version: 5.83.0(react@19.1.0) @@ -225,17 +225,17 @@ importers: version: 4.1.11 vite: specifier: ^7.0.5 - version: 7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + version: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) devDependencies: '@eslint/js': specifier: ^9.31.0 version: 9.31.0 '@tanstack/router-plugin': specifier: ^1.129.2 - version: 1.129.2(@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) + version: 1.129.2(@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) '@types/node': - specifier: ^24.0.15 - version: 24.0.15 + specifier: ^24.1.0 + version: 24.1.0 '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -244,7 +244,7 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.7.0 - version: 4.7.0(vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.7.0(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) eslint: specifier: ^9.31.0 version: 9.31.0(jiti@2.4.2) @@ -355,20 +355,20 @@ importers: version: 2.29.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) vite: specifier: ^6.3.5 - version: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + version: 6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) devDependencies: '@biomejs/biome': specifier: 1.9.4 version: 1.9.4 '@tailwindcss/vite': specifier: ^4.1.5 - version: 4.1.5(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.1.5(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@tanstack/router-plugin': specifier: ^1.120.2 - version: 1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) + version: 1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) '@types/node': - specifier: ^24.0.15 - version: 24.0.15 + specifier: ^24.1.0 + version: 24.1.0 '@types/react': specifier: ^19.1.3 version: 19.1.3 @@ -380,7 +380,7 @@ importers: version: 10.0.0 '@vitejs/plugin-react': specifier: ^4.4.1 - version: 4.4.1(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.4.1(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) globals: specifier: ^16.1.0 version: 16.1.0 @@ -477,8 +477,8 @@ importers: specifier: ^5.0.1 version: 5.0.1 '@types/node': - specifier: ^24.0.15 - version: 24.0.15 + specifier: ^24.1.0 + version: 24.1.0 '@types/pg': specifier: ^8.15.0 version: 8.15.0 @@ -517,7 +517,7 @@ importers: version: 1.1.12(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.1.11(vite@7.0.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@tanstack/react-form': specifier: ^1.14.1 version: 1.14.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -590,10 +590,10 @@ importers: version: 0.44.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(@effect/sql@0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(effect@3.17.0) '@effect/vitest': specifier: ^0.25.0 - version: 0.25.0(effect@3.17.0)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.15)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 0.25.0(effect@3.17.0)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@graphql-codegen/cli': specifier: ^5.0.7 - version: 5.0.7(@babel/core@7.28.0)(@parcel/watcher@2.5.1)(@types/node@24.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(enquirer@2.4.1)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + version: 5.0.7(@babel/core@7.28.0)(@parcel/watcher@2.5.1)(@types/node@24.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(enquirer@2.4.1)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10) '@graphql-codegen/client-preset': specifier: ^4.8.3 version: 4.8.3(@babel/core@7.28.0)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0) @@ -605,10 +605,10 @@ importers: version: 4.6.1(@babel/core@7.28.0)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0) '@tanstack/router-plugin': specifier: ^1.129.5 - version: 1.129.5(@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2)) + version: 1.129.5(@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2)) '@types/node': - specifier: ^24.0.15 - version: 24.0.15 + specifier: ^24.1.0 + version: 24.1.0 '@types/react': specifier: ^19.1.8 version: 19.1.8 @@ -617,7 +617,7 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: ^4.6.0 - version: 4.6.0(vite@7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.6.0(vite@7.0.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) glob: specifier: ^11.0.3 version: 11.0.3 @@ -632,7 +632,7 @@ importers: version: 4.20.3 vite: specifier: ^7.0.4 - version: 7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + version: 7.0.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) publishDirectory: dist apps/typesync/dist: @@ -660,7 +660,7 @@ importers: version: 1.1.12(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.1.11(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@tanstack/react-form': specifier: ^1.14.1 version: 1.14.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -856,7 +856,7 @@ importers: version: 19.1.3 '@vitejs/plugin-react': specifier: ^4.4.1 - version: 4.4.1(vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + version: 4.4.1(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@xstate/store': specifier: ^3.5.1 version: 3.5.1(react@19.1.0)(solid-js@1.9.5) @@ -5713,8 +5713,8 @@ packages: '@types/node@22.7.5': resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} - '@types/node@24.0.15': - resolution: {integrity: sha512-oaeTSbCef7U/z7rDeJA138xpG3NuKc64/rZ2qmUFkFJmnMsAPaluIifqyWd8hSSMxyP9oie3dLAqYPblag9KgA==} + '@types/node@24.1.0': + resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -15656,10 +15656,10 @@ snapshots: dependencies: effect: 3.17.0 - '@effect/vitest@0.25.0(effect@3.17.0)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.15)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@effect/vitest@0.25.0(effect@3.17.0)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: effect: 3.17.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.15)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) '@effect/workflow@0.1.2(effect@3.17.0)': dependencies: @@ -16299,7 +16299,7 @@ snapshots: graphql: 16.11.0 tslib: 2.6.2 - '@graphql-codegen/cli@5.0.7(@babel/core@7.28.0)(@parcel/watcher@2.5.1)(@types/node@24.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(enquirer@2.4.1)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': + '@graphql-codegen/cli@5.0.7(@babel/core@7.28.0)(@parcel/watcher@2.5.1)(@types/node@24.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(enquirer@2.4.1)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: '@babel/generator': 7.27.1 '@babel/template': 7.27.1 @@ -16310,12 +16310,12 @@ snapshots: '@graphql-tools/apollo-engine-loader': 8.0.13(graphql@16.11.0) '@graphql-tools/code-file-loader': 8.1.13(graphql@16.11.0) '@graphql-tools/git-loader': 8.0.17(graphql@16.11.0) - '@graphql-tools/github-loader': 8.0.13(@types/node@24.0.15)(graphql@16.11.0) + '@graphql-tools/github-loader': 8.0.13(@types/node@24.1.0)(graphql@16.11.0) '@graphql-tools/graphql-file-loader': 8.0.12(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.11(graphql@16.11.0) '@graphql-tools/load': 8.1.0(graphql@16.11.0) - '@graphql-tools/prisma-loader': 8.0.17(@types/node@24.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(utf-8-validate@5.0.10) - '@graphql-tools/url-loader': 8.0.24(@types/node@24.0.15)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) + '@graphql-tools/prisma-loader': 8.0.17(@types/node@24.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.24(@types/node@24.1.0)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) '@whatwg-node/fetch': 0.10.3 chalk: 4.1.2 @@ -16323,7 +16323,7 @@ snapshots: debounce: 1.2.1 detect-indent: 6.1.0 graphql: 16.11.0 - graphql-config: 5.1.3(@types/node@24.0.15)(bufferutil@4.0.9)(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10) + graphql-config: 5.1.3(@types/node@24.1.0)(bufferutil@4.0.9)(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10) inquirer: 8.2.6 is-glob: 4.0.3 jiti: 1.21.7 @@ -16545,7 +16545,7 @@ snapshots: - bufferutil - utf-8-validate - '@graphql-tools/executor-http@1.2.6(@types/node@24.0.15)(graphql@16.11.0)': + '@graphql-tools/executor-http@1.2.6(@types/node@24.1.0)(graphql@16.11.0)': dependencies: '@graphql-tools/executor-common': 0.0.1(graphql@16.11.0) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) @@ -16554,7 +16554,7 @@ snapshots: '@whatwg-node/fetch': 0.10.3 extract-files: 11.0.0 graphql: 16.11.0 - meros: 1.3.0(@types/node@24.0.15) + meros: 1.3.0(@types/node@24.1.0) tslib: 2.8.1 value-or-promise: 1.0.12 transitivePeerDependencies: @@ -16594,9 +16594,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/github-loader@8.0.13(@types/node@24.0.15)(graphql@16.11.0)': + '@graphql-tools/github-loader@8.0.13(@types/node@24.1.0)(graphql@16.11.0)': dependencies: - '@graphql-tools/executor-http': 1.2.6(@types/node@24.0.15)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.2.6(@types/node@24.1.0)(graphql@16.11.0) '@graphql-tools/graphql-tag-pluck': 8.3.12(graphql@16.11.0) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) '@whatwg-node/fetch': 0.10.3 @@ -16664,9 +16664,9 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/prisma-loader@8.0.17(@types/node@24.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(utf-8-validate@5.0.10)': + '@graphql-tools/prisma-loader@8.0.17(@types/node@24.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(graphql@16.11.0)(utf-8-validate@5.0.10)': dependencies: - '@graphql-tools/url-loader': 8.0.24(@types/node@24.0.15)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.24(@types/node@24.1.0)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) '@types/js-yaml': 4.0.9 '@whatwg-node/fetch': 0.10.3 @@ -16708,10 +16708,10 @@ snapshots: graphql: 16.11.0 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.24(@types/node@24.0.15)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10)': + '@graphql-tools/url-loader@8.0.24(@types/node@24.1.0)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10)': dependencies: '@graphql-tools/executor-graphql-ws': 1.3.7(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) - '@graphql-tools/executor-http': 1.2.6(@types/node@24.0.15)(graphql@16.11.0) + '@graphql-tools/executor-http': 1.2.6(@types/node@24.1.0)(graphql@16.11.0) '@graphql-tools/executor-legacy-ws': 1.1.10(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) '@graphql-tools/wrap': 10.0.29(graphql@16.11.0) @@ -16917,7 +16917,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 24.0.15 + '@types/node': 22.15.29 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -19009,33 +19009,33 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.1.5 '@tailwindcss/oxide-win32-x64-msvc': 4.1.5 - '@tailwindcss/vite@4.1.10(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@tailwindcss/vite@4.1.10(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@tailwindcss/node': 4.1.10 '@tailwindcss/oxide': 4.1.10 tailwindcss: 4.1.10 - vite: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) - '@tailwindcss/vite@4.1.11(vite@7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@tailwindcss/vite@4.1.11(vite@7.0.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@tailwindcss/node': 4.1.11 '@tailwindcss/oxide': 4.1.11 tailwindcss: 4.1.11 - vite: 7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 7.0.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) - '@tailwindcss/vite@4.1.11(vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@tailwindcss/vite@4.1.11(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@tailwindcss/node': 4.1.11 '@tailwindcss/oxide': 4.1.11 tailwindcss: 4.1.11 - vite: 7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) - '@tailwindcss/vite@4.1.5(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@tailwindcss/vite@4.1.5(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@tailwindcss/node': 4.1.5 '@tailwindcss/oxide': 4.1.5 tailwindcss: 4.1.5 - vite: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) '@tanstack/form-core@1.14.0': dependencies: @@ -19273,7 +19273,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8)': + '@tanstack/router-plugin@1.120.2(@tanstack/react-router@1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8)': dependencies: '@babel/core': 7.28.0 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.28.0) @@ -19294,12 +19294,12 @@ snapshots: zod: 3.24.2 optionalDependencies: '@tanstack/react-router': 1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) webpack: 5.99.8 transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.129.2(@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8)': + '@tanstack/router-plugin@1.129.2(@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8)': dependencies: '@babel/core': 7.28.0 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) @@ -19317,12 +19317,12 @@ snapshots: zod: 3.25.51 optionalDependencies: '@tanstack/react-router': 1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) webpack: 5.99.8 transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.129.5(@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2))': + '@tanstack/router-plugin@1.129.5(@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) @@ -19340,7 +19340,7 @@ snapshots: zod: 3.25.51 optionalDependencies: '@tanstack/react-router': 1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 7.0.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) webpack: 5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2) transitivePeerDependencies: - supports-color @@ -19439,11 +19439,11 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 24.0.15 + '@types/node': 24.1.0 '@types/bonjour@3.5.13': dependencies: - '@types/node': 24.0.15 + '@types/node': 22.15.29 '@types/chai@5.2.2': dependencies: @@ -19452,15 +19452,15 @@ snapshots: '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.0.1 - '@types/node': 24.0.15 + '@types/node': 22.15.29 '@types/connect@3.4.38': dependencies: - '@types/node': 24.0.15 + '@types/node': 24.1.0 '@types/cors@2.8.17': dependencies: - '@types/node': 24.0.15 + '@types/node': 24.1.0 '@types/debug@4.1.12': dependencies: @@ -19488,14 +19488,14 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 24.0.15 + '@types/node': 22.15.29 '@types/qs': 6.9.17 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 '@types/express-serve-static-core@5.0.1': dependencies: - '@types/node': 24.0.15 + '@types/node': 24.1.0 '@types/qs': 6.9.17 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -19529,7 +19529,7 @@ snapshots: '@types/http-proxy@1.17.16': dependencies: - '@types/node': 24.0.15 + '@types/node': 22.15.29 '@types/istanbul-lib-coverage@2.0.6': {} @@ -19557,7 +19557,7 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 24.0.15 + '@types/node': 22.15.29 '@types/node@12.20.55': {} @@ -19575,7 +19575,7 @@ snapshots: dependencies: undici-types: 6.19.8 - '@types/node@24.0.15': + '@types/node@24.1.0': dependencies: undici-types: 7.8.0 @@ -19583,7 +19583,7 @@ snapshots: '@types/pg@8.15.0': dependencies: - '@types/node': 24.0.15 + '@types/node': 24.1.0 pg-protocol: 1.7.0 pg-types: 4.0.2 @@ -19639,12 +19639,12 @@ snapshots: '@types/sax@1.2.7': dependencies: - '@types/node': 24.0.15 + '@types/node': 22.15.29 '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 24.0.15 + '@types/node': 24.1.0 '@types/serve-index@1.9.4': dependencies: @@ -19653,12 +19653,12 @@ snapshots: '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 24.0.15 + '@types/node': 24.1.0 '@types/send': 0.17.4 '@types/sockjs@0.3.36': dependencies: - '@types/node': 24.0.15 + '@types/node': 22.15.29 '@types/stylis@4.2.5': {} @@ -19674,11 +19674,11 @@ snapshots: '@types/ws@7.4.7': dependencies: - '@types/node': 24.0.15 + '@types/node': 24.1.0 '@types/ws@8.18.1': dependencies: - '@types/node': 24.0.15 + '@types/node': 24.1.0 '@types/yargs-parser@21.0.3': {} @@ -19781,29 +19781,29 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.28.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.28.0) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.4.1(vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@vitejs/plugin-react@4.4.1(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.28.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.28.0) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.6.0(vite@7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@vitejs/plugin-react@4.6.0(vite@7.0.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.0) @@ -19811,11 +19811,11 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.19 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 7.0.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.7.0(vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@vitejs/plugin-react@4.7.0(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.0) @@ -19823,7 +19823,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -19835,13 +19835,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': + '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) '@vitest/pretty-format@3.2.4': dependencies: @@ -22435,7 +22435,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 24.0.15 + '@types/node': 22.15.29 require-like: 0.1.2 event-target-shim@5.0.1: {} @@ -22970,13 +22970,13 @@ snapshots: graphemer@1.4.0: {} - graphql-config@5.1.3(@types/node@24.0.15)(bufferutil@4.0.9)(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10): + graphql-config@5.1.3(@types/node@24.1.0)(bufferutil@4.0.9)(graphql@16.11.0)(typescript@5.8.3)(utf-8-validate@5.0.10): dependencies: '@graphql-tools/graphql-file-loader': 8.0.12(graphql@16.11.0) '@graphql-tools/json-file-loader': 8.0.11(graphql@16.11.0) '@graphql-tools/load': 8.1.0(graphql@16.11.0) '@graphql-tools/merge': 9.0.24(graphql@16.11.0) - '@graphql-tools/url-loader': 8.0.24(@types/node@24.0.15)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.24(@types/node@24.1.0)(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) '@graphql-tools/utils': 10.8.6(graphql@16.11.0) cosmiconfig: 8.3.6(typescript@5.8.3) graphql: 16.11.0 @@ -23676,7 +23676,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 24.0.15 + '@types/node': 22.15.29 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -23684,13 +23684,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 24.0.15 + '@types/node': 22.15.29 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 24.0.15 + '@types/node': 22.15.29 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -24308,9 +24308,9 @@ snapshots: merge2@1.4.1: {} - meros@1.3.0(@types/node@24.0.15): + meros@1.3.0(@types/node@24.1.0): optionalDependencies: - '@types/node': 24.0.15 + '@types/node': 24.1.0 methods@1.1.2: {} @@ -27878,11 +27878,11 @@ snapshots: unpipe@1.0.0: {} - unplugin-fonts@1.3.1(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)): + unplugin-fonts@1.3.1(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)): dependencies: fast-glob: 3.3.3 unplugin: 2.0.0-beta.1 - vite: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) unplugin@2.0.0-beta.1: dependencies: @@ -28141,13 +28141,13 @@ snapshots: - utf-8-validate - zod - vite-node@3.2.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): + vite-node@3.2.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -28162,26 +28162,26 @@ snapshots: - tsx - yaml - vite-plugin-node-polyfills@0.23.0(rollup@4.45.0)(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)): + vite-plugin-node-polyfills@0.23.0(rollup@4.45.0)(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)): dependencies: '@rollup/plugin-inject': 5.0.5(rollup@4.45.0) node-stdlib-browser: 1.3.1 - vite: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - rollup - vite-plugin-svgr@4.3.0(rollup@4.45.0)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)): + vite-plugin-svgr@4.3.0(rollup@4.45.0)(typescript@5.8.3)(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)): dependencies: '@rollup/pluginutils': 5.2.0(rollup@4.45.0) '@svgr/core': 8.1.0(typescript@5.8.3) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.8.3)) - vite: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) transitivePeerDependencies: - rollup - supports-color - typescript - vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): + vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): dependencies: esbuild: 0.25.2 fdir: 6.4.4(picomatch@4.0.2) @@ -28190,7 +28190,7 @@ snapshots: rollup: 4.39.0 tinyglobby: 0.2.13 optionalDependencies: - '@types/node': 24.0.15 + '@types/node': 24.1.0 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 @@ -28198,7 +28198,7 @@ snapshots: tsx: 4.20.3 yaml: 2.7.0 - vite@7.0.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): + vite@7.0.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): dependencies: esbuild: 0.25.2 fdir: 6.4.6(picomatch@4.0.2) @@ -28207,7 +28207,7 @@ snapshots: rollup: 4.45.0 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 24.0.15 + '@types/node': 24.1.0 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 @@ -28215,7 +28215,7 @@ snapshots: tsx: 4.20.3 yaml: 2.7.0 - vite@7.0.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): + vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): dependencies: esbuild: 0.25.2 fdir: 6.4.6(picomatch@4.0.2) @@ -28224,7 +28224,7 @@ snapshots: rollup: 4.45.0 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 24.0.15 + '@types/node': 24.1.0 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 @@ -28232,11 +28232,11 @@ snapshots: tsx: 4.20.3 yaml: 2.7.0 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.15)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -28254,12 +28254,12 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) - vite-node: 3.2.4(@types/node@24.0.15)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite: 6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + vite-node: 3.2.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 24.0.15 + '@types/node': 24.1.0 jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - jiti From 64d196db0e26f53f494c927a054f46d88412ef9d Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Tue, 22 Jul 2025 10:32:05 -1000 Subject: [PATCH 07/20] feat(#351 | create-hypergraph-app): buildout ability scaffold app, install deps, initialize git --- apps/create-hypergraph-app/src/Cli.ts | 222 ++++++++++++++++-- apps/create-hypergraph-app/src/Utils.ts | 93 ++++++++ apps/create-hypergraph-app/test/Utils.test.ts | 207 ++++++++++++++++ apps/create-hypergraph-app/tsconfig.test.json | 10 + apps/create-hypergraph-app/vitest.config.ts | 12 + apps/typesync/package.json | 1 + pnpm-lock.yaml | 3 + tsconfig.json | 3 +- 8 files changed, 525 insertions(+), 26 deletions(-) create mode 100644 apps/create-hypergraph-app/src/Utils.ts create mode 100644 apps/create-hypergraph-app/test/Utils.test.ts create mode 100644 apps/create-hypergraph-app/tsconfig.test.json create mode 100644 apps/create-hypergraph-app/vitest.config.ts diff --git a/apps/create-hypergraph-app/src/Cli.ts b/apps/create-hypergraph-app/src/Cli.ts index 0796ddf2..b7a1d529 100644 --- a/apps/create-hypergraph-app/src/Cli.ts +++ b/apps/create-hypergraph-app/src/Cli.ts @@ -1,9 +1,20 @@ +import { execSync } from 'node:child_process'; +import { readdirSync } from 'node:fs'; +import { fileURLToPath } from 'node:url'; import { Command, Prompt } from '@effect/cli'; import { FileSystem, Path } from '@effect/platform'; import { NodeFileSystem } from '@effect/platform-node'; -import { Console, Data, Effect, Array as EffectArray, Schema } from 'effect'; +import type { PlatformError } from '@effect/platform/Error'; +import { Cause, Console, Data, Effect, Array as EffectArray, String as EffectString, Schema } from 'effect'; import type { NonEmptyReadonlyArray } from 'effect/Array'; +import * as Utils from './Utils.js'; + +const appNamePrompt = Prompt.text({ + message: 'What is your app named?', + default: 'my-hypergraph-app', +}); + const AvailableFrameworkKey = Schema.Union(Schema.Literal('vite-react')); type AvailableFrameworkKey = typeof AvailableFrameworkKey.Type; @@ -20,11 +31,6 @@ const availableFrameworks = { directory: 'template-vite-react', }, } as const satisfies Framework; - -const appNamePrompt = Prompt.text({ - message: 'What is your app named?', - default: 'my-hypergraph-app', -}); const templatePrompt = Prompt.select({ message: 'Choose your template', choices: [ @@ -36,30 +42,187 @@ const templatePrompt = Prompt.select({ ] as NonEmptyReadonlyArray>, }); -const prompts = Prompt.all([appNamePrompt, templatePrompt]); +const PackageManager = Schema.Literal('pnpm', 'bun', 'yarn', 'npm'); +type PackageManager = typeof PackageManager.Type; +const packageManangerPrompt = Prompt.select({ + message: 'What package manager do you want to use?', + choices: [ + { title: 'pnpm', value: 'pnpm' }, + { title: 'bun', value: 'bun' }, + { title: 'yarn', value: 'yarn' }, + { title: 'npm', value: 'npm' }, + ] as NonEmptyReadonlyArray>, +}); +const installDepsPropmpt = Prompt.toggle({ + message: 'Do you want us to install deps?', + active: 'Yes', + inactive: 'No', + initial: false, +}); -const createHypergraphApp = Command.prompt('create-hypergraph-app', prompts, ([appName, template]) => - Effect.gen(function* () { - const fs = yield* FileSystem.FileSystem; - const path = yield* Path.Path; +const initializeGitRepoPrompt = Prompt.toggle({ + message: 'Initialize a git repository?', + active: 'Tes', + inactive: 'No', + initial: true, +}); + +const prompts = Prompt.all([ + appNamePrompt, + templatePrompt, + packageManangerPrompt, + installDepsPropmpt, + initializeGitRepoPrompt, +]); - const framework = availableFrameworks[template]; +const createHypergraphApp = Command.prompt( + 'create-hypergraph-app', + prompts, + ([appName, template, pkgMananger, installDeps, initializeGitRepo]) => + Effect.gen(function* () { + const fs = yield* FileSystem.FileSystem; + const path = yield* Path.Path; - // check if directory already exists, if exists, and is not empty, throw an error - const targetDirectory = path.resolve('.', appName); - const exists = yield* fs.exists(targetDirectory); - if (exists) { - const targetDirRead = yield* fs.readDirectory(targetDirectory, { recursive: true }); - if (EffectArray.isNonEmptyArray(targetDirRead)) { - return yield* Console.error('The selected directory is not empty'); + const framework = availableFrameworks[template]; + + // check if directory already exists, if exists, and is not empty, throw an error + const targetDirectory = path.resolve('.', appName); + const exists = yield* fs.exists(targetDirectory); + if (exists) { + const targetDirRead = yield* fs.readDirectory(targetDirectory, { recursive: true }); + if (EffectArray.isNonEmptyArray(targetDirRead)) { + return yield* Console.error('The selected directory is not empty'); + } + } else { + // create the target directory + yield* fs.makeDirectory(targetDirectory, { recursive: true }); } - } else { - // create the target directory - yield* fs.makeDirectory(targetDirectory, { recursive: true }); - } - return yield* Console.log('selected template', { template, appName, targetDirectory }); - }), + yield* Console.log(`Scaffolding ${template} hypergraph app in ${targetDirectory}...`); + + // retrieve template directory based on selected template + const templateDir = path.resolve(fileURLToPath(import.meta.url), '..', '..', framework.directory); + const templatDirExists = yield* fs.exists(templateDir); + if (!templatDirExists) { + return yield* Console.error('Selected template does not exist'); + } + + /** + * Updates the name of the template package.json to the user-entered name in the prompt + */ + function updatePackageJson(directory: string) { + return Effect.gen(function* () { + const packageJsonPath = path.join(directory, 'package.json'); + // read the cloned package.json + const packageJson = yield* fs.readFileString(packageJsonPath).pipe(Effect.map(JSON.parse)); + + const validatedPackageName = Utils.validatePackageName(appName); + const name = validatedPackageName.normalizedName; + // update the name and description + packageJson.name = name; + + // rewrite file + yield* fs.writeFileString(packageJsonPath, JSON.stringify(packageJson, null, 2)); + }); + } + + function copyTemplate(src: string, dest: string): Effect.Effect { + return Effect.gen(function* () { + const skipDir = new Set(['node_modules', '.tanstack', 'dist']); + + yield* fs.makeDirectory(dest, { recursive: true }); + const entries = readdirSync(src, { withFileTypes: true }); + + for (const entry of entries) { + // Skip .git directory + if (EffectString.startsWith('.git')(entry.name)) continue; + // Skip the node_modules, .tanstack and dist directories + if (entry.isDirectory() && skipDir.has(entry.name)) continue; + + const srcPath = path.join(src, entry.name); + const destPath = path.join(dest, entry.name); + + if (entry.isDirectory()) { + yield* copyTemplate(srcPath, destPath); + } else { + yield* fs.copyFile(srcPath, destPath); + } + } + }); + } + + const installDepsInScaffoldedApp = Effect.async((resume) => { + try { + execSync(`${pkgMananger} install`, { + stdio: 'inherit', + cwd: targetDirectory, + }); + return resume(Effect.void); + } catch (err) { + return resume(Effect.fail(new InstallDepsError({ cause: err }))); + } + }); + + const initializeGit = Effect.gen(function* () { + yield* Effect.try({ + try: () => { + execSync('git init', { + stdio: 'inherit', + cwd: targetDirectory, + }); + }, + catch: (err) => new InitializeGitRepoError({ cause: err }), + }); + + yield* Effect.try({ + try: () => { + execSync('git add .', { + stdio: 'inherit', + cwd: targetDirectory, + }); + }, + catch: (err) => new InitializeGitRepoError({ cause: err }), + }); + + yield* Effect.try({ + try: () => { + execSync('git commit -m "Initial commit - Scaffold Hypergraph app"', { + stdio: 'inherit', + cwd: targetDirectory, + }); + }, + catch: (err) => new InitializeGitRepoError({ cause: err }), + }); + }); + + return yield* copyTemplate(templateDir, targetDirectory).pipe( + Effect.tapErrorCause((cause) => + Console.error('Failure copying the template directory files into your target directory', Cause.pretty(cause)), + ), + Effect.andThen(() => updatePackageJson(targetDirectory)), + // Initialize the git repo if user selected to + Effect.andThen(() => Effect.when(initializeGit, () => initializeGitRepo)), + Effect.tapErrorCause((cause) => Console.error('Failure initializing the git repository', Cause.pretty(cause))), + // Install the deps with the selected package manager if user selected to + Effect.andThen(() => Effect.when(installDepsInScaffoldedApp, () => installDeps)), + Effect.tapErrorCause((cause) => + Console.error(`Failure installing deps with ${pkgMananger}`, Cause.pretty(cause)), + ), + // success. inform user + Effect.andThen(() => + Console.log( + `🎉 Successfully scaffolded your hypergraph enabled app ${appName}!`, + '\r\n', + 'To start the app, run:', + '\r\n', + `cd ${appName}`, + installDeps ? '\r\n' : `\r\n${pkgMananger} install`, + '\r\n', + `${pkgMananger} run dev`, + ), + ), + ); + }), ).pipe( Command.withDescription('Command line interface to scaffold a Hypergraph-enabled application'), Command.provide(NodeFileSystem.layer), @@ -69,3 +232,12 @@ export const run = Command.run(createHypergraphApp, { name: 'create-hypergraph-app', version: '0.0.1', }); + +class InitializeGitRepoError extends Data.TaggedError( + 'Hypergraph/create-hypergraph-app/errors/InitializeGitRepoError', +)<{ + readonly cause: unknown; +}> {} +class InstallDepsError extends Data.TaggedError('Hypergraph/create-hypergraph-app/errors/InstallDepsError')<{ + readonly cause: unknown; +}> {} diff --git a/apps/create-hypergraph-app/src/Utils.ts b/apps/create-hypergraph-app/src/Utils.ts new file mode 100644 index 00000000..6cae6ec2 --- /dev/null +++ b/apps/create-hypergraph-app/src/Utils.ts @@ -0,0 +1,93 @@ +/** + * Validates and normalizes a package name according to npm rules + * Uses the official npm package name regex: + * "^(?:(?:@(?:[a-z0-9-*~][a-z0-9-*._~]*)?/[a-z0-9-._~])|[a-z0-9-~])[a-z0-9-._~]*$" + * + * @param name The proposed package name to validate + * @returns An object with validity status, normalized name and error message if invalid + */ +export function validatePackageName(name: string): { + isValid: boolean; + normalizedName: string; + errorMessage?: string; +} { + // Trim whitespace + const normalizedName = name.trim(); + + // Package name cannot be empty + if (!normalizedName) { + return { + isValid: false, + normalizedName: '', + errorMessage: 'Package name cannot be empty', + }; + } + + // Package name length constraints (npm limits to 214 chars) + if (normalizedName.length > 214) { + return { + isValid: false, + normalizedName, + errorMessage: 'Package name cannot exceed 214 characters', + }; + } + + // Use the official npm package name regex + const npmPackageNameRegex = /^(?:(?:@(?:[a-z0-9-*~][a-z0-9-*._~]*)?\/[a-z0-9-._~])|[a-z0-9-~])[a-z0-9-._~]*$/; + + // If the name already matches the regex, it's valid + if (npmPackageNameRegex.test(normalizedName)) { + return { + isValid: true, + normalizedName, + }; + } + + // Name is invalid, let's try to normalize it + + // Convert to lowercase (package names cannot contain uppercase) + let suggestedName = normalizedName.toLowerCase(); + + // Handle scoped packages (@username/package-name) + const isScopedPackage = suggestedName.startsWith('@'); + + if (isScopedPackage) { + const parts = suggestedName.split('/'); + + if (parts.length !== 2) { + // Malformed scoped package, fix the structure + const scopeName = parts[0].replace(/[^a-z0-9-*~]/g, '-').replace(/^@/, '@'); + const packageName = (parts[1] || 'package').replace(/[^a-z0-9-._~]/g, '-'); + suggestedName = `${scopeName}/${packageName}`; + } else { + // Fix each part of the scoped package + const scopeName = parts[0].replace(/[^a-z0-9-*~@]/g, '-'); + const packageName = parts[1].replace(/[^a-z0-9-._~]/g, '-'); + suggestedName = `${scopeName}/${packageName}`; + } + } else { + // Regular package (not scoped) + + // Remove invalid starting characters (only allow a-z, 0-9, tilde, hyphen) + suggestedName = suggestedName.replace(/^[^a-z0-9-~]+/, ''); + + if (suggestedName === '') { + suggestedName = 'package'; // Default if nothing valid remains + } + + // Replace invalid characters with hyphens + suggestedName = suggestedName.replace(/[^a-z0-9-._~]/g, '-'); + } + + // Test if our suggestion is valid + if (!npmPackageNameRegex.test(suggestedName)) { + // If still invalid, provide a simple fallback + suggestedName = isScopedPackage ? '@user/package' : 'package'; + } + + return { + isValid: false, + normalizedName: suggestedName, + errorMessage: `Invalid package name. Suggested alternative: ${suggestedName}`, + }; +} diff --git a/apps/create-hypergraph-app/test/Utils.test.ts b/apps/create-hypergraph-app/test/Utils.test.ts new file mode 100644 index 00000000..a394b791 --- /dev/null +++ b/apps/create-hypergraph-app/test/Utils.test.ts @@ -0,0 +1,207 @@ +import { describe, expect, it } from '@effect/vitest'; + +import * as Utils from '../src/Utils.js'; + +describe('Utils', () => { + describe('validatePackageName', () => { + describe('valid package names', () => { + it('should accept simple lowercase names', () => { + const result = Utils.validatePackageName('mypackage'); + expect(result.isValid).toBe(true); + expect(result.normalizedName).toBe('mypackage'); + expect(result.errorMessage).toBeUndefined(); + }); + + it('should accept names with hyphens', () => { + const result = Utils.validatePackageName('my-package-name'); + expect(result.isValid).toBe(true); + expect(result.normalizedName).toBe('my-package-name'); + }); + + it('should accept names with dots', () => { + const result = Utils.validatePackageName('my.package.name'); + expect(result.isValid).toBe(true); + expect(result.normalizedName).toBe('my.package.name'); + }); + + it('should accept names with underscores', () => { + const result = Utils.validatePackageName('my_package_name'); + expect(result.isValid).toBe(true); + expect(result.normalizedName).toBe('my_package_name'); + }); + + it('should accept names starting with numbers', () => { + const result = Utils.validatePackageName('123package'); + expect(result.isValid).toBe(true); + expect(result.normalizedName).toBe('123package'); + }); + + it('should accept names starting with tilde', () => { + const result = Utils.validatePackageName('~package'); + expect(result.isValid).toBe(true); + expect(result.normalizedName).toBe('~package'); + }); + + it('should accept valid scoped packages', () => { + const result = Utils.validatePackageName('@myorg/mypackage'); + expect(result.isValid).toBe(true); + expect(result.normalizedName).toBe('@myorg/mypackage'); + }); + + it('should accept scoped packages with dots and underscores', () => { + const result = Utils.validatePackageName('@my-org/my.package_name'); + expect(result.isValid).toBe(true); + expect(result.normalizedName).toBe('@my-org/my.package_name'); + }); + + it('should trim whitespace and validate', () => { + const result = Utils.validatePackageName(' mypackage '); + expect(result.isValid).toBe(true); + expect(result.normalizedName).toBe('mypackage'); + }); + }); + + describe('invalid package names', () => { + it('should reject empty names', () => { + const result = Utils.validatePackageName(''); + expect(result.isValid).toBe(false); + expect(result.normalizedName).toBe(''); + expect(result.errorMessage).toBe('Package name cannot be empty'); + }); + + it('should reject names with only whitespace', () => { + const result = Utils.validatePackageName(' '); + expect(result.isValid).toBe(false); + expect(result.normalizedName).toBe(''); + expect(result.errorMessage).toBe('Package name cannot be empty'); + }); + + it('should reject names exceeding 214 characters', () => { + const longName = 'a'.repeat(215); + const result = Utils.validatePackageName(longName); + expect(result.isValid).toBe(false); + expect(result.errorMessage).toBe('Package name cannot exceed 214 characters'); + }); + + it('should reject names with uppercase letters', () => { + const result = Utils.validatePackageName('MyPackage'); + expect(result.isValid).toBe(false); + expect(result.normalizedName).toBe('mypackage'); + expect(result.errorMessage).toContain('Invalid package name'); + }); + + it('should reject names with spaces', () => { + const result = Utils.validatePackageName('my package'); + expect(result.isValid).toBe(false); + expect(result.normalizedName).toBe('my-package'); + }); + + it('should reject names with special characters', () => { + const result = Utils.validatePackageName('my@package!'); + expect(result.isValid).toBe(false); + expect(result.normalizedName).toBe('my-package-'); + }); + + it('should reject names starting with invalid characters', () => { + const result = Utils.validatePackageName('!package'); + expect(result.isValid).toBe(false); + expect(result.normalizedName).toBe('package'); + }); + + it('should reject malformed scoped packages', () => { + const result = Utils.validatePackageName('@myorg'); + expect(result.isValid).toBe(false); + expect(result.normalizedName).toBe('@user/package'); + }); + + it('should reject scoped packages with multiple slashes', () => { + const result = Utils.validatePackageName('@myorg/sub/package'); + expect(result.isValid).toBe(false); + expect(result.normalizedName).toBe('@user/package'); + }); + }); + + describe('package name normalization', () => { + it('should convert uppercase to lowercase', () => { + const result = Utils.validatePackageName('MYPACKAGE'); + expect(result.isValid).toBe(false); + expect(result.normalizedName).toBe('mypackage'); + }); + + it('should replace spaces with hyphens', () => { + const result = Utils.validatePackageName('my awesome package'); + expect(result.isValid).toBe(false); + expect(result.normalizedName).toBe('my-awesome-package'); + }); + + it('should remove invalid starting characters', () => { + const result = Utils.validatePackageName('###package'); + expect(result.isValid).toBe(false); + expect(result.normalizedName).toBe('package'); + }); + + it('should handle names that become empty after cleaning', () => { + const result = Utils.validatePackageName('###'); + expect(result.isValid).toBe(false); + expect(result.normalizedName).toBe('package'); + }); + + it('should normalize scoped packages correctly', () => { + const result = Utils.validatePackageName('@My Org/My Package'); + expect(result.isValid).toBe(false); + expect(result.normalizedName).toBe('@my-org/my-package'); + }); + + it('should handle scoped packages with invalid characters', () => { + const result = Utils.validatePackageName('@my!org/my!package'); + expect(result.isValid).toBe(false); + expect(result.normalizedName).toBe('@my-org/my-package'); + }); + + it('should provide fallback for completely invalid names', () => { + const result = Utils.validatePackageName('@###/###'); + expect(result.isValid).toBe(false); + expect(result.normalizedName).toBe('@---/---'); + }); + }); + + describe('edge cases', () => { + it('should handle single character names', () => { + const result = Utils.validatePackageName('a'); + expect(result.isValid).toBe(true); + expect(result.normalizedName).toBe('a'); + }); + + it('should handle names at exactly 214 characters', () => { + const maxLengthName = 'a'.repeat(214); + const result = Utils.validatePackageName(maxLengthName); + expect(result.isValid).toBe(true); + expect(result.normalizedName).toBe(maxLengthName); + }); + + it('should handle scoped packages with empty scope', () => { + const result = Utils.validatePackageName('@/package'); + expect(result.isValid).toBe(true); + expect(result.normalizedName).toBe('@/package'); + }); + + it('should handle scoped packages with empty package name', () => { + const result = Utils.validatePackageName('@myorg/'); + expect(result.isValid).toBe(false); + expect(result.normalizedName).toBe('@user/package'); + }); + + it('should handle names with consecutive special characters', () => { + const result = Utils.validatePackageName('my---package'); + expect(result.isValid).toBe(true); + expect(result.normalizedName).toBe('my---package'); + }); + + it('should handle names with mixed valid and invalid characters', () => { + const result = Utils.validatePackageName('my$package%name'); + expect(result.isValid).toBe(false); + expect(result.normalizedName).toBe('my-package-name'); + }); + }); + }); +}); diff --git a/apps/create-hypergraph-app/tsconfig.test.json b/apps/create-hypergraph-app/tsconfig.test.json new file mode 100644 index 00000000..52509c9f --- /dev/null +++ b/apps/create-hypergraph-app/tsconfig.test.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.base.json", + "include": ["test"], + "compilerOptions": { + "types": ["node"], + "tsBuildInfoFile": ".tsbuildinfo/test.tsbuildinfo", + "rootDir": "test", + "noEmit": true + } +} diff --git a/apps/create-hypergraph-app/vitest.config.ts b/apps/create-hypergraph-app/vitest.config.ts new file mode 100644 index 00000000..e516a830 --- /dev/null +++ b/apps/create-hypergraph-app/vitest.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: ['./test/**/*.test.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + exclude: [], + globals: true, + coverage: { + provider: 'v8', + }, + }, +}); diff --git a/apps/typesync/package.json b/apps/typesync/package.json index d6c4afe0..c7950b1c 100644 --- a/apps/typesync/package.json +++ b/apps/typesync/package.json @@ -43,6 +43,7 @@ "@effect/language-service": "^0.28.0", "@effect/platform": "^0.89.0", "@effect/platform-node": "^0.92.0", + "@effect/printer": "^0.45.0", "@effect/sql": "^0.43.0", "@effect/sql-sqlite-node": "^0.44.0", "@effect/vitest": "^0.25.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 57c4d8bd..e6c42ab6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -582,6 +582,9 @@ importers: '@effect/platform-node': specifier: ^0.92.0 version: 0.92.0(@effect/cluster@0.37.2(@effect/platform@0.89.0(effect@3.17.0))(@effect/rpc@0.61.4(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/sql@0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/workflow@0.1.2(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(@effect/rpc@0.61.4(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/sql@0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(bufferutil@4.0.9)(effect@3.17.0)(utf-8-validate@5.0.10) + '@effect/printer': + specifier: ^0.45.0 + version: 0.45.0(@effect/typeclass@0.31.10(effect@3.17.0))(effect@3.17.0) '@effect/sql': specifier: ^0.43.0 version: 0.43.0(@effect/experimental@0.53.0(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0))(@effect/platform@0.89.0(effect@3.17.0))(effect@3.17.0) diff --git a/tsconfig.json b/tsconfig.json index 5ba7f73b..63ecfed0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,6 +8,7 @@ { "path": "apps/server" }, { "path": "apps/connect" }, { "path": "apps/events" }, - { "path": "apps/typesync" } + { "path": "apps/typesync" }, + { "path": "apps/create-hypergraph-app" } ] } From 68a79db051ec0c64aca3e1f1932d9aecde04bb09 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Tue, 22 Jul 2025 10:38:05 -1000 Subject: [PATCH 08/20] feat(#351 | create-hypergraph-app): rebase main. sort order import --- apps/create-hypergraph-app/package.json | 4 +++- apps/create-hypergraph-app/src/Cli.ts | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/create-hypergraph-app/package.json b/apps/create-hypergraph-app/package.json index 768ac90a..e583d3e8 100644 --- a/apps/create-hypergraph-app/package.json +++ b/apps/create-hypergraph-app/package.json @@ -26,7 +26,9 @@ "dev": "pnpx tsx ./src/bin.ts", "build": "tsdown", "check": "tsc --noEmit", - "start": "node ./dist/bin.js" + "start": "node ./dist/bin.js", + "lint": "biome check", + "lint:fix": "biome check --write --unsafe" }, "keywords": [ "The Graph", diff --git a/apps/create-hypergraph-app/src/Cli.ts b/apps/create-hypergraph-app/src/Cli.ts index b7a1d529..183ae93b 100644 --- a/apps/create-hypergraph-app/src/Cli.ts +++ b/apps/create-hypergraph-app/src/Cli.ts @@ -3,8 +3,8 @@ import { readdirSync } from 'node:fs'; import { fileURLToPath } from 'node:url'; import { Command, Prompt } from '@effect/cli'; import { FileSystem, Path } from '@effect/platform'; -import { NodeFileSystem } from '@effect/platform-node'; import type { PlatformError } from '@effect/platform/Error'; +import { NodeFileSystem } from '@effect/platform-node'; import { Cause, Console, Data, Effect, Array as EffectArray, String as EffectString, Schema } from 'effect'; import type { NonEmptyReadonlyArray } from 'effect/Array'; From 39beee4a3063711804816bc600e6e93c04c82333 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Tue, 22 Jul 2025 18:11:32 -1000 Subject: [PATCH 09/20] feat(#351 | create-hypergraph-app): fixes. updates from testing --- apps/create-hypergraph-app/README.md | 12 + apps/create-hypergraph-app/package.json | 18 +- .../scripts/copy-package-json.ts | 43 +++ apps/create-hypergraph-app/src/Cli.ts | 73 ++++-- apps/create-hypergraph-app/src/Logger.ts | 20 ++ apps/create-hypergraph-app/src/Utils.ts | 132 +++++++++- apps/create-hypergraph-app/src/bin.ts | 11 +- apps/create-hypergraph-app/test/Utils.test.ts | 246 +++++++++++++++--- apps/create-hypergraph-app/tsconfig.json | 2 +- .../tsconfig.scripts.json | 2 +- pnpm-lock.yaml | 59 ++--- 11 files changed, 517 insertions(+), 101 deletions(-) create mode 100644 apps/create-hypergraph-app/scripts/copy-package-json.ts create mode 100644 apps/create-hypergraph-app/src/Logger.ts diff --git a/apps/create-hypergraph-app/README.md b/apps/create-hypergraph-app/README.md index 49bb1df3..32896243 100644 --- a/apps/create-hypergraph-app/README.md +++ b/apps/create-hypergraph-app/README.md @@ -36,6 +36,18 @@ Then follow the given prompts. - vite + react +## Example: scaffolding a vite + react app, initializing the git repo and installing deps with pnpm + +```bash +✔ What is your app named? … my-hypergraph-app +✔ Choose your template … Vite + React +✔ What package manager do you want to use? … pnpm +✔ Do you want us to install deps? … Yes / No +✔ Initialize a git repository? … Yes / No +Scaffolding vite-react hypergraph app in /my-hypergraph-app... +Initialized empty Git repository +``` + ## References - [create vite app](https://github.com/vitejs/vite/tree/main/packages/create-vite) diff --git a/apps/create-hypergraph-app/package.json b/apps/create-hypergraph-app/package.json index e583d3e8..a49ebf74 100644 --- a/apps/create-hypergraph-app/package.json +++ b/apps/create-hypergraph-app/package.json @@ -1,15 +1,15 @@ { "name": "@graphprotocol/create-hypergraph-app", - "version": "0.0.1", + "version": "0.0.0-alpha.10", "description": "CLI toolchain to scaffold a hypergraph-enabled application with a given template.", "type": "module", "bin": { - "create-hypergraph-app": "dist/bin.js", - "cha": "dist/bin.js" + "create-hypergraph-app": "./dist/bin.js", + "cha": "./dist/bin.js" }, "files": [ - "dist", - "template-*" + "template-*", + "dist" ], "repository": { "type": "git", @@ -24,7 +24,10 @@ "scripts": { "test": "vitest run", "dev": "pnpx tsx ./src/bin.ts", - "build": "tsdown", + "build": "tsdown && tsx scripts/copy-package-json.ts && pnpm run copy-all", + "copy-templates": "cp -r template-* dist/", + "copy-readme": "cp README.md dist/README.md", + "copy-all": "pnpm run copy-templates && pnpm run copy-readme", "check": "tsc --noEmit", "start": "node ./dist/bin.js", "lint": "biome check", @@ -54,6 +57,7 @@ "@effect/vitest": "^0.25.0", "@types/node": "^24.1.0", "effect": "^3.17.0", - "tsdown": "^0.12.9" + "tsdown": "^0.13.0", + "tsx": "^4.20.3" } } diff --git a/apps/create-hypergraph-app/scripts/copy-package-json.ts b/apps/create-hypergraph-app/scripts/copy-package-json.ts new file mode 100644 index 00000000..8ace73b2 --- /dev/null +++ b/apps/create-hypergraph-app/scripts/copy-package-json.ts @@ -0,0 +1,43 @@ +import * as path from 'node:path'; +import * as FileSystem from '@effect/platform/FileSystem'; +import * as NodeFileSystem from '@effect/platform-node/NodeFileSystem'; +import { Effect, pipe } from 'effect'; + +const read = pipe( + FileSystem.FileSystem, + Effect.flatMap((fileSystem) => fileSystem.readFileString('package.json')), + Effect.map((_) => JSON.parse(_)), + Effect.map((json) => ({ + name: json.name, + version: json.version, + description: json.description, + bin: { + 'create-hypergraph-app': 'bin.js', + cha: 'bin.js', + }, + engines: json.engines, + repository: json.repository, + license: json.license, + bugs: json.bugs, + homepage: json.homepage, + tags: json.tags, + keywords: json.keywords, + dependencies: json.dependencies, + })), +); + +const pathTo = path.join('dist', 'package.json'); + +const write = (pkg: object) => + FileSystem.FileSystem.pipe( + Effect.flatMap((fileSystem) => fileSystem.writeFileString(pathTo, JSON.stringify(pkg, null, 2))), + ); + +const program = pipe( + Effect.log(`Copying package.json to ${pathTo}...`), + Effect.zipRight(read), + Effect.flatMap(write), + Effect.provide(NodeFileSystem.layer), +); + +Effect.runPromise(program); diff --git a/apps/create-hypergraph-app/src/Cli.ts b/apps/create-hypergraph-app/src/Cli.ts index 183ae93b..6565219e 100644 --- a/apps/create-hypergraph-app/src/Cli.ts +++ b/apps/create-hypergraph-app/src/Cli.ts @@ -5,7 +5,8 @@ import { Command, Prompt } from '@effect/cli'; import { FileSystem, Path } from '@effect/platform'; import type { PlatformError } from '@effect/platform/Error'; import { NodeFileSystem } from '@effect/platform-node'; -import { Cause, Console, Data, Effect, Array as EffectArray, String as EffectString, Schema } from 'effect'; +import { Ansi, AnsiDoc } from '@effect/printer-ansi'; +import { Cause, Data, Effect, Array as EffectArray, String as EffectString, Schema } from 'effect'; import type { NonEmptyReadonlyArray } from 'effect/Array'; import * as Utils from './Utils.js'; @@ -13,6 +14,9 @@ import * as Utils from './Utils.js'; const appNamePrompt = Prompt.text({ message: 'What is your app named?', default: 'my-hypergraph-app', + validate(value) { + return Utils.validateProjectName(value); + }, }); const AvailableFrameworkKey = Schema.Union(Schema.Literal('vite-react')); @@ -22,6 +26,7 @@ const Framework = Schema.Record({ key: AvailableFrameworkKey, value: Schema.Struct({ directory: Schema.NonEmptyTrimmedString, + skipDirectories: Schema.Set(Schema.NonEmptyTrimmedString), }), }); type Framework = typeof Framework.Type; @@ -29,6 +34,7 @@ type Framework = typeof Framework.Type; const availableFrameworks = { 'vite-react': { directory: 'template-vite-react', + skipDirectories: new Set([...Utils.ALWAYS_SKIP_DIRECTORIES, '.tanstack', 'dist']), }, } as const satisfies Framework; const templatePrompt = Prompt.select({ @@ -62,7 +68,7 @@ const installDepsPropmpt = Prompt.toggle({ const initializeGitRepoPrompt = Prompt.toggle({ message: 'Initialize a git repository?', - active: 'Tes', + active: 'Yes', inactive: 'No', initial: true, }); @@ -91,20 +97,34 @@ const createHypergraphApp = Command.prompt( if (exists) { const targetDirRead = yield* fs.readDirectory(targetDirectory, { recursive: true }); if (EffectArray.isNonEmptyArray(targetDirRead)) { - return yield* Console.error('The selected directory is not empty'); + return yield* Effect.logError( + AnsiDoc.vsep([ + AnsiDoc.text('The selected directory is not empty.').pipe(AnsiDoc.annotate(Ansi.red)), + AnsiDoc.text(`Please choose an empty directory, or clean ${targetDirectory}`), + ]), + ); } } else { // create the target directory yield* fs.makeDirectory(targetDirectory, { recursive: true }); } - yield* Console.log(`Scaffolding ${template} hypergraph app in ${targetDirectory}...`); + yield* Effect.logInfo(AnsiDoc.text(`Scaffolding Hypergraph app ${appName} with template ${template}`)); // retrieve template directory based on selected template - const templateDir = path.resolve(fileURLToPath(import.meta.url), '..', '..', framework.directory); + const __filename = import.meta.filename; + const __dirname = path.dirname(fileURLToPath(import.meta.url)); + + const templateDir = EffectString.endsWith('Cli.ts')(__filename) + ? // running locally + path.resolve(__dirname, '..', '..', framework.directory) + : // running the published version + path.resolve(__dirname, framework.directory); const templatDirExists = yield* fs.exists(templateDir); if (!templatDirExists) { - return yield* Console.error('Selected template does not exist'); + return yield* Effect.logError( + AnsiDoc.text(`Selected template ${template} does not exist`).pipe(AnsiDoc.annotate(Ansi.red)), + ); } /** @@ -128,16 +148,12 @@ const createHypergraphApp = Command.prompt( function copyTemplate(src: string, dest: string): Effect.Effect { return Effect.gen(function* () { - const skipDir = new Set(['node_modules', '.tanstack', 'dist']); - yield* fs.makeDirectory(dest, { recursive: true }); const entries = readdirSync(src, { withFileTypes: true }); for (const entry of entries) { - // Skip .git directory - if (EffectString.startsWith('.git')(entry.name)) continue; - // Skip the node_modules, .tanstack and dist directories - if (entry.isDirectory() && skipDir.has(entry.name)) continue; + // Skip the node_modules, .tanstack, dist, and .git directories + if (entry.isDirectory() && framework.skipDirectories.has(entry.name)) continue; const srcPath = path.join(src, entry.name); const destPath = path.join(dest, entry.name); @@ -166,7 +182,7 @@ const createHypergraphApp = Command.prompt( const initializeGit = Effect.gen(function* () { yield* Effect.try({ try: () => { - execSync('git init', { + execSync('git init -q', { stdio: 'inherit', cwd: targetDirectory, }); @@ -186,7 +202,7 @@ const createHypergraphApp = Command.prompt( yield* Effect.try({ try: () => { - execSync('git commit -m "Initial commit - Scaffold Hypergraph app"', { + execSync('git commit -q -m "Initial commit - Scaffold Hypergraph app"', { stdio: 'inherit', cwd: targetDirectory, }); @@ -197,28 +213,33 @@ const createHypergraphApp = Command.prompt( return yield* copyTemplate(templateDir, targetDirectory).pipe( Effect.tapErrorCause((cause) => - Console.error('Failure copying the template directory files into your target directory', Cause.pretty(cause)), + Effect.logError( + 'Failure copying the template directory files into your target directory', + Cause.pretty(cause), + ), ), Effect.andThen(() => updatePackageJson(targetDirectory)), // Initialize the git repo if user selected to Effect.andThen(() => Effect.when(initializeGit, () => initializeGitRepo)), - Effect.tapErrorCause((cause) => Console.error('Failure initializing the git repository', Cause.pretty(cause))), + Effect.tapErrorCause((cause) => + Effect.logError('Failure initializing the git repository', Cause.pretty(cause)), + ), // Install the deps with the selected package manager if user selected to Effect.andThen(() => Effect.when(installDepsInScaffoldedApp, () => installDeps)), Effect.tapErrorCause((cause) => - Console.error(`Failure installing deps with ${pkgMananger}`, Cause.pretty(cause)), + Effect.logError(`Failure installing deps with ${pkgMananger}`, Cause.pretty(cause)), ), // success. inform user Effect.andThen(() => - Console.log( - `🎉 Successfully scaffolded your hypergraph enabled app ${appName}!`, - '\r\n', - 'To start the app, run:', - '\r\n', - `cd ${appName}`, - installDeps ? '\r\n' : `\r\n${pkgMananger} install`, + Effect.logInfo( + AnsiDoc.text(`🎉 Successfully scaffolded your hypergraph enabled app ${appName}!`), + '\r\n\r\n', + AnsiDoc.text('To start the app, run:'), + '\r\n\r\n', + AnsiDoc.text(`cd ${appName}`), + installDeps ? '\r\n' : AnsiDoc.text(`${pkgMananger} install`), '\r\n', - `${pkgMananger} run dev`, + AnsiDoc.text(`${pkgMananger} run dev`), ), ), ); @@ -230,7 +251,7 @@ const createHypergraphApp = Command.prompt( export const run = Command.run(createHypergraphApp, { name: 'create-hypergraph-app', - version: '0.0.1', + version: '0.0.0-alpha.10', }); class InitializeGitRepoError extends Data.TaggedError( diff --git a/apps/create-hypergraph-app/src/Logger.ts b/apps/create-hypergraph-app/src/Logger.ts new file mode 100644 index 00000000..bcdb898f --- /dev/null +++ b/apps/create-hypergraph-app/src/Logger.ts @@ -0,0 +1,20 @@ +import * as Ansi from '@effect/printer-ansi/Ansi'; +import * as AnsiDoc from '@effect/printer-ansi/AnsiDoc'; +import * as EffectArray from 'effect/Array'; +import * as Logger from 'effect/Logger'; + +export const AnsiDocLogger = Logger.make(({ message }) => { + const messageArr = EffectArray.ensure(message); + for (let i = 0; i < messageArr.length; i++) { + const currentMessage = messageArr[i]; + if (AnsiDoc.isDoc(currentMessage)) { + const prefix = AnsiDoc.text('create-hypergraph-app').pipe( + AnsiDoc.annotate(Ansi.cyan), + AnsiDoc.squareBracketed, + AnsiDoc.cat(AnsiDoc.colon), + ); + const document = AnsiDoc.catWithSpace(prefix, currentMessage as AnsiDoc.AnsiDoc); + globalThis.console.log(AnsiDoc.render(document, { style: 'pretty' })); + } + } +}); diff --git a/apps/create-hypergraph-app/src/Utils.ts b/apps/create-hypergraph-app/src/Utils.ts index 6cae6ec2..1f46056f 100644 --- a/apps/create-hypergraph-app/src/Utils.ts +++ b/apps/create-hypergraph-app/src/Utils.ts @@ -1,5 +1,135 @@ +import * as Effect from 'effect/Effect'; + +export const ALWAYS_SKIP_DIRECTORIES = ['node_modules', '.git']; + +const SCOPED_PACKAGE_REGEX = /^(?:@([^/]+?)[/])?([^/]+?)$/; + +const blockList = ['node_modules', 'favicon.ico']; + +// Generated with node -e 'console.log(require("module").builtinModules)' +const nodeBuiltins = [ + '_http_agent', + '_http_client', + '_http_common', + '_http_incoming', + '_http_outgoing', + '_http_server', + '_stream_duplex', + '_stream_passthrough', + '_stream_readable', + '_stream_transform', + '_stream_wrap', + '_stream_writable', + '_tls_common', + '_tls_wrap', + 'assert', + 'assert/strict', + 'async_hooks', + 'buffer', + 'child_process', + 'cluster', + 'console', + 'constants', + 'crypto', + 'dgram', + 'diagnostics_channel', + 'dns', + 'dns/promises', + 'domain', + 'events', + 'fs', + 'fs/promises', + 'http', + 'http2', + 'https', + 'inspector', + 'inspector/promises', + 'module', + 'net', + 'os', + 'path', + 'path/posix', + 'path/win32', + 'perf_hooks', + 'process', + 'punycode', + 'querystring', + 'readline', + 'readline/promises', + 'repl', + 'stream', + 'stream/consumers', + 'stream/promises', + 'stream/web', + 'string_decoder', + 'sys', + 'timers', + 'timers/promises', + 'tls', + 'trace_events', + 'tty', + 'url', + 'util', + 'util/types', + 'v8', + 'vm', + 'wasi', + 'worker_threads', + 'zlib', +]; + +const invalid = (message: string) => Effect.fail(message); + +export function validateProjectName(name: string): Effect.Effect { + if (name.length === 0) { + return invalid('Project name must be a non-empty string'); + } + if (name.length > 214) { + return invalid('Project name must not contain more than 214 characters'); + } + if (name.toLowerCase() !== name) { + return invalid('Project name must not contain capital letters'); + } + if (name.trim() !== name) { + return invalid('Project name must not contain leading or trailing whitespace'); + } + if (name.match(/^\./)) { + return invalid('Project name must not start with a period'); + } + if (name.match(/^_/)) { + return invalid('Project name must not start with an underscore'); + } + if (/[~'!()*]/.test(name.split('/').slice(-1)[0])) { + return invalid("Project name must not contain the special scharacters ~'!()*"); + } + const isNodeBuiltin = nodeBuiltins.some((builtinName) => { + return name.toLowerCase() === builtinName; + }); + if (isNodeBuiltin) { + return invalid('Project name must not be a NodeJS built-in module name'); + } + const isBlockedName = blockList.some((blockedName) => { + return name.toLowerCase() === blockedName; + }); + if (isBlockedName) { + return invalid(`Project name '${name}' is blocked from use`); + } + if (encodeURIComponent(name) !== name) { + // Check scoped packages + const result = name.match(SCOPED_PACKAGE_REGEX); + if (result) { + const user = result[1]; + const pkg = result[2]; + if (encodeURIComponent(user) !== user || encodeURIComponent(pkg) !== pkg) { + return invalid('Project name must only contain URL-friendly characters'); + } + } + } + return Effect.succeed(name); +} + /** - * Validates and normalizes a package name according to npm rules + * Validates and normalizes a package.json > name according to npm rules * Uses the official npm package name regex: * "^(?:(?:@(?:[a-z0-9-*~][a-z0-9-*._~]*)?/[a-z0-9-._~])|[a-z0-9-~])[a-z0-9-._~]*$" * diff --git a/apps/create-hypergraph-app/src/bin.ts b/apps/create-hypergraph-app/src/bin.ts index 50f1abb5..fd9fa568 100644 --- a/apps/create-hypergraph-app/src/bin.ts +++ b/apps/create-hypergraph-app/src/bin.ts @@ -2,11 +2,20 @@ import { NodeContext, NodeFileSystem, NodeRuntime } from '@effect/platform-node'; import * as Effect from 'effect/Effect'; +import * as Logger from 'effect/Logger'; +import * as LogLevel from 'effect/LogLevel'; import { run } from './Cli.js'; +import { AnsiDocLogger } from './Logger.js'; const runnable = Effect.suspend(() => run(process.argv)).pipe( + // replaces default logger with AnsiDocLogger + Effect.provide(Logger.replace(Logger.defaultLogger, AnsiDocLogger)), + Logger.withMinimumLogLevel(LogLevel.Info), Effect.provide(NodeFileSystem.layer), Effect.provide(NodeContext.layer), ); -runnable.pipe(NodeRuntime.runMain({ disableErrorReporting: process.env.NODE_ENV === 'prod' })); +runnable.pipe( + Effect.orDie, + NodeRuntime.runMain({ disableErrorReporting: process.env.NODE_ENV === 'prod', disablePrettyLogger: true }), +); diff --git a/apps/create-hypergraph-app/test/Utils.test.ts b/apps/create-hypergraph-app/test/Utils.test.ts index a394b791..308c6365 100644 --- a/apps/create-hypergraph-app/test/Utils.test.ts +++ b/apps/create-hypergraph-app/test/Utils.test.ts @@ -1,60 +1,62 @@ -import { describe, expect, it } from '@effect/vitest'; +import { describe, it } from '@effect/vitest'; +import * as Effect from 'effect/Effect'; +import * as Exit from 'effect/Exit'; import * as Utils from '../src/Utils.js'; describe('Utils', () => { describe('validatePackageName', () => { describe('valid package names', () => { - it('should accept simple lowercase names', () => { + it('should accept simple lowercase names', ({ expect }) => { const result = Utils.validatePackageName('mypackage'); expect(result.isValid).toBe(true); expect(result.normalizedName).toBe('mypackage'); expect(result.errorMessage).toBeUndefined(); }); - it('should accept names with hyphens', () => { + it('should accept names with hyphens', ({ expect }) => { const result = Utils.validatePackageName('my-package-name'); expect(result.isValid).toBe(true); expect(result.normalizedName).toBe('my-package-name'); }); - it('should accept names with dots', () => { + it('should accept names with dots', ({ expect }) => { const result = Utils.validatePackageName('my.package.name'); expect(result.isValid).toBe(true); expect(result.normalizedName).toBe('my.package.name'); }); - it('should accept names with underscores', () => { + it('should accept names with underscores', ({ expect }) => { const result = Utils.validatePackageName('my_package_name'); expect(result.isValid).toBe(true); expect(result.normalizedName).toBe('my_package_name'); }); - it('should accept names starting with numbers', () => { + it('should accept names starting with numbers', ({ expect }) => { const result = Utils.validatePackageName('123package'); expect(result.isValid).toBe(true); expect(result.normalizedName).toBe('123package'); }); - it('should accept names starting with tilde', () => { + it('should accept names starting with tilde', ({ expect }) => { const result = Utils.validatePackageName('~package'); expect(result.isValid).toBe(true); expect(result.normalizedName).toBe('~package'); }); - it('should accept valid scoped packages', () => { + it('should accept valid scoped packages', ({ expect }) => { const result = Utils.validatePackageName('@myorg/mypackage'); expect(result.isValid).toBe(true); expect(result.normalizedName).toBe('@myorg/mypackage'); }); - it('should accept scoped packages with dots and underscores', () => { + it('should accept scoped packages with dots and underscores', ({ expect }) => { const result = Utils.validatePackageName('@my-org/my.package_name'); expect(result.isValid).toBe(true); expect(result.normalizedName).toBe('@my-org/my.package_name'); }); - it('should trim whitespace and validate', () => { + it('should trim whitespace and validate', ({ expect }) => { const result = Utils.validatePackageName(' mypackage '); expect(result.isValid).toBe(true); expect(result.normalizedName).toBe('mypackage'); @@ -62,59 +64,59 @@ describe('Utils', () => { }); describe('invalid package names', () => { - it('should reject empty names', () => { + it('should reject empty names', ({ expect }) => { const result = Utils.validatePackageName(''); expect(result.isValid).toBe(false); expect(result.normalizedName).toBe(''); expect(result.errorMessage).toBe('Package name cannot be empty'); }); - it('should reject names with only whitespace', () => { + it('should reject names with only whitespace', ({ expect }) => { const result = Utils.validatePackageName(' '); expect(result.isValid).toBe(false); expect(result.normalizedName).toBe(''); expect(result.errorMessage).toBe('Package name cannot be empty'); }); - it('should reject names exceeding 214 characters', () => { + it('should reject names exceeding 214 characters', ({ expect }) => { const longName = 'a'.repeat(215); const result = Utils.validatePackageName(longName); expect(result.isValid).toBe(false); expect(result.errorMessage).toBe('Package name cannot exceed 214 characters'); }); - it('should reject names with uppercase letters', () => { + it('should reject names with uppercase letters', ({ expect }) => { const result = Utils.validatePackageName('MyPackage'); expect(result.isValid).toBe(false); expect(result.normalizedName).toBe('mypackage'); expect(result.errorMessage).toContain('Invalid package name'); }); - it('should reject names with spaces', () => { + it('should reject names with spaces', ({ expect }) => { const result = Utils.validatePackageName('my package'); expect(result.isValid).toBe(false); expect(result.normalizedName).toBe('my-package'); }); - it('should reject names with special characters', () => { + it('should reject names with special characters', ({ expect }) => { const result = Utils.validatePackageName('my@package!'); expect(result.isValid).toBe(false); expect(result.normalizedName).toBe('my-package-'); }); - it('should reject names starting with invalid characters', () => { + it('should reject names starting with invalid characters', ({ expect }) => { const result = Utils.validatePackageName('!package'); expect(result.isValid).toBe(false); expect(result.normalizedName).toBe('package'); }); - it('should reject malformed scoped packages', () => { + it('should reject malformed scoped packages', ({ expect }) => { const result = Utils.validatePackageName('@myorg'); expect(result.isValid).toBe(false); expect(result.normalizedName).toBe('@user/package'); }); - it('should reject scoped packages with multiple slashes', () => { + it('should reject scoped packages with multiple slashes', ({ expect }) => { const result = Utils.validatePackageName('@myorg/sub/package'); expect(result.isValid).toBe(false); expect(result.normalizedName).toBe('@user/package'); @@ -122,43 +124,43 @@ describe('Utils', () => { }); describe('package name normalization', () => { - it('should convert uppercase to lowercase', () => { + it('should convert uppercase to lowercase', ({ expect }) => { const result = Utils.validatePackageName('MYPACKAGE'); expect(result.isValid).toBe(false); expect(result.normalizedName).toBe('mypackage'); }); - it('should replace spaces with hyphens', () => { + it('should replace spaces with hyphens', ({ expect }) => { const result = Utils.validatePackageName('my awesome package'); expect(result.isValid).toBe(false); expect(result.normalizedName).toBe('my-awesome-package'); }); - it('should remove invalid starting characters', () => { + it('should remove invalid starting characters', ({ expect }) => { const result = Utils.validatePackageName('###package'); expect(result.isValid).toBe(false); expect(result.normalizedName).toBe('package'); }); - it('should handle names that become empty after cleaning', () => { + it('should handle names that become empty after cleaning', ({ expect }) => { const result = Utils.validatePackageName('###'); expect(result.isValid).toBe(false); expect(result.normalizedName).toBe('package'); }); - it('should normalize scoped packages correctly', () => { + it('should normalize scoped packages correctly', ({ expect }) => { const result = Utils.validatePackageName('@My Org/My Package'); expect(result.isValid).toBe(false); expect(result.normalizedName).toBe('@my-org/my-package'); }); - it('should handle scoped packages with invalid characters', () => { + it('should handle scoped packages with invalid characters', ({ expect }) => { const result = Utils.validatePackageName('@my!org/my!package'); expect(result.isValid).toBe(false); expect(result.normalizedName).toBe('@my-org/my-package'); }); - it('should provide fallback for completely invalid names', () => { + it('should provide fallback for completely invalid names', ({ expect }) => { const result = Utils.validatePackageName('@###/###'); expect(result.isValid).toBe(false); expect(result.normalizedName).toBe('@---/---'); @@ -166,42 +168,222 @@ describe('Utils', () => { }); describe('edge cases', () => { - it('should handle single character names', () => { + it('should handle single character names', ({ expect }) => { const result = Utils.validatePackageName('a'); expect(result.isValid).toBe(true); expect(result.normalizedName).toBe('a'); }); - it('should handle names at exactly 214 characters', () => { + it('should handle names at exactly 214 characters', ({ expect }) => { const maxLengthName = 'a'.repeat(214); const result = Utils.validatePackageName(maxLengthName); expect(result.isValid).toBe(true); expect(result.normalizedName).toBe(maxLengthName); }); - it('should handle scoped packages with empty scope', () => { + it('should handle scoped packages with empty scope', ({ expect }) => { const result = Utils.validatePackageName('@/package'); expect(result.isValid).toBe(true); expect(result.normalizedName).toBe('@/package'); }); - it('should handle scoped packages with empty package name', () => { + it('should handle scoped packages with empty package name', ({ expect }) => { const result = Utils.validatePackageName('@myorg/'); expect(result.isValid).toBe(false); expect(result.normalizedName).toBe('@user/package'); }); - it('should handle names with consecutive special characters', () => { + it('should handle names with consecutive special characters', ({ expect }) => { const result = Utils.validatePackageName('my---package'); expect(result.isValid).toBe(true); expect(result.normalizedName).toBe('my---package'); }); - it('should handle names with mixed valid and invalid characters', () => { + it('should handle names with mixed valid and invalid characters', ({ expect }) => { const result = Utils.validatePackageName('my$package%name'); expect(result.isValid).toBe(false); expect(result.normalizedName).toBe('my-package-name'); }); }); }); + + describe('validateProjectName', () => { + describe('valid project names', () => { + it.effect('should accept simple lowercase names', ({ expect }) => + Effect.gen(function* () { + const result = yield* Utils.validateProjectName('myproject'); + expect(result).toEqual('myproject'); + }), + ); + + it.effect('should accept names with hyphens', ({ expect }) => + Effect.gen(function* () { + const result = yield* Utils.validateProjectName('my-project-name'); + expect(result).toBe('my-project-name'); + }), + ); + + it.effect('should accept names with dots', ({ expect }) => + Effect.gen(function* () { + const result = yield* Utils.validateProjectName('my.project.name'); + expect(result).toBe('my.project.name'); + }), + ); + + it.effect('should accept names with underscores after the first character', ({ expect }) => + Effect.gen(function* () { + const result = yield* Utils.validateProjectName('m_project'); + expect(result).toBe('m_project'); + }), + ); + + it.effect('should accept names with numbers', ({ expect }) => + Effect.gen(function* () { + const result = yield* Utils.validateProjectName('project123'); + expect(result).toBe('project123'); + }), + ); + + it.effect('should accept scoped packages with valid characters', ({ expect }) => + Effect.gen(function* () { + const result = yield* Utils.validateProjectName('@myorg/myproject'); + expect(result).toBe('@myorg/myproject'); + }), + ); + + it.effect('should accept names at exactly 214 characters', ({ expect }) => + Effect.gen(function* () { + const maxLengthName = 'a'.repeat(214); + const result = yield* Utils.validateProjectName(maxLengthName); + expect(result).toBe(maxLengthName); + }), + ); + }); + + describe('invalid project names', () => { + it.effect('should reject empty names', ({ expect }) => + Effect.gen(function* () { + const result = yield* Effect.exit(Utils.validateProjectName('')); + expect(result).toStrictEqual(Exit.fail('Project name must be a non-empty string')); + }), + ); + + it.effect('should reject names exceeding 214 characters', ({ expect }) => + Effect.gen(function* () { + const longName = 'a'.repeat(215); + const result = yield* Effect.exit(Utils.validateProjectName(longName)); + expect(result).toStrictEqual(Exit.fail('Project name must not contain more than 214 characters')); + }), + ); + + it.effect('should reject names with uppercase letters', ({ expect }) => + Effect.gen(function* () { + const result = yield* Effect.exit(Utils.validateProjectName('MyProject')); + expect(result).toStrictEqual(Exit.fail('Project name must not contain capital letters')); + }), + ); + + it.effect('should reject names with leading whitespace', ({ expect }) => + Effect.gen(function* () { + const result = yield* Effect.exit(Utils.validateProjectName(' myproject')); + expect(result).toStrictEqual(Exit.fail('Project name must not contain leading or trailing whitespace')); + }), + ); + + it.effect('should reject names with trailing whitespace', ({ expect }) => + Effect.gen(function* () { + const result = yield* Effect.exit(Utils.validateProjectName('myproject ')); + expect(result).toStrictEqual(Exit.fail('Project name must not contain leading or trailing whitespace')); + }), + ); + + it.effect('should reject names starting with a period', ({ expect }) => + Effect.gen(function* () { + const result = yield* Effect.exit(Utils.validateProjectName('.myproject')); + expect(result).toStrictEqual(Exit.fail('Project name must not start with a period')); + }), + ); + + it.effect('should reject names starting with an underscore', ({ expect }) => + Effect.gen(function* () { + const result = yield* Effect.exit(Utils.validateProjectName('_myproject')); + expect(result).toStrictEqual(Exit.fail('Project name must not start with an underscore')); + }), + ); + + it.effect("should reject names with special characters ~'!()*", ({ expect }) => + Effect.gen(function* () { + const specialChars = ['~', "'", '!', '(', ')', '*']; + for (const char of specialChars) { + const result = yield* Effect.exit(Utils.validateProjectName(`my${char}project`)); + expect(result).toStrictEqual(Exit.fail("Project name must not contain the special scharacters ~'!()*")); + } + }), + ); + + it.effect('should reject NodeJS built-in module names', ({ expect }) => + Effect.gen(function* () { + const builtins = ['fs', 'path', 'http', 'crypto', 'buffer']; + for (const builtin of builtins) { + const result = yield* Effect.exit(Utils.validateProjectName(builtin)); + expect(result).toStrictEqual(Exit.fail('Project name must not be a NodeJS built-in module name')); + } + }), + ); + + it.effect('should reject blocked names', ({ expect }) => + Effect.gen(function* () { + const blockedNames = ['node_modules', 'favicon.ico']; + for (const blocked of blockedNames) { + const result = yield* Effect.exit(Utils.validateProjectName(blocked)); + expect(result).toStrictEqual(Exit.fail(`Project name '${blocked}' is blocked from use`)); + } + }), + ); + + it.effect('should reject names with non-URL-friendly characters', ({ expect }) => + Effect.gen(function* () { + const result = yield* Effect.exit(Utils.validateProjectName('my')); + expect(result).toStrictEqual(Exit.fail('Project name must only contain URL-friendly characters')); + }), + ); + + it.effect('should reject scoped packages with non-URL-friendly characters', ({ expect }) => + Effect.gen(function* () { + const result = yield* Effect.exit(Utils.validateProjectName('@my/my')); + expect(result).toStrictEqual(Exit.fail('Project name must only contain URL-friendly characters')); + }), + ); + }); + + describe('edge cases', () => { + it.effect('should accept single character names', ({ expect }) => + Effect.gen(function* () { + const result = yield* Utils.validateProjectName('a'); + expect(result).toBe('a'); + }), + ); + + it.effect('should handle scoped packages with special characters in last segment', ({ expect }) => + Effect.gen(function* () { + const result = yield* Effect.exit(Utils.validateProjectName('@myorg/my!project')); + expect(result).toStrictEqual(Exit.fail("Project name must not contain the special scharacters ~'!()*")); + }), + ); + + it.effect('should accept names with multiple dots and hyphens', ({ expect }) => + Effect.gen(function* () { + const result = yield* Utils.validateProjectName('my-project.test.utils'); + expect(result).toBe('my-project.test.utils'); + }), + ); + + it.effect('should accept URL-friendly special characters', ({ expect }) => + Effect.gen(function* () { + const result = yield* Utils.validateProjectName('my-project_v2.0'); + expect(result).toBe('my-project_v2.0'); + }), + ); + }); + }); }); diff --git a/apps/create-hypergraph-app/tsconfig.json b/apps/create-hypergraph-app/tsconfig.json index b35721c3..a1739aff 100644 --- a/apps/create-hypergraph-app/tsconfig.json +++ b/apps/create-hypergraph-app/tsconfig.json @@ -3,7 +3,7 @@ "include": [], "references": [ { "path": "./tsconfig.src.json" }, - { "path": "tsconfig.scripts.json" }, + { "path": "./tsconfig.scripts.json" }, // templates { "path": "./template-vite-react/tsconfig.json"} ] diff --git a/apps/create-hypergraph-app/tsconfig.scripts.json b/apps/create-hypergraph-app/tsconfig.scripts.json index 7b037fdc..e974d95c 100644 --- a/apps/create-hypergraph-app/tsconfig.scripts.json +++ b/apps/create-hypergraph-app/tsconfig.scripts.json @@ -1,6 +1,6 @@ { "extends": "../../tsconfig.base.json", - "include": ["tsdown.config.ts"], + "include": ["tsdown.config.ts", "scripts"], "compilerOptions": { "tsBuildInfoFile": ".tsbuildinfo/scripts.tsbuildinfo", "types": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 56ae7ee3..6f136773 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -163,9 +163,11 @@ importers: specifier: ^3.17.0 version: 3.17.0 tsdown: - specifier: ^0.12.9 - version: 0.12.9(typescript@5.8.3) - publishDirectory: dist + specifier: ^0.13.0 + version: 0.13.0(typescript@5.8.3) + tsx: + specifier: ^4.20.3 + version: 4.20.3 apps/create-hypergraph-app/template-vite-react: dependencies: @@ -8148,9 +8150,6 @@ packages: get-tsconfig@4.10.1: resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} - get-tsconfig@4.8.1: - resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} - github-from-package@0.0.0: resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} @@ -11266,14 +11265,14 @@ packages: ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} - rolldown-plugin-dts@0.13.14: - resolution: {integrity: sha512-wjNhHZz9dlN6PTIXyizB6u/mAg1wEFMW9yw7imEVe3CxHSRnNHVyycIX0yDEOVJfDNISLPbkCIPEpFpizy5+PQ==} + rolldown-plugin-dts@0.14.1: + resolution: {integrity: sha512-M++jFiiI0dwd9jNnta5vfxc058wwoibgeBzNMZw0QRm8jPJYxy4P3nQYlBtwQagKUDQVR0LXHSrRgXTezELEhw==} engines: {node: '>=20.18.0'} peerDependencies: '@typescript/native-preview': '>=7.0.0-dev.20250601.1' rolldown: ^1.0.0-beta.9 typescript: ^5.0.0 - vue-tsc: ^2.2.0 || ^3.0.0 + vue-tsc: ~3.0.3 peerDependenciesMeta: '@typescript/native-preview': optional: true @@ -12067,9 +12066,9 @@ packages: ts-log@2.2.7: resolution: {integrity: sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg==} - tsdown@0.12.9: - resolution: {integrity: sha512-MfrXm9PIlT3saovtWKf/gCJJ/NQCdE0SiREkdNC+9Qy6UHhdeDPxnkFaBD7xttVUmgp0yUHtGirpoLB+OVLuLA==} - engines: {node: '>=18.0.0'} + tsdown@0.13.0: + resolution: {integrity: sha512-+1ZqbLIYDAiNxtAvq9RsTg55PRvaMxGmtvRFBW2J+i4GfDKiyHAkxez1eB3EPvHG1Z917nsf2madsSeblJS3GA==} + engines: {node: '>=20.19.0'} hasBin: true peerDependencies: '@arethetypeswrong/core': ^0.18.1 @@ -17008,7 +17007,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.15.29 + '@types/node': 24.1.0 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -19534,7 +19533,7 @@ snapshots: '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.1.0 '@types/chai@5.2.2': dependencies: @@ -19543,7 +19542,7 @@ snapshots: '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.0.1 - '@types/node': 22.15.29 + '@types/node': 24.1.0 '@types/connect@3.4.38': dependencies: @@ -19579,7 +19578,7 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.1.0 '@types/qs': 6.9.17 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -19620,7 +19619,7 @@ snapshots: '@types/http-proxy@1.17.16': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.1.0 '@types/istanbul-lib-coverage@2.0.6': {} @@ -19648,7 +19647,7 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.1.0 '@types/node@12.20.55': {} @@ -19730,7 +19729,7 @@ snapshots: '@types/sax@1.2.7': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.1.0 '@types/send@0.17.4': dependencies: @@ -19749,7 +19748,7 @@ snapshots: '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.15.29 + '@types/node': 24.1.0 '@types/stylis@4.2.5': {} @@ -22526,7 +22525,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 22.15.29 + '@types/node': 24.1.0 require-like: 0.1.2 event-target-shim@5.0.1: {} @@ -22951,10 +22950,6 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - get-tsconfig@4.8.1: - dependencies: - resolve-pkg-maps: 1.0.0 - github-from-package@0.0.0: {} github-slugger@1.5.0: {} @@ -23767,7 +23762,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.15.29 + '@types/node': 24.1.0 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -23775,13 +23770,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.15.29 + '@types/node': 24.1.0 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.15.29 + '@types/node': 24.1.0 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -26731,7 +26726,7 @@ snapshots: hash-base: 3.0.5 inherits: 2.0.4 - rolldown-plugin-dts@0.13.14(rolldown@1.0.0-beta.29)(typescript@5.8.3): + rolldown-plugin-dts@0.14.1(rolldown@1.0.0-beta.29)(typescript@5.8.3): dependencies: '@babel/generator': 7.28.0 '@babel/parser': 7.28.0 @@ -27711,7 +27706,7 @@ snapshots: ts-log@2.2.7: {} - tsdown@0.12.9(typescript@5.8.3): + tsdown@0.13.0(typescript@5.8.3): dependencies: ansis: 4.1.0 cac: 6.7.14 @@ -27721,7 +27716,7 @@ snapshots: empathic: 2.0.0 hookable: 5.5.3 rolldown: 1.0.0-beta.29 - rolldown-plugin-dts: 0.13.14(rolldown@1.0.0-beta.29)(typescript@5.8.3) + rolldown-plugin-dts: 0.14.1(rolldown@1.0.0-beta.29)(typescript@5.8.3) semver: 7.7.2 tinyexec: 1.0.1 tinyglobby: 0.2.14 @@ -27802,7 +27797,7 @@ snapshots: tsx@4.20.3: dependencies: esbuild: 0.25.2 - get-tsconfig: 4.8.1 + get-tsconfig: 4.10.1 optionalDependencies: fsevents: 2.3.3 From deee18d44bc0c84ff671ebd1dc981a9250d74db5 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Tue, 22 Jul 2025 18:15:34 -1000 Subject: [PATCH 10/20] feat(#351 | create-hypergraph-app): add create-hypergraph-app tests to root workspace --- vitest.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vitest.config.ts b/vitest.config.ts index d194e6db..fce266b6 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -2,6 +2,6 @@ import { defineConfig } from 'vitest/config'; export default defineConfig({ test: { - projects: ['./packages/*', './apps/events', './apps/typesync'], + projects: ['./packages/*', './apps/events', './apps/typesync', './apps/create-hypergraph-app'], }, }); From bd88912c3a9e5e898d4ca29b0c0a317f799a730d Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Tue, 22 Jul 2025 18:46:26 -1000 Subject: [PATCH 11/20] feat(#351 | create-hypergraph-app): handle sigint of user killing cli with a log line instead of error message --- apps/create-hypergraph-app/package.json | 2 +- apps/create-hypergraph-app/src/Cli.ts | 10 +++++----- apps/create-hypergraph-app/src/bin.ts | 19 ++++++++++++++++--- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/apps/create-hypergraph-app/package.json b/apps/create-hypergraph-app/package.json index a49ebf74..64b9cc46 100644 --- a/apps/create-hypergraph-app/package.json +++ b/apps/create-hypergraph-app/package.json @@ -1,6 +1,6 @@ { "name": "@graphprotocol/create-hypergraph-app", - "version": "0.0.0-alpha.10", + "version": "0.0.0-alpha.11", "description": "CLI toolchain to scaffold a hypergraph-enabled application with a given template.", "type": "module", "bin": { diff --git a/apps/create-hypergraph-app/src/Cli.ts b/apps/create-hypergraph-app/src/Cli.ts index 6565219e..5fccf65e 100644 --- a/apps/create-hypergraph-app/src/Cli.ts +++ b/apps/create-hypergraph-app/src/Cli.ts @@ -233,12 +233,12 @@ const createHypergraphApp = Command.prompt( Effect.andThen(() => Effect.logInfo( AnsiDoc.text(`🎉 Successfully scaffolded your hypergraph enabled app ${appName}!`), - '\r\n\r\n', + AnsiDoc.hardLine, AnsiDoc.text('To start the app, run:'), - '\r\n\r\n', + AnsiDoc.hardLine, AnsiDoc.text(`cd ${appName}`), - installDeps ? '\r\n' : AnsiDoc.text(`${pkgMananger} install`), - '\r\n', + installDeps ? AnsiDoc.hardLine : AnsiDoc.text(`${pkgMananger} install`), + AnsiDoc.hardLine, AnsiDoc.text(`${pkgMananger} run dev`), ), ), @@ -251,7 +251,7 @@ const createHypergraphApp = Command.prompt( export const run = Command.run(createHypergraphApp, { name: 'create-hypergraph-app', - version: '0.0.0-alpha.10', + version: '0.0.0-alpha.11', }); class InitializeGitRepoError extends Data.TaggedError( diff --git a/apps/create-hypergraph-app/src/bin.ts b/apps/create-hypergraph-app/src/bin.ts index fd9fa568..b5c349cc 100644 --- a/apps/create-hypergraph-app/src/bin.ts +++ b/apps/create-hypergraph-app/src/bin.ts @@ -1,6 +1,8 @@ #!/usr/bin/env node import { NodeContext, NodeFileSystem, NodeRuntime } from '@effect/platform-node'; +import * as Ansi from '@effect/printer-ansi/Ansi'; +import * as AnsiDoc from '@effect/printer-ansi/AnsiDoc'; import * as Effect from 'effect/Effect'; import * as Logger from 'effect/Logger'; import * as LogLevel from 'effect/LogLevel'; @@ -9,13 +11,24 @@ import { run } from './Cli.js'; import { AnsiDocLogger } from './Logger.js'; const runnable = Effect.suspend(() => run(process.argv)).pipe( - // replaces default logger with AnsiDocLogger - Effect.provide(Logger.replace(Logger.defaultLogger, AnsiDocLogger)), - Logger.withMinimumLogLevel(LogLevel.Info), Effect.provide(NodeFileSystem.layer), Effect.provide(NodeContext.layer), ); + runnable.pipe( + Effect.catchAllDefect((defect) => + Effect.gen(function* () { + if (defect && typeof defect === 'object' && 'name' in defect && defect.name === 'QuitException') { + return yield* Effect.logError( + AnsiDoc.cat(AnsiDoc.hardLine, AnsiDoc.text('Exiting...').pipe(AnsiDoc.annotate(Ansi.red))), + ); + } + return Effect.die(defect); + }), + ), + // replaces default logger with AnsiDocLogger + Effect.provide(Logger.replace(Logger.defaultLogger, AnsiDocLogger)), + Logger.withMinimumLogLevel(LogLevel.Info), Effect.orDie, NodeRuntime.runMain({ disableErrorReporting: process.env.NODE_ENV === 'prod', disablePrettyLogger: true }), ); From 447cdb4b11ccb1da974db17bd6c48d54b04dfd0c Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Wed, 23 Jul 2025 07:24:55 -1000 Subject: [PATCH 12/20] feat(#351 | create-hypergraph): rename to create-hypergraph (drop app) --- .../LICENSE | 0 .../README.md | 8 +- .../package.json | 8 +- .../scripts/copy-package-json.ts | 0 .../src/Cli.ts | 0 .../src/Logger.ts | 0 .../src/Utils.ts | 0 .../src/bin.ts | 0 .../template-vite-react/.gitignore | 0 .../template-vite-react/.prettierignore | 0 .../template-vite-react/.prettierrc | 0 .../template-vite-react/README.md | 0 .../template-vite-react/components.json | 0 .../template-vite-react/eslint.config.mjs | 0 .../template-vite-react/index.html | 0 .../template-vite-react/package.json | 0 .../template-vite-react/public/hypergraph.svg | 0 .../src/components/logout.tsx | 0 .../src/components/navbar.tsx | 0 .../src/components/spaces-menu.tsx | 0 .../src/components/ui/button.tsx | 0 .../src/components/ui/navigation-menu.tsx | 0 .../src/components/ui/tooltip.tsx | 0 .../template-vite-react/src/index.css | 0 .../template-vite-react/src/lib/utils.ts | 0 .../template-vite-react/src/main.tsx | 0 .../template-vite-react/src/mapping.ts | 0 .../template-vite-react/src/routeTree.gen.ts | 0 .../template-vite-react/src/routes/__root.tsx | 0 .../src/routes/authenticate-success.tsx | 0 .../src/routes/explore-public-knowledge.tsx | 0 .../template-vite-react/src/routes/index.tsx | 0 .../template-vite-react/src/routes/login.tsx | 0 .../src/routes/private-space/$space-id.tsx | 0 .../src/routes/public-space/$space-id.tsx | 0 .../template-vite-react/src/schema.ts | 0 .../template-vite-react/src/vite-env.d.ts | 0 .../template-vite-react/tsconfig.app.json | 0 .../template-vite-react/tsconfig.json | 0 .../template-vite-react/tsconfig.node.json | 0 .../template-vite-react/vite.config.ts | 0 .../test/Utils.test.ts | 0 .../tsconfig.build.json | 0 .../tsconfig.json | 0 .../tsconfig.scripts.json | 0 .../tsconfig.src.json | 0 .../tsconfig.test.json | 0 .../tsdown.config.ts | 0 .../vitest.config.ts | 0 biome.jsonc | 2 +- pnpm-lock.yaml | 183 ++++-------------- tsconfig.json | 2 +- vitest.config.ts | 2 +- 53 files changed, 48 insertions(+), 157 deletions(-) rename apps/{create-hypergraph-app => create-hypergraph}/LICENSE (100%) rename apps/{create-hypergraph-app => create-hypergraph}/README.md (90%) rename apps/{create-hypergraph-app => create-hypergraph}/package.json (89%) rename apps/{create-hypergraph-app => create-hypergraph}/scripts/copy-package-json.ts (100%) rename apps/{create-hypergraph-app => create-hypergraph}/src/Cli.ts (100%) rename apps/{create-hypergraph-app => create-hypergraph}/src/Logger.ts (100%) rename apps/{create-hypergraph-app => create-hypergraph}/src/Utils.ts (100%) rename apps/{create-hypergraph-app => create-hypergraph}/src/bin.ts (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/.gitignore (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/.prettierignore (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/.prettierrc (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/README.md (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/components.json (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/eslint.config.mjs (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/index.html (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/package.json (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/public/hypergraph.svg (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/components/logout.tsx (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/components/navbar.tsx (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/components/spaces-menu.tsx (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/components/ui/button.tsx (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/components/ui/navigation-menu.tsx (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/components/ui/tooltip.tsx (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/index.css (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/lib/utils.ts (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/main.tsx (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/mapping.ts (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/routeTree.gen.ts (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/routes/__root.tsx (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/routes/authenticate-success.tsx (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/routes/explore-public-knowledge.tsx (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/routes/index.tsx (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/routes/login.tsx (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/routes/private-space/$space-id.tsx (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/routes/public-space/$space-id.tsx (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/schema.ts (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/src/vite-env.d.ts (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/tsconfig.app.json (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/tsconfig.json (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/tsconfig.node.json (100%) rename apps/{create-hypergraph-app => create-hypergraph}/template-vite-react/vite.config.ts (100%) rename apps/{create-hypergraph-app => create-hypergraph}/test/Utils.test.ts (100%) rename apps/{create-hypergraph-app => create-hypergraph}/tsconfig.build.json (100%) rename apps/{create-hypergraph-app => create-hypergraph}/tsconfig.json (100%) rename apps/{create-hypergraph-app => create-hypergraph}/tsconfig.scripts.json (100%) rename apps/{create-hypergraph-app => create-hypergraph}/tsconfig.src.json (100%) rename apps/{create-hypergraph-app => create-hypergraph}/tsconfig.test.json (100%) rename apps/{create-hypergraph-app => create-hypergraph}/tsdown.config.ts (100%) rename apps/{create-hypergraph-app => create-hypergraph}/vitest.config.ts (100%) diff --git a/apps/create-hypergraph-app/LICENSE b/apps/create-hypergraph/LICENSE similarity index 100% rename from apps/create-hypergraph-app/LICENSE rename to apps/create-hypergraph/LICENSE diff --git a/apps/create-hypergraph-app/README.md b/apps/create-hypergraph/README.md similarity index 90% rename from apps/create-hypergraph-app/README.md rename to apps/create-hypergraph/README.md index 32896243..d6ac0cf4 100644 --- a/apps/create-hypergraph-app/README.md +++ b/apps/create-hypergraph/README.md @@ -9,25 +9,25 @@ Inspiration takes from the `vite`, `nextjs`, and `effect` create app command too With NPM: ```bash -npm create hypergraph-app@latest +npm create hypergraph@latest ``` With Yarn: ```bash -yarn create hypergraph-app +yarn create hypergraph ``` With PNPM: ```bash -pnpm create hypergraph-app@latest +pnpm create hypergraph@latest ``` With Bun: ```bash -bun create hypergraph-app +bun create hypergraph ``` Then follow the given prompts. diff --git a/apps/create-hypergraph-app/package.json b/apps/create-hypergraph/package.json similarity index 89% rename from apps/create-hypergraph-app/package.json rename to apps/create-hypergraph/package.json index 64b9cc46..52e47984 100644 --- a/apps/create-hypergraph-app/package.json +++ b/apps/create-hypergraph/package.json @@ -1,7 +1,7 @@ { - "name": "@graphprotocol/create-hypergraph-app", - "version": "0.0.0-alpha.11", - "description": "CLI toolchain to scaffold a hypergraph-enabled application with a given template.", + "name": "create-hypergraph", + "version": "0.0.0-alpha.1", + "description": "CLI toolchain to scaffold a Hypergraph-enabled application with a given template.", "type": "module", "bin": { "create-hypergraph-app": "./dist/bin.js", @@ -14,7 +14,7 @@ "repository": { "type": "git", "url": "git+https://github.com/graphprotocol/hypergraph.git", - "directory": "apps/create-hypergraph-app" + "directory": "apps/create-hypergraph" }, "publishConfig": { "access": "public", diff --git a/apps/create-hypergraph-app/scripts/copy-package-json.ts b/apps/create-hypergraph/scripts/copy-package-json.ts similarity index 100% rename from apps/create-hypergraph-app/scripts/copy-package-json.ts rename to apps/create-hypergraph/scripts/copy-package-json.ts diff --git a/apps/create-hypergraph-app/src/Cli.ts b/apps/create-hypergraph/src/Cli.ts similarity index 100% rename from apps/create-hypergraph-app/src/Cli.ts rename to apps/create-hypergraph/src/Cli.ts diff --git a/apps/create-hypergraph-app/src/Logger.ts b/apps/create-hypergraph/src/Logger.ts similarity index 100% rename from apps/create-hypergraph-app/src/Logger.ts rename to apps/create-hypergraph/src/Logger.ts diff --git a/apps/create-hypergraph-app/src/Utils.ts b/apps/create-hypergraph/src/Utils.ts similarity index 100% rename from apps/create-hypergraph-app/src/Utils.ts rename to apps/create-hypergraph/src/Utils.ts diff --git a/apps/create-hypergraph-app/src/bin.ts b/apps/create-hypergraph/src/bin.ts similarity index 100% rename from apps/create-hypergraph-app/src/bin.ts rename to apps/create-hypergraph/src/bin.ts diff --git a/apps/create-hypergraph-app/template-vite-react/.gitignore b/apps/create-hypergraph/template-vite-react/.gitignore similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/.gitignore rename to apps/create-hypergraph/template-vite-react/.gitignore diff --git a/apps/create-hypergraph-app/template-vite-react/.prettierignore b/apps/create-hypergraph/template-vite-react/.prettierignore similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/.prettierignore rename to apps/create-hypergraph/template-vite-react/.prettierignore diff --git a/apps/create-hypergraph-app/template-vite-react/.prettierrc b/apps/create-hypergraph/template-vite-react/.prettierrc similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/.prettierrc rename to apps/create-hypergraph/template-vite-react/.prettierrc diff --git a/apps/create-hypergraph-app/template-vite-react/README.md b/apps/create-hypergraph/template-vite-react/README.md similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/README.md rename to apps/create-hypergraph/template-vite-react/README.md diff --git a/apps/create-hypergraph-app/template-vite-react/components.json b/apps/create-hypergraph/template-vite-react/components.json similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/components.json rename to apps/create-hypergraph/template-vite-react/components.json diff --git a/apps/create-hypergraph-app/template-vite-react/eslint.config.mjs b/apps/create-hypergraph/template-vite-react/eslint.config.mjs similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/eslint.config.mjs rename to apps/create-hypergraph/template-vite-react/eslint.config.mjs diff --git a/apps/create-hypergraph-app/template-vite-react/index.html b/apps/create-hypergraph/template-vite-react/index.html similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/index.html rename to apps/create-hypergraph/template-vite-react/index.html diff --git a/apps/create-hypergraph-app/template-vite-react/package.json b/apps/create-hypergraph/template-vite-react/package.json similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/package.json rename to apps/create-hypergraph/template-vite-react/package.json diff --git a/apps/create-hypergraph-app/template-vite-react/public/hypergraph.svg b/apps/create-hypergraph/template-vite-react/public/hypergraph.svg similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/public/hypergraph.svg rename to apps/create-hypergraph/template-vite-react/public/hypergraph.svg diff --git a/apps/create-hypergraph-app/template-vite-react/src/components/logout.tsx b/apps/create-hypergraph/template-vite-react/src/components/logout.tsx similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/components/logout.tsx rename to apps/create-hypergraph/template-vite-react/src/components/logout.tsx diff --git a/apps/create-hypergraph-app/template-vite-react/src/components/navbar.tsx b/apps/create-hypergraph/template-vite-react/src/components/navbar.tsx similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/components/navbar.tsx rename to apps/create-hypergraph/template-vite-react/src/components/navbar.tsx diff --git a/apps/create-hypergraph-app/template-vite-react/src/components/spaces-menu.tsx b/apps/create-hypergraph/template-vite-react/src/components/spaces-menu.tsx similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/components/spaces-menu.tsx rename to apps/create-hypergraph/template-vite-react/src/components/spaces-menu.tsx diff --git a/apps/create-hypergraph-app/template-vite-react/src/components/ui/button.tsx b/apps/create-hypergraph/template-vite-react/src/components/ui/button.tsx similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/components/ui/button.tsx rename to apps/create-hypergraph/template-vite-react/src/components/ui/button.tsx diff --git a/apps/create-hypergraph-app/template-vite-react/src/components/ui/navigation-menu.tsx b/apps/create-hypergraph/template-vite-react/src/components/ui/navigation-menu.tsx similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/components/ui/navigation-menu.tsx rename to apps/create-hypergraph/template-vite-react/src/components/ui/navigation-menu.tsx diff --git a/apps/create-hypergraph-app/template-vite-react/src/components/ui/tooltip.tsx b/apps/create-hypergraph/template-vite-react/src/components/ui/tooltip.tsx similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/components/ui/tooltip.tsx rename to apps/create-hypergraph/template-vite-react/src/components/ui/tooltip.tsx diff --git a/apps/create-hypergraph-app/template-vite-react/src/index.css b/apps/create-hypergraph/template-vite-react/src/index.css similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/index.css rename to apps/create-hypergraph/template-vite-react/src/index.css diff --git a/apps/create-hypergraph-app/template-vite-react/src/lib/utils.ts b/apps/create-hypergraph/template-vite-react/src/lib/utils.ts similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/lib/utils.ts rename to apps/create-hypergraph/template-vite-react/src/lib/utils.ts diff --git a/apps/create-hypergraph-app/template-vite-react/src/main.tsx b/apps/create-hypergraph/template-vite-react/src/main.tsx similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/main.tsx rename to apps/create-hypergraph/template-vite-react/src/main.tsx diff --git a/apps/create-hypergraph-app/template-vite-react/src/mapping.ts b/apps/create-hypergraph/template-vite-react/src/mapping.ts similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/mapping.ts rename to apps/create-hypergraph/template-vite-react/src/mapping.ts diff --git a/apps/create-hypergraph-app/template-vite-react/src/routeTree.gen.ts b/apps/create-hypergraph/template-vite-react/src/routeTree.gen.ts similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/routeTree.gen.ts rename to apps/create-hypergraph/template-vite-react/src/routeTree.gen.ts diff --git a/apps/create-hypergraph-app/template-vite-react/src/routes/__root.tsx b/apps/create-hypergraph/template-vite-react/src/routes/__root.tsx similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/routes/__root.tsx rename to apps/create-hypergraph/template-vite-react/src/routes/__root.tsx diff --git a/apps/create-hypergraph-app/template-vite-react/src/routes/authenticate-success.tsx b/apps/create-hypergraph/template-vite-react/src/routes/authenticate-success.tsx similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/routes/authenticate-success.tsx rename to apps/create-hypergraph/template-vite-react/src/routes/authenticate-success.tsx diff --git a/apps/create-hypergraph-app/template-vite-react/src/routes/explore-public-knowledge.tsx b/apps/create-hypergraph/template-vite-react/src/routes/explore-public-knowledge.tsx similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/routes/explore-public-knowledge.tsx rename to apps/create-hypergraph/template-vite-react/src/routes/explore-public-knowledge.tsx diff --git a/apps/create-hypergraph-app/template-vite-react/src/routes/index.tsx b/apps/create-hypergraph/template-vite-react/src/routes/index.tsx similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/routes/index.tsx rename to apps/create-hypergraph/template-vite-react/src/routes/index.tsx diff --git a/apps/create-hypergraph-app/template-vite-react/src/routes/login.tsx b/apps/create-hypergraph/template-vite-react/src/routes/login.tsx similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/routes/login.tsx rename to apps/create-hypergraph/template-vite-react/src/routes/login.tsx diff --git a/apps/create-hypergraph-app/template-vite-react/src/routes/private-space/$space-id.tsx b/apps/create-hypergraph/template-vite-react/src/routes/private-space/$space-id.tsx similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/routes/private-space/$space-id.tsx rename to apps/create-hypergraph/template-vite-react/src/routes/private-space/$space-id.tsx diff --git a/apps/create-hypergraph-app/template-vite-react/src/routes/public-space/$space-id.tsx b/apps/create-hypergraph/template-vite-react/src/routes/public-space/$space-id.tsx similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/routes/public-space/$space-id.tsx rename to apps/create-hypergraph/template-vite-react/src/routes/public-space/$space-id.tsx diff --git a/apps/create-hypergraph-app/template-vite-react/src/schema.ts b/apps/create-hypergraph/template-vite-react/src/schema.ts similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/schema.ts rename to apps/create-hypergraph/template-vite-react/src/schema.ts diff --git a/apps/create-hypergraph-app/template-vite-react/src/vite-env.d.ts b/apps/create-hypergraph/template-vite-react/src/vite-env.d.ts similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/src/vite-env.d.ts rename to apps/create-hypergraph/template-vite-react/src/vite-env.d.ts diff --git a/apps/create-hypergraph-app/template-vite-react/tsconfig.app.json b/apps/create-hypergraph/template-vite-react/tsconfig.app.json similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/tsconfig.app.json rename to apps/create-hypergraph/template-vite-react/tsconfig.app.json diff --git a/apps/create-hypergraph-app/template-vite-react/tsconfig.json b/apps/create-hypergraph/template-vite-react/tsconfig.json similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/tsconfig.json rename to apps/create-hypergraph/template-vite-react/tsconfig.json diff --git a/apps/create-hypergraph-app/template-vite-react/tsconfig.node.json b/apps/create-hypergraph/template-vite-react/tsconfig.node.json similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/tsconfig.node.json rename to apps/create-hypergraph/template-vite-react/tsconfig.node.json diff --git a/apps/create-hypergraph-app/template-vite-react/vite.config.ts b/apps/create-hypergraph/template-vite-react/vite.config.ts similarity index 100% rename from apps/create-hypergraph-app/template-vite-react/vite.config.ts rename to apps/create-hypergraph/template-vite-react/vite.config.ts diff --git a/apps/create-hypergraph-app/test/Utils.test.ts b/apps/create-hypergraph/test/Utils.test.ts similarity index 100% rename from apps/create-hypergraph-app/test/Utils.test.ts rename to apps/create-hypergraph/test/Utils.test.ts diff --git a/apps/create-hypergraph-app/tsconfig.build.json b/apps/create-hypergraph/tsconfig.build.json similarity index 100% rename from apps/create-hypergraph-app/tsconfig.build.json rename to apps/create-hypergraph/tsconfig.build.json diff --git a/apps/create-hypergraph-app/tsconfig.json b/apps/create-hypergraph/tsconfig.json similarity index 100% rename from apps/create-hypergraph-app/tsconfig.json rename to apps/create-hypergraph/tsconfig.json diff --git a/apps/create-hypergraph-app/tsconfig.scripts.json b/apps/create-hypergraph/tsconfig.scripts.json similarity index 100% rename from apps/create-hypergraph-app/tsconfig.scripts.json rename to apps/create-hypergraph/tsconfig.scripts.json diff --git a/apps/create-hypergraph-app/tsconfig.src.json b/apps/create-hypergraph/tsconfig.src.json similarity index 100% rename from apps/create-hypergraph-app/tsconfig.src.json rename to apps/create-hypergraph/tsconfig.src.json diff --git a/apps/create-hypergraph-app/tsconfig.test.json b/apps/create-hypergraph/tsconfig.test.json similarity index 100% rename from apps/create-hypergraph-app/tsconfig.test.json rename to apps/create-hypergraph/tsconfig.test.json diff --git a/apps/create-hypergraph-app/tsdown.config.ts b/apps/create-hypergraph/tsdown.config.ts similarity index 100% rename from apps/create-hypergraph-app/tsdown.config.ts rename to apps/create-hypergraph/tsdown.config.ts diff --git a/apps/create-hypergraph-app/vitest.config.ts b/apps/create-hypergraph/vitest.config.ts similarity index 100% rename from apps/create-hypergraph-app/vitest.config.ts rename to apps/create-hypergraph/vitest.config.ts diff --git a/biome.jsonc b/biome.jsonc index 5dbe4e5c..4c77405d 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -17,7 +17,7 @@ "!**/tsconfig.*.json", "!**/variant-schema.ts", "!**/apps/typesync/client/src/generated", - "!**/apps/create-hypergraph-app/template-*/**", + "!**/apps/create-hypergraph/template-*/**", "!**/*.css" ] }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6f136773..2e101936 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -136,7 +136,7 @@ importers: specifier: ^4.3.0 version: 4.3.0(rollup@4.45.0)(typescript@5.8.3)(vite@6.3.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) - apps/create-hypergraph-app: + apps/create-hypergraph: devDependencies: '@effect/cli': specifier: ^0.68.0 @@ -168,8 +168,11 @@ importers: tsx: specifier: ^4.20.3 version: 4.20.3 + publishDirectory: dist + + apps/create-hypergraph/dist: {} - apps/create-hypergraph-app/template-vite-react: + apps/create-hypergraph/template-vite-react: dependencies: '@graphprotocol/grc-20': specifier: ^0.21.6 @@ -200,7 +203,7 @@ importers: version: 5.83.0(react@19.1.0) '@tanstack/react-router': specifier: ^1.129.2 - version: 1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -234,7 +237,7 @@ importers: version: 9.31.0 '@tanstack/router-plugin': specifier: ^1.129.2 - version: 1.129.2(@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) + version: 1.129.5(@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) '@types/node': specifier: ^24.1.0 version: 24.1.0 @@ -676,11 +679,11 @@ importers: specifier: ^5.83.0 version: 5.83.0(@tanstack/react-query@5.83.0(react@19.1.0))(react@19.1.0) '@tanstack/react-router': - specifier: ^1.128.0 - version: 1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^1.129.5 + version: 1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/react-router-devtools': - specifier: ^1.128.0 - version: 1.129.2(@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.129.6)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) + specifier: ^1.129.5 + version: 1.129.5(@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.129.6)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3) better-sqlite3: specifier: ^12.2.0 version: 12.2.0 @@ -688,7 +691,7 @@ importers: specifier: ^4.1.0 version: 4.1.0 effect: - specifier: ^3.16.16 + specifier: ^3.17.0 version: 3.17.0 graphql: specifier: ^16.11.0 @@ -5388,14 +5391,6 @@ packages: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router-devtools@1.129.2': - resolution: {integrity: sha512-8ipEnUv5lWcZYQ5ia0L2wOGqt1CJpfU8iSN9xaX7z93U9cRQg0G1IOf0iYkHpjfUe8WxRY6+5siST+qlKbdtJA==} - engines: {node: '>=12'} - peerDependencies: - '@tanstack/react-router': ^1.129.2 - react: '>=18.0.0 || >=19.0.0' - react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router-devtools@1.129.5': resolution: {integrity: sha512-PBmFfcJsru2RMfbyeNPm2WAlrccm3+n4yaBkz5morS0ZnfDm5MwKbf+RrjbiiGo9nj7EQh5uxuEw4nDg6winyA==} engines: {node: '>=12'} @@ -5411,13 +5406,6 @@ packages: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router@1.129.2': - resolution: {integrity: sha512-ERGkvtb4qlo1ihrKUMJn2RfiC3T7rE/PpRtsATCmC0Gy0NmaO8S1+XvgriYl2bzdqTnBliwwIzqkKB9A2xPqDQ==} - engines: {node: '>=12'} - peerDependencies: - react: '>=18.0.0 || >=19.0.0' - react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router@1.129.5': resolution: {integrity: sha512-t0Imn7opXrIflBBTId7u8QJTZQd8w2OboWkP+FcBls2jfybPjrgF2jOwQ3XZdlHhUJoIVUj/2aootlisjsPhig==} engines: {node: '>=12'} @@ -5453,10 +5441,6 @@ packages: resolution: {integrity: sha512-3dZYP5cCq3jJYgnRDzKR3w4sYzrXP5sw1st303ye87VV26r31I8UaIuUEs7kiJaxgWBvqHglWCiygBWQODZXVw==} engines: {node: '>=12'} - '@tanstack/router-core@1.129.2': - resolution: {integrity: sha512-M7OuzxbSkEFa1WWQoLOg7RtJUHzfaURMiRCLbKLEJWJkw1Cuylj7oBbzbawDAJFTHry9UUDZNPP0MSCfcXypPA==} - engines: {node: '>=12'} - '@tanstack/router-core@1.129.5': resolution: {integrity: sha512-xDKS4TAo1Qi1XfxNVjPNjwid4nTl5n2AeGHStLGwHEv/6MR4wbUmowOukxej1QcfbQSm0LZIO4OtJB3vWV38og==} engines: {node: '>=12'} @@ -5477,18 +5461,6 @@ packages: csstype: optional: true - '@tanstack/router-devtools-core@1.129.2': - resolution: {integrity: sha512-PlGJ5A54P0J8FAe7biiLARN9U6VCDPbnoNjqL9jsvf2A0X/cQw4fgediR+jsMjVuXNoL4kMDprVTpGT5PoVUaQ==} - engines: {node: '>=12'} - peerDependencies: - '@tanstack/router-core': ^1.129.2 - csstype: ^3.0.10 - solid-js: '>=1.9.5' - tiny-invariant: ^1.3.3 - peerDependenciesMeta: - csstype: - optional: true - '@tanstack/router-devtools-core@1.129.5': resolution: {integrity: sha512-V4zFbe0L4wZMk9VFJVyv7N9YpTD+jYZEShE+NZkJm/+XmvcV/Hnis/25frId8sA+Bsb1h9cM2cC/9Q3Ee8igDw==} engines: {node: '>=12'} @@ -5510,10 +5482,6 @@ packages: '@tanstack/react-router': optional: true - '@tanstack/router-generator@1.129.2': - resolution: {integrity: sha512-xCZYd4sgPFdlgEten7x+uJx+0y6iUm2d8cnE3cHHzzc5COf5jO+FFh9kVRa9Ouh4h/binv5dpKRBhB33TqPRfw==} - engines: {node: '>=12'} - '@tanstack/router-generator@1.129.5': resolution: {integrity: sha512-UqNdUcnaxPo1cVXXJJGn1uL1Wc5iLKP3RCBWoofcufUWII6PBP1A67dNLLj04ypLhpLvBF11YBeXb7cEZ0Yayg==} engines: {node: '>=12'} @@ -5539,27 +5507,6 @@ packages: webpack: optional: true - '@tanstack/router-plugin@1.129.2': - resolution: {integrity: sha512-uchyp0fMG6MmMJMxydmp4JTyIfW0FHVE4hwGSnP9dgoncQHbqZQt3qNEYbzPIV+JRp6DKjb8Ax5DAUgL7/LVCA==} - engines: {node: '>=12'} - peerDependencies: - '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.129.2 - vite: '>=5.0.0 || >=6.0.0' - vite-plugin-solid: ^2.11.2 - webpack: '>=5.92.0' - peerDependenciesMeta: - '@rsbuild/core': - optional: true - '@tanstack/react-router': - optional: true - vite: - optional: true - vite-plugin-solid: - optional: true - webpack: - optional: true - '@tanstack/router-plugin@1.129.5': resolution: {integrity: sha512-LUmSnxcvwnm66qe8Dz+yYzZbdD73V0zlqEaIYklD7657++PzdokRMlXBhAzaKCPBITBOHFCAlP6jKhnbJZGDzg==} engines: {node: '>=12'} @@ -13410,7 +13357,7 @@ snapshots: '@babel/helper-member-expression-to-functions@7.27.1': dependencies: '@babel/traverse': 7.27.7 - '@babel/types': 7.27.7 + '@babel/types': 7.28.1 transitivePeerDependencies: - supports-color @@ -13443,7 +13390,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.27.7 + '@babel/types': 7.28.1 '@babel/helper-plugin-utils@7.26.5': {} @@ -14245,7 +14192,7 @@ snapshots: dependencies: '@babel/core': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.27.7 + '@babel/types': 7.28.1 esutils: 2.0.3 '@babel/preset-react@7.27.1(@babel/core@7.28.0)': @@ -17141,8 +17088,8 @@ snapshots: '@metamask/utils@3.6.0': dependencies: '@types/debug': 4.1.12 - debug: 4.4.0 - semver: 7.7.1 + debug: 4.4.1 + semver: 7.7.2 superstruct: 1.0.4 transitivePeerDependencies: - supports-color @@ -19179,18 +19126,6 @@ snapshots: - solid-js - tiny-invariant - '@tanstack/react-router-devtools@1.129.2(@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.129.6)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)': - dependencies: - '@tanstack/react-router': 1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-devtools-core': 1.129.2(@tanstack/router-core@1.129.6)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - transitivePeerDependencies: - - '@tanstack/router-core' - - csstype - - solid-js - - tiny-invariant - '@tanstack/react-router-devtools@1.129.5(@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.129.6)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.5)(tiny-invariant@1.3.3)': dependencies: '@tanstack/react-router': 1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -19214,17 +19149,6 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@tanstack/history': 1.121.34 - '@tanstack/react-store': 0.7.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-core': 1.129.2 - isbot: 5.1.28 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - tiny-invariant: 1.3.3 - tiny-warning: 1.0.3 - '@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@tanstack/history': 1.121.34 @@ -19268,16 +19192,6 @@ snapshots: '@tanstack/store': 0.7.0 tiny-invariant: 1.3.3 - '@tanstack/router-core@1.129.2': - dependencies: - '@tanstack/history': 1.121.34 - '@tanstack/store': 0.7.2 - cookie-es: 1.2.2 - seroval: 1.3.2 - seroval-plugins: 1.3.2(seroval@1.3.2) - tiny-invariant: 1.3.3 - tiny-warning: 1.0.3 - '@tanstack/router-core@1.129.5': dependencies: '@tanstack/history': 1.121.34 @@ -19308,16 +19222,6 @@ snapshots: optionalDependencies: csstype: 3.1.3 - '@tanstack/router-devtools-core@1.129.2(@tanstack/router-core@1.129.6)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': - dependencies: - '@tanstack/router-core': 1.129.6 - clsx: 2.1.1 - goober: 2.1.16(csstype@3.1.3) - solid-js: 1.9.5 - tiny-invariant: 1.3.3 - optionalDependencies: - csstype: 3.1.3 - '@tanstack/router-devtools-core@1.129.5(@tanstack/router-core@1.129.6)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)': dependencies: '@tanstack/router-core': 1.129.6 @@ -19337,19 +19241,6 @@ snapshots: optionalDependencies: '@tanstack/react-router': 1.120.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-generator@1.129.2': - dependencies: - '@tanstack/router-core': 1.129.2 - '@tanstack/router-utils': 1.121.21 - '@tanstack/virtual-file-routes': 1.121.21 - prettier: 3.6.2 - recast: 0.23.11 - source-map: 0.7.4 - tsx: 4.20.3 - zod: 3.25.51 - transitivePeerDependencies: - - supports-color - '@tanstack/router-generator@1.129.5': dependencies: '@tanstack/router-core': 1.129.6 @@ -19389,16 +19280,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.129.2(@tanstack/react-router@1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8)': + '@tanstack/router-plugin@1.129.5(@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.0) '@babel/template': 7.27.2 '@babel/traverse': 7.28.0 - '@babel/types': 7.28.0 - '@tanstack/router-core': 1.129.2 - '@tanstack/router-generator': 1.129.2 + '@babel/types': 7.28.1 + '@tanstack/router-core': 1.129.6 + '@tanstack/router-generator': 1.129.5 '@tanstack/router-utils': 1.121.21 '@tanstack/virtual-file-routes': 1.121.21 babel-dead-code-elimination: 1.0.10 @@ -19406,13 +19297,13 @@ snapshots: unplugin: 2.1.2 zod: 3.25.51 optionalDependencies: - '@tanstack/react-router': 1.129.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) - webpack: 5.99.8 + '@tanstack/react-router': 1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + vite: 7.0.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + webpack: 5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2) transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.129.5(@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2))': + '@tanstack/router-plugin@1.129.5(@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8)': dependencies: '@babel/core': 7.28.0 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) @@ -19430,8 +19321,8 @@ snapshots: zod: 3.25.51 optionalDependencies: '@tanstack/react-router': 1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - vite: 7.0.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) - webpack: 5.99.8(@swc/core@1.11.24(@swc/helpers@0.5.17))(esbuild@0.25.2) + vite: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + webpack: 5.99.8 transitivePeerDependencies: - supports-color @@ -19847,7 +19738,7 @@ snapshots: fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.1 + semver: 7.7.2 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -21743,7 +21634,7 @@ snapshots: postcss-modules-scope: 3.2.1(postcss@8.5.6) postcss-modules-values: 4.0.0(postcss@8.5.6) postcss-value-parser: 4.2.0 - semver: 7.7.1 + semver: 7.7.2 optionalDependencies: webpack: 5.99.8 @@ -22847,7 +22738,7 @@ snapshots: memfs: 3.5.3 minimatch: 3.1.2 schema-utils: 2.7.0 - semver: 7.7.1 + semver: 7.7.2 tapable: 1.1.3 typescript: 5.8.3 webpack: 5.99.8 @@ -24892,7 +24783,7 @@ snapshots: node-abi@3.74.0: dependencies: - semver: 7.7.1 + semver: 7.7.2 node-addon-api@7.1.1: {} @@ -25225,7 +25116,7 @@ snapshots: got: 12.6.1 registry-auth-token: 5.1.0 registry-url: 6.0.1 - semver: 7.7.1 + semver: 7.7.2 package-manager-detector@0.2.8: {} @@ -25655,7 +25546,7 @@ snapshots: cosmiconfig: 8.3.6(typescript@5.8.3) jiti: 1.21.7 postcss: 8.5.3 - semver: 7.7.1 + semver: 7.7.2 webpack: 5.99.8 transitivePeerDependencies: - typescript @@ -26926,7 +26817,7 @@ snapshots: semver-diff@4.0.0: dependencies: - semver: 7.7.1 + semver: 7.7.2 semver@5.7.2: {} @@ -26973,7 +26864,7 @@ snapshots: send@1.2.0: dependencies: - debug: 4.4.0 + debug: 4.4.1 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -27077,7 +26968,7 @@ snapshots: dependencies: color: 4.2.3 detect-libc: 2.0.3 - semver: 7.7.1 + semver: 7.7.2 optionalDependencies: '@img/sharp-darwin-arm64': 0.34.1 '@img/sharp-darwin-x64': 0.34.1 @@ -28018,7 +27909,7 @@ snapshots: is-yarn-global: 0.4.1 latest-version: 7.0.0 pupa: 3.1.0 - semver: 7.7.1 + semver: 7.7.2 semver-diff: 4.0.0 xdg-basedir: 5.1.0 diff --git a/tsconfig.json b/tsconfig.json index 63ecfed0..e25e00b1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,6 +9,6 @@ { "path": "apps/connect" }, { "path": "apps/events" }, { "path": "apps/typesync" }, - { "path": "apps/create-hypergraph-app" } + { "path": "apps/create-hypergraph" } ] } diff --git a/vitest.config.ts b/vitest.config.ts index fce266b6..c9626b73 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -2,6 +2,6 @@ import { defineConfig } from 'vitest/config'; export default defineConfig({ test: { - projects: ['./packages/*', './apps/events', './apps/typesync', './apps/create-hypergraph-app'], + projects: ['./packages/*', './apps/events', './apps/typesync', './apps/create-hypergraph'], }, }); From ba47d5345510e4da038d5cbf6a31427f4a58f155 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Wed, 23 Jul 2025 07:29:36 -1000 Subject: [PATCH 13/20] feat(#351 | create-hypergraph): rename package.json bin to create-hypergraph --- apps/create-hypergraph/package.json | 6 +++--- apps/create-hypergraph/scripts/copy-package-json.ts | 4 ++-- apps/create-hypergraph/src/Cli.ts | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/create-hypergraph/package.json b/apps/create-hypergraph/package.json index 52e47984..9fc455d4 100644 --- a/apps/create-hypergraph/package.json +++ b/apps/create-hypergraph/package.json @@ -1,11 +1,11 @@ { "name": "create-hypergraph", - "version": "0.0.0-alpha.1", + "version": "0.0.0-alpha.2", "description": "CLI toolchain to scaffold a Hypergraph-enabled application with a given template.", "type": "module", "bin": { - "create-hypergraph-app": "./dist/bin.js", - "cha": "./dist/bin.js" + "create-hypergraph": "./dist/bin.js", + "ch": "./dist/bin.js" }, "files": [ "template-*", diff --git a/apps/create-hypergraph/scripts/copy-package-json.ts b/apps/create-hypergraph/scripts/copy-package-json.ts index 8ace73b2..7d99f23e 100644 --- a/apps/create-hypergraph/scripts/copy-package-json.ts +++ b/apps/create-hypergraph/scripts/copy-package-json.ts @@ -12,8 +12,8 @@ const read = pipe( version: json.version, description: json.description, bin: { - 'create-hypergraph-app': 'bin.js', - cha: 'bin.js', + 'create-hypergraph': 'bin.js', + ch: 'bin.js', }, engines: json.engines, repository: json.repository, diff --git a/apps/create-hypergraph/src/Cli.ts b/apps/create-hypergraph/src/Cli.ts index 5fccf65e..c10d09f2 100644 --- a/apps/create-hypergraph/src/Cli.ts +++ b/apps/create-hypergraph/src/Cli.ts @@ -251,7 +251,7 @@ const createHypergraphApp = Command.prompt( export const run = Command.run(createHypergraphApp, { name: 'create-hypergraph-app', - version: '0.0.0-alpha.11', + version: '0.0.0-alpha.2', }); class InitializeGitRepoError extends Data.TaggedError( From f40426b5b927d3babc2e8228545888b2d09cbd82 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Wed, 23 Jul 2025 07:41:34 -1000 Subject: [PATCH 14/20] feat(#351 | create-hypergraph): fix typo --- apps/create-hypergraph/package.json | 2 +- apps/create-hypergraph/src/Cli.ts | 2 +- .../template-vite-react/src/routes/private-space/$space-id.tsx | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/apps/create-hypergraph/package.json b/apps/create-hypergraph/package.json index 9fc455d4..30a3520f 100644 --- a/apps/create-hypergraph/package.json +++ b/apps/create-hypergraph/package.json @@ -1,6 +1,6 @@ { "name": "create-hypergraph", - "version": "0.0.0-alpha.2", + "version": "0.0.0-alpha.3", "description": "CLI toolchain to scaffold a Hypergraph-enabled application with a given template.", "type": "module", "bin": { diff --git a/apps/create-hypergraph/src/Cli.ts b/apps/create-hypergraph/src/Cli.ts index c10d09f2..4f9a6c83 100644 --- a/apps/create-hypergraph/src/Cli.ts +++ b/apps/create-hypergraph/src/Cli.ts @@ -251,7 +251,7 @@ const createHypergraphApp = Command.prompt( export const run = Command.run(createHypergraphApp, { name: 'create-hypergraph-app', - version: '0.0.0-alpha.2', + version: '0.0.0-alpha.3', }); class InitializeGitRepoError extends Data.TaggedError( diff --git a/apps/create-hypergraph/template-vite-react/src/routes/private-space/$space-id.tsx b/apps/create-hypergraph/template-vite-react/src/routes/private-space/$space-id.tsx index 764c62e3..9fa19500 100644 --- a/apps/create-hypergraph/template-vite-react/src/routes/private-space/$space-id.tsx +++ b/apps/create-hypergraph/template-vite-react/src/routes/private-space/$space-id.tsx @@ -192,5 +192,4 @@ function PrivateSpace() {
); -} -s; +} \ No newline at end of file From 4446ffef87a30cbd72d536cc627069f5d85caae4 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Wed, 23 Jul 2025 10:35:03 -1000 Subject: [PATCH 15/20] feat(#351 | create-hypergraph): resolve inputs from passed in options or prompts --- apps/create-hypergraph/README.md | 37 +- apps/create-hypergraph/package.json | 2 +- apps/create-hypergraph/src/Cli.ts | 493 ++++++++++++---------- apps/create-hypergraph/src/Domain.ts | 25 ++ apps/create-hypergraph/src/Utils.ts | 7 +- apps/create-hypergraph/src/bin.ts | 4 + apps/create-hypergraph/test/Utils.test.ts | 37 +- 7 files changed, 361 insertions(+), 244 deletions(-) create mode 100644 apps/create-hypergraph/src/Domain.ts diff --git a/apps/create-hypergraph/README.md b/apps/create-hypergraph/README.md index d6ac0cf4..d048b603 100644 --- a/apps/create-hypergraph/README.md +++ b/apps/create-hypergraph/README.md @@ -32,22 +32,35 @@ bun create hypergraph Then follow the given prompts. -### Currently Supported Templates - -- vite + react - -## Example: scaffolding a vite + react app, initializing the git repo and installing deps with pnpm +### Args + +- `app-name` -> if provided, used as the name of the app, as well as the directory the app is scaffolded in to + +### Params + +- `--template` -> if provided, uses the provided template + - options: + - vite-react +- `--package-manager` -> if provided, uses the provided package manager + - options: + - pnpm + - bun + - npm + - yarn +- `--skip-install-deps` -> if flag provided, the deps will not be install in the scaffolded app + - default: false +- `--skip-initialize-git` -> if flag provided, git will not be initialized in the scaffolded app + - default: false ```bash -✔ What is your app named? … my-hypergraph-app -✔ Choose your template … Vite + React -✔ What package manager do you want to use? … pnpm -✔ Do you want us to install deps? … Yes / No -✔ Initialize a git repository? … Yes / No -Scaffolding vite-react hypergraph app in /my-hypergraph-app... -Initialized empty Git repository +# fully configured +pnpm create hypergraph@latest --template vite-react --package-manager pnpm my-hypergraph-app ``` +### Currently Supported Templates + +- vite + react + ## References - [create vite app](https://github.com/vitejs/vite/tree/main/packages/create-vite) diff --git a/apps/create-hypergraph/package.json b/apps/create-hypergraph/package.json index 30a3520f..04066916 100644 --- a/apps/create-hypergraph/package.json +++ b/apps/create-hypergraph/package.json @@ -1,6 +1,6 @@ { "name": "create-hypergraph", - "version": "0.0.0-alpha.3", + "version": "0.0.0-alpha.4", "description": "CLI toolchain to scaffold a Hypergraph-enabled application with a given template.", "type": "module", "bin": { diff --git a/apps/create-hypergraph/src/Cli.ts b/apps/create-hypergraph/src/Cli.ts index 4f9a6c83..8fe39df2 100644 --- a/apps/create-hypergraph/src/Cli.ts +++ b/apps/create-hypergraph/src/Cli.ts @@ -1,258 +1,323 @@ import { execSync } from 'node:child_process'; import { readdirSync } from 'node:fs'; import { fileURLToPath } from 'node:url'; -import { Command, Prompt } from '@effect/cli'; +import { Args, Command, HelpDoc, Options, Prompt } from '@effect/cli'; import { FileSystem, Path } from '@effect/platform'; import type { PlatformError } from '@effect/platform/Error'; import { NodeFileSystem } from '@effect/platform-node'; import { Ansi, AnsiDoc } from '@effect/printer-ansi'; -import { Cause, Data, Effect, Array as EffectArray, String as EffectString, Schema } from 'effect'; -import type { NonEmptyReadonlyArray } from 'effect/Array'; +import { Cause, Data, Effect, Array as EffectArray, String as EffectString, Option } from 'effect'; +import * as Domain from './Domain.js'; import * as Utils from './Utils.js'; -const appNamePrompt = Prompt.text({ - message: 'What is your app named?', - default: 'my-hypergraph-app', - validate(value) { - return Utils.validateProjectName(value); - }, -}); +// ======================== +// Command Config +// ======================== -const AvailableFrameworkKey = Schema.Union(Schema.Literal('vite-react')); -type AvailableFrameworkKey = typeof AvailableFrameworkKey.Type; +const appName = Args.directory({ name: 'app-name', exists: 'no' }).pipe( + Args.withDescription( + 'What is your app named? Will also be the folder where your Hypergraph app will be scaffolded in to', + ), + Args.mapEffect(Utils.validateProjectName), + Args.mapEffect((name) => Effect.map(Path.Path, (path) => path.resolve(name))), + Args.optional, +); -const Framework = Schema.Record({ - key: AvailableFrameworkKey, - value: Schema.Struct({ - directory: Schema.NonEmptyTrimmedString, - skipDirectories: Schema.Set(Schema.NonEmptyTrimmedString), - }), -}); -type Framework = typeof Framework.Type; - -const availableFrameworks = { - 'vite-react': { - directory: 'template-vite-react', - skipDirectories: new Set([...Utils.ALWAYS_SKIP_DIRECTORIES, '.tanstack', 'dist']), - }, -} as const satisfies Framework; -const templatePrompt = Prompt.select({ - message: 'Choose your template', - choices: [ - { - title: 'Vite + React', - value: 'vite-react', - description: 'Scaffolds a vite + react app using @tanstack/react-router', - }, - ] as NonEmptyReadonlyArray>, -}); +const template = Options.choice('template', Domain.availableFrameworkKeys).pipe( + Options.withAlias('t'), + Options.withDescription('Template to scaffold'), + Options.optional, +); -const PackageManager = Schema.Literal('pnpm', 'bun', 'yarn', 'npm'); -type PackageManager = typeof PackageManager.Type; -const packageManangerPrompt = Prompt.select({ - message: 'What package manager do you want to use?', - choices: [ - { title: 'pnpm', value: 'pnpm' }, - { title: 'bun', value: 'bun' }, - { title: 'yarn', value: 'yarn' }, - { title: 'npm', value: 'npm' }, - ] as NonEmptyReadonlyArray>, -}); -const installDepsPropmpt = Prompt.toggle({ - message: 'Do you want us to install deps?', - active: 'Yes', - inactive: 'No', - initial: false, -}); +const packageManager = Options.choice('package-manager', Domain.PackageManager).pipe( + Options.withAlias('p'), + Options.withDescription('The package manager to use to install deps (if selected)'), + Options.optional, +); + +const skipInstallDeps = Options.boolean('skip-install-deps').pipe( + Options.withDescription('If flag is provided, the deps will not be installed with the given package manager'), + Options.withDefault(false), +); + +const skipInitializeGit = Options.boolean('skip-initialize-git').pipe( + Options.withDescription('If flag is provided, git will not be initialized in the scaffolded app'), + Options.withDefault(false), +); + +interface RawConfig { + readonly appName: Option.Option; + readonly template: Option.Option; + readonly packageManager: Option.Option; + readonly skipInstallDeps: boolean; + readonly skipInitializeGit: boolean; +} +interface ResolvedConfig { + readonly appName: string; + readonly template: Domain.AvailableFrameworkKey; + readonly packageManager: Domain.PackageManager; + readonly skipInstallDeps: boolean; + readonly skipInitializeGit: boolean; +} + +const createHypergraphApp = Command.make('create-hypergraph-app', { + appName, + template, + packageManager, + skipInstallDeps, + skipInitializeGit, +}).pipe( + Command.withDescription('Command line interface to scaffold a Hypergraph-enabled application'), + Command.provide(NodeFileSystem.layer), + Command.withHandler(handleCommand), +); -const initializeGitRepoPrompt = Prompt.toggle({ - message: 'Initialize a git repository?', - active: 'Yes', - inactive: 'No', - initial: true, +export const run = Command.run(createHypergraphApp, { + name: 'create-hypergraph-app', + version: '0.0.0-alpha.4', }); -const prompts = Prompt.all([ - appNamePrompt, - templatePrompt, - packageManangerPrompt, - installDepsPropmpt, - initializeGitRepoPrompt, -]); - -const createHypergraphApp = Command.prompt( - 'create-hypergraph-app', - prompts, - ([appName, template, pkgMananger, installDeps, initializeGitRepo]) => - Effect.gen(function* () { - const fs = yield* FileSystem.FileSystem; - const path = yield* Path.Path; - - const framework = availableFrameworks[template]; - - // check if directory already exists, if exists, and is not empty, throw an error - const targetDirectory = path.resolve('.', appName); - const exists = yield* fs.exists(targetDirectory); - if (exists) { - const targetDirRead = yield* fs.readDirectory(targetDirectory, { recursive: true }); - if (EffectArray.isNonEmptyArray(targetDirRead)) { - return yield* Effect.logError( - AnsiDoc.vsep([ - AnsiDoc.text('The selected directory is not empty.').pipe(AnsiDoc.annotate(Ansi.red)), - AnsiDoc.text(`Please choose an empty directory, or clean ${targetDirectory}`), - ]), - ); - } - } else { - // create the target directory - yield* fs.makeDirectory(targetDirectory, { recursive: true }); - } +// ======================== +// Command Handler +// ======================== - yield* Effect.logInfo(AnsiDoc.text(`Scaffolding Hypergraph app ${appName} with template ${template}`)); +function handleCommand(config: Readonly) { + return Effect.all({ + appName: resolveAppName(config), + template: resolveTemplate(config), + packageManager: resolvePackageManager(config), + skipInstallDeps: Effect.succeed(config.skipInstallDeps), + skipInitializeGit: Effect.succeed(config.skipInitializeGit), + }).pipe(Effect.flatMap(scaffoldHypergraphApp)); +} - // retrieve template directory based on selected template - const __filename = import.meta.filename; - const __dirname = path.dirname(fileURLToPath(import.meta.url)); +function scaffoldHypergraphApp(config: Readonly) { + return Effect.gen(function* () { + const fs = yield* FileSystem.FileSystem; + const path = yield* Path.Path; - const templateDir = EffectString.endsWith('Cli.ts')(__filename) - ? // running locally - path.resolve(__dirname, '..', '..', framework.directory) - : // running the published version - path.resolve(__dirname, framework.directory); - const templatDirExists = yield* fs.exists(templateDir); - if (!templatDirExists) { + const framework = Domain.availableFrameworks[config.template]; + + // check if directory already exists, if exists, and is not empty, throw an error + const targetDirectory = path.resolve('.', config.appName); + const exists = yield* fs.exists(targetDirectory); + if (exists) { + const targetDirRead = yield* fs.readDirectory(targetDirectory, { recursive: true }); + if (EffectArray.isNonEmptyArray(targetDirRead)) { return yield* Effect.logError( - AnsiDoc.text(`Selected template ${template} does not exist`).pipe(AnsiDoc.annotate(Ansi.red)), + AnsiDoc.vsep([ + AnsiDoc.text('The selected directory is not empty.').pipe(AnsiDoc.annotate(Ansi.red)), + AnsiDoc.text(`Please choose an empty directory, or clean ${targetDirectory}`), + ]), ); } + } else { + // create the target directory + yield* fs.makeDirectory(targetDirectory, { recursive: true }); + } - /** - * Updates the name of the template package.json to the user-entered name in the prompt - */ - function updatePackageJson(directory: string) { - return Effect.gen(function* () { - const packageJsonPath = path.join(directory, 'package.json'); - // read the cloned package.json - const packageJson = yield* fs.readFileString(packageJsonPath).pipe(Effect.map(JSON.parse)); - - const validatedPackageName = Utils.validatePackageName(appName); - const name = validatedPackageName.normalizedName; - // update the name and description - packageJson.name = name; - - // rewrite file - yield* fs.writeFileString(packageJsonPath, JSON.stringify(packageJson, null, 2)); - }); - } + yield* Effect.logInfo( + AnsiDoc.text(`Scaffolding Hypergraph app ${config.appName} with template ${config.template}`), + ); - function copyTemplate(src: string, dest: string): Effect.Effect { - return Effect.gen(function* () { - yield* fs.makeDirectory(dest, { recursive: true }); - const entries = readdirSync(src, { withFileTypes: true }); + // retrieve template directory based on selected template + const __filename = import.meta.filename; + const __dirname = path.dirname(fileURLToPath(import.meta.url)); - for (const entry of entries) { - // Skip the node_modules, .tanstack, dist, and .git directories - if (entry.isDirectory() && framework.skipDirectories.has(entry.name)) continue; + const templateDir = EffectString.endsWith('Cli.ts')(__filename) + ? // running locally + path.resolve(__dirname, '..', framework.directory) + : // running the published version + path.resolve(__dirname, framework.directory); + const templatDirExists = yield* fs.exists(templateDir); + if (!templatDirExists) { + return yield* Effect.logError( + AnsiDoc.text(`Selected template ${config.template} does not exist`).pipe(AnsiDoc.annotate(Ansi.red)), + ); + } - const srcPath = path.join(src, entry.name); - const destPath = path.join(dest, entry.name); + /** + * Updates the name of the template package.json to the user-entered name in the prompt + */ + function updatePackageJson(directory: string) { + return Effect.gen(function* () { + const packageJsonPath = path.join(directory, 'package.json'); + // read the cloned package.json + const packageJson = yield* fs.readFileString(packageJsonPath).pipe(Effect.map(JSON.parse)); - if (entry.isDirectory()) { - yield* copyTemplate(srcPath, destPath); - } else { - yield* fs.copyFile(srcPath, destPath); - } + const validatedPackageName = Utils.validatePackageName(config.appName); + const name = validatedPackageName.normalizedName; + // update the name and description + packageJson.name = name; + + // rewrite file + yield* fs.writeFileString(packageJsonPath, JSON.stringify(packageJson, null, 2)); + }); + } + + function copyTemplate(src: string, dest: string): Effect.Effect { + return Effect.gen(function* () { + yield* fs.makeDirectory(dest, { recursive: true }); + const entries = readdirSync(src, { withFileTypes: true }); + + for (const entry of entries) { + // Skip the node_modules, .tanstack, dist, and .git directories + if (entry.isDirectory() && framework.skipDirectories.has(entry.name)) continue; + + const srcPath = path.join(src, entry.name); + const destPath = path.join(dest, entry.name); + + if (entry.isDirectory()) { + yield* copyTemplate(srcPath, destPath); + } else { + yield* fs.copyFile(srcPath, destPath); } + } + }); + } + + const installDepsInScaffoldedApp = Effect.async((resume) => { + try { + execSync(`${config.packageManager} install`, { + stdio: 'inherit', + cwd: targetDirectory, }); + return resume(Effect.void); + } catch (err) { + return resume(Effect.fail(new InstallDepsError({ cause: err }))); } + }); - const installDepsInScaffoldedApp = Effect.async((resume) => { - try { - execSync(`${pkgMananger} install`, { + const initializeGit = Effect.gen(function* () { + yield* Effect.try({ + try: () => { + execSync('git init -q', { stdio: 'inherit', cwd: targetDirectory, }); - return resume(Effect.void); - } catch (err) { - return resume(Effect.fail(new InstallDepsError({ cause: err }))); - } + }, + catch: (err) => new InitializeGitRepoError({ cause: err }), }); - const initializeGit = Effect.gen(function* () { - yield* Effect.try({ - try: () => { - execSync('git init -q', { - stdio: 'inherit', - cwd: targetDirectory, - }); - }, - catch: (err) => new InitializeGitRepoError({ cause: err }), - }); - - yield* Effect.try({ - try: () => { - execSync('git add .', { - stdio: 'inherit', - cwd: targetDirectory, - }); - }, - catch: (err) => new InitializeGitRepoError({ cause: err }), - }); + yield* Effect.try({ + try: () => { + execSync('git add .', { + stdio: 'inherit', + cwd: targetDirectory, + }); + }, + catch: (err) => new InitializeGitRepoError({ cause: err }), + }); - yield* Effect.try({ - try: () => { - execSync('git commit -q -m "Initial commit - Scaffold Hypergraph app"', { - stdio: 'inherit', - cwd: targetDirectory, - }); - }, - catch: (err) => new InitializeGitRepoError({ cause: err }), - }); + yield* Effect.try({ + try: () => { + execSync('git commit -q -m "Initial commit - Scaffold Hypergraph app"', { + stdio: 'inherit', + cwd: targetDirectory, + }); + }, + catch: (err) => new InitializeGitRepoError({ cause: err }), }); + }); - return yield* copyTemplate(templateDir, targetDirectory).pipe( - Effect.tapErrorCause((cause) => - Effect.logError( - 'Failure copying the template directory files into your target directory', - Cause.pretty(cause), - ), - ), - Effect.andThen(() => updatePackageJson(targetDirectory)), - // Initialize the git repo if user selected to - Effect.andThen(() => Effect.when(initializeGit, () => initializeGitRepo)), - Effect.tapErrorCause((cause) => - Effect.logError('Failure initializing the git repository', Cause.pretty(cause)), + return yield* copyTemplate(templateDir, targetDirectory).pipe( + Effect.tapErrorCause((cause) => + Effect.logError('Failure copying the template directory files into your target directory', Cause.pretty(cause)), + ), + Effect.andThen(() => updatePackageJson(targetDirectory)), + // Initialize the git repo if user selected to + Effect.andThen(() => Effect.when(initializeGit, () => !config.skipInitializeGit)), + Effect.tapErrorCause((cause) => Effect.logError('Failure initializing the git repository', Cause.pretty(cause))), + // Install the deps with the selected package manager if user selected to + Effect.andThen(() => Effect.when(installDepsInScaffoldedApp, () => !config.skipInstallDeps)), + Effect.tapErrorCause((cause) => + Effect.logError(`Failure installing deps with ${config.packageManager}`, Cause.pretty(cause)), + ), + // success. inform user + Effect.andThen(() => + Effect.logInfo( + AnsiDoc.text(`🎉 Successfully scaffolded your hypergraph enabled app ${config.appName}!`), + AnsiDoc.hardLine, + AnsiDoc.text('To start the app, run:'), + AnsiDoc.hardLine, + AnsiDoc.text(`cd ${config.appName}`), + config.skipInstallDeps ? AnsiDoc.text(`${config.packageManager} install`) : AnsiDoc.hardLine, + AnsiDoc.hardLine, + AnsiDoc.text(`${config.packageManager} run dev`), ), - // Install the deps with the selected package manager if user selected to - Effect.andThen(() => Effect.when(installDepsInScaffoldedApp, () => installDeps)), - Effect.tapErrorCause((cause) => - Effect.logError(`Failure installing deps with ${pkgMananger}`, Cause.pretty(cause)), - ), - // success. inform user - Effect.andThen(() => - Effect.logInfo( - AnsiDoc.text(`🎉 Successfully scaffolded your hypergraph enabled app ${appName}!`), - AnsiDoc.hardLine, - AnsiDoc.text('To start the app, run:'), - AnsiDoc.hardLine, - AnsiDoc.text(`cd ${appName}`), - installDeps ? AnsiDoc.hardLine : AnsiDoc.text(`${pkgMananger} install`), - AnsiDoc.hardLine, - AnsiDoc.text(`${pkgMananger} run dev`), - ), - ), - ); - }), -).pipe( - Command.withDescription('Command line interface to scaffold a Hypergraph-enabled application'), - Command.provide(NodeFileSystem.layer), -); + ), + ); + }); +} -export const run = Command.run(createHypergraphApp, { - name: 'create-hypergraph-app', - version: '0.0.0-alpha.3', -}); +// ======================== +// Command choices resolution +// ======================== + +/** + * Resolves the app name from either: the passed in arg to the command, _or_ by prompting the user + */ +function resolveAppName(config: Readonly) { + return Option.match(config.appName, { + onSome(name) { + return Effect.succeed(name); + }, + onNone() { + // user did not pass in the app name as an arg. fetch from a prompt + return Prompt.text({ + message: 'What is your app named?', + default: 'my-hypergraph-app', + validate(value) { + return Utils.validateProjectName(value).pipe(Effect.mapError((doc) => HelpDoc.toAnsiText(doc))); + }, + }).pipe(Effect.flatMap((name) => Path.Path.pipe(Effect.map((path) => path.resolve(name))))); + }, + }); +} +/** + * Resolves the template from either: the passed in --template option to the command, _or_ by prompting the user + */ +function resolveTemplate(config: Readonly) { + return Option.match(config.template, { + onSome(template) { + return Effect.succeed(template); + }, + onNone() { + return Prompt.select({ + message: 'Choose your template', + choices: [ + { + title: 'Vite + React', + value: 'vite-react', + description: 'Scaffolds a vite + react app using @tanstack/react-router', + }, + ], + }).pipe(Effect.map((selected) => selected)); + }, + }); +} +/** + * Resolves the package manager from either: the passed in --package-manager option to the command, _or_ by prompting the user + */ +function resolvePackageManager(config: Readonly) { + return Option.match(config.packageManager, { + onSome(pkg) { + return Effect.succeed(pkg); + }, + onNone() { + return Prompt.select({ + message: 'What package manager do you want to use?', + choices: [ + { title: 'pnpm', value: 'pnpm' }, + { title: 'bun', value: 'bun' }, + { title: 'yarn', value: 'yarn' }, + { title: 'npm', value: 'npm' }, + ], + }).pipe(Effect.map((selected) => selected)); + }, + }); +} class InitializeGitRepoError extends Data.TaggedError( 'Hypergraph/create-hypergraph-app/errors/InitializeGitRepoError', diff --git a/apps/create-hypergraph/src/Domain.ts b/apps/create-hypergraph/src/Domain.ts new file mode 100644 index 00000000..401c3644 --- /dev/null +++ b/apps/create-hypergraph/src/Domain.ts @@ -0,0 +1,25 @@ +import * as Schema from 'effect/Schema'; + +export const ALWAYS_SKIP_DIRECTORIES = ['node_modules', '.git']; + +export const AvailableFrameworkKey = Schema.Union(Schema.Literal('vite-react')); +export type AvailableFrameworkKey = typeof AvailableFrameworkKey.Type; +export const Framework = Schema.Record({ + key: AvailableFrameworkKey, + value: Schema.Struct({ + directory: Schema.NonEmptyTrimmedString, + skipDirectories: Schema.Set(Schema.NonEmptyTrimmedString), + }), +}); +export type Framework = typeof Framework.Type; + +export const availableFrameworks = { + 'vite-react': { + directory: 'template-vite-react', + skipDirectories: new Set([...ALWAYS_SKIP_DIRECTORIES, '.tanstack', 'dist']), + }, +} as const satisfies Framework; +export const availableFrameworkKeys = Object.keys(availableFrameworks) as ReadonlyArray; + +export const PackageManager = ['pnpm', 'bun', 'yarn', 'npm'] as const; +export type PackageManager = (typeof PackageManager)[number]; diff --git a/apps/create-hypergraph/src/Utils.ts b/apps/create-hypergraph/src/Utils.ts index 1f46056f..248dd138 100644 --- a/apps/create-hypergraph/src/Utils.ts +++ b/apps/create-hypergraph/src/Utils.ts @@ -1,7 +1,6 @@ +import * as HelpDoc from '@effect/cli/HelpDoc'; import * as Effect from 'effect/Effect'; -export const ALWAYS_SKIP_DIRECTORIES = ['node_modules', '.git']; - const SCOPED_PACKAGE_REGEX = /^(?:@([^/]+?)[/])?([^/]+?)$/; const blockList = ['node_modules', 'favicon.ico']; @@ -78,9 +77,9 @@ const nodeBuiltins = [ 'zlib', ]; -const invalid = (message: string) => Effect.fail(message); +const invalid = (message: string) => Effect.fail(HelpDoc.p(message)); -export function validateProjectName(name: string): Effect.Effect { +export function validateProjectName(name: string): Effect.Effect { if (name.length === 0) { return invalid('Project name must be a non-empty string'); } diff --git a/apps/create-hypergraph/src/bin.ts b/apps/create-hypergraph/src/bin.ts index b5c349cc..ec4a9d66 100644 --- a/apps/create-hypergraph/src/bin.ts +++ b/apps/create-hypergraph/src/bin.ts @@ -16,6 +16,10 @@ const runnable = Effect.suspend(() => run(process.argv)).pipe( ); runnable.pipe( + Effect.catchTags({ + QuitException: () => + Effect.logError(AnsiDoc.cat(AnsiDoc.hardLine, AnsiDoc.text('Exiting...').pipe(AnsiDoc.annotate(Ansi.red)))), + }), Effect.catchAllDefect((defect) => Effect.gen(function* () { if (defect && typeof defect === 'object' && 'name' in defect && defect.name === 'QuitException') { diff --git a/apps/create-hypergraph/test/Utils.test.ts b/apps/create-hypergraph/test/Utils.test.ts index 308c6365..ccb816e9 100644 --- a/apps/create-hypergraph/test/Utils.test.ts +++ b/apps/create-hypergraph/test/Utils.test.ts @@ -1,3 +1,4 @@ +import * as HelpDoc from '@effect/cli/HelpDoc'; import { describe, it } from '@effect/vitest'; import * as Effect from 'effect/Effect'; import * as Exit from 'effect/Exit'; @@ -264,7 +265,7 @@ describe('Utils', () => { it.effect('should reject empty names', ({ expect }) => Effect.gen(function* () { const result = yield* Effect.exit(Utils.validateProjectName('')); - expect(result).toStrictEqual(Exit.fail('Project name must be a non-empty string')); + expect(result).toStrictEqual(Exit.fail(HelpDoc.p('Project name must be a non-empty string'))); }), ); @@ -272,42 +273,46 @@ describe('Utils', () => { Effect.gen(function* () { const longName = 'a'.repeat(215); const result = yield* Effect.exit(Utils.validateProjectName(longName)); - expect(result).toStrictEqual(Exit.fail('Project name must not contain more than 214 characters')); + expect(result).toStrictEqual(Exit.fail(HelpDoc.p('Project name must not contain more than 214 characters'))); }), ); it.effect('should reject names with uppercase letters', ({ expect }) => Effect.gen(function* () { const result = yield* Effect.exit(Utils.validateProjectName('MyProject')); - expect(result).toStrictEqual(Exit.fail('Project name must not contain capital letters')); + expect(result).toStrictEqual(Exit.fail(HelpDoc.p('Project name must not contain capital letters'))); }), ); it.effect('should reject names with leading whitespace', ({ expect }) => Effect.gen(function* () { const result = yield* Effect.exit(Utils.validateProjectName(' myproject')); - expect(result).toStrictEqual(Exit.fail('Project name must not contain leading or trailing whitespace')); + expect(result).toStrictEqual( + Exit.fail(HelpDoc.p('Project name must not contain leading or trailing whitespace')), + ); }), ); it.effect('should reject names with trailing whitespace', ({ expect }) => Effect.gen(function* () { const result = yield* Effect.exit(Utils.validateProjectName('myproject ')); - expect(result).toStrictEqual(Exit.fail('Project name must not contain leading or trailing whitespace')); + expect(result).toStrictEqual( + Exit.fail(HelpDoc.p('Project name must not contain leading or trailing whitespace')), + ); }), ); it.effect('should reject names starting with a period', ({ expect }) => Effect.gen(function* () { const result = yield* Effect.exit(Utils.validateProjectName('.myproject')); - expect(result).toStrictEqual(Exit.fail('Project name must not start with a period')); + expect(result).toStrictEqual(Exit.fail(HelpDoc.p('Project name must not start with a period'))); }), ); it.effect('should reject names starting with an underscore', ({ expect }) => Effect.gen(function* () { const result = yield* Effect.exit(Utils.validateProjectName('_myproject')); - expect(result).toStrictEqual(Exit.fail('Project name must not start with an underscore')); + expect(result).toStrictEqual(Exit.fail(HelpDoc.p('Project name must not start with an underscore'))); }), ); @@ -316,7 +321,9 @@ describe('Utils', () => { const specialChars = ['~', "'", '!', '(', ')', '*']; for (const char of specialChars) { const result = yield* Effect.exit(Utils.validateProjectName(`my${char}project`)); - expect(result).toStrictEqual(Exit.fail("Project name must not contain the special scharacters ~'!()*")); + expect(result).toStrictEqual( + Exit.fail(HelpDoc.p("Project name must not contain the special scharacters ~'!()*")), + ); } }), ); @@ -326,7 +333,9 @@ describe('Utils', () => { const builtins = ['fs', 'path', 'http', 'crypto', 'buffer']; for (const builtin of builtins) { const result = yield* Effect.exit(Utils.validateProjectName(builtin)); - expect(result).toStrictEqual(Exit.fail('Project name must not be a NodeJS built-in module name')); + expect(result).toStrictEqual( + Exit.fail(HelpDoc.p('Project name must not be a NodeJS built-in module name')), + ); } }), ); @@ -336,7 +345,7 @@ describe('Utils', () => { const blockedNames = ['node_modules', 'favicon.ico']; for (const blocked of blockedNames) { const result = yield* Effect.exit(Utils.validateProjectName(blocked)); - expect(result).toStrictEqual(Exit.fail(`Project name '${blocked}' is blocked from use`)); + expect(result).toStrictEqual(Exit.fail(HelpDoc.p(`Project name '${blocked}' is blocked from use`))); } }), ); @@ -344,14 +353,14 @@ describe('Utils', () => { it.effect('should reject names with non-URL-friendly characters', ({ expect }) => Effect.gen(function* () { const result = yield* Effect.exit(Utils.validateProjectName('my')); - expect(result).toStrictEqual(Exit.fail('Project name must only contain URL-friendly characters')); + expect(result).toStrictEqual(Exit.fail(HelpDoc.p('Project name must only contain URL-friendly characters'))); }), ); it.effect('should reject scoped packages with non-URL-friendly characters', ({ expect }) => Effect.gen(function* () { const result = yield* Effect.exit(Utils.validateProjectName('@my/my')); - expect(result).toStrictEqual(Exit.fail('Project name must only contain URL-friendly characters')); + expect(result).toStrictEqual(Exit.fail(HelpDoc.p('Project name must only contain URL-friendly characters'))); }), ); }); @@ -367,7 +376,9 @@ describe('Utils', () => { it.effect('should handle scoped packages with special characters in last segment', ({ expect }) => Effect.gen(function* () { const result = yield* Effect.exit(Utils.validateProjectName('@myorg/my!project')); - expect(result).toStrictEqual(Exit.fail("Project name must not contain the special scharacters ~'!()*")); + expect(result).toStrictEqual( + Exit.fail(HelpDoc.p("Project name must not contain the special scharacters ~'!()*")), + ); }), ); From f54e72a79302045e194fa4cf081b615ae5eccd72 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Wed, 23 Jul 2025 10:52:28 -1000 Subject: [PATCH 16/20] feat(#351 | create-hypergraph): create llms.txt for create-hypergraph usage --- apps/create-hypergraph/llms.txt | 131 ++++++++++++++++++++++++++++ apps/create-hypergraph/package.json | 8 +- apps/create-hypergraph/src/Cli.ts | 4 +- 3 files changed, 137 insertions(+), 6 deletions(-) create mode 100644 apps/create-hypergraph/llms.txt diff --git a/apps/create-hypergraph/llms.txt b/apps/create-hypergraph/llms.txt new file mode 100644 index 00000000..4c7c3695 --- /dev/null +++ b/apps/create-hypergraph/llms.txt @@ -0,0 +1,131 @@ +# create-hypergraph + +A command-line tool for scaffolding Hypergraph-enabled applications. + +## What is Hypergraph? + +Hypergraph is a local-first framework for building web3 consumer applications. It enables developers to build performant, privacy-preserving apps where: + +- Data is stored locally on the user's device with zero network latency +- All private data is end-to-end encrypted +- Changes sync automatically across devices when online +- Users own their data and can take it between apps +- No traditional backend infrastructure is needed + +## When to Use Hypergraph + +Use Hypergraph when building: +- **Collaborative Applications**: Real-time document editing, shared workspaces, team tools +- **Social Applications**: Messaging apps, social networks, community platforms +- **Knowledge Management**: Note-taking apps, personal wikis, research tools +- **Privacy-First Apps**: Any application requiring end-to-end encryption +- **Offline-First Apps**: Applications that must work without internet connectivity + +Hypergraph is ideal when you need: +- Instant UI updates without loading spinners +- Real-time collaboration features +- User-owned, portable data +- Privacy through encryption +- To avoid managing servers and databases + +## Installation and Usage + +This tool is published to npm and can be run using: +```bash +pnpm create hypergraph +# or +npm create hypergraph +# or +yarn create hypergraph +# or +bun create hypergraph +``` + +Alternatively, you can use the shorthand: +```bash +pnpx ch +``` + +## Purpose + +create-hypergraph is a CLI tool that scaffolds new Hypergraph-enabled applications with pre-configured templates. It streamlines the process of setting up a new project with The Graph Protocol's Hypergraph framework. + +## Command-Line Options + +### Positional Arguments + +- `app-name` (optional): The name of your application. This will also be the folder name where your app is scaffolded. If not provided, the tool will prompt for it interactively. + +### Options + +- `--template, -t` (optional): Template to scaffold + - Available values: `vite-react` + - Default: prompts user to select + - Currently only supports `vite-react` which scaffolds a Vite + React app using @tanstack/react-router + +- `--package-manager, -p` (optional): The package manager to use for installing dependencies + - Available values: `pnpm`, `bun`, `yarn`, `npm` + - Default: prompts user to select + +- `--skip-install-deps`: Skip installing dependencies after scaffolding + - Default: false (dependencies will be installed) + +- `--skip-initialize-git`: Skip initializing a git repository in the scaffolded app + - Default: false (git repository will be initialized with an initial commit) + +## Examples + +### Interactive Mode (Recommended) +```bash +pnpm create hypergraph +``` +This will prompt you for all necessary information. + +### Fully Specified +```bash +pnpm create hypergraph my-app --template vite-react --package-manager pnpm +``` + +### Skip Optional Steps +```bash +pnpm create hypergraph my-app --skip-install-deps --skip-initialize-git +``` + +## Workflow + +1. **Validates app name**: Ensures the provided name is a valid project name +2. **Checks target directory**: Verifies the directory doesn't exist or is empty +3. **Copies template files**: Scaffolds the selected template into the target directory +4. **Updates package.json**: Sets the correct package name in the scaffolded app +5. **Initializes git** (optional): Creates a git repository with initial commit +6. **Installs dependencies** (optional): Runs the package manager install command + +## Template Details + +### vite-react +- Modern React application using Vite as the build tool +- Configured with @tanstack/react-router for routing +- Hypergraph integration pre-configured +- TypeScript enabled +- Development server with HMR + +## Error Handling + +The tool will fail gracefully if: +- The target directory exists and is not empty +- The selected template doesn't exist +- Git initialization fails +- Dependency installation fails + +## Requirements + +- Node.js >= 20 +- One of the supported package managers (pnpm, npm, yarn, or bun) + +## Post-Scaffolding + +After successful scaffolding, navigate to your app directory and start development: +```bash +cd +pnpm run dev # or npm/yarn/bun run dev +``` \ No newline at end of file diff --git a/apps/create-hypergraph/package.json b/apps/create-hypergraph/package.json index 04066916..898ce40e 100644 --- a/apps/create-hypergraph/package.json +++ b/apps/create-hypergraph/package.json @@ -1,6 +1,6 @@ { "name": "create-hypergraph", - "version": "0.0.0-alpha.4", + "version": "0.0.0-alpha.5", "description": "CLI toolchain to scaffold a Hypergraph-enabled application with a given template.", "type": "module", "bin": { @@ -9,7 +9,8 @@ }, "files": [ "template-*", - "dist" + "dist", + "llms.txt" ], "repository": { "type": "git", @@ -27,7 +28,8 @@ "build": "tsdown && tsx scripts/copy-package-json.ts && pnpm run copy-all", "copy-templates": "cp -r template-* dist/", "copy-readme": "cp README.md dist/README.md", - "copy-all": "pnpm run copy-templates && pnpm run copy-readme", + "copy-llms": "cp llms.txt dist/llms.txt", + "copy-all": "pnpm run copy-templates && pnpm run copy-readme && pnpm run copy-llms", "check": "tsc --noEmit", "start": "node ./dist/bin.js", "lint": "biome check", diff --git a/apps/create-hypergraph/src/Cli.ts b/apps/create-hypergraph/src/Cli.ts index 8fe39df2..fb35e68b 100644 --- a/apps/create-hypergraph/src/Cli.ts +++ b/apps/create-hypergraph/src/Cli.ts @@ -75,7 +75,7 @@ const createHypergraphApp = Command.make('create-hypergraph-app', { export const run = Command.run(createHypergraphApp, { name: 'create-hypergraph-app', - version: '0.0.0-alpha.4', + version: '0.0.0-alpha.5', }); // ======================== @@ -240,10 +240,8 @@ function scaffoldHypergraphApp(config: Readonly) { AnsiDoc.text(`🎉 Successfully scaffolded your hypergraph enabled app ${config.appName}!`), AnsiDoc.hardLine, AnsiDoc.text('To start the app, run:'), - AnsiDoc.hardLine, AnsiDoc.text(`cd ${config.appName}`), config.skipInstallDeps ? AnsiDoc.text(`${config.packageManager} install`) : AnsiDoc.hardLine, - AnsiDoc.hardLine, AnsiDoc.text(`${config.packageManager} run dev`), ), ), From 97894a1d5b61573eaf9bcc8320e05c6386c93538 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Wed, 23 Jul 2025 11:15:17 -1000 Subject: [PATCH 17/20] feat(#351 | create-hypergraph): test suite for Cli tool --- apps/create-hypergraph/package.json | 3 +- apps/create-hypergraph/src/Cli.ts | 2 +- apps/create-hypergraph/test/Cli.test.ts | 266 ++++++++++++++++++++++++ pnpm-lock.yaml | 121 ++++++++++- 4 files changed, 385 insertions(+), 7 deletions(-) create mode 100644 apps/create-hypergraph/test/Cli.test.ts diff --git a/apps/create-hypergraph/package.json b/apps/create-hypergraph/package.json index 898ce40e..1ae2a8b6 100644 --- a/apps/create-hypergraph/package.json +++ b/apps/create-hypergraph/package.json @@ -1,6 +1,6 @@ { "name": "create-hypergraph", - "version": "0.0.0-alpha.5", + "version": "0.0.1", "description": "CLI toolchain to scaffold a Hypergraph-enabled application with a given template.", "type": "module", "bin": { @@ -59,6 +59,7 @@ "@effect/vitest": "^0.25.0", "@types/node": "^24.1.0", "effect": "^3.17.0", + "execa": "^9.6.0", "tsdown": "^0.13.0", "tsx": "^4.20.3" } diff --git a/apps/create-hypergraph/src/Cli.ts b/apps/create-hypergraph/src/Cli.ts index fb35e68b..c6a6c45b 100644 --- a/apps/create-hypergraph/src/Cli.ts +++ b/apps/create-hypergraph/src/Cli.ts @@ -75,7 +75,7 @@ const createHypergraphApp = Command.make('create-hypergraph-app', { export const run = Command.run(createHypergraphApp, { name: 'create-hypergraph-app', - version: '0.0.0-alpha.5', + version: '0.0.1', }); // ======================== diff --git a/apps/create-hypergraph/test/Cli.test.ts b/apps/create-hypergraph/test/Cli.test.ts new file mode 100644 index 00000000..bb5fe8fd --- /dev/null +++ b/apps/create-hypergraph/test/Cli.test.ts @@ -0,0 +1,266 @@ +import { existsSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { describe, expect, it } from '@effect/vitest'; +import { Effect } from 'effect'; +import { execaCommandSync } from 'execa'; + +const __dirname = fileURLToPath(new URL('.', import.meta.url)); +const CLI_PATH = resolve(__dirname, '../src/bin.ts'); + +const projectName = 'test-app'; +const testDir = join(tmpdir(), 'create-hypergraph-test-'); + +const run = (args: Array, cwd?: string) => { + return Effect.sync(() => { + const fullCommand = `pnpx tsx ${CLI_PATH} ${args.join(' ')}`; + const result = execaCommandSync(fullCommand, { cwd }); + return result.stdout; + }); +}; + +const runExpectError = (args: Array, cwd?: string) => { + return Effect.sync(() => { + const fullCommand = `pnpx tsx ${CLI_PATH} ${args.join(' ')}`; + try { + const result = execaCommandSync(fullCommand, { cwd, reject: false }); + return { stdout: result.stdout, stderr: result.stderr, exitCode: result.exitCode }; + // biome-ignore lint/suspicious/noExplicitAny: error + } catch (error: any) { + return { stdout: error.stdout || '', stderr: error.stderr || '', exitCode: error.exitCode || 1 }; + } + }); +}; + +const cleanupTestDirs = () => { + return Effect.sync(() => { + const tmpDirContents = readdirSync(tmpdir()); + tmpDirContents.forEach((file) => { + if (file.startsWith('create-hypergraph-test-')) { + rmSync(join(tmpdir(), file), { recursive: true, force: true }); + } + }); + }); +}; + +const createTempDir = () => { + return Effect.sync(() => mkdtempSync(testDir)); +}; + +const cleanupTempDir = (tempDir: string) => { + return Effect.sync(() => { + if (tempDir && existsSync(tempDir)) { + rmSync(tempDir, { recursive: true, force: true }); + } + }); +}; + +describe('create-hypergraph CLI', () => { + it.effect('happy path - scaffolds app with all options provided', () => + Effect.gen(function* () { + // Clean up any previous test directories + yield* cleanupTestDirs(); + + // Create a fresh temp directory for this test + const tempDir = yield* createTempDir(); + + try { + // Run the CLI with all options provided + const output = yield* run( + [ + '--template', + 'vite-react', + '--package-manager', + 'pnpm', + '--skip-install-deps', + '--skip-initialize-git', + projectName, + ], + tempDir, + ); + + // Verify the output contains success message + expect(output).toContain('Successfully scaffolded your hypergraph enabled app'); + + // Verify the project directory was created + const projectPath = join(tempDir, projectName); + expect(existsSync(projectPath)).toBe(true); + + // Verify expected files/directories exist + const expectedFiles = [ + 'package.json', + 'tsconfig.json', + 'vite.config.ts', + 'index.html', + 'src/main.tsx', + 'src/index.css', + 'src/schema.ts', + 'src/mapping.ts', + ]; + + expectedFiles.forEach((file) => { + const filePath = join(projectPath, file); + expect(existsSync(filePath)).toBe(true); + }); + + // Verify package.json exists and has a valid name + const packageJsonPath = join(projectPath, 'package.json'); + const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')); + // The CLI normalizes the package name, so just verify it's not empty + expect(packageJson.name).toBeTruthy(); + expect(typeof packageJson.name).toBe('string'); + + // Verify no .git directory exists (since we skipped git init) + expect(existsSync(join(projectPath, '.git'))).toBe(false); + + // Verify no node_modules exists (since we skipped install) + expect(existsSync(join(projectPath, 'node_modules'))).toBe(false); + } finally { + // Clean up the temp directory + yield* cleanupTempDir(tempDir); + } + }), + ); + + it.effect('error - invalid app name with capital letters', () => + Effect.gen(function* () { + yield* cleanupTestDirs(); + const tempDir = yield* createTempDir(); + + try { + const result = yield* runExpectError( + [ + '--template', + 'vite-react', + '--skip-install-deps', + '--skip-initialize-git', + 'MyApp', // Capital letters not allowed + ], + tempDir, + ); + + expect(result.exitCode).not.toBe(0); + expect(result.stderr).toContain('Project name must not contain capital letters'); + } finally { + yield* cleanupTempDir(tempDir); + } + }), + ); + + it.effect('error - invalid app name starting with underscore', () => + Effect.gen(function* () { + yield* cleanupTestDirs(); + const tempDir = yield* createTempDir(); + + try { + const result = yield* runExpectError( + [ + '--template', + 'vite-react', + '--skip-install-deps', + '--skip-initialize-git', + '_myapp', // Starting with underscore not allowed + ], + tempDir, + ); + + expect(result.exitCode).not.toBe(0); + expect(result.stderr).toContain('Project name must not start with an underscore'); + } finally { + yield* cleanupTempDir(tempDir); + } + }), + ); + + it.effect('error - non-empty directory already exists', () => + Effect.gen(function* () { + yield* cleanupTestDirs(); + const tempDir = yield* createTempDir(); + + try { + // Create the project directory and add a file to make it non-empty + const projectPath = join(tempDir, projectName); + yield* Effect.sync(() => { + mkdirSync(projectPath, { recursive: true }); + writeFileSync(join(projectPath, 'existing-file.txt'), 'content'); + }); + + const result = yield* runExpectError( + ['--template', 'vite-react', '--skip-install-deps', '--skip-initialize-git', projectName], + tempDir, + ); + + expect(result.exitCode).not.toBe(0); + expect(result.stderr).toContain("Path 'test-app' must not exist"); + } finally { + yield* cleanupTempDir(tempDir); + } + }), + ); + + it.effect('test git initialization when not skipped', () => + Effect.gen(function* () { + yield* cleanupTestDirs(); + const tempDir = yield* createTempDir(); + + try { + // Run CLI without skipping git initialization + const output = yield* run( + [ + '--template', + 'vite-react', + '--package-manager', + 'pnpm', + '--skip-install-deps', + // Note: not skipping git init + 'test-git-app', + ], + tempDir, + ); + + expect(output).toContain('Successfully scaffolded your hypergraph enabled app'); + + // Verify .git directory was created + const projectPath = join(tempDir, 'test-git-app'); + expect(existsSync(join(projectPath, '.git'))).toBe(true); + } finally { + yield* cleanupTempDir(tempDir); + } + }), + ); + + it.effect( + 'test dependency installation when not skipped', + () => + Effect.gen(function* () { + yield* cleanupTestDirs(); + const tempDir = yield* createTempDir(); + + try { + // Run CLI without skipping dependency installation + const output = yield* run( + [ + '--template', + 'vite-react', + '--package-manager', + 'pnpm', + '--skip-initialize-git', + // Note: not skipping install deps + 'test-deps-app', + ], + tempDir, + ); + + expect(output).toContain('Successfully scaffolded your hypergraph enabled app'); + + // Verify node_modules directory was created + const projectPath = join(tempDir, 'test-deps-app'); + expect(existsSync(join(projectPath, 'node_modules'))).toBe(true); + } finally { + yield* cleanupTempDir(tempDir); + } + }), + { timeout: 60000 }, // 60 second timeout for dependency installation + ); +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2e101936..f1ae51a9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -162,6 +162,9 @@ importers: effect: specifier: ^3.17.0 version: 3.17.0 + execa: + specifier: ^9.6.0 + version: 9.6.0 tsdown: specifier: ^0.13.0 version: 0.13.0(typescript@5.8.3) @@ -330,7 +333,7 @@ importers: version: 7.1.2(graphql@16.11.0) isomorphic-ws: specifier: ^5.0.0 - version: 5.0.0(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 5.0.0(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) lucide-react: specifier: ^0.508.0 version: 0.508.0(react@19.1.0) @@ -4764,6 +4767,9 @@ packages: '@scure/bip39@1.6.0': resolution: {integrity: sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==} + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + '@serenity-kit/noble-sodium@0.2.1': resolution: {integrity: sha512-023EjSl/ZMl8yNmnzeeWJh/V44QyBC82I8xuHltITeWdcyrQHbGnmMZRZOm/uTRinhgqoMzRBNQqbrfyuI5idg==} @@ -4814,6 +4820,10 @@ packages: resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + '@slorber/react-helmet-async@1.3.0': resolution: {integrity: sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A==} peerDependencies: @@ -7749,6 +7759,10 @@ packages: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} + execa@9.6.0: + resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==} + engines: {node: ^18.19.0 || >=20.5.0} + expand-template@2.0.3: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} @@ -7879,6 +7893,10 @@ packages: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -8094,6 +8112,10 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + get-tsconfig@4.10.1: resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} @@ -8432,6 +8454,10 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} + humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} @@ -8711,6 +8737,10 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} @@ -8730,6 +8760,10 @@ packages: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + is-upper-case@2.0.2: resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} @@ -9799,6 +9833,10 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + nprogress@0.2.0: resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} @@ -10019,6 +10057,10 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + parse-numeric-range@1.3.0: resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} @@ -10064,6 +10106,10 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -10733,6 +10779,10 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + pretty-ms@9.2.0: + resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} + engines: {node: '>=18'} + pretty-time@1.1.0: resolution: {integrity: sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==} engines: {node: '>=4'} @@ -11697,6 +11747,10 @@ packages: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + strip-hex-prefix@1.0.0: resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} engines: {node: '>=6.5.0', npm: '>=3'} @@ -12216,6 +12270,10 @@ packages: resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} engines: {node: '>=4'} + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -12993,6 +13051,10 @@ packages: resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} engines: {node: '>=12.20'} + yoctocolors@2.1.1: + resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} + engines: {node: '>=18'} + zod-package-json@1.0.3: resolution: {integrity: sha512-Mb6GzuRyUEl8X+6V6xzHbd4XV0au/4gOYrYP+CAfHL32uPmGswES+v2YqonZiW1NZWVA3jkssCKSU2knonm/aQ==} engines: {node: '>=20'} @@ -18512,6 +18574,8 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/base': 1.2.5 + '@sec-ant/readable-stream@0.4.1': {} + '@serenity-kit/noble-sodium@0.2.1': dependencies: '@noble/ciphers': 1.3.0 @@ -18571,6 +18635,8 @@ snapshots: '@sindresorhus/is@5.6.0': {} + '@sindresorhus/merge-streams@4.0.0': {} + '@slorber/react-helmet-async@1.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@babel/runtime': 7.27.6 @@ -22444,6 +22510,21 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 + execa@9.6.0: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.2.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.1 + expand-template@2.0.3: {} expect-type@1.2.1: {} @@ -22621,6 +22702,10 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -22837,6 +22922,11 @@ snapshots: get-stream@6.0.1: {} + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + get-tsconfig@4.10.1: dependencies: resolve-pkg-maps: 1.0.0 @@ -23328,6 +23418,8 @@ snapshots: human-signals@2.1.0: {} + human-signals@8.0.1: {} + humanize-ms@1.2.1: dependencies: ms: 2.1.3 @@ -23550,6 +23642,8 @@ snapshots: is-stream@2.0.1: {} + is-stream@4.0.1: {} + is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 @@ -23566,6 +23660,8 @@ snapshots: is-unicode-supported@0.1.0: {} + is-unicode-supported@2.1.0: {} + is-upper-case@2.0.2: dependencies: tslib: 2.8.1 @@ -23602,10 +23698,6 @@ snapshots: dependencies: ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) - isomorphic-ws@5.0.0(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)): - dependencies: - ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) - isomorphic-ws@5.0.0(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -24875,6 +24967,11 @@ snapshots: dependencies: path-key: 3.1.1 + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + nprogress@0.2.0: {} nth-check@2.1.1: @@ -25163,6 +25260,8 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse-ms@4.0.0: {} + parse-numeric-range@1.3.0: {} parse5-htmlparser2-tree-adapter@7.1.0: @@ -25200,6 +25299,8 @@ snapshots: path-key@3.1.1: {} + path-key@4.0.0: {} + path-parse@1.0.7: {} path-root-regex@0.1.2: {} @@ -26013,6 +26114,10 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 + pretty-ms@9.2.0: + dependencies: + parse-ms: 4.0.0 + pretty-time@1.1.0: {} prism-react-renderer@2.4.1(react@19.1.0): @@ -27279,6 +27384,8 @@ snapshots: strip-final-newline@2.0.0: {} + strip-final-newline@4.0.0: {} + strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed: 1.0.0 @@ -27802,6 +27909,8 @@ snapshots: unicode-property-aliases-ecmascript@2.1.0: {} + unicorn-magic@0.3.0: {} + unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -28628,6 +28737,8 @@ snapshots: yocto-queue@1.2.1: {} + yoctocolors@2.1.1: {} + zod-package-json@1.0.3: dependencies: zod: 3.25.51 From 2d3814e60a51dfbcab419b39e93cdd2083cd2d84 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Wed, 23 Jul 2025 11:30:05 -1000 Subject: [PATCH 18/20] feat(#351 | create-hypergraph): better check for access to template directory --- apps/create-hypergraph/package.json | 4 +- apps/create-hypergraph/src/Cli.ts | 25 +++--- apps/create-hypergraph/test/Cli.test.ts | 4 +- apps/create-hypergraph/tsdown.config.ts | 3 + pnpm-lock.yaml | 109 +++++++++++++++++++++++- 5 files changed, 127 insertions(+), 18 deletions(-) diff --git a/apps/create-hypergraph/package.json b/apps/create-hypergraph/package.json index 1ae2a8b6..9c496d99 100644 --- a/apps/create-hypergraph/package.json +++ b/apps/create-hypergraph/package.json @@ -1,6 +1,6 @@ { "name": "create-hypergraph", - "version": "0.0.1", + "version": "0.0.2", "description": "CLI toolchain to scaffold a Hypergraph-enabled application with a given template.", "type": "module", "bin": { @@ -24,7 +24,7 @@ }, "scripts": { "test": "vitest run", - "dev": "pnpx tsx ./src/bin.ts", + "dev": "NODE_ENV=development pnpx tsx ./src/bin.ts", "build": "tsdown && tsx scripts/copy-package-json.ts && pnpm run copy-all", "copy-templates": "cp -r template-* dist/", "copy-readme": "cp README.md dist/README.md", diff --git a/apps/create-hypergraph/src/Cli.ts b/apps/create-hypergraph/src/Cli.ts index c6a6c45b..a80c8bbd 100644 --- a/apps/create-hypergraph/src/Cli.ts +++ b/apps/create-hypergraph/src/Cli.ts @@ -6,7 +6,7 @@ import { FileSystem, Path } from '@effect/platform'; import type { PlatformError } from '@effect/platform/Error'; import { NodeFileSystem } from '@effect/platform-node'; import { Ansi, AnsiDoc } from '@effect/printer-ansi'; -import { Cause, Data, Effect, Array as EffectArray, String as EffectString, Option } from 'effect'; +import { Cause, Data, Effect, Array as EffectArray, Option } from 'effect'; import * as Domain from './Domain.js'; import * as Utils from './Utils.js'; @@ -75,7 +75,7 @@ const createHypergraphApp = Command.make('create-hypergraph-app', { export const run = Command.run(createHypergraphApp, { name: 'create-hypergraph-app', - version: '0.0.1', + version: '0.0.2', }); // ======================== @@ -97,10 +97,11 @@ function scaffoldHypergraphApp(config: Readonly) { const fs = yield* FileSystem.FileSystem; const path = yield* Path.Path; + const appname = path.basename(config.appName); const framework = Domain.availableFrameworks[config.template]; // check if directory already exists, if exists, and is not empty, throw an error - const targetDirectory = path.resolve('.', config.appName); + const targetDirectory = config.appName; const exists = yield* fs.exists(targetDirectory); if (exists) { const targetDirRead = yield* fs.readDirectory(targetDirectory, { recursive: true }); @@ -118,18 +119,16 @@ function scaffoldHypergraphApp(config: Readonly) { } yield* Effect.logInfo( - AnsiDoc.text(`Scaffolding Hypergraph app ${config.appName} with template ${config.template}`), + AnsiDoc.text(`Scaffolding Hypergraph app ${path.basename(config.appName)} with template ${config.template}`), ); // retrieve template directory based on selected template - const __filename = import.meta.filename; const __dirname = path.dirname(fileURLToPath(import.meta.url)); - const templateDir = EffectString.endsWith('Cli.ts')(__filename) - ? // running locally - path.resolve(__dirname, '..', framework.directory) - : // running the published version - path.resolve(__dirname, framework.directory); + const isDev = process.env.NODE_ENV === 'development' || __dirname.includes('/src/'); + const templateDir = isDev + ? path.resolve(__dirname, '..', framework.directory) + : path.resolve(__dirname, framework.directory); const templatDirExists = yield* fs.exists(templateDir); if (!templatDirExists) { return yield* Effect.logError( @@ -146,7 +145,7 @@ function scaffoldHypergraphApp(config: Readonly) { // read the cloned package.json const packageJson = yield* fs.readFileString(packageJsonPath).pipe(Effect.map(JSON.parse)); - const validatedPackageName = Utils.validatePackageName(config.appName); + const validatedPackageName = Utils.validatePackageName(appname); const name = validatedPackageName.normalizedName; // update the name and description packageJson.name = name; @@ -237,10 +236,10 @@ function scaffoldHypergraphApp(config: Readonly) { // success. inform user Effect.andThen(() => Effect.logInfo( - AnsiDoc.text(`🎉 Successfully scaffolded your hypergraph enabled app ${config.appName}!`), + AnsiDoc.text(`🎉 Successfully scaffolded your hypergraph enabled app ${appname}!`), AnsiDoc.hardLine, AnsiDoc.text('To start the app, run:'), - AnsiDoc.text(`cd ${config.appName}`), + AnsiDoc.text(`cd ${appname}`), config.skipInstallDeps ? AnsiDoc.text(`${config.packageManager} install`) : AnsiDoc.hardLine, AnsiDoc.text(`${config.packageManager} run dev`), ), diff --git a/apps/create-hypergraph/test/Cli.test.ts b/apps/create-hypergraph/test/Cli.test.ts index bb5fe8fd..f8cb2482 100644 --- a/apps/create-hypergraph/test/Cli.test.ts +++ b/apps/create-hypergraph/test/Cli.test.ts @@ -15,7 +15,7 @@ const testDir = join(tmpdir(), 'create-hypergraph-test-'); const run = (args: Array, cwd?: string) => { return Effect.sync(() => { const fullCommand = `pnpx tsx ${CLI_PATH} ${args.join(' ')}`; - const result = execaCommandSync(fullCommand, { cwd }); + const result = execaCommandSync(fullCommand, { cwd, env: { ...process.env, NODE_ENV: 'development' } }); return result.stdout; }); }; @@ -24,7 +24,7 @@ const runExpectError = (args: Array, cwd?: string) => { return Effect.sync(() => { const fullCommand = `pnpx tsx ${CLI_PATH} ${args.join(' ')}`; try { - const result = execaCommandSync(fullCommand, { cwd, reject: false }); + const result = execaCommandSync(fullCommand, { cwd, reject: false, env: { ...process.env, NODE_ENV: 'development' } }); return { stdout: result.stdout, stderr: result.stderr, exitCode: result.exitCode }; // biome-ignore lint/suspicious/noExplicitAny: error } catch (error: any) { diff --git a/apps/create-hypergraph/tsdown.config.ts b/apps/create-hypergraph/tsdown.config.ts index c652d6f0..2d7522fa 100644 --- a/apps/create-hypergraph/tsdown.config.ts +++ b/apps/create-hypergraph/tsdown.config.ts @@ -10,4 +10,7 @@ export default defineConfig(() => ({ outDir: 'dist', clean: true, external: ['@parcel/watcher'], + env: { + NODE_ENV: 'production', + }, })); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f1ae51a9..70964605 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -175,6 +175,109 @@ importers: apps/create-hypergraph/dist: {} + apps/create-hypergraph/my-hypergraph-app: + dependencies: + '@graphprotocol/grc-20': + specifier: ^0.21.6 + version: 0.21.6(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) + '@graphprotocol/hypergraph': + specifier: 0.0.14 + version: 0.0.14(@effect/platform@0.89.0(effect@3.17.0))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react@19.1.0)(solid-js@1.9.5)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) + '@graphprotocol/hypergraph-react': + specifier: 0.0.14 + version: 0.0.14(@graphprotocol/hypergraph@0.0.14(@effect/platform@0.89.0(effect@3.17.0))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react@19.1.0)(solid-js@1.9.5)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51))(bufferutil@4.0.9)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) + '@graphprotocol/typesync': + specifier: ^0.0.3 + version: 0.0.3(bufferutil@4.0.9)(graphql@16.11.0)(ox@0.6.7(typescript@5.8.3)(zod@3.25.51))(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.51) + '@radix-ui/react-navigation-menu': + specifier: ^1.2.13 + version: 1.2.13(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': + specifier: ^1.2.3 + version: 1.2.3(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-tooltip': + specifier: ^1.2.7 + version: 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tailwindcss/vite': + specifier: ^4.1.11 + version: 4.1.11(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + '@tanstack/react-query': + specifier: ^5.83.0 + version: 5.83.0(react@19.1.0) + '@tanstack/react-router': + specifier: ^1.129.2 + version: 1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + effect: + specifier: ^3.17.0 + version: 3.17.0 + lucide-react: + specifier: ^0.525.0 + version: 0.525.0(react@19.1.0) + react: + specifier: ^19.1.0 + version: 19.1.0 + react-dom: + specifier: ^19.1.0 + version: 19.1.0(react@19.1.0) + tailwind-merge: + specifier: ^3.3.1 + version: 3.3.1 + tailwindcss: + specifier: ^4.1.11 + version: 4.1.11 + vite: + specifier: ^7.0.5 + version: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0) + devDependencies: + '@eslint/js': + specifier: ^9.31.0 + version: 9.31.0 + '@tanstack/router-plugin': + specifier: ^1.129.2 + version: 1.129.5(@tanstack/react-router@1.129.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0))(webpack@5.99.8) + '@types/node': + specifier: ^24.1.0 + version: 24.1.0 + '@types/react': + specifier: ^19.1.8 + version: 19.1.8 + '@types/react-dom': + specifier: ^19.1.6 + version: 19.1.6(@types/react@19.1.8) + '@vitejs/plugin-react': + specifier: ^4.7.0 + version: 4.7.0(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.39.1)(tsx@4.20.3)(yaml@2.7.0)) + eslint: + specifier: ^9.31.0 + version: 9.31.0(jiti@2.4.2) + eslint-plugin-react-hooks: + specifier: ^5.2.0 + version: 5.2.0(eslint@9.31.0(jiti@2.4.2)) + eslint-plugin-react-refresh: + specifier: ^0.4.20 + version: 0.4.20(eslint@9.31.0(jiti@2.4.2)) + globals: + specifier: ^16.3.0 + version: 16.3.0 + prettier: + specifier: ^3.6.2 + version: 3.6.2 + tw-animate-css: + specifier: ^1.3.5 + version: 1.3.5 + typescript: + specifier: ~5.8.3 + version: 5.8.3 + typescript-eslint: + specifier: ^8.38.0 + version: 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + apps/create-hypergraph/template-vite-react: dependencies: '@graphprotocol/grc-20': @@ -333,7 +436,7 @@ importers: version: 7.1.2(graphql@16.11.0) isomorphic-ws: specifier: ^5.0.0 - version: 5.0.0(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 5.0.0(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) lucide-react: specifier: ^0.508.0 version: 0.508.0(react@19.1.0) @@ -23698,6 +23801,10 @@ snapshots: dependencies: ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + isomorphic-ws@5.0.0(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + isomorphic-ws@5.0.0(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) From 2e62f8bb6219589644c424e7c79c849243544241 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Wed, 23 Jul 2025 11:53:34 -1000 Subject: [PATCH 19/20] feat(#351 | create-hypergraph): create CHANGELOG and publish to npm --- .changeset/shaggy-cups-scream.md | 6 ++++++ CONTRIBUTING.md | 7 +++++++ apps/create-hypergraph/CHANGELOG.md | 20 ++++++++++++++++++++ apps/create-hypergraph/package.json | 8 +++++--- apps/create-hypergraph/src/Cli.ts | 2 +- apps/create-hypergraph/test/Cli.test.ts | 6 +++++- 6 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 .changeset/shaggy-cups-scream.md create mode 100644 apps/create-hypergraph/CHANGELOG.md diff --git a/.changeset/shaggy-cups-scream.md b/.changeset/shaggy-cups-scream.md new file mode 100644 index 00000000..d9f5851c --- /dev/null +++ b/.changeset/shaggy-cups-scream.md @@ -0,0 +1,6 @@ +--- +"create-hypergraph": patch +--- + +Add CHANGELOG.md to publishable dist folder + \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index eaf4479f..3d182599 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -47,6 +47,13 @@ cd apps/typesync pnpm dev:client ``` +To develop the create-hypergraph, run: + +```sh +cd apps/create-hypergraph +pnpm run dev +``` + You can run the Next example app with: ```sh diff --git a/apps/create-hypergraph/CHANGELOG.md b/apps/create-hypergraph/CHANGELOG.md new file mode 100644 index 00000000..ebc48fd0 --- /dev/null +++ b/apps/create-hypergraph/CHANGELOG.md @@ -0,0 +1,20 @@ +# create-hypergraph + +## 0.0.2 +### Patch Changes + +- 2d3814e: better check for access to template directory +- 97894a1: test suite for Cli tool +- f54e72a: create llms.txt for create-hypergraph usage +- 4446ffe: resolve inputs from passed in options or prompts +- f40426b: fix typo +- ba47d53: rename package.json bin to create-hypergraph +- 447cdb4: rename to create-hypergraph (drop app) +- bd88912: handle sigint of user killing cli with a log line instead of error message +- deee18d: add create-hypergraph-app tests to root workspace +- 39beee4: fixes. updates from testing +- 68a79db: rebase main. sort order import +- 64d196d: buildout ability scaffold app, install deps, initialize git +- 8ea798f: bump @types/node to latest +- a004e4f: use prompts instead of options +- 5a4c193: working on building create-hypergraph-app cli tool \ No newline at end of file diff --git a/apps/create-hypergraph/package.json b/apps/create-hypergraph/package.json index 9c496d99..73eb0fe1 100644 --- a/apps/create-hypergraph/package.json +++ b/apps/create-hypergraph/package.json @@ -1,6 +1,6 @@ { "name": "create-hypergraph", - "version": "0.0.2", + "version": "0.0.3", "description": "CLI toolchain to scaffold a Hypergraph-enabled application with a given template.", "type": "module", "bin": { @@ -10,7 +10,8 @@ "files": [ "template-*", "dist", - "llms.txt" + "llms.txt", + "CHANGELOG.md" ], "repository": { "type": "git", @@ -28,8 +29,9 @@ "build": "tsdown && tsx scripts/copy-package-json.ts && pnpm run copy-all", "copy-templates": "cp -r template-* dist/", "copy-readme": "cp README.md dist/README.md", + "copy-changelog": "cp CHANGELOG.md dist/CHANGELOG.md", "copy-llms": "cp llms.txt dist/llms.txt", - "copy-all": "pnpm run copy-templates && pnpm run copy-readme && pnpm run copy-llms", + "copy-all": "pnpm run copy-templates && pnpm run copy-readme && pnpm run copy-changelog && pnpm run copy-llms", "check": "tsc --noEmit", "start": "node ./dist/bin.js", "lint": "biome check", diff --git a/apps/create-hypergraph/src/Cli.ts b/apps/create-hypergraph/src/Cli.ts index a80c8bbd..e48b2e04 100644 --- a/apps/create-hypergraph/src/Cli.ts +++ b/apps/create-hypergraph/src/Cli.ts @@ -75,7 +75,7 @@ const createHypergraphApp = Command.make('create-hypergraph-app', { export const run = Command.run(createHypergraphApp, { name: 'create-hypergraph-app', - version: '0.0.2', + version: '0.0.3', }); // ======================== diff --git a/apps/create-hypergraph/test/Cli.test.ts b/apps/create-hypergraph/test/Cli.test.ts index f8cb2482..ecfa3e42 100644 --- a/apps/create-hypergraph/test/Cli.test.ts +++ b/apps/create-hypergraph/test/Cli.test.ts @@ -24,7 +24,11 @@ const runExpectError = (args: Array, cwd?: string) => { return Effect.sync(() => { const fullCommand = `pnpx tsx ${CLI_PATH} ${args.join(' ')}`; try { - const result = execaCommandSync(fullCommand, { cwd, reject: false, env: { ...process.env, NODE_ENV: 'development' } }); + const result = execaCommandSync(fullCommand, { + cwd, + reject: false, + env: { ...process.env, NODE_ENV: 'development' }, + }); return { stdout: result.stdout, stderr: result.stderr, exitCode: result.exitCode }; // biome-ignore lint/suspicious/noExplicitAny: error } catch (error: any) { From 559aec11878e60b96b359bdb4a542adde48c82f3 Mon Sep 17 00:00:00 2001 From: Chris Whited Date: Wed, 23 Jul 2025 12:07:05 -1000 Subject: [PATCH 20/20] feat(#351 | create-hypergraph): configure git to run create-hypergraph test suite which initializes git --- .github/workflows/tests-and-checks.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/tests-and-checks.yml b/.github/workflows/tests-and-checks.yml index 001fa370..2d5bbb83 100644 --- a/.github/workflows/tests-and-checks.yml +++ b/.github/workflows/tests-and-checks.yml @@ -24,6 +24,10 @@ jobs: run: pnpm build - name: Generate Prisma Types run: cd apps/server && pnpm prisma generate + - name: Configure Git for tests + run: | + git config --global user.email "test@example.com" + git config --global user.name "Test User" - name: Typecheck run: pnpm check - name: Linting & Formatting