test setup lackin
This commit is contained in:
@@ -3,7 +3,7 @@ import type { Config } from "drizzle-kit";
|
||||
import { env } from "~/env";
|
||||
|
||||
export default {
|
||||
schema: "./src/server/db/schema.ts",
|
||||
schema: "./src/server/dbschema/schema.ts",
|
||||
dialect: "postgresql",
|
||||
dbCredentials: {
|
||||
url: env.DATABASE_URL,
|
||||
|
||||
89
package.json
89
package.json
@@ -16,50 +16,51 @@
|
||||
"preview": "next build && next start",
|
||||
"start": "next start",
|
||||
"typecheck": "tsc --noEmit",
|
||||
"test": "vitest --coverage --typecheck"
|
||||
"test": "vitest --typecheck"
|
||||
},
|
||||
"dependencies": {
|
||||
"@clerk/nextjs": "^6.27.1",
|
||||
"@clerk/nextjs": "^6.31.6",
|
||||
"@electric-sql/pglite": "^0.3.7",
|
||||
"@fortawesome/fontawesome-svg-core": "^6.7.2",
|
||||
"@fortawesome/free-solid-svg-icons": "^6.7.2",
|
||||
"@fortawesome/react-fontawesome": "^0.2.3",
|
||||
"@fortawesome/react-fontawesome": "^0.2.6",
|
||||
"@gsap/react": "^2.1.2",
|
||||
"@hookform/resolvers": "^5.2.0",
|
||||
"@hookform/resolvers": "^5.2.1",
|
||||
"@neondatabase/serverless": "^1.0.1",
|
||||
"@radix-ui/react-accordion": "^1.2.11",
|
||||
"@radix-ui/react-alert-dialog": "^1.1.14",
|
||||
"@radix-ui/react-accordion": "^1.2.12",
|
||||
"@radix-ui/react-alert-dialog": "^1.1.15",
|
||||
"@radix-ui/react-aspect-ratio": "^1.1.7",
|
||||
"@radix-ui/react-avatar": "^1.1.10",
|
||||
"@radix-ui/react-checkbox": "^1.3.2",
|
||||
"@radix-ui/react-collapsible": "^1.1.11",
|
||||
"@radix-ui/react-context-menu": "^2.2.15",
|
||||
"@radix-ui/react-dialog": "^1.1.14",
|
||||
"@radix-ui/react-dropdown-menu": "^2.1.15",
|
||||
"@radix-ui/react-hover-card": "^1.1.14",
|
||||
"@radix-ui/react-checkbox": "^1.3.3",
|
||||
"@radix-ui/react-collapsible": "^1.1.12",
|
||||
"@radix-ui/react-context-menu": "^2.2.16",
|
||||
"@radix-ui/react-dialog": "^1.1.15",
|
||||
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
||||
"@radix-ui/react-hover-card": "^1.1.15",
|
||||
"@radix-ui/react-label": "^2.1.7",
|
||||
"@radix-ui/react-menubar": "^1.1.15",
|
||||
"@radix-ui/react-navigation-menu": "^1.2.13",
|
||||
"@radix-ui/react-popover": "^1.1.14",
|
||||
"@radix-ui/react-menubar": "^1.1.16",
|
||||
"@radix-ui/react-navigation-menu": "^1.2.14",
|
||||
"@radix-ui/react-popover": "^1.1.15",
|
||||
"@radix-ui/react-progress": "^1.1.7",
|
||||
"@radix-ui/react-radio-group": "^1.3.7",
|
||||
"@radix-ui/react-scroll-area": "^1.2.9",
|
||||
"@radix-ui/react-select": "^2.2.5",
|
||||
"@radix-ui/react-radio-group": "^1.3.8",
|
||||
"@radix-ui/react-scroll-area": "^1.2.10",
|
||||
"@radix-ui/react-select": "^2.2.6",
|
||||
"@radix-ui/react-separator": "^1.1.7",
|
||||
"@radix-ui/react-slider": "^1.3.5",
|
||||
"@radix-ui/react-slider": "^1.3.6",
|
||||
"@radix-ui/react-slot": "^1.2.3",
|
||||
"@radix-ui/react-switch": "^1.2.5",
|
||||
"@radix-ui/react-tabs": "^1.1.12",
|
||||
"@radix-ui/react-toggle": "^1.1.9",
|
||||
"@radix-ui/react-toggle-group": "^1.1.10",
|
||||
"@radix-ui/react-tooltip": "^1.2.7",
|
||||
"@radix-ui/react-switch": "^1.2.6",
|
||||
"@radix-ui/react-tabs": "^1.1.13",
|
||||
"@radix-ui/react-toggle": "^1.1.10",
|
||||
"@radix-ui/react-toggle-group": "^1.1.11",
|
||||
"@radix-ui/react-tooltip": "^1.2.8",
|
||||
"@t3-oss/env-nextjs": "^0.12.0",
|
||||
"@tanstack/react-query": "^5.83.0",
|
||||
"@tanstack/react-query-next-experimental": "^5.83.0",
|
||||
"@trpc/client": "^11.4.3",
|
||||
"@trpc/next": "^11.4.3",
|
||||
"@trpc/react-query": "^11.4.3",
|
||||
"@trpc/server": "^11.4.3",
|
||||
"@tanstack/react-query": "^5.85.5",
|
||||
"@tanstack/react-query-next-experimental": "^5.85.5",
|
||||
"@testing-library/user-event": "^14.6.1",
|
||||
"@trpc/client": "^11.5.0",
|
||||
"@trpc/next": "^11.5.0",
|
||||
"@trpc/react-query": "^11.5.0",
|
||||
"@trpc/server": "^11.5.0",
|
||||
"@uiw/react-md-editor": "^4.0.8",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"clsx": "^2.1.1",
|
||||
@@ -79,14 +80,14 @@
|
||||
"react": "^19.1.1",
|
||||
"react-day-picker": "9.8.1",
|
||||
"react-dom": "^19.1.1",
|
||||
"react-hook-form": "^7.61.1",
|
||||
"react-hook-form": "^7.62.0",
|
||||
"react-markdown": "^10.1.0",
|
||||
"react-resizable-panels": "^3.0.3",
|
||||
"react-resizable-panels": "^3.0.5",
|
||||
"recharts": "^2.15.4",
|
||||
"rehype-highlight": "^7.0.2",
|
||||
"rehype-raw": "^7.0.0",
|
||||
"server-only": "^0.0.1",
|
||||
"sonner": "^2.0.6",
|
||||
"sonner": "^2.0.7",
|
||||
"tailwind-merge": "^3.3.1",
|
||||
"tailwindcss-motion": "^1.1.1",
|
||||
"type-fest": "^4.41.0",
|
||||
@@ -96,28 +97,28 @@
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "1.9.4",
|
||||
"@swc/jest": "^0.2.39",
|
||||
"@tailwindcss/postcss": "^4.1.11",
|
||||
"@tailwindcss/postcss": "^4.1.12",
|
||||
"@testing-library/dom": "^10.4.1",
|
||||
"@testing-library/jest-dom": "^6.6.4",
|
||||
"@testing-library/jest-dom": "^6.8.0",
|
||||
"@testing-library/react": "^16.3.0",
|
||||
"@types/jest": "^30.0.0",
|
||||
"@types/node": "^20.19.9",
|
||||
"@types/react": "^19.1.8",
|
||||
"@types/react-dom": "^19.1.6",
|
||||
"@vitejs/plugin-react": "^5.0.0",
|
||||
"@types/node": "^20.19.11",
|
||||
"@types/react": "^19.1.12",
|
||||
"@types/react-dom": "^19.1.9",
|
||||
"@vitejs/plugin-react": "^5.0.2",
|
||||
"@vitest/coverage-v8": "^3.2.4",
|
||||
"dotenv": "^17.2.1",
|
||||
"drizzle-kit": "^0.30.6",
|
||||
"jest": "^30.0.5",
|
||||
"jest-environment-jsdom": "^30.0.5",
|
||||
"jest": "^30.1.1",
|
||||
"jest-environment-jsdom": "^30.1.1",
|
||||
"jsdom": "^26.1.0",
|
||||
"next-router-mock": "^1.0.2",
|
||||
"pg-mem": "^3.0.5",
|
||||
"postcss": "^8.5.6",
|
||||
"tailwindcss": "^4.1.11",
|
||||
"tailwindcss": "^4.1.12",
|
||||
"ts-node": "^10.9.2",
|
||||
"tw-animate-css": "^1.3.6",
|
||||
"typescript": "^5.8.3",
|
||||
"tw-animate-css": "^1.3.7",
|
||||
"typescript": "^5.9.2",
|
||||
"vite-tsconfig-paths": "^5.1.4",
|
||||
"vitest": "^3.2.4"
|
||||
},
|
||||
|
||||
99
pnpm-lock.yaml
generated
99
pnpm-lock.yaml
generated
@@ -9,7 +9,7 @@ importers:
|
||||
.:
|
||||
dependencies:
|
||||
'@clerk/nextjs':
|
||||
specifier: ^6.27.1
|
||||
specifier: ^6.31.6
|
||||
version: 6.31.6(next@15.4.0-canary.17(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@electric-sql/pglite':
|
||||
specifier: ^0.3.7
|
||||
@@ -21,22 +21,22 @@ importers:
|
||||
specifier: ^6.7.2
|
||||
version: 6.7.2
|
||||
'@fortawesome/react-fontawesome':
|
||||
specifier: ^0.2.3
|
||||
specifier: ^0.2.6
|
||||
version: 0.2.6(@fortawesome/fontawesome-svg-core@6.7.2)(react@19.1.1)
|
||||
'@gsap/react':
|
||||
specifier: ^2.1.2
|
||||
version: 2.1.2(gsap@3.13.0)(react@19.1.1)
|
||||
'@hookform/resolvers':
|
||||
specifier: ^5.2.0
|
||||
specifier: ^5.2.1
|
||||
version: 5.2.1(react-hook-form@7.62.0(react@19.1.1))
|
||||
'@neondatabase/serverless':
|
||||
specifier: ^1.0.1
|
||||
version: 1.0.1
|
||||
'@radix-ui/react-accordion':
|
||||
specifier: ^1.2.11
|
||||
specifier: ^1.2.12
|
||||
version: 1.2.12(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-alert-dialog':
|
||||
specifier: ^1.1.14
|
||||
specifier: ^1.1.15
|
||||
version: 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-aspect-ratio':
|
||||
specifier: ^1.1.7
|
||||
@@ -45,91 +45,94 @@ importers:
|
||||
specifier: ^1.1.10
|
||||
version: 1.1.10(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-checkbox':
|
||||
specifier: ^1.3.2
|
||||
specifier: ^1.3.3
|
||||
version: 1.3.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-collapsible':
|
||||
specifier: ^1.1.11
|
||||
specifier: ^1.1.12
|
||||
version: 1.1.12(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-context-menu':
|
||||
specifier: ^2.2.15
|
||||
specifier: ^2.2.16
|
||||
version: 2.2.16(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-dialog':
|
||||
specifier: ^1.1.14
|
||||
specifier: ^1.1.15
|
||||
version: 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-dropdown-menu':
|
||||
specifier: ^2.1.15
|
||||
specifier: ^2.1.16
|
||||
version: 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-hover-card':
|
||||
specifier: ^1.1.14
|
||||
specifier: ^1.1.15
|
||||
version: 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-label':
|
||||
specifier: ^2.1.7
|
||||
version: 2.1.7(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-menubar':
|
||||
specifier: ^1.1.15
|
||||
specifier: ^1.1.16
|
||||
version: 1.1.16(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-navigation-menu':
|
||||
specifier: ^1.2.13
|
||||
specifier: ^1.2.14
|
||||
version: 1.2.14(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-popover':
|
||||
specifier: ^1.1.14
|
||||
specifier: ^1.1.15
|
||||
version: 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-progress':
|
||||
specifier: ^1.1.7
|
||||
version: 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-radio-group':
|
||||
specifier: ^1.3.7
|
||||
specifier: ^1.3.8
|
||||
version: 1.3.8(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-scroll-area':
|
||||
specifier: ^1.2.9
|
||||
specifier: ^1.2.10
|
||||
version: 1.2.10(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-select':
|
||||
specifier: ^2.2.5
|
||||
specifier: ^2.2.6
|
||||
version: 2.2.6(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-separator':
|
||||
specifier: ^1.1.7
|
||||
version: 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-slider':
|
||||
specifier: ^1.3.5
|
||||
specifier: ^1.3.6
|
||||
version: 1.3.6(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-slot':
|
||||
specifier: ^1.2.3
|
||||
version: 1.2.3(@types/react@19.1.12)(react@19.1.1)
|
||||
'@radix-ui/react-switch':
|
||||
specifier: ^1.2.5
|
||||
specifier: ^1.2.6
|
||||
version: 1.2.6(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-tabs':
|
||||
specifier: ^1.1.12
|
||||
specifier: ^1.1.13
|
||||
version: 1.1.13(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-toggle':
|
||||
specifier: ^1.1.9
|
||||
specifier: ^1.1.10
|
||||
version: 1.1.10(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-toggle-group':
|
||||
specifier: ^1.1.10
|
||||
specifier: ^1.1.11
|
||||
version: 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@radix-ui/react-tooltip':
|
||||
specifier: ^1.2.7
|
||||
specifier: ^1.2.8
|
||||
version: 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
'@t3-oss/env-nextjs':
|
||||
specifier: ^0.12.0
|
||||
version: 0.12.0(typescript@5.9.2)(zod@3.25.76)
|
||||
'@tanstack/react-query':
|
||||
specifier: ^5.83.0
|
||||
specifier: ^5.85.5
|
||||
version: 5.85.5(react@19.1.1)
|
||||
'@tanstack/react-query-next-experimental':
|
||||
specifier: ^5.83.0
|
||||
specifier: ^5.85.5
|
||||
version: 5.85.5(@tanstack/react-query@5.85.5(react@19.1.1))(next@15.4.0-canary.17(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)
|
||||
'@testing-library/user-event':
|
||||
specifier: ^14.6.1
|
||||
version: 14.6.1(@testing-library/dom@10.4.1)
|
||||
'@trpc/client':
|
||||
specifier: ^11.4.3
|
||||
specifier: ^11.5.0
|
||||
version: 11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2)
|
||||
'@trpc/next':
|
||||
specifier: ^11.4.3
|
||||
specifier: ^11.5.0
|
||||
version: 11.5.0(@tanstack/react-query@5.85.5(react@19.1.1))(@trpc/client@11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2))(@trpc/react-query@11.5.0(@tanstack/react-query@5.85.5(react@19.1.1))(@trpc/client@11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.0(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(@trpc/server@11.5.0(typescript@5.9.2))(next@15.4.0-canary.17(@babel/core@7.28.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
|
||||
'@trpc/react-query':
|
||||
specifier: ^11.4.3
|
||||
specifier: ^11.5.0
|
||||
version: 11.5.0(@tanstack/react-query@5.85.5(react@19.1.1))(@trpc/client@11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2))(@trpc/server@11.5.0(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
|
||||
'@trpc/server':
|
||||
specifier: ^11.4.3
|
||||
specifier: ^11.5.0
|
||||
version: 11.5.0(typescript@5.9.2)
|
||||
'@uiw/react-md-editor':
|
||||
specifier: ^4.0.8
|
||||
@@ -189,13 +192,13 @@ importers:
|
||||
specifier: ^19.1.1
|
||||
version: 19.1.1(react@19.1.1)
|
||||
react-hook-form:
|
||||
specifier: ^7.61.1
|
||||
specifier: ^7.62.0
|
||||
version: 7.62.0(react@19.1.1)
|
||||
react-markdown:
|
||||
specifier: ^10.1.0
|
||||
version: 10.1.0(@types/react@19.1.12)(react@19.1.1)
|
||||
react-resizable-panels:
|
||||
specifier: ^3.0.3
|
||||
specifier: ^3.0.5
|
||||
version: 3.0.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
recharts:
|
||||
specifier: ^2.15.4
|
||||
@@ -210,7 +213,7 @@ importers:
|
||||
specifier: ^0.0.1
|
||||
version: 0.0.1
|
||||
sonner:
|
||||
specifier: ^2.0.6
|
||||
specifier: ^2.0.7
|
||||
version: 2.0.7(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||
tailwind-merge:
|
||||
specifier: ^3.3.1
|
||||
@@ -235,13 +238,13 @@ importers:
|
||||
specifier: ^0.2.39
|
||||
version: 0.2.39(@swc/core@1.13.5)
|
||||
'@tailwindcss/postcss':
|
||||
specifier: ^4.1.11
|
||||
specifier: ^4.1.12
|
||||
version: 4.1.12
|
||||
'@testing-library/dom':
|
||||
specifier: ^10.4.1
|
||||
version: 10.4.1
|
||||
'@testing-library/jest-dom':
|
||||
specifier: ^6.6.4
|
||||
specifier: ^6.8.0
|
||||
version: 6.8.0
|
||||
'@testing-library/react':
|
||||
specifier: ^16.3.0
|
||||
@@ -250,16 +253,16 @@ importers:
|
||||
specifier: ^30.0.0
|
||||
version: 30.0.0
|
||||
'@types/node':
|
||||
specifier: ^20.19.9
|
||||
specifier: ^20.19.11
|
||||
version: 20.19.11
|
||||
'@types/react':
|
||||
specifier: ^19.1.8
|
||||
specifier: ^19.1.12
|
||||
version: 19.1.12
|
||||
'@types/react-dom':
|
||||
specifier: ^19.1.6
|
||||
specifier: ^19.1.9
|
||||
version: 19.1.9(@types/react@19.1.12)
|
||||
'@vitejs/plugin-react':
|
||||
specifier: ^5.0.0
|
||||
specifier: ^5.0.2
|
||||
version: 5.0.2(vite@7.1.3(@types/node@20.19.11)(jiti@2.5.1)(lightningcss@1.30.1))
|
||||
'@vitest/coverage-v8':
|
||||
specifier: ^3.2.4
|
||||
@@ -271,10 +274,10 @@ importers:
|
||||
specifier: ^0.30.6
|
||||
version: 0.30.6
|
||||
jest:
|
||||
specifier: ^30.0.5
|
||||
specifier: ^30.1.1
|
||||
version: 30.1.1(@types/node@20.19.11)(esbuild-register@3.6.0(esbuild@0.19.12))(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@20.19.11)(typescript@5.9.2))
|
||||
jest-environment-jsdom:
|
||||
specifier: ^30.0.5
|
||||
specifier: ^30.1.1
|
||||
version: 30.1.1
|
||||
jsdom:
|
||||
specifier: ^26.1.0
|
||||
@@ -289,16 +292,16 @@ importers:
|
||||
specifier: ^8.5.6
|
||||
version: 8.5.6
|
||||
tailwindcss:
|
||||
specifier: ^4.1.11
|
||||
specifier: ^4.1.12
|
||||
version: 4.1.12
|
||||
ts-node:
|
||||
specifier: ^10.9.2
|
||||
version: 10.9.2(@swc/core@1.13.5)(@types/node@20.19.11)(typescript@5.9.2)
|
||||
tw-animate-css:
|
||||
specifier: ^1.3.6
|
||||
specifier: ^1.3.7
|
||||
version: 1.3.7
|
||||
typescript:
|
||||
specifier: ^5.8.3
|
||||
specifier: ^5.9.2
|
||||
version: 5.9.2
|
||||
vite-tsconfig-paths:
|
||||
specifier: ^5.1.4
|
||||
@@ -2414,6 +2417,12 @@ packages:
|
||||
'@types/react-dom':
|
||||
optional: true
|
||||
|
||||
'@testing-library/user-event@14.6.1':
|
||||
resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==}
|
||||
engines: {node: '>=12', npm: '>=6'}
|
||||
peerDependencies:
|
||||
'@testing-library/dom': '>=7.21.4'
|
||||
|
||||
'@trpc/client@11.5.0':
|
||||
resolution: {integrity: sha512-32oH+KOAdo73jJKjU9tyG+vCjID6A28NgXwUNr691O5HjpF5yyTX51Zzyee8YtGzU89Nw/drCHdfA4gD7BN2eg==}
|
||||
peerDependencies:
|
||||
@@ -7163,6 +7172,10 @@ snapshots:
|
||||
'@types/react': 19.1.12
|
||||
'@types/react-dom': 19.1.9(@types/react@19.1.12)
|
||||
|
||||
'@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)':
|
||||
dependencies:
|
||||
'@testing-library/dom': 10.4.1
|
||||
|
||||
'@trpc/client@11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2)':
|
||||
dependencies:
|
||||
'@trpc/server': 11.5.0(typescript@5.9.2)
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
import { DeleteIcon } from "lucide-react";
|
||||
import type { UseTRPCMutationOptions, UseTRPCMutationResult } from "node_modules/@trpc/react-query/dist/getQueryKey.d-CruH3ncI.mjs";
|
||||
import { Button } from "~/components/ui/button";
|
||||
import { useFormMutationContext } from "./MutationProvider";
|
||||
|
||||
export default function DeleteButton<TD, TE, TV, TC>(params: { mutation: UseTRPCMutationResult<TD, TE, TV, TC>, id?: string }) {
|
||||
export default function DeleteButton(params: { id?: string }) {
|
||||
const ctx = useFormMutationContext()
|
||||
if (ctx == undefined) {
|
||||
throw new Error('Dependent form message needs populates form mutations context')
|
||||
}
|
||||
if (params.id) {
|
||||
return (
|
||||
<Button variant='destructive' onClick={() => params.mutation.mutate(({ id: params.id } as TV))}>
|
||||
<Button variant='destructive' onClick={() => ctx.deleteMutation.mutate(({ id: params.id ? params.id : "" }))}>
|
||||
<DeleteIcon />
|
||||
</Button>
|
||||
)
|
||||
|
||||
@@ -4,22 +4,16 @@ import { DependentFormMessaage, SubmitButton, DeleteButton } from '~/app/_compon
|
||||
import type { FieldValues, SubmitHandler, UseFormReturn } from 'react-hook-form';
|
||||
import type { ReactNode } from 'react';
|
||||
import DependentText from '../../DependentText';
|
||||
import type { UseTRPCMutationResult } from 'node_modules/@trpc/react-query/dist/getQueryKey.d-CruH3ncI.mjs';
|
||||
interface Error {
|
||||
message: string
|
||||
}
|
||||
export default function FormScaffold<T extends FieldValues, TD, TE extends Error, TV, TC, TTD, TTE extends Error, TTV, TTC, TTTD, TTTE extends Error, TTTV, TTTC>(params: {
|
||||
|
||||
export default function FormScaffold<T extends FieldValues,>(params: {
|
||||
form: UseFormReturn<T>,
|
||||
onSubmit: SubmitHandler<T>,
|
||||
createMutation: UseTRPCMutationResult<TD, TE, TV, TC>,
|
||||
updateMutation: UseTRPCMutationResult<TTD, TTE, TTV, TTC>,
|
||||
deleteMutation: UseTRPCMutationResult<TTTD, TTTE, TTTV, TTTC>,
|
||||
title: string,
|
||||
children: ReactNode,
|
||||
children?: ReactNode,
|
||||
id?: string,
|
||||
className?: string
|
||||
}) {
|
||||
const { form, onSubmit, createMutation, deleteMutation, updateMutation, title, id, className, children } = params
|
||||
const { form, onSubmit, title, id, className, children } = params
|
||||
return (
|
||||
<Card.Card className={className ? className : "w-5/6 lg:w-1/2"}>
|
||||
<Card.CardHeader>
|
||||
@@ -32,12 +26,13 @@ export default function FormScaffold<T extends FieldValues, TD, TE extends Error
|
||||
<form
|
||||
onSubmit={form.handleSubmit(onSubmit)}
|
||||
className="space-y-8"
|
||||
data-testid="form"
|
||||
>
|
||||
{children}
|
||||
<SubmitButton id={id} />
|
||||
<SubmitButton id={id} />
|
||||
<div className='flex flex-row justify-between'>
|
||||
<DependentFormMessaage falseStatus={createMutation.status} trueStatus={updateMutation.status} falseError={createMutation.error} trueError={updateMutation.error} bool={id ? true : false} />
|
||||
<DeleteButton mutation={deleteMutation} id={id} />
|
||||
<DependentFormMessaage bool={id ? true : false} />
|
||||
<DeleteButton id={id} />
|
||||
</div>
|
||||
</form>
|
||||
</Form>
|
||||
|
||||
@@ -1,19 +1,20 @@
|
||||
import { FormMessage } from "~/components/ui/form";
|
||||
import { useFormMutationContext } from "./MutationProvider";
|
||||
|
||||
interface Error {
|
||||
message: string
|
||||
}
|
||||
|
||||
export default function DependentFormMessaage( params: {trueStatus: string, falseStatus: string, falseError?: Error|null, trueError?:Error|null, bool: boolean} ) {
|
||||
export default function DependentFormMessaage( params: {bool: boolean} ) {
|
||||
const ctx = useFormMutationContext()
|
||||
if (ctx == undefined) {
|
||||
throw new Error('Dependent form message needs populates form mutations context')
|
||||
}
|
||||
return (
|
||||
<>
|
||||
{
|
||||
params.bool ?
|
||||
<FormMessage className={params.trueStatus == "success" ? "text-green-500" : "text-red-500"}>
|
||||
{params.trueError ? params.trueError.message : params.trueStatus}
|
||||
<FormMessage className={ctx.updateMutation.status == "success" ? "text-green-500" : "text-red-500"}>
|
||||
{ctx.updateMutation.error ? ctx.updateMutation.error.message : ctx.updateMutation.status}
|
||||
</FormMessage> :
|
||||
<FormMessage className={params.falseStatus == "success" ? "text-green-500" : "text-red-500"}>
|
||||
{params.falseError ? params.falseError.message : params.falseStatus}
|
||||
<FormMessage className={ctx.createMutation.status == "success" ? "text-green-500" : "text-red-500"}>
|
||||
{ctx.createMutation.error ? ctx.createMutation.error.message : ctx.createMutation.status}
|
||||
</FormMessage>
|
||||
}
|
||||
</>
|
||||
|
||||
33
src/app/_components/Form/Components/MutationProvider.tsx
Normal file
33
src/app/_components/Form/Components/MutationProvider.tsx
Normal file
@@ -0,0 +1,33 @@
|
||||
import type { UseTRPCMutationResult } from "node_modules/@trpc/react-query/dist/getQueryKey.d-CruH3ncI.mjs";
|
||||
import { createContext, useContext, type ReactNode } from "react";
|
||||
|
||||
interface ToString {
|
||||
toString: () => string
|
||||
message: string
|
||||
}
|
||||
|
||||
|
||||
export interface MutationInterface {
|
||||
mutate: (params:{id:string}) => void
|
||||
error: ToString | null
|
||||
status: "error" | "idle" | "pending" | "success"
|
||||
}
|
||||
|
||||
type FormMutationContext = {
|
||||
createMutation: MutationInterface,
|
||||
updateMutation: MutationInterface,
|
||||
deleteMutation: MutationInterface
|
||||
}
|
||||
|
||||
const FormMutationContext = createContext<FormMutationContext|undefined>(undefined)
|
||||
export function useFormMutationContext() {
|
||||
return useContext(FormMutationContext)
|
||||
}
|
||||
|
||||
export function FormMutationContextProvider(params: {children: ReactNode, value: FormMutationContext}) {
|
||||
return (
|
||||
<FormMutationContext.Provider value={params.value}>
|
||||
{params.children}
|
||||
</FormMutationContext.Provider>
|
||||
)
|
||||
}
|
||||
@@ -3,7 +3,7 @@ import DependentText from "../../DependentText";
|
||||
|
||||
export default function SubmitButton(params: {id?:string}) {
|
||||
return (
|
||||
<Button type="submit">
|
||||
<Button submit={true}>
|
||||
<DependentText bool={params.id?true:false} true='Update' false='Create' />
|
||||
</Button>
|
||||
)
|
||||
|
||||
@@ -21,10 +21,8 @@ function InnerMultiBooleanFormField(params: { options: string[], onChange: (arg0
|
||||
}
|
||||
const onCheckedItemChange = (key: string) => {
|
||||
return function onCheckedChange(checked: CheckedState) {
|
||||
console.log(key,checked)
|
||||
let state = context.checkedValues;
|
||||
if (checked === "indeterminate") {
|
||||
console.log('checked was intermediate')
|
||||
return
|
||||
} else {
|
||||
state[key] = checked
|
||||
@@ -36,7 +34,6 @@ function InnerMultiBooleanFormField(params: { options: string[], onChange: (arg0
|
||||
stateArr.push(key)
|
||||
}
|
||||
}
|
||||
console.log('calling field on change with:', stateArr)
|
||||
params.onChange(stateArr)
|
||||
}
|
||||
}
|
||||
@@ -53,7 +50,7 @@ function InnerMultiBooleanFormField(params: { options: string[], onChange: (arg0
|
||||
<FormItem key={opt}>
|
||||
<div className="flex flex-row justify-between py-2 border-b-1">
|
||||
<FormLabel>{opt}</FormLabel>
|
||||
<Checkbox checked={checked(opt)} onCheckedChange={onCheckedItemChange(opt)} />
|
||||
<Checkbox data-testid="multiboolean-checkbox" checked={checked(opt)} onCheckedChange={onCheckedItemChange(opt)} />
|
||||
</div>
|
||||
</FormItem>
|
||||
))
|
||||
@@ -71,14 +68,14 @@ export default function MultiBooleanFormField<T extends FieldValues>(params: { c
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<Popover open={open} onOpenChange={setOpen}>
|
||||
<PopoverTrigger asChild>
|
||||
<PopoverTrigger data-testid="multiboolean-popover-trigger" asChild>
|
||||
<Button variant={'ghost'}>
|
||||
<FormLabel>{params.label}</FormLabel>
|
||||
<ChevronDownIcon/>
|
||||
</Button>
|
||||
</PopoverTrigger>
|
||||
<FormControl>
|
||||
<PopoverContent>
|
||||
<PopoverContent data-testid="multiboolean-content">
|
||||
<MultiBooleanFieldContext.Provider value={{checkedValues: checkedValues, setCheckedValue: setCheckedValues}}>
|
||||
<InnerMultiBooleanFormField onChange={field.onChange} options={params.options} />
|
||||
</MultiBooleanFieldContext.Provider>
|
||||
|
||||
19
src/app/_components/Test/TestingTest.client.test.tsx
Normal file
19
src/app/_components/Test/TestingTest.client.test.tsx
Normal file
@@ -0,0 +1,19 @@
|
||||
import TestingTest from "./TestingTest";
|
||||
import { test } from 'vitest'
|
||||
import { render, screen, waitFor } from '@testing-library/react'
|
||||
import { userEvent } from '@testing-library/user-event'
|
||||
import { FormMutationContextProvider } from "../Form/Components/MutationProvider";
|
||||
|
||||
test('TestingTest', async () => {
|
||||
const user = userEvent.setup()
|
||||
render(
|
||||
<TestingTest/>
|
||||
)
|
||||
const submitButton = screen.getByTestId('form-submit')
|
||||
screen.debug()
|
||||
user.click(submitButton)
|
||||
await waitFor(() => {
|
||||
screen.getByTestId('submitted')
|
||||
})
|
||||
screen.debug()
|
||||
})
|
||||
33
src/app/_components/Test/TestingTest.tsx
Normal file
33
src/app/_components/Test/TestingTest.tsx
Normal file
@@ -0,0 +1,33 @@
|
||||
import { useForm } from "react-hook-form";
|
||||
import { FormScaffold } from "../Form/Components";
|
||||
import z from "zod";
|
||||
import { zodResolver } from "@hookform/resolvers/zod";
|
||||
import { useState } from "react";
|
||||
import { FormMutationContextProvider } from "../Form/Components/MutationProvider";
|
||||
|
||||
export default function TestingTest() {
|
||||
const schema = z.object({ text: z.string() })
|
||||
const [submitted, setSubmitted] = useState(false)
|
||||
const fakeMutation = {
|
||||
error: {message: "test"},
|
||||
status: "idle" as const,
|
||||
mutate: (_:{id:string}) => {}
|
||||
}
|
||||
const form = useForm<z.infer<typeof schema>>({
|
||||
resolver: zodResolver(schema),
|
||||
defaultValues: {
|
||||
text: ""
|
||||
}
|
||||
})
|
||||
const onSubmit = (_: z.infer<typeof schema>) => {
|
||||
setSubmitted(true)
|
||||
}
|
||||
return (
|
||||
<>
|
||||
<div data-testid={submitted ? "submitted" : "unsubmitted"} />
|
||||
<FormMutationContextProvider value={{ createMutation: fakeMutation, updateMutation: fakeMutation, deleteMutation: fakeMutation }}>
|
||||
<FormScaffold form={form} onSubmit={onSubmit} title="Testing Test" />
|
||||
</FormMutationContextProvider>
|
||||
</>
|
||||
)
|
||||
}
|
||||
13
src/app/_trpc/GetBaseUrl.ts
Normal file
13
src/app/_trpc/GetBaseUrl.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
export default function getBaseUrl() {
|
||||
if (typeof window !== 'undefined')
|
||||
// browser should use relative path
|
||||
return '';
|
||||
if (process.env.VERCEL_URL)
|
||||
// reference for vercel.com
|
||||
return `https://${process.env.VERCEL_URL}`;
|
||||
if (process.env.RENDER_INTERNAL_HOSTNAME)
|
||||
// reference for render.com
|
||||
return `http://${process.env.RENDER_INTERNAL_HOSTNAME}:${process.env.PORT}`;
|
||||
// assume localhost
|
||||
return `http://localhost:${process.env.PORT ?? 3000}`;
|
||||
}
|
||||
@@ -4,21 +4,7 @@ import { ReactQueryStreamedHydration } from '@tanstack/react-query-next-experime
|
||||
import { httpBatchLink } from "@trpc/client";
|
||||
import React, { useState } from "react"
|
||||
import { trpc } from "./Client";
|
||||
|
||||
function getBaseUrl() {
|
||||
if (typeof window !== 'undefined')
|
||||
// browser should use relative path
|
||||
return '';
|
||||
if (process.env.VERCEL_URL)
|
||||
// reference for vercel.com
|
||||
return `https://${process.env.VERCEL_URL}`;
|
||||
if (process.env.RENDER_INTERNAL_HOSTNAME)
|
||||
// reference for render.com
|
||||
return `http://${process.env.RENDER_INTERNAL_HOSTNAME}:${process.env.PORT}`;
|
||||
// assume localhost
|
||||
return `http://localhost:${process.env.PORT ?? 3000}`;
|
||||
}
|
||||
|
||||
import getBaseUrl from "~/app/_trpc/GetBaseUrl";
|
||||
let clientQueryClient: QueryClient | undefined = undefined;
|
||||
const makeQueryClient = () => new QueryClient({
|
||||
defaultOptions: {
|
||||
@@ -38,12 +24,15 @@ function getQueryClient() {
|
||||
}
|
||||
}
|
||||
export default function TrpcProvider({ children }: { children: React.ReactNode }) {
|
||||
console.log("provider calls get base url")
|
||||
const baseUrl = getBaseUrl()
|
||||
console.log("provider got baseurl:", baseUrl)
|
||||
const queryClient = getQueryClient();
|
||||
const [trpcClient] = useState(() => {
|
||||
return trpc.createClient({
|
||||
links: [
|
||||
httpBatchLink({
|
||||
url: `${getBaseUrl()}/api/trpc`,
|
||||
url: `${baseUrl}/api/trpc`,
|
||||
}),
|
||||
],
|
||||
})
|
||||
|
||||
@@ -11,6 +11,7 @@ import { useState } from 'react';
|
||||
import { SelectFormField, TextInputFormField } from '~/app/_components/Form/Fields';
|
||||
import { usePathname, useRouter } from 'next/navigation';
|
||||
import { SelectItem } from '~/components/ui/select';
|
||||
import FormMutationContextProvider from '~/app/_components/Form/Components/MutationProvider';
|
||||
export default function CreateUpdateCvCategoryForm(params: { className?: string, entity?: IterableElement<RouterOutputs['category']['select']> }) {
|
||||
const schemas = entitySchemas('cvCategory')
|
||||
const [id, setId] = useState<string | undefined>(params.entity ? params.entity.id : undefined)
|
||||
@@ -33,22 +34,25 @@ export default function CreateUpdateCvCategoryForm(params: { className?: string,
|
||||
createMutation.mutate(values)
|
||||
}
|
||||
return (
|
||||
<FormScaffold
|
||||
form={form}
|
||||
createMutation={createMutation}
|
||||
updateMutation={updateMutation}
|
||||
deleteMutation={deleteMutation}
|
||||
onSubmit={onSubmit}
|
||||
title='Category'
|
||||
id={id}
|
||||
className={params.className}
|
||||
>
|
||||
<TextInputFormField control={form.control} name='name' label='Name' />
|
||||
<SelectFormField control={form.control} name='layoutPosition' label='Layout Position' placeholder={form.getValues().layoutPosition == null ? undefined : form.getValues().layoutPosition}>
|
||||
{schemas.insert.shape.layoutPosition.unwrap().unwrap().options.map((o) => (
|
||||
<SelectItem key={o} value={o}> {o} </SelectItem>
|
||||
))}
|
||||
</SelectFormField>
|
||||
</FormScaffold>
|
||||
<FormMutationContextProvider value={{
|
||||
createMutation:createMutation,
|
||||
updateMutation:updateMutation,
|
||||
deleteMutation:deleteMutation
|
||||
}}>
|
||||
<FormScaffold
|
||||
form={form}
|
||||
onSubmit={onSubmit}
|
||||
title='Category'
|
||||
id={id}
|
||||
className={params.className}
|
||||
>
|
||||
<TextInputFormField control={form.control} name='name' label='Name' />
|
||||
<SelectFormField control={form.control} name='layoutPosition' label='Layout Position' placeholder={form.getValues().layoutPosition == null ? undefined : form.getValues().layoutPosition}>
|
||||
{schemas.insert.shape.layoutPosition.unwrap().unwrap().options.map((o) => (
|
||||
<SelectItem key={o} value={o}> {o} </SelectItem>
|
||||
))}
|
||||
</SelectFormField>
|
||||
</FormScaffold>
|
||||
</FormMutationContextProvider>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import { FormScaffold } from '~/app/_components/Form/Components';
|
||||
import { useState } from 'react';
|
||||
import { SelectFormField, TextInputFormField, MdeFormField, CalenderFormField, BooleanFormField } from '~/app/_components/Form/Fields'
|
||||
import { usePathname, useRouter } from 'next/navigation';
|
||||
import {FormMutationContextProvider, type FormCreateMutationInterface} from '~/app/_components/Form/Components/MutationProvider';
|
||||
export default function CreateUpdateCvEntryForm(params: { className?: string, entity?: IterableElement<RouterOutputs['entry']['select']>, isUpdate?: boolean }) {
|
||||
const [id, setId] = useState<string | undefined>(params.entity ? params.entity.id : undefined)
|
||||
const { theme } = useTheme()
|
||||
@@ -42,11 +43,16 @@ export default function CreateUpdateCvEntryForm(params: { className?: string, en
|
||||
createMutation.mutate(values)
|
||||
}
|
||||
return (
|
||||
//todo
|
||||
// solved by: strictFunctionTypes: false
|
||||
// sadge
|
||||
<FormMutationContextProvider value={{
|
||||
createMutation:createMutation,
|
||||
updateMutation:updateMutation,
|
||||
deleteMutation:deleteMutation
|
||||
}}>
|
||||
<FormScaffold
|
||||
form={form}
|
||||
createMutation={createMutation}
|
||||
updateMutation={updateMutation}
|
||||
deleteMutation={deleteMutation}
|
||||
onSubmit={onSubmit}
|
||||
title='Entry'
|
||||
id={id}
|
||||
@@ -56,7 +62,7 @@ export default function CreateUpdateCvEntryForm(params: { className?: string, en
|
||||
{
|
||||
categoriesSuccess ?
|
||||
<>
|
||||
{categories.map((c) => {
|
||||
{categories?.map((c) => {
|
||||
return (<SelectItem key={c.id} value={c.id}> {c.name} </SelectItem>)
|
||||
})}
|
||||
</> :
|
||||
@@ -69,5 +75,6 @@ export default function CreateUpdateCvEntryForm(params: { className?: string, en
|
||||
<CalenderFormField control={form.control} name='toTime' label='To Date' />
|
||||
<BooleanFormField control={form.control} name='hideDates' label='Hide Dates' />
|
||||
</FormScaffold>
|
||||
</FormMutationContextProvider>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
'use server'
|
||||
import { expect, test } from 'vitest'
|
||||
import { render, screen } from '@testing-library/react'
|
||||
import CreateUpdateProjectForm from './CreateUpdateProjectForm'
|
||||
import TrpcProvider from '~/../test/trpc/vitest.trpcProvider.mock'
|
||||
import TrpcProvider from '~/app/_trpc/TrpcProvider'
|
||||
|
||||
test('CreateUpdateProjectForm', () => {
|
||||
render(
|
||||
@@ -10,6 +9,4 @@ test('CreateUpdateProjectForm', () => {
|
||||
<CreateUpdateProjectForm/>
|
||||
</TrpcProvider>
|
||||
)
|
||||
let options = screen.getAllByRole('combobox')
|
||||
console.log(options)
|
||||
})
|
||||
|
||||
@@ -12,12 +12,11 @@ import { SelectFormField, TextInputFormField } from '~/app/_components/Form/Fiel
|
||||
import { FormScaffold } from '~/app/_components/Form/Components';
|
||||
import { usePathname, useRouter } from 'next/navigation';
|
||||
import { makeUseRelationShipWithNameIndex } from '~/lib/hooks';
|
||||
import { FormMutationContextProvider } from '~/app/_components/Form/Components/MutationProvider';
|
||||
export default function CreateUpdateProjectForm(params: { className?: string, entity?: IterableElement<RouterOutputs['project']['select']> }) {
|
||||
const [id, setId] = useState<string|undefined>(params.entity ? params.entity.id : undefined)
|
||||
const [id, setId] = useState<string | undefined>(params.entity ? params.entity.id : undefined)
|
||||
const schemas = entitySchemas('project')
|
||||
console.log('using trpc')
|
||||
const { data:stacks,id:stackId, name:stackName,success:stacksSuccess, error:stackError } = makeUseRelationShipWithNameIndex('stackItems')(trpc.techStack.select.useQuery({}),id,(items) => {return items ? items.join('-') : ""})
|
||||
console.log(stackError)
|
||||
const { data: stacks, id: stackId, name: stackName, success: stacksSuccess, error: stackError } = makeUseRelationShipWithNameIndex('stackItems')(trpc.techStack.select.useQuery({}), id, (items) => { return items ? items.join('-') : "" })
|
||||
const form = useForm<z.infer<typeof schemas.insert>>({
|
||||
resolver: zodResolver(schemas.insert),
|
||||
defaultValues: {
|
||||
@@ -40,38 +39,42 @@ export default function CreateUpdateProjectForm(params: { className?: string, en
|
||||
createMutation.mutate(values)
|
||||
}
|
||||
return (
|
||||
<FormScaffold
|
||||
form={form}
|
||||
createMutation={createMutation}
|
||||
updateMutation={updateMutation}
|
||||
deleteMutation={deleteMutation}
|
||||
onSubmit={onSubmit}
|
||||
title='Project'
|
||||
id={id}
|
||||
className={params.className}
|
||||
>
|
||||
<SelectFormField control={form.control} name='stackId' label='Stack' defaultValue={stackId} placeholder={stackName} >
|
||||
{
|
||||
stacksSuccess ?
|
||||
<>
|
||||
{stacks?.map((stack) => {
|
||||
return (<SelectItem key={stack.id} value={stack.id}> {stack.stackItems ? stack.stackItems.join("-") : "Empty Stack"} </SelectItem>)
|
||||
})}
|
||||
</> :
|
||||
<SelectItem key='placeholder' value="placeholder" />
|
||||
}
|
||||
</SelectFormField>
|
||||
<TextInputFormField control={form.control} name='title' label='Title' />
|
||||
<SelectFormField control={form.control} name='sourceType' label='Source Type' defaultValue={'open'} placeholder='open' >
|
||||
<SelectItem value="open"> open </SelectItem>
|
||||
<SelectItem value="closed"> closed </SelectItem>
|
||||
</SelectFormField>
|
||||
<TextInputFormField control={form.control} label='Source Link' name='sourceLink' />
|
||||
<SelectFormField control={form.control} name='releaseStatus' label='Release Status' defaultValue={'unreleased'} placeholder='unreleased' >
|
||||
<SelectItem value="released"> released </SelectItem>
|
||||
<SelectItem value="unreleased"> unreleased </SelectItem>
|
||||
</SelectFormField>
|
||||
<TextInputFormField control={form.control} label='Release Link' name='releaseLink' />
|
||||
</FormScaffold>
|
||||
<FormMutationContextProvider value={
|
||||
{
|
||||
createMutation: createMutation,
|
||||
updateMutation: updateMutation,
|
||||
deleteMutation: deleteMutation
|
||||
}}>
|
||||
<FormScaffold
|
||||
form={form}
|
||||
onSubmit={onSubmit}
|
||||
title='Project'
|
||||
id={id}
|
||||
className={params.className}
|
||||
>
|
||||
<SelectFormField control={form.control} name='stackId' label='Stack' defaultValue={stackId} placeholder={stackName} >
|
||||
{
|
||||
stacksSuccess ?
|
||||
<>
|
||||
{stacks?.map((stack) => {
|
||||
return (<SelectItem key={stack.id} value={stack.id}> {stack.stackItems ? stack.stackItems.join("-") : "Empty Stack"} </SelectItem>)
|
||||
})}
|
||||
</> :
|
||||
<SelectItem key='placeholder' value="placeholder" />
|
||||
}
|
||||
</SelectFormField>
|
||||
<TextInputFormField control={form.control} name='title' label='Title' />
|
||||
<SelectFormField control={form.control} name='sourceType' label='Source Type' defaultValue={'open'} placeholder='open' >
|
||||
<SelectItem value="open"> open </SelectItem>
|
||||
<SelectItem value="closed"> closed </SelectItem>
|
||||
</SelectFormField>
|
||||
<TextInputFormField control={form.control} label='Source Link' name='sourceLink' />
|
||||
<SelectFormField control={form.control} name='releaseStatus' label='Release Status' defaultValue={'unreleased'} placeholder='unreleased' >
|
||||
<SelectItem value="released"> released </SelectItem>
|
||||
<SelectItem value="unreleased"> unreleased </SelectItem>
|
||||
</SelectFormField>
|
||||
<TextInputFormField control={form.control} label='Release Link' name='releaseLink' />
|
||||
</FormScaffold>
|
||||
</FormMutationContextProvider>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
import { test, assert, expect } from 'vitest'
|
||||
import { render, screen, fireEvent, waitFor } from '@testing-library/react'
|
||||
import { userEvent } from '@testing-library/user-event'
|
||||
import CreateUpdateStackForm from './CreateUpdateForm'
|
||||
import TrpcProvider from '~/app/_trpc/TrpcProvider'
|
||||
import { servTrpc } from '~/app/_trpc/ServerClient'
|
||||
import { db } from '~/server/db'
|
||||
import { sql } from 'drizzle-orm'
|
||||
test('CreateUpdateProjectForm',async () => {
|
||||
const user = userEvent.setup()
|
||||
// console.log("db direct:" ,db.query.techStack.findMany());
|
||||
render(
|
||||
<TrpcProvider>
|
||||
<CreateUpdateStackForm/>
|
||||
</TrpcProvider>
|
||||
)
|
||||
const trigger = screen.getByTestId("multiboolean-popover-trigger")
|
||||
fireEvent.click(trigger)
|
||||
const content = screen.getAllByTestId("multiboolean-checkbox")
|
||||
const checkfirst = content.at(0)
|
||||
const checkSecond = content.at(1)
|
||||
assert.notEqual(checkfirst,undefined)
|
||||
assert.notEqual(checkSecond,undefined)
|
||||
await user.click(checkfirst as HTMLElement)
|
||||
await user.click(checkSecond as HTMLElement)
|
||||
// TODO use findby: https://testing-library.com/docs/dom-testing-library/api-async because component has async effects and conditional rendering
|
||||
// this shit just doesnt work
|
||||
// https://github.com/jsdom/jsdom/issues/1937 why ? who knows
|
||||
const submitButton = screen.getByTestId('form-submit')
|
||||
screen.debug(submitButton)
|
||||
// waitFor(() => {
|
||||
// if ((submitButton as HTMLButtonElement).type != 'submit') {
|
||||
// console.log("button isn submit")
|
||||
// throw new Error('submit button props pending');
|
||||
// }
|
||||
// })
|
||||
await user.click(submitButton)
|
||||
screen.debug()
|
||||
//TODO find out why the fuck this is timing out
|
||||
await waitFor(() => {
|
||||
screen.getByTestId('submitted')
|
||||
},{timeout:3000})
|
||||
let res
|
||||
await waitFor(async () => {
|
||||
return new Promise(async (resolve,reject) => {
|
||||
res = await db.execute(sql`SELECT * from "gregorlohaus.com_tech_stack";`)
|
||||
if (res.rows.length < 1) {
|
||||
reject(false)
|
||||
} else {
|
||||
resolve(true)
|
||||
}
|
||||
})
|
||||
},{timeout:3000})
|
||||
console.log(res)
|
||||
})
|
||||
@@ -2,19 +2,16 @@
|
||||
import { zodResolver } from '@hookform/resolvers/zod'
|
||||
import { useForm } from 'react-hook-form'
|
||||
import { z } from "zod";
|
||||
import { Form } from "~/components/ui/form";
|
||||
import { trpc } from "~/app/_trpc/Client";
|
||||
import { Button } from "~/components/ui/button";
|
||||
import * as Card from '~/components/ui/card'
|
||||
import type { IterableElement } from 'type-fest'
|
||||
import { stackItemEnum } from "~/server/db/schema";
|
||||
import { stackItemEnum } from "~/server/dbschema/schema";
|
||||
import type { RouterOutputs } from '~/server/routers/_app';
|
||||
import { entitySchemas, makeOnSuccess } from '~/lib/utils';
|
||||
import { useState } from 'react';
|
||||
import { MultiBooleanFormField } from "~/app/_components/Form/Fields"
|
||||
import { DependentFormMessaage, FormScaffold } from '~/app/_components/Form/Components';
|
||||
import DependentText from '~/app/_components/DependentText';
|
||||
import { FormScaffold } from '~/app/_components/Form/Components';
|
||||
import { usePathname, useRouter } from 'next/navigation';
|
||||
import { FormMutationContextProvider } from '~/app/_components/Form/Components/MutationProvider';
|
||||
|
||||
export default function CreateUpdateStackForm(params: { className?: string, entity?: IterableElement<RouterOutputs['techStack']['select']> }) {
|
||||
const schemas = entitySchemas('techStack')
|
||||
@@ -25,6 +22,7 @@ export default function CreateUpdateStackForm(params: { className?: string, enti
|
||||
stackItems: params.entity ? params.entity.stackItems : [],
|
||||
}
|
||||
})
|
||||
const [submitted, setSubmitted] = useState(false)
|
||||
const [id, setId] = useState<string | undefined>(params.entity ? params.entity.id : undefined)
|
||||
let path = usePathname()
|
||||
let router = useRouter()
|
||||
@@ -32,22 +30,25 @@ export default function CreateUpdateStackForm(params: { className?: string, enti
|
||||
const updateMutation = trpc.techStack.update.useMutation({ onSuccess: makeOnSuccess('update', form) })
|
||||
const deleteMutation = trpc.techStack.delete.useMutation({ onSuccess: makeOnSuccess('delete', form, undefined, path, router) })
|
||||
function onSubmit(values: z.infer<typeof schemas.insert>) {
|
||||
setSubmitted(true)
|
||||
params.entity ?
|
||||
updateMutation.mutate(values) :
|
||||
createMutation.mutate(values)
|
||||
createMutation.mutate(values);
|
||||
}
|
||||
return (
|
||||
<FormScaffold
|
||||
form={form}
|
||||
createMutation={createMutation}
|
||||
updateMutation={updateMutation}
|
||||
deleteMutation={deleteMutation}
|
||||
onSubmit={onSubmit}
|
||||
title='Entry'
|
||||
id={id}
|
||||
className={params.className}
|
||||
>
|
||||
<MultiBooleanFormField control={form.control} name='stackItems' label='Stack Items' options={stackItemEnum.enumValues} defaultValues={params.entity?.stackItems} />
|
||||
</FormScaffold>
|
||||
<>
|
||||
<div data-testid={submitted ? "submitted" : ""}/>
|
||||
<FormMutationContextProvider value={{ createMutation: createMutation, updateMutation: updateMutation, deleteMutation: deleteMutation }}>
|
||||
<FormScaffold
|
||||
form={form}
|
||||
onSubmit={onSubmit}
|
||||
title='Entry'
|
||||
id={id}
|
||||
className={params.className}
|
||||
>
|
||||
<MultiBooleanFormField control={form.control} name='stackItems' label='Stack Items' options={stackItemEnum.enumValues} defaultValues={params.entity?.stackItems ?? [""]} />
|
||||
</FormScaffold>
|
||||
</FormMutationContextProvider>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -40,16 +40,20 @@ function Button({
|
||||
variant,
|
||||
size,
|
||||
asChild = false,
|
||||
submit = false,
|
||||
...props
|
||||
}: React.ComponentProps<"button"> &
|
||||
VariantProps<typeof buttonVariants> & {
|
||||
asChild?: boolean
|
||||
submit?: boolean
|
||||
}) {
|
||||
const Comp = asChild ? Slot : "button"
|
||||
|
||||
return (
|
||||
<Comp
|
||||
data-slot="button"
|
||||
type={submit ? "submit" : props.type}
|
||||
data-testid={submit ? "form-submit" : undefined}
|
||||
className={cn(buttonVariants({ variant, size, className }))}
|
||||
{...props}
|
||||
/>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { clsx, type ClassValue } from "clsx"
|
||||
import { twMerge } from "tailwind-merge"
|
||||
import { createSchemaFactory, createSelectSchema, type BuildSchema } from 'drizzle-zod'
|
||||
import * as schema from "~/server/db/schema";
|
||||
import * as schema from '~/server/dbschema/schema'
|
||||
import { PgTable } from "drizzle-orm/pg-core";
|
||||
import type { FieldValues, Path, UseFormReturn } from "react-hook-form";
|
||||
import type { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime";
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// import postgres from "postgres";
|
||||
|
||||
import { env } from "~/env";
|
||||
import * as schema from "./schema";
|
||||
import * as schema from "~/server/dbschema/schema";
|
||||
|
||||
// /**
|
||||
// * Cache the database connection in development. This avoids creating a new connection on every HMR
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import type { Entries } from "type-fest";
|
||||
import { publicProcedure, router } from "~/server/trpc";
|
||||
import { db } from "~/server/db";
|
||||
import * as schema from "~/server/db/schema";
|
||||
import * as schema from '~/server/dbschema/schema';
|
||||
import { isAdmin } from "~/app/actions";
|
||||
import { TRPCError } from "@trpc/server";
|
||||
import { entitySchemas, type Schema, type SchemaKeys } from "~/lib/utils";
|
||||
@@ -20,6 +20,7 @@ export function trpcCrudRouterFromDrizzleEntity<T extends SchemaKeys<Schema>>(ta
|
||||
}
|
||||
let r = router({
|
||||
select: publicProcedure.input(schemas.update).query(async (opts) => {
|
||||
console.log("select with:", opts.input)
|
||||
const { input } = opts;
|
||||
if (input === undefined) {
|
||||
return await db.select().from(schema[table]).execute();
|
||||
@@ -36,6 +37,7 @@ export function trpcCrudRouterFromDrizzleEntity<T extends SchemaKeys<Schema>>(ta
|
||||
return await db.select().from(schema[table]).execute();
|
||||
}),
|
||||
update: publicProcedure.input(schemas.update).mutation(async (opts) => {
|
||||
console.log("update with:",opts.input)
|
||||
let admin = await isAdmin();
|
||||
if (!admin) {
|
||||
throw new TRPCError(
|
||||
@@ -52,6 +54,7 @@ export function trpcCrudRouterFromDrizzleEntity<T extends SchemaKeys<Schema>>(ta
|
||||
return await db.update(schema[table]).set(input).where(eq(schema[table]['id'], input['id'])).returning().execute();
|
||||
}),
|
||||
insert: publicProcedure.input(schemas.insert).mutation(async (opts) => {
|
||||
console.log("insert with:",opts.input)
|
||||
let admin = await isAdmin();
|
||||
if (!admin) {
|
||||
throw new TRPCError(
|
||||
@@ -62,6 +65,7 @@ export function trpcCrudRouterFromDrizzleEntity<T extends SchemaKeys<Schema>>(ta
|
||||
return await db.insert(schema[table]).values(input).returning().execute();
|
||||
}),
|
||||
delete: publicProcedure.input(schemas.update).mutation(async (opts) => {
|
||||
console.log("delete with:",opts.input)
|
||||
let admin = await isAdmin();
|
||||
if (!admin) {
|
||||
throw new TRPCError(
|
||||
|
||||
2
test/aliases/db.ts
Normal file
2
test/aliases/db.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
import { db } from "test/db/setup";
|
||||
export { db };
|
||||
33
test/db/setup.ts
Normal file
33
test/db/setup.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import { vi, beforeAll , afterAll, beforeEach, afterEach } from "vitest";
|
||||
import { drizzle, type PgliteDatabase } from 'drizzle-orm/pglite';
|
||||
import * as schema from "~/server/dbschema/schema"
|
||||
import type * as DrizzleKit from 'drizzle-kit/api';
|
||||
import { createRequire } from 'node:module';
|
||||
import { PGlite } from "@electric-sql/pglite"
|
||||
|
||||
let clients: Record<string,PGlite> = {};
|
||||
export let db: PgliteDatabase<typeof schema>
|
||||
// beforeEach(async (test) => {
|
||||
const client = new PGlite()
|
||||
// workaround for https://github.com/drizzle-team/drizzle-orm/issues/2853
|
||||
const require = createRequire(import.meta.url);
|
||||
const { generateDrizzleJson, generateMigration } = require('drizzle-kit/api') as typeof DrizzleKit;
|
||||
// end of workaround
|
||||
|
||||
// workaround for https://github.com/drizzle-team/drizzle-orm/issues/3913
|
||||
async function pushSchema(db: PgliteDatabase<typeof schema>) {
|
||||
const prevJson = generateDrizzleJson({});
|
||||
const curJson = generateDrizzleJson(schema, prevJson.id, undefined, 'snake_case');
|
||||
const statements = await generateMigration(prevJson, curJson);
|
||||
for (const statement of statements) {
|
||||
let res = await db.execute(statement);
|
||||
}
|
||||
}
|
||||
db = drizzle({client:client,schema:schema,casing:'snake_case'});
|
||||
await pushSchema(db);
|
||||
// })
|
||||
|
||||
// afterEach(async (test) => {
|
||||
// const client = clients[test.task.id]
|
||||
// await client!.close()
|
||||
// })
|
||||
@@ -1,11 +0,0 @@
|
||||
import { vi } from "vitest";
|
||||
import { drizzle } from 'drizzle-orm/pglite';
|
||||
import { PGlite } from "@electric-sql/pglite";
|
||||
import * as schema from "~/server/db/schema"
|
||||
const client = new PGlite()
|
||||
const db = drizzle({client:client,schema:schema})
|
||||
vi.mock("~/server/db", () => {
|
||||
return {
|
||||
db: db
|
||||
}
|
||||
})
|
||||
9
test/trpc/GetBaseUrl.mock.ts
Normal file
9
test/trpc/GetBaseUrl.mock.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { vi } from "vitest";
|
||||
import { port } from "test/trpc/server"
|
||||
vi.mock("~/app/_trpc/GetBaseUrl", () => {
|
||||
return {
|
||||
default: vi.fn(() => {
|
||||
return `http://localhost:${port}`
|
||||
})
|
||||
}
|
||||
})
|
||||
0
test/trpc/portincrement.ts
Normal file
0
test/trpc/portincrement.ts
Normal file
27
test/trpc/server.ts
Normal file
27
test/trpc/server.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { createHTTPHandler } from "@trpc/server/adapters/standalone";
|
||||
import { createServer } from "http";
|
||||
import { trpcRouter } from "~/server/routers/_app";
|
||||
|
||||
const handler = createHTTPHandler({
|
||||
router: trpcRouter,
|
||||
createContext: () => ({}),
|
||||
});
|
||||
|
||||
export const port = Math.floor(Math.random() * 999 + 9000);
|
||||
|
||||
const server = createServer((req, res) => {
|
||||
if (req.url?.startsWith("/api/trpc")) {
|
||||
console.log('trpc call')
|
||||
// strip prefix so handler works the same way Next.js does
|
||||
req.url = req.url.replace(/^\/api\/trpc/, "");
|
||||
return handler(req, res);
|
||||
}
|
||||
res.statusCode = 404;
|
||||
res.end("Not Found");
|
||||
});
|
||||
console.log("server listening on port:",port)
|
||||
server.listen(port);
|
||||
|
||||
// afterEach(() => {
|
||||
// server.close();
|
||||
// });
|
||||
@@ -1,16 +0,0 @@
|
||||
import React from 'react'
|
||||
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
|
||||
import { trpc } from '~/app/_trpc/Client'
|
||||
import { createTestTrpcClient } from './vitest.trpcProxyClient'
|
||||
|
||||
export default function TrpcProvider({ children }:{children: React.ReactNode}) {
|
||||
const queryClient = new QueryClient()
|
||||
const trpcClient = createTestTrpcClient()
|
||||
console.log("using test provider")
|
||||
return (
|
||||
<trpc.Provider client={trpcClient} queryClient={queryClient}>
|
||||
<QueryClientProvider client={queryClient}>
|
||||
{children}
|
||||
</QueryClientProvider>
|
||||
</trpc.Provider>
|
||||
)}
|
||||
@@ -1,26 +0,0 @@
|
||||
import { createTRPCProxyClient, httpBatchLink } from '@trpc/client'
|
||||
import { fetchRequestHandler } from '@trpc/server/adapters/fetch'
|
||||
import { trpcRouter, type TrpcRouter } from '~/server/routers/_app'
|
||||
|
||||
// This simulates the server without HTTP
|
||||
function serverHandler(path: string, req: Request) {
|
||||
return fetchRequestHandler({
|
||||
endpoint: '/api/trpc',
|
||||
router: trpcRouter,
|
||||
req,
|
||||
createContext: () => ({}),
|
||||
})
|
||||
}
|
||||
|
||||
export function createTestTrpcClient() {
|
||||
return createTRPCProxyClient<TrpcRouter>({
|
||||
links: [
|
||||
httpBatchLink({
|
||||
url: 'http://localhost/api/trpc',
|
||||
fetch: (input, init) => {
|
||||
return serverHandler(input as string, new Request(input as string, init))
|
||||
},
|
||||
}),
|
||||
],
|
||||
})
|
||||
}
|
||||
150
tscerrors.txt
Normal file
150
tscerrors.txt
Normal file
@@ -0,0 +1,150 @@
|
||||
src/app/_components/Form/Components/DeleteButton.tsx(12,79): error TS2345: Argument of type '{ id: string; }' is not assignable to parameter of type '{ id: string; createdAt: string; toTime: string | Date | undefined; title: string; fromTime: string | Date | undefined; }'.
|
||||
Type '{ id: string; }' is missing the following properties from type '{ id: string; createdAt: string; toTime: string | Date | undefined; title: string; fromTime: string | Date | undefined; }': createdAt, toTime, title, fromTime
|
||||
src/app/_components/Form/Fields/MultiBooleanFormField.tsx(63,174): error TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{}'.
|
||||
No index signature with a parameter of type 'string' was found on type '{}'.
|
||||
src/app/admin/cv/category/_components/CreateUpdateForm.tsx(14,8): error TS2613: Module '"/home/anon/Dev/gregorlohaus.com/src/app/_components/Form/Components/MutationProvider"' has no default export. Did you mean to use 'import { FormMutationContextProvider } from "/home/anon/Dev/gregorlohaus.com/src/app/_components/Form/Components/MutationProvider"' instead?
|
||||
src/app/admin/cv/entry/_components/CreateUpdateForm.tsx(16,43): error TS2305: Module '"~/app/_components/Form/Components/MutationProvider"' has no exported member 'FormCreateMutationInterface'.
|
||||
src/app/admin/cv/entry/_components/CreateUpdateForm.tsx(37,58): error TS2322: Type '((data: { title: string; id: string; fromTime: Date; toTime: Date; description?: string | null | undefined; categoryId?: string | null | undefined; hideDates?: boolean | null | undefined; createdAt?: Date | undefined; updatedAt?: Date | ... 1 more ... | undefined; }[]) => void) | undefined' is not assignable to type '((data: { title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }[], variables: { ...; }, context: unknown) => unknown) | undefined'.
|
||||
Type '(data: { title: string; id: string; fromTime: Date; toTime: Date; description?: string | null | undefined; categoryId?: string | null | undefined; hideDates?: boolean | null | undefined; createdAt?: Date | undefined; updatedAt?: Date | ... 1 more ... | undefined; }[]) => void' is not assignable to type '(data: { title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }[], variables: { ...; }, context: unknown) => unknown'.
|
||||
Types of parameters 'data' and 'data' are incompatible.
|
||||
Type '{ title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }[]' is not assignable to type '{ title: string; id: string; fromTime: Date; toTime: Date; description?: string | null | undefined; categoryId?: string | null | undefined; hideDates?: boolean | null | undefined; createdAt?: Date | undefined; updatedAt?: Date | ... 1 more ... | undefined; }[]'.
|
||||
Type '{ title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }' is not assignable to type '{ title: string; id: string; fromTime: Date; toTime: Date; description?: string | null | undefined; categoryId?: string | null | undefined; hideDates?: boolean | null | undefined; createdAt?: Date | undefined; updatedAt?: Date | ... 1 more ... | undefined; }'.
|
||||
Types of property 'fromTime' are incompatible.
|
||||
Type 'string' is not assignable to type 'Date'.
|
||||
src/app/admin/cv/entry/_components/CreateUpdateForm.tsx(38,58): error TS2322: Type '((data: { title: string; id: string; fromTime: Date; toTime: Date; description?: string | null | undefined; categoryId?: string | null | undefined; hideDates?: boolean | null | undefined; createdAt?: Date | undefined; updatedAt?: Date | ... 1 more ... | undefined; }[]) => void) | undefined' is not assignable to type '((data: { title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }[], variables: { ...; }, context: unknown) => unknown) | undefined'.
|
||||
Type '(data: { title: string; id: string; fromTime: Date; toTime: Date; description?: string | null | undefined; categoryId?: string | null | undefined; hideDates?: boolean | null | undefined; createdAt?: Date | undefined; updatedAt?: Date | ... 1 more ... | undefined; }[]) => void' is not assignable to type '(data: { title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }[], variables: { ...; }, context: unknown) => unknown'.
|
||||
Types of parameters 'data' and 'data' are incompatible.
|
||||
Type '{ title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }[]' is not assignable to type '{ title: string; id: string; fromTime: Date; toTime: Date; description?: string | null | undefined; categoryId?: string | null | undefined; hideDates?: boolean | null | undefined; createdAt?: Date | undefined; updatedAt?: Date | ... 1 more ... | undefined; }[]'.
|
||||
Type '{ title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }' is not assignable to type '{ title: string; id: string; fromTime: Date; toTime: Date; description?: string | null | undefined; categoryId?: string | null | undefined; hideDates?: boolean | null | undefined; createdAt?: Date | undefined; updatedAt?: Date | ... 1 more ... | undefined; }'.
|
||||
Types of property 'fromTime' are incompatible.
|
||||
Type 'string' is not assignable to type 'Date'.
|
||||
src/app/admin/cv/entry/_components/CreateUpdateForm.tsx(39,58): error TS2322: Type '((data: { title: string; id: string; fromTime: Date; toTime: Date; description?: string | null | undefined; categoryId?: string | null | undefined; hideDates?: boolean | null | undefined; createdAt?: Date | undefined; updatedAt?: Date | ... 1 more ... | undefined; }[]) => void) | undefined' is not assignable to type '((data: { title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }[], variables: { ...; }, context: unknown) => unknown) | undefined'.
|
||||
Type '(data: { title: string; id: string; fromTime: Date; toTime: Date; description?: string | null | undefined; categoryId?: string | null | undefined; hideDates?: boolean | null | undefined; createdAt?: Date | undefined; updatedAt?: Date | ... 1 more ... | undefined; }[]) => void' is not assignable to type '(data: { title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }[], variables: { ...; }, context: unknown) => unknown'.
|
||||
Types of parameters 'data' and 'data' are incompatible.
|
||||
Type '{ title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }[]' is not assignable to type '{ title: string; id: string; fromTime: Date; toTime: Date; description?: string | null | undefined; categoryId?: string | null | undefined; hideDates?: boolean | null | undefined; createdAt?: Date | undefined; updatedAt?: Date | ... 1 more ... | undefined; }[]'.
|
||||
Type '{ title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }' is not assignable to type '{ title: string; id: string; fromTime: Date; toTime: Date; description?: string | null | undefined; categoryId?: string | null | undefined; hideDates?: boolean | null | undefined; createdAt?: Date | undefined; updatedAt?: Date | ... 1 more ... | undefined; }'.
|
||||
Types of property 'fromTime' are incompatible.
|
||||
Type 'string' is not assignable to type 'Date'.
|
||||
src/app/admin/cv/entry/_components/CreateUpdateForm.tsx(48,7): error TS2322: Type 'UseTRPCMutationResult<{ title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }[], TRPCClientErrorLike<...>, { ...; }, unknown>' is not assignable to type 'MutationInterface'.
|
||||
Type 'TRPCHookResult & Override<MutationObserverIdleResult<{ title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }[], TRPCClientErrorLike<...>, { ...; }, unknown>, { ...; }> & { ...; }' is not assignable to type 'MutationInterface'.
|
||||
Types of property 'mutate' are incompatible.
|
||||
Type 'UseMutateFunction<{ title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }[], TRPCClientErrorLike<...>, { ...; }, unknown>' is not assignable to type '(params: { id: string; createdAt: string; toTime: string | Date | undefined; title: string; fromTime: string | Date | undefined; }) => void'.
|
||||
Types of parameters 'variables' and 'params' are incompatible.
|
||||
Type '{ id: string; createdAt: string; toTime: string | Date | undefined; title: string; fromTime: string | Date | undefined; }' is not assignable to type '{ title: string; id: string; fromTime: Date; toTime: Date; description?: string | null | undefined; categoryId?: string | null | undefined; hideDates?: boolean | null | undefined; createdAt?: Date | undefined; updatedAt?: Date | ... 1 more ... | undefined; }'.
|
||||
Types of property 'fromTime' are incompatible.
|
||||
Type 'string | Date | undefined' is not assignable to type 'Date'.
|
||||
Type 'undefined' is not assignable to type 'Date'.
|
||||
src/app/admin/cv/entry/_components/CreateUpdateForm.tsx(49,7): error TS2322: Type 'UseTRPCMutationResult<{ title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }[], TRPCClientErrorLike<...>, { ...; }, unknown>' is not assignable to type 'MutationInterface'.
|
||||
Type 'TRPCHookResult & Override<MutationObserverIdleResult<{ title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }[], TRPCClientErrorLike<...>, { ...; }, unknown>, { ...; }> & { ...; }' is not assignable to type 'MutationInterface'.
|
||||
Types of property 'mutate' are incompatible.
|
||||
Type 'UseMutateFunction<{ title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }[], TRPCClientErrorLike<...>, { ...; }, unknown>' is not assignable to type '(params: { id: string; createdAt: string; toTime: string | Date | undefined; title: string; fromTime: string | Date | undefined; }) => void'.
|
||||
Types of parameters 'variables' and 'params' are incompatible.
|
||||
Type '{ id: string; createdAt: string; toTime: string | Date | undefined; title: string; fromTime: string | Date | undefined; }' is not assignable to type '{ title?: string | undefined; id?: string | undefined; description?: string | null | undefined; categoryId?: string | null | undefined; fromTime?: Date | undefined; toTime?: Date | undefined; hideDates?: boolean | ... 1 more ... | undefined; createdAt?: Date | undefined; updatedAt?: Date | ... 1 more ... | undefined...'.
|
||||
Types of property 'fromTime' are incompatible.
|
||||
Type 'string | Date | undefined' is not assignable to type 'Date | undefined'.
|
||||
Type 'string' is not assignable to type 'Date'.
|
||||
src/app/admin/cv/entry/_components/CreateUpdateForm.tsx(50,7): error TS2322: Type 'UseTRPCMutationResult<{ title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }[], TRPCClientErrorLike<...>, { ...; }, unknown>' is not assignable to type 'MutationInterface'.
|
||||
Type 'TRPCHookResult & Override<MutationObserverIdleResult<{ title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }[], TRPCClientErrorLike<...>, { ...; }, unknown>, { ...; }> & { ...; }' is not assignable to type 'MutationInterface'.
|
||||
Types of property 'mutate' are incompatible.
|
||||
Type 'UseMutateFunction<{ title: string; id: string; description: string | null; categoryId: string | null; fromTime: string; toTime: string; hideDates: boolean | null; createdAt: string; updatedAt: string | null; }[], TRPCClientErrorLike<...>, { ...; }, unknown>' is not assignable to type '(params: { id: string; createdAt: string; toTime: string | Date | undefined; title: string; fromTime: string | Date | undefined; }) => void'.
|
||||
Types of parameters 'variables' and 'params' are incompatible.
|
||||
Type '{ id: string; createdAt: string; toTime: string | Date | undefined; title: string; fromTime: string | Date | undefined; }' is not assignable to type '{ title?: string | undefined; id?: string | undefined; description?: string | null | undefined; categoryId?: string | null | undefined; fromTime?: Date | undefined; toTime?: Date | undefined; hideDates?: boolean | ... 1 more ... | undefined; createdAt?: Date | undefined; updatedAt?: Date | ... 1 more ... | undefined...'.
|
||||
Types of property 'fromTime' are incompatible.
|
||||
Type 'string | Date | undefined' is not assignable to type 'Date | undefined'.
|
||||
Type 'string' is not assignable to type 'Date'.
|
||||
src/app/admin/cv/entry/_components/CreateUpdateForm.tsx(63,16): error TS18048: 'categories' is possibly 'undefined'.
|
||||
src/app/admin/project/_components/CreateUpdateProjectForm.tsx(43,7): error TS2322: Type '{ children: Element[]; form: UseFormReturn<{ title: string; id: string; releaseStatus?: "released" | "unreleased" | null | undefined; sourceType?: "open" | "closed" | null | undefined; sourceLink?: string | ... 1 more ... | undefined; releaseLink?: string | ... 1 more ... | undefined; stackId?: string | ... 1 more ....' is not assignable to type 'IntrinsicAttributes & { form: UseFormReturn<{ title: string; id: string; releaseStatus?: "released" | "unreleased" | null | undefined; sourceType?: "open" | "closed" | null | undefined; sourceLink?: string | ... 1 more ... | undefined; releaseLink?: string | ... 1 more ... | undefined; stackId?: string | ... 1 more ...'.
|
||||
Property 'createMutation' does not exist on type 'IntrinsicAttributes & { form: UseFormReturn<{ title: string; id: string; releaseStatus?: "released" | "unreleased" | null | undefined; sourceType?: "open" | "closed" | null | undefined; sourceLink?: string | ... 1 more ... | undefined; releaseLink?: string | ... 1 more ... | undefined; stackId?: string | ... 1 more ...'.
|
||||
src/app/admin/project/techStack/_components/CreateUpdateForm.tsx(18,8): error TS2613: Module '"/home/anon/Dev/gregorlohaus.com/src/app/_components/Form/Components/MutationProvider"' has no default export. Did you mean to use 'import { FormMutationContextProvider } from "/home/anon/Dev/gregorlohaus.com/src/app/_components/Form/Components/MutationProvider"' instead?
|
||||
src/app/cv/_components/CvCategory.tsx(10,30): error TS2339: Property 'cv' does not exist on type 'GetInferenceHelpers<"output", { ctx: object; meta: object; errorShape: DefaultErrorShape; transformer: false; }, DecorateCreateRouterOptions<{ project: BuiltRouter<{ ctx: object; meta: object; errorShape: DefaultErrorShape; transformer: false; }, DecorateCreateRouterOptions<...>>; techStack: BuiltRouter<...>; catego...'.
|
||||
src/app/cv/_components/CvCategory.tsx(21,8): error TS2532: Object is possibly 'undefined'.
|
||||
src/app/cv/_components/CvCategory.tsx(24,26): error TS2339: Property 'cvEntry' does not exist on type '{ id: string; name: string | null; layoutPosition: "sidebar" | "header" | "col1" | "col2" | null; }'.
|
||||
src/app/cv/_components/CvCategory.tsx(24,55): error TS2339: Property 'cvEntry' does not exist on type '{ id: string; name: string | null; layoutPosition: "sidebar" | "header" | "col1" | "col2" | null; }[]'.
|
||||
src/app/cv/_components/CvCategory.tsx(26,20): error TS2339: Property 'cvEntry' does not exist on type '{ id: string; name: string | null; layoutPosition: "sidebar" | "header" | "col1" | "col2" | null; }[]'.
|
||||
src/app/cv/_components/CvCategory.tsx(26,33): error TS7006: Parameter 'entry' implicitly has an 'any' type.
|
||||
src/app/cv/_components/CvEntry.tsx(4,19): error TS2305: Module '"~/lib/utils"' has no exported member 'Element'.
|
||||
src/app/cv/_components/CvEntry.tsx(5,44): error TS2307: Cannot find module '~/server/routers/cv/category' or its corresponding type declarations.
|
||||
src/app/cv/_components/CvEntry.tsx(6,41): error TS2307: Cannot find module '~/server/routers/cv/entry' or its corresponding type declarations.
|
||||
src/app/cv/_components/CvEntry.tsx(15,21): error TS2339: Property 'cv' does not exist on type 'CreateTRPCReactBase<BuiltRouter<{ ctx: object; meta: object; errorShape: DefaultErrorShape; transformer: false; }, DecorateCreateRouterOptions<{ project: BuiltRouter<{ ctx: object; meta: object; errorShape: DefaultErrorShape; transformer: false; }, DecorateCreateRouterOptions<...>>; techStack: BuiltRouter<...>; cate...'.
|
||||
src/app/cv/page.tsx(9,44): error TS2307: Cannot find module '~/server/routers/cv/category' or its corresponding type declarations.
|
||||
src/app/cv/page.tsx(15,27): error TS2339: Property 'cv' does not exist on type 'CreateTRPCReactBase<BuiltRouter<{ ctx: object; meta: object; errorShape: DefaultErrorShape; transformer: false; }, DecorateCreateRouterOptions<{ project: BuiltRouter<{ ctx: object; meta: object; errorShape: DefaultErrorShape; transformer: false; }, DecorateCreateRouterOptions<...>>; techStack: BuiltRouter<...>; cate...'.
|
||||
src/app/cv/page.tsx(18,52): error TS7006: Parameter 'cat' implicitly has an 'any' type.
|
||||
src/app/cv/page.tsx(19,51): error TS7006: Parameter 'cat' implicitly has an 'any' type.
|
||||
src/app/cv/page.tsx(20,49): error TS7006: Parameter 'cat' implicitly has an 'any' type.
|
||||
src/app/cv/page.tsx(21,49): error TS7006: Parameter 'cat' implicitly has an 'any' type.
|
||||
src/app/cv/page.tsx(61,36): error TS7006: Parameter 'cat' implicitly has an 'any' type.
|
||||
src/app/cv/page.tsx(66,43): error TS7006: Parameter 'cat' implicitly has an 'any' type.
|
||||
src/app/cv/page.tsx(79,40): error TS7006: Parameter 'cat' implicitly has an 'any' type.
|
||||
src/app/cv/page.tsx(88,42): error TS7006: Parameter 'cat' implicitly has an 'any' type.
|
||||
src/app/cv/page.tsx(98,42): error TS7006: Parameter 'cat' implicitly has an 'any' type.
|
||||
src/components/ui/sidebar.tsx(5,15): error TS1484: 'VariantProps' is a type and must be imported using a type-only import when 'verbatimModuleSyntax' is enabled.
|
||||
src/components/ui/sonner.tsx(4,29): error TS1484: 'ToasterProps' is a type and must be imported using a type-only import when 'verbatimModuleSyntax' is enabled.
|
||||
src/hooks/useGlaze.ts(6,9): error TS2488: Type 'boolean' must have a '[Symbol.iterator]()' method that returns an iterator.
|
||||
src/hooks/useGlaze.ts(18,7): error TS2552: Cannot find name 'setGlazeInit'. Did you mean 'glazeInit'?
|
||||
src/server/lib.ts(26,39): error TS2345: Argument of type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]' is not assignable to parameter of type 'TableLikeHasEmptySelection<typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]> extends true ? DrizzleTypeError<"Cannot reference a data-modifying statement subquery if it doesn't contain a `returning` clause"> : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]'.
|
||||
Type 'PgTableWithColumns<{ name: "cv_category"; schema: undefined; columns: { id: PgColumn<{ name: "id"; tableName: "cv_category"; dataType: "string"; columnType: "PgUUID"; data: string; driverParam: string; notNull: true; hasDefault: false; ... 6 more ...; generated: undefined; }, {}, {}>; name: PgColumn<...>; layoutPosi...' is not assignable to type 'TableLikeHasEmptySelection<typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]> extends true ? DrizzleTypeError<"Cannot reference a data-modifying statement subquery if it doesn't contain a `returning` clause"> : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]'.
|
||||
Type 'PgTableWithColumns<{ name: "cv_category"; schema: undefined; columns: { id: PgColumn<{ name: "id"; tableName: "cv_category"; dataType: "string"; columnType: "PgUUID"; data: string; driverParam: string; notNull: true; hasDefault: false; ... 6 more ...; generated: undefined; }, {}, {}>; name: PgColumn<...>; layoutPosi...' is not assignable to type 'TableLikeHasEmptySelection<typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]> extends true ? DrizzleTypeError<"Cannot reference a data-modifying statement subquery if it doesn't contain a `returning` clause"> : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]'.
|
||||
src/server/lib.ts(32,19): error TS2769: No overload matches this call.
|
||||
Overload 1 of 3, '(left: Column<ColumnBaseConfig<ColumnDataType, string>, object, object>, right: unknown): SQL<unknown>', gave the following error.
|
||||
Argument of type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]]' is not assignable to parameter of type 'Column<ColumnBaseConfig<ColumnDataType, string>, object, object>'.
|
||||
Type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][string] | typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][number] | typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][symbol]' is not assignable to type 'Column<ColumnBaseConfig<ColumnDataType, string>, object, object>'.
|
||||
Type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][string]' is not assignable to type 'Column<ColumnBaseConfig<ColumnDataType, string>, object, object>'.
|
||||
Overload 2 of 3, '(left: Aliased<unknown>, right: unknown): SQL<unknown>', gave the following error.
|
||||
Argument of type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]]' is not assignable to parameter of type 'Aliased<unknown>'.
|
||||
Type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][string] | typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][number] | typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][symbol]' is not assignable to type 'Aliased<unknown>'.
|
||||
Type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][string]' is not assignable to type 'Aliased<unknown>'.
|
||||
Overload 3 of 3, '(left: SQLWrapper, right: unknown): SQL<unknown>', gave the following error.
|
||||
Argument of type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]]' is not assignable to parameter of type 'SQLWrapper'.
|
||||
Type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][string] | typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][number] | typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][symbol]' is not assignable to type 'SQLWrapper'.
|
||||
Type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][string]' is not assignable to type 'SQLWrapper'.
|
||||
src/server/lib.ts(35,39): error TS2345: Argument of type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]' is not assignable to parameter of type 'TableLikeHasEmptySelection<typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]> extends true ? DrizzleTypeError<"Cannot reference a data-modifying statement subquery if it doesn't contain a `returning` clause"> : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]'.
|
||||
Type 'PgTableWithColumns<{ name: "cv_category"; schema: undefined; columns: { id: PgColumn<{ name: "id"; tableName: "cv_category"; dataType: "string"; columnType: "PgUUID"; data: string; driverParam: string; notNull: true; hasDefault: false; ... 6 more ...; generated: undefined; }, {}, {}>; name: PgColumn<...>; layoutPosi...' is not assignable to type 'TableLikeHasEmptySelection<typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]> extends true ? DrizzleTypeError<"Cannot reference a data-modifying statement subquery if it doesn't contain a `returning` clause"> : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]'.
|
||||
Type 'PgTableWithColumns<{ name: "cv_category"; schema: undefined; columns: { id: PgColumn<{ name: "id"; tableName: "cv_category"; dataType: "string"; columnType: "PgUUID"; data: string; driverParam: string; notNull: true; hasDefault: false; ... 6 more ...; generated: undefined; }, {}, {}>; name: PgColumn<...>; layoutPosi...' is not assignable to type 'TableLikeHasEmptySelection<typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]> extends true ? DrizzleTypeError<"Cannot reference a data-modifying statement subquery if it doesn't contain a `returning` clause"> : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]'.
|
||||
src/server/lib.ts(37,37): error TS2345: Argument of type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]' is not assignable to parameter of type 'TableLikeHasEmptySelection<typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]> extends true ? DrizzleTypeError<"Cannot reference a data-modifying statement subquery if it doesn't contain a `returning` clause"> : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]'.
|
||||
Type 'PgTableWithColumns<{ name: "cv_category"; schema: undefined; columns: { id: PgColumn<{ name: "id"; tableName: "cv_category"; dataType: "string"; columnType: "PgUUID"; data: string; driverParam: string; notNull: true; hasDefault: false; ... 6 more ...; generated: undefined; }, {}, {}>; name: PgColumn<...>; layoutPosi...' is not assignable to type 'TableLikeHasEmptySelection<typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]> extends true ? DrizzleTypeError<"Cannot reference a data-modifying statement subquery if it doesn't contain a `returning` clause"> : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]'.
|
||||
Type 'PgTableWithColumns<{ name: "cv_category"; schema: undefined; columns: { id: PgColumn<{ name: "id"; tableName: "cv_category"; dataType: "string"; columnType: "PgUUID"; data: string; driverParam: string; notNull: true; hasDefault: false; ... 6 more ...; generated: undefined; }, {}, {}>; name: PgColumn<...>; layoutPosi...' is not assignable to type 'TableLikeHasEmptySelection<typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]> extends true ? DrizzleTypeError<"Cannot reference a data-modifying statement subquery if it doesn't contain a `returning` clause"> : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]'.
|
||||
src/server/lib.ts(54,86): error TS7053: Element implicitly has an 'any' type because expression of type '"id"' can't be used to index type '{ [k in keyof addQuestionMarks<baseObjectOutputType<{ [K in keyof RemoveNever<{ [K in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"]]: typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][K] extends infer TColumn extends ...'.
|
||||
Property 'id' does not exist on type '{ [k in keyof addQuestionMarks<baseObjectOutputType<{ [K in keyof RemoveNever<{ [K in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"]]: typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][K] extends infer TColumn extends ...'.
|
||||
src/server/lib.ts(65,52): error TS2769: No overload matches this call.
|
||||
Overload 1 of 2, '(value: { [Key in keyof { [K in keyof ({ [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as RequiredKeyOnly<Key, typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]>]: typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["notNull"] extends true ? typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] | null; } & { [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as OptionalKeyOnly<...>]?: (typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["notNull"] extends true ? typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] | null) | undefined; })]: ({ [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as RequiredKeyOnly<...>]: typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["notNull"] extends true ? typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] | null; } & { [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as OptionalKeyOnly<...>]?: (typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["notNull"] extends true ? typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] | null) | undefined; })[K]; }]: SQL<...> | ... 1 more ... | { [K in keyof ({ [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as RequiredKeyOnly<...>]: typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["notNull"] extends true ? typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] | null; } & { [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as OptionalKeyOnly<...>]?: (typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["notNull"] extends true ? typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] | null) | undefined; })]: ({ [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as RequiredKeyOnly<...>]: typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["notNull"] extends true ? typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] | null; } & { [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as OptionalKeyOnly<...>]?: (typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["notNull"] extends true ? typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] | null) | undefined; })[K]; }[Key]; }): PgInsertBase<...>', gave the following error.
|
||||
Argument of type '{ [k in keyof addQuestionMarks<baseObjectOutputType<{ [K in keyof RemoveNever<{ [K in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"]]: typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][K] extends infer TColumn extends ...' is not assignable to parameter of type '{ [Key in keyof { [K in keyof ({ [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as RequiredKeyOnly<Key, typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]>]: typeof import("/home/anon/Dev/gregorloh...'.
|
||||
Type '{ [k in keyof addQuestionMarks<baseObjectOutputType<{ [K in keyof RemoveNever<{ [K in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"]]: typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][K] extends infer TColumn extends ...' is not assignable to type '{ [Key in keyof { [K in keyof ({ [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as RequiredKeyOnly<Key, typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]>]: typeof import("/home/anon/Dev/gregorloh...'.
|
||||
Type 'undefined' is not assignable to type '{ [Key in keyof { [K in keyof ({ [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as RequiredKeyOnly<Key, typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]>]: typeof import("/home/anon/Dev/gregorloh...'.
|
||||
Overload 2 of 2, '(values: { [Key in keyof { [K in keyof ({ [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as RequiredKeyOnly<Key, typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]>]: typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["notNull"] extends true ? typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] | null; } & { [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as OptionalKeyOnly<...>]?: (typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["notNull"] extends true ? typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] | null) | undefined; })]: ({ [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as RequiredKeyOnly<...>]: typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["notNull"] extends true ? typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] | null; } & { [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as OptionalKeyOnly<...>]?: (typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["notNull"] extends true ? typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] | null) | undefined; })[K]; }]: SQL<...> | ... 1 more ... | { [K in keyof ({ [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as RequiredKeyOnly<...>]: typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["notNull"] extends true ? typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] | null; } & { [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as OptionalKeyOnly<...>]?: (typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["notNull"] extends true ? typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] | null) | undefined; })]: ({ [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as RequiredKeyOnly<...>]: typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["notNull"] extends true ? typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] | null; } & { [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as OptionalKeyOnly<...>]?: (typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["notNull"] extends true ? typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] : typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]["_"]["data"] | null) | undefined; })[K]; }[Key]; }[]): PgInsertBase<...>', gave the following error.
|
||||
Argument of type '{ [k in keyof addQuestionMarks<baseObjectOutputType<{ [K in keyof RemoveNever<{ [K in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"]]: typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][K] extends infer TColumn extends ...' is not assignable to parameter of type '{ [Key in keyof { [K in keyof ({ [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as RequiredKeyOnly<Key, typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]>]: typeof import("/home/anon/Dev/gregorloh...'.
|
||||
Type 'undefined' is not assignable to type '{ [Key in keyof { [K in keyof ({ [Key in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"] & string as RequiredKeyOnly<Key, typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][Key]>]: typeof import("/home/anon/Dev/gregorloh...'.
|
||||
src/server/lib.ts(76,42): error TS2769: No overload matches this call.
|
||||
Overload 1 of 2, '(o: { [s: string]: unknown; } | ArrayLike<unknown>): [string, unknown][]', gave the following error.
|
||||
Argument of type '{ [k in keyof addQuestionMarks<baseObjectOutputType<{ [K in keyof RemoveNever<{ [K in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"]]: typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][K] extends infer TColumn extends ...' is not assignable to parameter of type '{ [s: string]: unknown; } | ArrayLike<unknown>'.
|
||||
Type 'undefined' is not assignable to type '{ [s: string]: unknown; } | ArrayLike<unknown>'.
|
||||
Overload 2 of 2, '(o: {}): [string, any][]', gave the following error.
|
||||
Argument of type '{ [k in keyof addQuestionMarks<baseObjectOutputType<{ [K in keyof RemoveNever<{ [K in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"]]: typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][K] extends infer TColumn extends ...' is not assignable to parameter of type '{}'.
|
||||
Type 'undefined' is not assignable to type '{}'.
|
||||
src/server/lib.ts(77,37): error TS2769: No overload matches this call.
|
||||
Overload 1 of 2, '(o: { [s: string]: unknown; } | ArrayLike<unknown>): [string, unknown][]', gave the following error.
|
||||
Argument of type '{ [k in keyof addQuestionMarks<baseObjectOutputType<{ [K in keyof RemoveNever<{ [K in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"]]: typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][K] extends infer TColumn extends ...' is not assignable to parameter of type '{ [s: string]: unknown; } | ArrayLike<unknown>'.
|
||||
Type 'undefined' is not assignable to type '{ [s: string]: unknown; } | ArrayLike<unknown>'.
|
||||
Overload 2 of 2, '(o: {}): [string, any][]', gave the following error.
|
||||
Argument of type '{ [k in keyof addQuestionMarks<baseObjectOutputType<{ [K in keyof RemoveNever<{ [K in keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"]]: typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]["_"]["columns"][K] extends infer TColumn extends ...' is not assignable to parameter of type '{}'.
|
||||
Type 'undefined' is not assignable to type '{}'.
|
||||
src/server/lib.ts(81,19): error TS2769: No overload matches this call.
|
||||
Overload 1 of 3, '(left: Column<ColumnBaseConfig<ColumnDataType, string>, object, object>, right: unknown): SQL<unknown>', gave the following error.
|
||||
Argument of type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]]' is not assignable to parameter of type 'Column<ColumnBaseConfig<ColumnDataType, string>, object, object>'.
|
||||
Type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][string] | typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][number] | typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][symbol]' is not assignable to type 'Column<ColumnBaseConfig<ColumnDataType, string>, object, object>'.
|
||||
Type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][string]' is not assignable to type 'Column<ColumnBaseConfig<ColumnDataType, string>, object, object>'.
|
||||
Overload 2 of 3, '(left: Aliased<unknown>, right: unknown): SQL<unknown>', gave the following error.
|
||||
Argument of type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]]' is not assignable to parameter of type 'Aliased<unknown>'.
|
||||
Type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][string] | typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][number] | typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][symbol]' is not assignable to type 'Aliased<unknown>'.
|
||||
Type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][string]' is not assignable to type 'Aliased<unknown>'.
|
||||
Overload 3 of 3, '(left: SQLWrapper, right: unknown): SQL<unknown>', gave the following error.
|
||||
Argument of type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][keyof typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T]]' is not assignable to parameter of type 'SQLWrapper'.
|
||||
Type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][string] | typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][number] | typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][symbol]' is not assignable to type 'SQLWrapper'.
|
||||
Type 'typeof import("/home/anon/Dev/gregorlohaus.com/src/server/dbschema/schema")[T][string]' is not assignable to type 'SQLWrapper'.
|
||||
src/server/routers/_app.server.test.ts(13,22): error TS2339: Property 'select' does not exist on type 'DecorateCreateRouterOptions<{ select: QueryProcedure<{ input: { id?: string | undefined; title?: string | undefined; sourceType?: "open" | "closed" | null | undefined; sourceLink?: string | null | undefined; releaseStatus?: "released" | ... 2 more ... | undefined; releaseLink?: string | ... 1 more ... | undefined; s...'.
|
||||
Property 'select' does not exist on type 'RouterDef<{ ctx: object; meta: object; errorShape: DefaultErrorShape; transformer: false; }, DecorateCreateRouterOptions<{ project: BuiltRouter<{ ctx: object; meta: object; errorShape: DefaultErrorShape; transformer: false; }, DecorateCreateRouterOptions<...>>; techStack: BuiltRouter<...>; category: BuiltRouter<...>...'.
|
||||
src/server/routers/_app.server.test.ts(14,22): error TS2339: Property 'update' does not exist on type 'DecorateCreateRouterOptions<{ select: QueryProcedure<{ input: { id?: string | undefined; title?: string | undefined; sourceType?: "open" | "closed" | null | undefined; sourceLink?: string | null | undefined; releaseStatus?: "released" | ... 2 more ... | undefined; releaseLink?: string | ... 1 more ... | undefined; s...'.
|
||||
Property 'update' does not exist on type 'RouterDef<{ ctx: object; meta: object; errorShape: DefaultErrorShape; transformer: false; }, DecorateCreateRouterOptions<{ project: BuiltRouter<{ ctx: object; meta: object; errorShape: DefaultErrorShape; transformer: false; }, DecorateCreateRouterOptions<...>>; techStack: BuiltRouter<...>; category: BuiltRouter<...>...'.
|
||||
src/server/routers/_app.server.test.ts(15,22): error TS2339: Property 'delete' does not exist on type 'DecorateCreateRouterOptions<{ select: QueryProcedure<{ input: { id?: string | undefined; title?: string | undefined; sourceType?: "open" | "closed" | null | undefined; sourceLink?: string | null | undefined; releaseStatus?: "released" | ... 2 more ... | undefined; releaseLink?: string | ... 1 more ... | undefined; s...'.
|
||||
Property 'delete' does not exist on type 'RouterDef<{ ctx: object; meta: object; errorShape: DefaultErrorShape; transformer: false; }, DecorateCreateRouterOptions<{ project: BuiltRouter<{ ctx: object; meta: object; errorShape: DefaultErrorShape; transformer: false; }, DecorateCreateRouterOptions<...>>; techStack: BuiltRouter<...>; category: BuiltRouter<...>...'.
|
||||
src/server/routers/_app.server.test.ts(16,22): error TS2339: Property 'insert' does not exist on type 'DecorateCreateRouterOptions<{ select: QueryProcedure<{ input: { id?: string | undefined; title?: string | undefined; sourceType?: "open" | "closed" | null | undefined; sourceLink?: string | null | undefined; releaseStatus?: "released" | ... 2 more ... | undefined; releaseLink?: string | ... 1 more ... | undefined; s...'.
|
||||
Property 'insert' does not exist on type 'RouterDef<{ ctx: object; meta: object; errorShape: DefaultErrorShape; transformer: false; }, DecorateCreateRouterOptions<{ project: BuiltRouter<{ ctx: object; meta: object; errorShape: DefaultErrorShape; transformer: false; }, DecorateCreateRouterOptions<...>>; techStack: BuiltRouter<...>; category: BuiltRouter<...>...'.
|
||||
@@ -9,7 +9,7 @@
|
||||
"moduleDetection": "force",
|
||||
"isolatedModules": true,
|
||||
"verbatimModuleSyntax": true,
|
||||
|
||||
"strictFunctionTypes": false,
|
||||
/* Strictness */
|
||||
"strict": true,
|
||||
"noUncheckedIndexedAccess": true,
|
||||
|
||||
@@ -3,17 +3,10 @@ import react from '@vitejs/plugin-react'
|
||||
import tsconfigPaths from 'vite-tsconfig-paths'
|
||||
import dotenv from 'dotenv'
|
||||
import path from 'path'
|
||||
import { resolve } from 'node:path'
|
||||
const env = dotenv.config({path: './.env'})
|
||||
console.log('dname', __dirname)
|
||||
console.log(env.error)
|
||||
// console.log(env.parsed)
|
||||
export default defineConfig({
|
||||
plugins: [tsconfigPaths(), react()],
|
||||
resolve: {
|
||||
alias: {
|
||||
'~/app/_trpc/TrpcProvicer': path.resolve(__dirname,'./vitest.trpcProvider.mock')
|
||||
}
|
||||
},
|
||||
optimizeDeps: {
|
||||
include: [
|
||||
'@tanstack/react-query-next-experimental',
|
||||
@@ -24,18 +17,25 @@ export default defineConfig({
|
||||
'@tanstack/react-query-next-experimental',
|
||||
],
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
'~/server/db': resolve('./test/aliases/db.ts')
|
||||
}
|
||||
},
|
||||
test: {
|
||||
// fileParallelism: false,
|
||||
reporters: ['verbose'],
|
||||
coverage: { provider: 'v8'},
|
||||
coverage: { provider: 'v8', reporter: ['html-spa']},
|
||||
projects: [
|
||||
{
|
||||
extends: true,
|
||||
test: {
|
||||
mockReset: true,
|
||||
name: "server",
|
||||
setupFiles: [
|
||||
'./test/db/setup.ts',
|
||||
'./test/mocks/vitest.isAdmin.mock.ts',
|
||||
'./test/mocks/vitest.nextnavigation.mock.ts',
|
||||
'./test/mocks/vitest.drizzle.mock.ts'
|
||||
],
|
||||
include: ['./src/**/*.server.test.ts'],
|
||||
env: env.parsed
|
||||
@@ -44,11 +44,14 @@ export default defineConfig({
|
||||
{
|
||||
extends: true,
|
||||
test: {
|
||||
mockReset: true,
|
||||
name: "client",
|
||||
setupFiles: [
|
||||
'./test/trpc/server.ts',
|
||||
'./test/db/setup.ts',
|
||||
'./test/trpc/GetBaseUrl.mock.ts',
|
||||
'./test/mocks/vitest.isAdmin.mock.ts',
|
||||
'./test/mocks/vitest.nextnavigation.mock.ts',
|
||||
'./test/mocks/vitest.drizzle.mock.ts'
|
||||
],
|
||||
include: ['./src/**/*.client.test.ts','./src/**/*.client.test.tsx'],
|
||||
environment: 'jsdom',
|
||||
|
||||
Reference in New Issue
Block a user