feat: remove turbo
This commit is contained in:
		
							parent
							
								
									07955286f1
								
							
						
					
					
						commit
						c60f6f511e
					
				@ -6,13 +6,14 @@
 | 
				
			|||||||
    "build": "email build",
 | 
					    "build": "email build",
 | 
				
			||||||
    "dev": "email dev --port 5003",
 | 
					    "dev": "email dev --port 5003",
 | 
				
			||||||
    "export": "email export",
 | 
					    "export": "email export",
 | 
				
			||||||
    "clean": "git clean -xdf .cache .turbo dist node_modules",
 | 
					    "clean": "git clean -xdf .cache dist node_modules",
 | 
				
			||||||
    "typecheck": "tsc --noEmit --emitDeclarationOnly false"
 | 
					    "typecheck": "tsc --noEmit --emitDeclarationOnly false"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "@react-email/components": "0.0.31",
 | 
					    "@react-email/components": "^0.0.42",
 | 
				
			||||||
    "react": "^19.0.0",
 | 
					    "react": "^19.0.0",
 | 
				
			||||||
    "react-email": "3.0.4"
 | 
					    "react-email": "^4.0.16",
 | 
				
			||||||
 | 
					    "@konobangu/email": "workspace:*"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "@types/react": "19.0.1"
 | 
					    "@types/react": "19.0.1"
 | 
				
			||||||
 | 
				
			|||||||
@ -2,8 +2,12 @@
 | 
				
			|||||||
  "extends": "../../tsconfig.base.json",
 | 
					  "extends": "../../tsconfig.base.json",
 | 
				
			||||||
  "compilerOptions": {
 | 
					  "compilerOptions": {
 | 
				
			||||||
    "composite": true,
 | 
					    "composite": true,
 | 
				
			||||||
    "jsx": "react-jsx"
 | 
					    "jsx": "react-jsx",
 | 
				
			||||||
 | 
					    "jsxImportSource": "react",
 | 
				
			||||||
 | 
					    "module": "ESNext",
 | 
				
			||||||
 | 
					    "moduleResolution": "bundler"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					  "references": [{ "path": "../../packages/email" }],
 | 
				
			||||||
  "include": ["**/*.ts", "**/*.tsx"],
 | 
					  "include": ["**/*.ts", "**/*.tsx"],
 | 
				
			||||||
  "exclude": ["node_modules"]
 | 
					  "exclude": ["node_modules"]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -10,6 +10,6 @@
 | 
				
			|||||||
  "keywords": [],
 | 
					  "keywords": [],
 | 
				
			||||||
  "license": "MIT",
 | 
					  "license": "MIT",
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "whistle": "^2.9.93"
 | 
					    "whistle": "^2.9.99"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,90 +13,87 @@
 | 
				
			|||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "@abraham/reflection": "^0.13.0",
 | 
					    "@abraham/reflection": "^0.13.0",
 | 
				
			||||||
    "@apollo/client": "^3.13.8",
 | 
					    "@apollo/client": "^3.13.8",
 | 
				
			||||||
    "@codemirror/language": "6.0.0",
 | 
					    "@codemirror/language": "6.11.1",
 | 
				
			||||||
    "@corvu/drawer": "^0.2.3",
 | 
					    "@corvu/drawer": "^0.2.4",
 | 
				
			||||||
    "@corvu/otp-field": "^0.1.4",
 | 
					    "@corvu/otp-field": "^0.1.4",
 | 
				
			||||||
    "@corvu/resizable": "^0.2.4",
 | 
					    "@corvu/resizable": "^0.2.5",
 | 
				
			||||||
    "@graphiql/toolkit": "^0.11.1",
 | 
					    "@graphiql/toolkit": "^0.11.3",
 | 
				
			||||||
    "@hookform/resolvers": "^5.0.1",
 | 
					    "@hookform/resolvers": "^5.1.1",
 | 
				
			||||||
    "@outposts/injection-js": "^2.5.1",
 | 
					    "@outposts/injection-js": "^2.5.1",
 | 
				
			||||||
    "@radix-ui/react-accordion": "^1.2.10",
 | 
					    "@radix-ui/react-accordion": "^1.2.11",
 | 
				
			||||||
    "@radix-ui/react-alert-dialog": "^1.1.13",
 | 
					    "@radix-ui/react-alert-dialog": "^1.1.14",
 | 
				
			||||||
    "@radix-ui/react-aspect-ratio": "^1.1.6",
 | 
					    "@radix-ui/react-aspect-ratio": "^1.1.7",
 | 
				
			||||||
    "@radix-ui/react-avatar": "^1.1.9",
 | 
					    "@radix-ui/react-avatar": "^1.1.10",
 | 
				
			||||||
    "@radix-ui/react-checkbox": "^1.3.1",
 | 
					    "@radix-ui/react-checkbox": "^1.3.2",
 | 
				
			||||||
    "@radix-ui/react-collapsible": "^1.1.10",
 | 
					    "@radix-ui/react-collapsible": "^1.1.11",
 | 
				
			||||||
    "@radix-ui/react-context-menu": "^2.2.14",
 | 
					    "@radix-ui/react-context-menu": "^2.2.15",
 | 
				
			||||||
    "@radix-ui/react-dialog": "^1.1.13",
 | 
					    "@radix-ui/react-dialog": "^1.1.14",
 | 
				
			||||||
    "@radix-ui/react-dropdown-menu": "^2.1.14",
 | 
					    "@radix-ui/react-dropdown-menu": "^2.1.15",
 | 
				
			||||||
    "@radix-ui/react-hover-card": "^1.1.13",
 | 
					    "@radix-ui/react-hover-card": "^1.1.14",
 | 
				
			||||||
    "@radix-ui/react-label": "^2.1.6",
 | 
					    "@radix-ui/react-label": "^2.1.7",
 | 
				
			||||||
    "@radix-ui/react-menubar": "^1.1.14",
 | 
					    "@radix-ui/react-menubar": "^1.1.15",
 | 
				
			||||||
    "@radix-ui/react-navigation-menu": "^1.2.12",
 | 
					    "@radix-ui/react-navigation-menu": "^1.2.13",
 | 
				
			||||||
    "@radix-ui/react-popover": "^1.1.13",
 | 
					    "@radix-ui/react-popover": "^1.1.14",
 | 
				
			||||||
    "@radix-ui/react-progress": "^1.1.6",
 | 
					    "@radix-ui/react-progress": "^1.1.7",
 | 
				
			||||||
    "@radix-ui/react-radio-group": "^1.3.6",
 | 
					    "@radix-ui/react-radio-group": "^1.3.7",
 | 
				
			||||||
    "@radix-ui/react-scroll-area": "^1.2.8",
 | 
					    "@radix-ui/react-scroll-area": "^1.2.9",
 | 
				
			||||||
    "@radix-ui/react-select": "^2.2.4",
 | 
					    "@radix-ui/react-select": "^2.2.5",
 | 
				
			||||||
    "@radix-ui/react-separator": "^1.1.6",
 | 
					    "@radix-ui/react-separator": "^1.1.7",
 | 
				
			||||||
    "@radix-ui/react-slider": "^1.3.4",
 | 
					    "@radix-ui/react-slider": "^1.3.5",
 | 
				
			||||||
    "@radix-ui/react-slot": "^1.2.2",
 | 
					    "@radix-ui/react-slot": "^1.2.3",
 | 
				
			||||||
    "@radix-ui/react-switch": "^1.2.4",
 | 
					    "@radix-ui/react-switch": "^1.2.5",
 | 
				
			||||||
    "@radix-ui/react-tabs": "^1.1.11",
 | 
					    "@radix-ui/react-tabs": "^1.1.12",
 | 
				
			||||||
    "@radix-ui/react-toggle": "^1.1.8",
 | 
					    "@radix-ui/react-toggle": "^1.1.9",
 | 
				
			||||||
    "@radix-ui/react-toggle-group": "^1.1.9",
 | 
					    "@radix-ui/react-toggle-group": "^1.1.10",
 | 
				
			||||||
    "@radix-ui/react-tooltip": "^1.2.6",
 | 
					    "@radix-ui/react-tooltip": "^1.2.7",
 | 
				
			||||||
    "@rsbuild/plugin-react": "^1.2.0",
 | 
					    "@rsbuild/plugin-react": "^1.3.2",
 | 
				
			||||||
    "@tanstack/react-form": "^1.12.1",
 | 
					    "@tanstack/react-form": "^1.12.3",
 | 
				
			||||||
    "@tanstack/react-query": "^5.75.6",
 | 
					    "@tanstack/react-query": "^5.80.7",
 | 
				
			||||||
    "@tanstack/react-router": "^1.112.13",
 | 
					 | 
				
			||||||
    "@tanstack/react-table": "^8.21.3",
 | 
					    "@tanstack/react-table": "^8.21.3",
 | 
				
			||||||
    "@tanstack/router-devtools": "^1.112.13",
 | 
					 | 
				
			||||||
    "@tanstack/store": "^0.7.1",
 | 
					    "@tanstack/store": "^0.7.1",
 | 
				
			||||||
    "arktype": "^2.1.6",
 | 
					    "arktype": "^2.1.20",
 | 
				
			||||||
    "chart.js": "^4.4.8",
 | 
					    "chart.js": "^4.4.9",
 | 
				
			||||||
    "class-variance-authority": "^0.7.1",
 | 
					    "class-variance-authority": "^0.7.1",
 | 
				
			||||||
    "clsx": "^2.1.1",
 | 
					    "clsx": "^2.1.1",
 | 
				
			||||||
    "cmdk": "^1.1.1",
 | 
					    "cmdk": "^1.1.1",
 | 
				
			||||||
    "date-fns": "^4.1.0",
 | 
					    "date-fns": "^4.1.0",
 | 
				
			||||||
    "embla-carousel-react": "^8.6.0",
 | 
					    "embla-carousel-react": "^8.6.0",
 | 
				
			||||||
    "graphiql": "^4.0.2",
 | 
					    "graphiql": "^4.1.2",
 | 
				
			||||||
    "graphql": "^16.11.0",
 | 
					    "graphql": "^16.11.0",
 | 
				
			||||||
    "input-otp": "^1.4.2",
 | 
					    "input-otp": "^1.4.2",
 | 
				
			||||||
    "jotai": "^2.12.3",
 | 
					    "jotai": "^2.12.5",
 | 
				
			||||||
    "jotai-signal": "^0.9.0",
 | 
					    "jotai-signal": "^0.9.0",
 | 
				
			||||||
    "lodash-es": "^4.17.21",
 | 
					    "lucide-react": "^0.514.0",
 | 
				
			||||||
    "lucide-react": "^0.512.0",
 | 
					 | 
				
			||||||
    "oidc-client-rx": "0.1.0-alpha.9",
 | 
					    "oidc-client-rx": "0.1.0-alpha.9",
 | 
				
			||||||
    "react": "^19.1.0",
 | 
					    "react": "^19.1.0",
 | 
				
			||||||
    "react-day-picker": "9.6.0",
 | 
					    "react-day-picker": "9.7.0",
 | 
				
			||||||
    "react-dom": "^19.1.0",
 | 
					    "react-dom": "^19.1.0",
 | 
				
			||||||
    "react-resizable-panels": "^3.0.1",
 | 
					    "react-resizable-panels": "^3.0.2",
 | 
				
			||||||
    "recharts": "^2.15.3",
 | 
					    "recharts": "^2.15.3",
 | 
				
			||||||
    "rxjs": "^7.8.2",
 | 
					    "rxjs": "^7.8.2",
 | 
				
			||||||
    "sonner": "^2.0.3",
 | 
					    "sonner": "^2.0.5",
 | 
				
			||||||
    "tailwind-merge": "^3.2.0",
 | 
					    "tailwind-merge": "^3.3.1",
 | 
				
			||||||
    "tailwindcss": "^4.0.6",
 | 
					    "tailwindcss": "^4.1.10",
 | 
				
			||||||
    "tw-animate-css": "^1.2.7",
 | 
					    "tw-animate-css": "^1.3.4",
 | 
				
			||||||
    "type-fest": "^4.40.0",
 | 
					    "type-fest": "^4.41.0",
 | 
				
			||||||
    "vaul": "^1.1.2"
 | 
					    "vaul": "^1.1.2",
 | 
				
			||||||
 | 
					    "es-toolkit": "^1.39.3",
 | 
				
			||||||
 | 
					    "@tanstack/react-router": "^1.121.2"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "@graphql-codegen/cli": "^5.0.6",
 | 
					    "@graphql-codegen/cli": "^5.0.7",
 | 
				
			||||||
    "@graphql-codegen/client-preset": "^4.8.1",
 | 
					    "@graphql-codegen/client-preset": "^4.8.2",
 | 
				
			||||||
    "@graphql-codegen/typescript": "^4.1.6",
 | 
					    "@graphql-codegen/typescript": "^4.1.6",
 | 
				
			||||||
    "@graphql-typed-document-node/core": "^3.2.0",
 | 
					    "@graphql-typed-document-node/core": "^3.2.0",
 | 
				
			||||||
    "@parcel/watcher": "^2.5.1",
 | 
					    "@parcel/watcher": "^2.5.1",
 | 
				
			||||||
    "@rsbuild/core": "^1.2.15",
 | 
					    "@rsbuild/core": "^1.3.22",
 | 
				
			||||||
    "@tailwindcss/postcss": "^4.0.9",
 | 
					    "@tailwindcss/postcss": "^4.1.10",
 | 
				
			||||||
    "@tanstack/react-router": "^1.112.0",
 | 
					    "@types/react": "^19.1.8",
 | 
				
			||||||
    "@tanstack/router-devtools": "^1.112.6",
 | 
					    "@types/react-dom": "^19.1.6",
 | 
				
			||||||
    "@tanstack/router-plugin": "^1.112.13",
 | 
					 | 
				
			||||||
    "@types/lodash-es": "^4.17.12",
 | 
					 | 
				
			||||||
    "@types/react": "^19.1.2",
 | 
					 | 
				
			||||||
    "@types/react-dom": "^19.1.2",
 | 
					 | 
				
			||||||
    "chalk": "^5.4.1",
 | 
					    "chalk": "^5.4.1",
 | 
				
			||||||
    "commander": "^14.0.0",
 | 
					    "commander": "^14.0.0",
 | 
				
			||||||
    "postcss": "^8.5.3"
 | 
					    "postcss": "^8.5.5",
 | 
				
			||||||
 | 
					    "@tanstack/router-devtools": "^1.121.5",
 | 
				
			||||||
 | 
					    "@tanstack/router-plugin": "^1.121.4"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@ import {
 | 
				
			|||||||
} from '@/infra/graphql/gql/graphql';
 | 
					} from '@/infra/graphql/gql/graphql';
 | 
				
			||||||
import { Injectable, inject } from '@outposts/injection-js';
 | 
					import { Injectable, inject } from '@outposts/injection-js';
 | 
				
			||||||
import { ArkErrors } from 'arktype';
 | 
					import { ArkErrors } from 'arktype';
 | 
				
			||||||
import { omit } from 'lodash-es';
 | 
					import { omit } from 'es-toolkit';
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
  type MikanSubscriptionBangumiSourceUrl,
 | 
					  type MikanSubscriptionBangumiSourceUrl,
 | 
				
			||||||
  type MikanSubscriptionSeasonSourceUrl,
 | 
					  type MikanSubscriptionSeasonSourceUrl,
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										5
									
								
								justfile
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								justfile
									
									
									
									
									
								
							@ -32,14 +32,9 @@ dev-deps-clean:
 | 
				
			|||||||
dev-codegen:
 | 
					dev-codegen:
 | 
				
			||||||
    pnpm run --filter=webui codegen
 | 
					    pnpm run --filter=webui codegen
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[unix]
 | 
					 | 
				
			||||||
dev-all:
 | 
					dev-all:
 | 
				
			||||||
    zellij --layout dev.kdl
 | 
					    zellij --layout dev.kdl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[windows]
 | 
					 | 
				
			||||||
dev-all:
 | 
					 | 
				
			||||||
    pnpm run dev-all
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
dev-codegen-wait:
 | 
					dev-codegen-wait:
 | 
				
			||||||
    @until nc -z localhost 5001; do echo "Waiting for Recorder..."; sleep 1; done
 | 
					    @until nc -z localhost 5001; do echo "Waiting for Recorder..."; sleep 1; done
 | 
				
			||||||
    pnpm run --filter=webui codegen-watch
 | 
					    pnpm run --filter=webui codegen-watch
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										29
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								package.json
									
									
									
									
									
								
							@ -3,42 +3,35 @@
 | 
				
			|||||||
  "version": "0.0.0",
 | 
					  "version": "0.0.0",
 | 
				
			||||||
  "description": "Kono bangumi?",
 | 
					  "description": "Kono bangumi?",
 | 
				
			||||||
  "license": "MIT",
 | 
					  "license": "MIT",
 | 
				
			||||||
  "workspaces": [
 | 
					  "workspaces": ["packages/*", "apps/*"],
 | 
				
			||||||
    "packages/*",
 | 
					 | 
				
			||||||
    "apps/*"
 | 
					 | 
				
			||||||
  ],
 | 
					 | 
				
			||||||
  "type": "module",
 | 
					  "type": "module",
 | 
				
			||||||
  "repository": {
 | 
					  "repository": {
 | 
				
			||||||
    "type": "git",
 | 
					    "type": "git",
 | 
				
			||||||
    "url": "https://github.com/dumtruck/konobangu.git"
 | 
					    "url": "https://github.com/dumtruck/konobangu.git"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
    "dev-webui": "just dev-webui",
 | 
					 | 
				
			||||||
    "dev-proxy": "just dev-proxy",
 | 
					 | 
				
			||||||
    "dev-recorder": "just dev-recorder",
 | 
					 | 
				
			||||||
    "dev-deps": "just dev-deps",
 | 
					 | 
				
			||||||
    "dev-codegen-wait": "just dev-codegen-wait",
 | 
					 | 
				
			||||||
    "dev-all": "turbo run //#dev-recorder //#dev-proxy //#dev-webui //#dev-deps //#dev-codegen-wait",
 | 
					 | 
				
			||||||
    "lint": "ultracite lint",
 | 
					    "lint": "ultracite lint",
 | 
				
			||||||
    "format": "ultracite format",
 | 
					    "format": "ultracite format",
 | 
				
			||||||
    "bump-deps": "npx --yes npm-check-updates --deep -u -x react-day-picker && pnpm install",
 | 
					    "bump-deps": "npx --yes npm-check-updates --deep -u && pnpm install",
 | 
				
			||||||
    "clean": "git clean -xdf node_modules"
 | 
					    "clean": "git clean -xdf node_modules"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "packageManager": "pnpm@10.10.0",
 | 
					  "packageManager": "pnpm@10.12.1",
 | 
				
			||||||
  "engines": {
 | 
					  "engines": {
 | 
				
			||||||
    "node": ">=22"
 | 
					    "node": ">=22"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "@auto-it/all-contributors": "^11.3.0",
 | 
					 | 
				
			||||||
    "@auto-it/first-time-contributor": "^11.3.0",
 | 
					 | 
				
			||||||
    "@biomejs/biome": "1.9.4",
 | 
					    "@biomejs/biome": "1.9.4",
 | 
				
			||||||
    "@types/node": "^24.0.0",
 | 
					    "@types/node": "^24.0.1",
 | 
				
			||||||
    "cross-env": "^7.0.3",
 | 
					    "cross-env": "^7.0.3",
 | 
				
			||||||
    "kill-port": "^2.0.1",
 | 
					    "kill-port": "^2.0.1",
 | 
				
			||||||
    "npm-run-all": "^4.1.5",
 | 
					    "npm-run-all": "^4.1.5",
 | 
				
			||||||
    "tsx": "^4.19.4",
 | 
					    "tsx": "^4.20.2",
 | 
				
			||||||
    "turbo": "^2.5.4",
 | 
					 | 
				
			||||||
    "typescript": "^5.8.3",
 | 
					    "typescript": "^5.8.3",
 | 
				
			||||||
    "ultracite": "^4.2.8"
 | 
					    "ultracite": "^4.2.10"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "pnpm": {
 | 
				
			||||||
 | 
					    "overrides": {
 | 
				
			||||||
 | 
					      "codemirror-graphql>@codemirror/language": "^6.11.1"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -10,6 +10,7 @@ export interface SendOptions {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export const konosend = {
 | 
					export const konosend = {
 | 
				
			||||||
  emails: {
 | 
					  emails: {
 | 
				
			||||||
 | 
					    // biome-ignore lint/suspicious/useAwait: <explanation>
 | 
				
			||||||
    send: async (_props: SendOptions) => {
 | 
					    send: async (_props: SendOptions) => {
 | 
				
			||||||
      throw new Error('unimplemented');
 | 
					      throw new Error('unimplemented');
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,7 @@
 | 
				
			|||||||
  "version": "0.0.0",
 | 
					  "version": "0.0.0",
 | 
				
			||||||
  "private": true,
 | 
					  "private": true,
 | 
				
			||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
    "clean": "git clean -xdf .cache .turbo dist node_modules",
 | 
					    "clean": "git clean -xdf .cache dist node_modules",
 | 
				
			||||||
    "typecheck": "tsc --noEmit --emitDeclarationOnly false"
 | 
					    "typecheck": "tsc --noEmit --emitDeclarationOnly false"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
 | 
				
			|||||||
@ -53,4 +53,4 @@ const ExampleContactEmail = () => (
 | 
				
			|||||||
  />
 | 
					  />
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default ExampleContactEmail;
 | 
					export default ExampleContactEmail;
 | 
				
			||||||
 | 
				
			|||||||
@ -2,8 +2,17 @@
 | 
				
			|||||||
  "extends": "../../tsconfig.base.json",
 | 
					  "extends": "../../tsconfig.base.json",
 | 
				
			||||||
  "compilerOptions": {
 | 
					  "compilerOptions": {
 | 
				
			||||||
    "baseUrl": ".",
 | 
					    "baseUrl": ".",
 | 
				
			||||||
    "composite": true
 | 
					    "composite": true,
 | 
				
			||||||
 | 
					    "jsx": "react-jsx",
 | 
				
			||||||
 | 
					    "jsxImportSource": "react",
 | 
				
			||||||
 | 
					    "module": "ESNext",
 | 
				
			||||||
 | 
					    "moduleResolution": "bundler"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "include": ["./*.ts", "./*.tsx"],
 | 
					  "include": [
 | 
				
			||||||
 | 
					    "./*.ts",
 | 
				
			||||||
 | 
					    "./*.tsx",
 | 
				
			||||||
 | 
					    "./templates/**/*.ts",
 | 
				
			||||||
 | 
					    "./templates/**/*.tsx"
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
  "exclude": ["node_modules"]
 | 
					  "exclude": ["node_modules"]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,15 +0,0 @@
 | 
				
			|||||||
import type { Thing, WithContext } from 'schema-dts';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type JsonLdProps = {
 | 
					 | 
				
			||||||
  code: WithContext<Thing>;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const JsonLd = ({ code }: JsonLdProps) => (
 | 
					 | 
				
			||||||
  <script
 | 
					 | 
				
			||||||
    type="application/ld+json"
 | 
					 | 
				
			||||||
    // biome-ignore lint/security/noDangerouslySetInnerHtml: "This is a JSON-LD script, not user-generated content."
 | 
					 | 
				
			||||||
    dangerouslySetInnerHTML={{ __html: JSON.stringify(code) }}
 | 
					 | 
				
			||||||
  />
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export * from 'schema-dts';
 | 
					 | 
				
			||||||
@ -1,67 +0,0 @@
 | 
				
			|||||||
import merge from 'lodash.merge';
 | 
					 | 
				
			||||||
import type { Metadata } from 'next';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type MetadataGenerator = Omit<Metadata, 'description' | 'title'> & {
 | 
					 | 
				
			||||||
  title: string;
 | 
					 | 
				
			||||||
  description: string;
 | 
					 | 
				
			||||||
  image?: string;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const applicationName = 'next-forge';
 | 
					 | 
				
			||||||
const author: Metadata['authors'] = {
 | 
					 | 
				
			||||||
  name: 'Hayden Bleasel',
 | 
					 | 
				
			||||||
  url: 'https://haydenbleasel.com/',
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
const publisher = 'Hayden Bleasel';
 | 
					 | 
				
			||||||
const twitterHandle = '@haydenbleasel';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const createMetadata = ({
 | 
					 | 
				
			||||||
  title,
 | 
					 | 
				
			||||||
  description,
 | 
					 | 
				
			||||||
  image,
 | 
					 | 
				
			||||||
  ...properties
 | 
					 | 
				
			||||||
}: MetadataGenerator): Metadata => {
 | 
					 | 
				
			||||||
  const parsedTitle = `${title} | ${applicationName}`;
 | 
					 | 
				
			||||||
  const defaultMetadata: Metadata = {
 | 
					 | 
				
			||||||
    title: parsedTitle,
 | 
					 | 
				
			||||||
    description,
 | 
					 | 
				
			||||||
    applicationName,
 | 
					 | 
				
			||||||
    authors: [author],
 | 
					 | 
				
			||||||
    creator: author.name,
 | 
					 | 
				
			||||||
    formatDetection: {
 | 
					 | 
				
			||||||
      telephone: false,
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    appleWebApp: {
 | 
					 | 
				
			||||||
      capable: true,
 | 
					 | 
				
			||||||
      statusBarStyle: 'default',
 | 
					 | 
				
			||||||
      title: parsedTitle,
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    openGraph: {
 | 
					 | 
				
			||||||
      title: parsedTitle,
 | 
					 | 
				
			||||||
      description,
 | 
					 | 
				
			||||||
      type: 'website',
 | 
					 | 
				
			||||||
      siteName: applicationName,
 | 
					 | 
				
			||||||
      locale: 'en_US',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    publisher,
 | 
					 | 
				
			||||||
    twitter: {
 | 
					 | 
				
			||||||
      card: 'summary_large_image',
 | 
					 | 
				
			||||||
      creator: twitterHandle,
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const metadata: Metadata = merge(defaultMetadata, properties);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (image && metadata.openGraph) {
 | 
					 | 
				
			||||||
    metadata.openGraph.images = [
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        url: image,
 | 
					 | 
				
			||||||
        width: 1200,
 | 
					 | 
				
			||||||
        height: 630,
 | 
					 | 
				
			||||||
        alt: title,
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
    ];
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  return metadata;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@ -1,21 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
  "name": "@konobangu/seo",
 | 
					 | 
				
			||||||
  "version": "0.0.0",
 | 
					 | 
				
			||||||
  "private": true,
 | 
					 | 
				
			||||||
  "scripts": {
 | 
					 | 
				
			||||||
    "clean": "git clean -xdf .cache .turbo dist node_modules",
 | 
					 | 
				
			||||||
    "typecheck": "tsc --noEmit --emitDeclarationOnly false"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "dependencies": {
 | 
					 | 
				
			||||||
    "lodash.merge": "^4.6.2",
 | 
					 | 
				
			||||||
    "react": "^19.0.0",
 | 
					 | 
				
			||||||
    "schema-dts": "^1.1.2"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "devDependencies": {
 | 
					 | 
				
			||||||
    "@types/lodash.merge": "^4.6.9",
 | 
					 | 
				
			||||||
    "@types/node": "22.10.1",
 | 
					 | 
				
			||||||
    "@types/react": "19.0.1",
 | 
					 | 
				
			||||||
    "@types/react-dom": "^19.0.3",
 | 
					 | 
				
			||||||
    "next": "^15.1.4"
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,9 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
  "extends": "../../tsconfig.base.json",
 | 
					 | 
				
			||||||
  "compilerOptions": {
 | 
					 | 
				
			||||||
    "baseUrl": ".",
 | 
					 | 
				
			||||||
    "composite": true
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "include": ["**/*.ts", "**/*.tsx"],
 | 
					 | 
				
			||||||
  "exclude": ["node_modules"]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -8,11 +8,11 @@
 | 
				
			|||||||
    "start": "tsx main.ts"
 | 
					    "start": "tsx main.ts"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "@fastify/static": "^8.1.1",
 | 
					    "@fastify/static": "^8.2.0",
 | 
				
			||||||
    "bittorrent-tracker": "^11.2.1",
 | 
					    "bittorrent-tracker": "^11.2.1",
 | 
				
			||||||
    "fastify": "^5.2.2",
 | 
					    "fastify": "^5.4.0",
 | 
				
			||||||
    "tsx": "^4.19.2",
 | 
					    "tsx": "^4.20.2",
 | 
				
			||||||
    "webtorrent": "^2.5.19"
 | 
					    "webtorrent": "^2.6.8"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "@types/create-torrent": "^5.0.2",
 | 
					    "@types/create-torrent": "^5.0.2",
 | 
				
			||||||
 | 
				
			|||||||
@ -5,11 +5,11 @@
 | 
				
			|||||||
  "main": "./index.js",
 | 
					  "main": "./index.js",
 | 
				
			||||||
  "type": "commonjs",
 | 
					  "type": "commonjs",
 | 
				
			||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
    "clean": "git clean -xdf .cache .turbo dist node_modules",
 | 
					    "clean": "git clean -xdf .cache dist node_modules",
 | 
				
			||||||
    "typecheck": "tsc --noEmit --emitDeclarationOnly false"
 | 
					    "typecheck": "tsc --noEmit --emitDeclarationOnly false"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "@vitejs/plugin-react": "^4.3.4",
 | 
					    "@vitejs/plugin-react": "^4.5.2",
 | 
				
			||||||
    "vitest": "^2.1.8"
 | 
					    "vitest": "^3.2.3"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										5020
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										5020
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -10,9 +10,6 @@
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
      "path": "./packages/email"
 | 
					      "path": "./packages/email"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "path": "./packages/seo"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      "path": "./packages/testing"
 | 
					      "path": "./packages/testing"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										36
									
								
								turbo.json
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								turbo.json
									
									
									
									
									
								
							@ -1,36 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
  "$schema": "https://turborepo.com/schema.json",
 | 
					 | 
				
			||||||
  "ui": "tui",
 | 
					 | 
				
			||||||
  "tasks": {
 | 
					 | 
				
			||||||
    "//#dev-webui": {
 | 
					 | 
				
			||||||
      "cache": false,
 | 
					 | 
				
			||||||
      "persistent": true,
 | 
					 | 
				
			||||||
      "interactive": true,
 | 
					 | 
				
			||||||
      "interruptible": true
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "//#dev-proxy": {
 | 
					 | 
				
			||||||
      "cache": false,
 | 
					 | 
				
			||||||
      "persistent": true,
 | 
					 | 
				
			||||||
      "interactive": true,
 | 
					 | 
				
			||||||
      "interruptible": true
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "//#dev-recorder": {
 | 
					 | 
				
			||||||
      "cache": false,
 | 
					 | 
				
			||||||
      "persistent": true,
 | 
					 | 
				
			||||||
      "interactive": true,
 | 
					 | 
				
			||||||
      "interruptible": true
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "//#dev-deps": {
 | 
					 | 
				
			||||||
      "cache": false,
 | 
					 | 
				
			||||||
      "persistent": true,
 | 
					 | 
				
			||||||
      "interactive": true,
 | 
					 | 
				
			||||||
      "interruptible": true
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "//#dev-codegen-wait": {
 | 
					 | 
				
			||||||
      "cache": false,
 | 
					 | 
				
			||||||
      "persistent": true,
 | 
					 | 
				
			||||||
      "interactive": true,
 | 
					 | 
				
			||||||
      "interruptible": true
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user