chore: update dependencies

This commit is contained in:
Amruth Pillai
2026-07-27 13:19:54 +02:00
parent 6503da7e49
commit 3266066826
19 changed files with 2862 additions and 2545 deletions
+34 -34
View File
@@ -17,33 +17,33 @@
"#react-pdf-renderer": "@react-pdf/renderer" "#react-pdf-renderer": "@react-pdf/renderer"
}, },
"dependencies": { "dependencies": {
"@ai-sdk/anthropic": "^4.0.10", "@ai-sdk/anthropic": "^4.0.21",
"@ai-sdk/cerebras": "^3.0.6", "@ai-sdk/cerebras": "^3.0.14",
"@ai-sdk/cohere": "^4.0.6", "@ai-sdk/cohere": "^4.0.12",
"@ai-sdk/deepseek": "^3.0.6", "@ai-sdk/deepseek": "^3.0.13",
"@ai-sdk/fireworks": "^3.0.7", "@ai-sdk/fireworks": "^3.0.15",
"@ai-sdk/google": "^4.0.10", "@ai-sdk/google": "^4.0.24",
"@ai-sdk/groq": "^4.0.6", "@ai-sdk/groq": "^4.0.13",
"@ai-sdk/mistral": "^4.0.7", "@ai-sdk/mistral": "^4.0.14",
"@ai-sdk/openai": "^4.0.9", "@ai-sdk/openai": "^4.0.20",
"@ai-sdk/openai-compatible": "^3.0.6", "@ai-sdk/openai-compatible": "^3.0.14",
"@ai-sdk/perplexity": "^4.0.7", "@ai-sdk/perplexity": "^4.0.13",
"@ai-sdk/togetherai": "^3.0.7", "@ai-sdk/togetherai": "^3.0.15",
"@ai-sdk/xai": "^4.0.9", "@ai-sdk/xai": "^4.0.18",
"@aws-sdk/client-s3": "^3.1081.0", "@aws-sdk/client-s3": "^3.1095.0",
"@better-auth/api-key": "^1.6.23", "@better-auth/api-key": "^1.6.25",
"@better-auth/drizzle-adapter": "^1.6.23", "@better-auth/drizzle-adapter": "^1.6.25",
"@better-auth/infra": "^0.3.5", "@better-auth/infra": "^0.3.7",
"@better-auth/oauth-provider": "^1.6.23", "@better-auth/oauth-provider": "^1.6.25",
"@better-auth/passkey": "^1.6.23", "@better-auth/passkey": "^1.6.25",
"@hono/node-server": "^2.0.8", "@hono/node-server": "^2.0.12",
"@modelcontextprotocol/sdk": "^1.29.0", "@modelcontextprotocol/sdk": "^1.29.0",
"@orpc/client": "^1.14.7", "@orpc/client": "^1.14.10",
"@orpc/experimental-ratelimit": "^1.14.7", "@orpc/experimental-ratelimit": "^1.14.10",
"@orpc/json-schema": "^1.14.7", "@orpc/json-schema": "^1.14.10",
"@orpc/openapi": "^1.14.7", "@orpc/openapi": "^1.14.10",
"@orpc/server": "^1.14.7", "@orpc/server": "^1.14.10",
"@orpc/zod": "^1.14.7", "@orpc/zod": "^1.14.10",
"@react-pdf/renderer": "^4.5.1", "@react-pdf/renderer": "^4.5.1",
"@reactive-resume/api": "workspace:*", "@reactive-resume/api": "workspace:*",
"@reactive-resume/auth": "workspace:*", "@reactive-resume/auth": "workspace:*",
@@ -55,24 +55,24 @@
"@sindresorhus/slugify": "^3.0.0", "@sindresorhus/slugify": "^3.0.0",
"@t3-oss/env-core": "^0.13.11", "@t3-oss/env-core": "^0.13.11",
"@uiw/color-convert": "^2.10.3", "@uiw/color-convert": "^2.10.3",
"ai": "^7.0.18", "ai": "^7.0.37",
"bcrypt": "^6.0.0", "bcrypt": "^6.0.0",
"better-auth": "1.6.23", "better-auth": "1.6.25",
"cjk-regex": "^3.4.0", "cjk-regex": "^3.4.0",
"deepmerge-ts": "^7.1.5", "deepmerge-ts": "^7.1.5",
"drizzle-orm": "1.0.0-rc.4", "drizzle-orm": "1.0.0-rc.4",
"drizzle-zod": "1.0.0-beta.14-a36c63d", "drizzle-zod": "1.0.0-beta.14-a36c63d",
"es-toolkit": "^1.49.0", "es-toolkit": "^1.50.0",
"fast-json-patch": "^3.1.1", "fast-json-patch": "^3.1.1",
"hono": "^4.12.28", "hono": "^4.12.32",
"jsonrepair": "^3.15.0", "jsonrepair": "^3.15.0",
"node-html-parser": "^9.0.0", "node-html-parser": "^9.0.0",
"nodemailer": "^9.0.3", "nodemailer": "^9.0.3",
"ollama-ai-provider-v2": "^4.0.1", "ollama-ai-provider-v2": "^4.0.1",
"pg": "^8.22.0", "pg": "^8.22.0",
"phosphor-icons-react-pdf": "^0.1.3", "phosphor-icons-react-pdf": "^0.1.3",
"react": "^19.2.7", "react": "^19.2.8",
"react-email": "^6.6.8", "react-email": "^6.9.1",
"react-pdf-html": "^2.1.5", "react-pdf-html": "^2.1.5",
"resumable-stream": "^2.2.12", "resumable-stream": "^2.2.12",
"sharp": "^0.35.3", "sharp": "^0.35.3",
@@ -87,8 +87,8 @@
"@types/pg": "^8.20.0", "@types/pg": "^8.20.0",
"@types/react": "^19.2.17", "@types/react": "^19.2.17",
"@typescript/native-preview": "7.0.0-dev.20260707.2", "@typescript/native-preview": "7.0.0-dev.20260707.2",
"tsdown": "^0.22.4", "tsdown": "^0.22.14",
"tsx": "^4.23.0", "tsx": "^4.23.1",
"typescript": "^7.0.2", "typescript": "^7.0.2",
"vitest": "^4.1.10" "vitest": "^4.1.10"
} }
+21 -26
View File
@@ -41,21 +41,17 @@ describe("web app fallback classification", () => {
expect(response.headers.get("Content-Security-Policy-Report-Only")).toContain("frame-ancestors 'none'"); expect(response.headers.get("Content-Security-Policy-Report-Only")).toContain("frame-ancestors 'none'");
}); });
it.each([ it.each(["/auth/login", "/dashboard", "/builder/resume-1", "/agent", "/templates", "/templates/azurill.pdf"])(
"/auth/login", "serves noindex shell for known app prefix %s",
"/dashboard", async (pathname) => {
"/builder/resume-1", const response = await handleWebApp(new Request(`https://example.com${pathname}`));
"/agent",
"/templates",
"/templates/azurill.pdf",
])("serves noindex shell for known app prefix %s", async (pathname) => {
const response = await handleWebApp(new Request(`https://example.com${pathname}`));
expect(response.status).toBe(200); expect(response.status).toBe(200);
expect(response.headers.get("Content-Type")).toBe("text/html; charset=UTF-8"); expect(response.headers.get("Content-Type")).toBe("text/html; charset=UTF-8");
expect(response.headers.get("X-Robots-Tag")).toBe("noindex, follow"); expect(response.headers.get("X-Robots-Tag")).toBe("noindex, follow");
expect(await response.text()).toBe("<html>app</html>"); expect(await response.text()).toBe("<html>app</html>");
}); },
);
it("serves noindex shell for public resume shaped routes", async () => { it("serves noindex shell for public resume shaped routes", async () => {
const response = await handleWebApp(new Request("https://example.com/alice/resume")); const response = await handleWebApp(new Request("https://example.com/alice/resume"));
@@ -75,19 +71,18 @@ describe("web app fallback classification", () => {
expect(fs.readFile).not.toHaveBeenCalled(); expect(fs.readFile).not.toHaveBeenCalled();
}); });
it.each([ it.each(["/api/foo", "/mcp/foo", "/uploads/foo"])(
"/api/foo", "does not treat reserved two-segment path %s as a public resume",
"/mcp/foo", async (pathname) => {
"/uploads/foo", const response = await handleWebApp(new Request(`https://example.com${pathname}`));
])("does not treat reserved two-segment path %s as a public resume", async (pathname) => {
const response = await handleWebApp(new Request(`https://example.com${pathname}`));
expect(response.status).toBe(404); expect(response.status).toBe(404);
expect(response.headers.get("Content-Type")).toBe("text/plain; charset=UTF-8"); expect(response.headers.get("Content-Type")).toBe("text/plain; charset=UTF-8");
expect(response.headers.get("X-Robots-Tag")).toBe("noindex, nofollow"); expect(response.headers.get("X-Robots-Tag")).toBe("noindex, nofollow");
expect(await response.text()).toBe("Not Found"); expect(await response.text()).toBe("Not Found");
expect(fs.readFile).not.toHaveBeenCalled(); expect(fs.readFile).not.toHaveBeenCalled();
}); },
);
it("returns plain 404 for missing asset-looking paths", async () => { it("returns plain 404 for missing asset-looking paths", async () => {
const response = await handleWebApp(new Request("https://example.com/assets/missing.css")); const response = await handleWebApp(new Request("https://example.com/assets/missing.css"));
+41 -41
View File
@@ -16,20 +16,20 @@
"lingui:extract": "lingui extract --clean --overwrite" "lingui:extract": "lingui extract --clean --overwrite"
}, },
"dependencies": { "dependencies": {
"@ai-sdk/react": "^4.0.19", "@ai-sdk/react": "^4.0.40",
"@base-ui/react": "^1.6.0", "@base-ui/react": "^1.6.0",
"@better-auth/api-key": "^1.6.23", "@better-auth/api-key": "^1.6.25",
"@better-auth/infra": "^0.3.5", "@better-auth/infra": "^0.3.7",
"@better-auth/oauth-provider": "^1.6.23", "@better-auth/oauth-provider": "^1.6.25",
"@better-auth/passkey": "^1.6.23", "@better-auth/passkey": "^1.6.25",
"@dnd-kit/core": "^6.3.1", "@dnd-kit/core": "^6.3.1",
"@dnd-kit/sortable": "^10.0.0", "@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2", "@dnd-kit/utilities": "^3.2.2",
"@lingui/core": "^6.5.0", "@lingui/core": "^6.6.0",
"@lingui/react": "^6.5.0", "@lingui/react": "^6.6.0",
"@orpc/client": "^1.14.7", "@orpc/client": "^1.14.10",
"@orpc/server": "^1.14.7", "@orpc/server": "^1.14.10",
"@orpc/tanstack-query": "^1.14.7", "@orpc/tanstack-query": "^1.14.10",
"@phosphor-icons/react": "^2.1.10", "@phosphor-icons/react": "^2.1.10",
"@react-pdf/renderer": "^4.5.1", "@react-pdf/renderer": "^4.5.1",
"@reactive-resume/ai": "workspace:*", "@reactive-resume/ai": "workspace:*",
@@ -43,39 +43,39 @@
"@reactive-resume/schema": "workspace:*", "@reactive-resume/schema": "workspace:*",
"@reactive-resume/ui": "workspace:*", "@reactive-resume/ui": "workspace:*",
"@reactive-resume/utils": "workspace:*", "@reactive-resume/utils": "workspace:*",
"@tailwindcss/vite": "^4.3.2", "@tailwindcss/vite": "^4.3.3",
"@tanstack/react-form": "^1.33.0", "@tanstack/react-form": "^1.33.2",
"@tanstack/react-hotkeys": "^0.10.0", "@tanstack/react-hotkeys": "^0.10.0",
"@tanstack/react-query": "^5.101.2", "@tanstack/react-query": "^5.101.4",
"@tanstack/react-router": "^1.170.17", "@tanstack/react-router": "^1.170.18",
"@tiptap/extension-color": "^3.27.3", "@tiptap/extension-color": "^3.29.1",
"@tiptap/extension-highlight": "^3.27.3", "@tiptap/extension-highlight": "^3.29.1",
"@tiptap/extension-text-align": "^3.27.3", "@tiptap/extension-text-align": "^3.29.1",
"@tiptap/extension-text-style": "^3.27.3", "@tiptap/extension-text-style": "^3.29.1",
"@tiptap/pm": "^3.27.3", "@tiptap/pm": "^3.29.1",
"@tiptap/react": "^3.27.3", "@tiptap/react": "^3.29.1",
"@tiptap/starter-kit": "^3.27.3", "@tiptap/starter-kit": "^3.29.1",
"@types/js-cookie": "^3.0.6", "@types/js-cookie": "^3.0.6",
"@uiw/color-convert": "^2.10.3", "@uiw/color-convert": "^2.10.3",
"@uiw/react-color-colorful": "^2.10.3", "@uiw/react-color-colorful": "^2.10.3",
"ai": "^7.0.18", "ai": "^7.0.37",
"better-auth": "1.6.23", "better-auth": "1.6.25",
"cmdk": "^1.1.1", "cmdk": "^1.1.1",
"drizzle-orm": "1.0.0-rc.4", "drizzle-orm": "1.0.0-rc.4",
"es-toolkit": "^1.49.0", "es-toolkit": "^1.50.0",
"fuse.js": "^7.4.2", "fuse.js": "^7.5.0",
"immer": "^11.1.11", "immer": "^11.1.15",
"js-cookie": "^3.0.8", "js-cookie": "^3.0.8",
"motion": "^12.42.2", "motion": "^12.42.2",
"pdfjs-dist": "6.1.200", "pdfjs-dist": "6.1.200",
"pg": "^8.22.0", "pg": "^8.22.0",
"qrcode.react": "^4.2.0", "qrcode.react": "^4.2.0",
"react": "^19.2.7", "react": "^19.2.8",
"react-dom": "^19.2.7", "react-dom": "^19.2.8",
"react-easy-crop": "^6.2.2", "react-easy-crop": "^6.2.3",
"react-markdown": "^10.1.0", "react-markdown": "^10.1.0",
"react-resizable-panels": "^4.12.1", "react-resizable-panels": "^4.12.2",
"react-window": "^2.2.7", "react-window": "^2.3.0",
"react-zoom-pan-pinch": "^4.0.3", "react-zoom-pan-pinch": "^4.0.3",
"remark-gfm": "^4.0.1", "remark-gfm": "^4.0.1",
"sonner": "^2.0.7", "sonner": "^2.0.7",
@@ -86,27 +86,27 @@
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^8.0.1", "@babel/core": "^8.0.1",
"@lingui/babel-plugin-lingui-macro": "^6.5.0", "@lingui/babel-plugin-lingui-macro": "^6.6.0",
"@lingui/cli": "^6.5.0", "@lingui/cli": "^6.6.0",
"@lingui/format-po": "^6.5.0", "@lingui/format-po": "^6.6.0",
"@lingui/vite-plugin": "^6.5.0", "@lingui/vite-plugin": "^6.6.0",
"@reactive-resume/config": "workspace:*", "@reactive-resume/config": "workspace:*",
"@rolldown/plugin-babel": "^0.2.3", "@rolldown/plugin-babel": "^0.2.3",
"@tanstack/devtools-vite": "^0.8.1", "@tanstack/devtools-vite": "^0.8.3",
"@tanstack/react-devtools": "^0.10.8", "@tanstack/react-devtools": "^0.10.9",
"@tanstack/react-query-devtools": "^5.101.2", "@tanstack/react-query-devtools": "^5.101.4",
"@tanstack/react-router-devtools": "^1.167.0", "@tanstack/react-router-devtools": "^1.167.0",
"@tanstack/router-plugin": "^1.168.19", "@tanstack/router-plugin": "^1.168.23",
"@types/babel__core": "^7.20.5", "@types/babel__core": "^7.20.5",
"@types/pg": "^8.20.0", "@types/pg": "^8.20.0",
"@types/react": "^19.2.17", "@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3", "@types/react-dom": "^19.2.3",
"@typescript/native-preview": "7.0.0-dev.20260707.2", "@typescript/native-preview": "7.0.0-dev.20260707.2",
"@vitejs/plugin-react": "^6.0.3", "@vitejs/plugin-react": "^6.0.4",
"babel-plugin-macros": "^3.1.0", "babel-plugin-macros": "^3.1.0",
"babel-plugin-react-compiler": "^1.0.0", "babel-plugin-react-compiler": "^1.0.0",
"rimraf": "^6.1.3", "rimraf": "^6.1.3",
"typescript": "^7.0.2", "typescript": "^7.0.2",
"vite": "^8.1.3" "vite": "^8.1.5"
} }
} }
@@ -15,21 +15,21 @@ function rendererBody(name: string) {
} }
describe("custom section dialog layout", () => { describe("custom section dialog layout", () => {
it.each([ it.each(["CreateCustomSectionFormRenderer", "UpdateCustomSectionFormRenderer"])(
"CreateCustomSectionFormRenderer", "renders icon and title in one row for %s",
"UpdateCustomSectionFormRenderer", (name) => {
])("renders icon and title in one row for %s", (name) => { const body = rendererBody(name);
const body = rendererBody(name); const rowIndex = body.indexOf('"flex items-end sm:col-span-full"');
const rowIndex = body.indexOf('"flex items-end sm:col-span-full"'); const iconIndex = body.indexOf('name="icon"', rowIndex);
const iconIndex = body.indexOf('name="icon"', rowIndex); const titleIndex = body.indexOf('name="title"', rowIndex);
const titleIndex = body.indexOf('name="title"', rowIndex); const sectionTypeIndex = body.indexOf('name="type"', rowIndex);
const sectionTypeIndex = body.indexOf('name="type"', rowIndex);
expect(rowIndex).toBeGreaterThanOrEqual(0); expect(rowIndex).toBeGreaterThanOrEqual(0);
expect(iconIndex).toBeGreaterThan(rowIndex); expect(iconIndex).toBeGreaterThan(rowIndex);
expect(titleIndex).toBeGreaterThan(iconIndex); expect(titleIndex).toBeGreaterThan(iconIndex);
expect(sectionTypeIndex).toBeGreaterThan(titleIndex); expect(sectionTypeIndex).toBeGreaterThan(titleIndex);
expect(body).toContain('className="rounded-r-none border-input border-e-0"'); expect(body).toContain('className="rounded-r-none border-input border-e-0"');
expect(body).toContain('className="rounded-s-none"'); expect(body).toContain('className="rounded-s-none"');
}); },
);
}); });
+260 -260
View File
@@ -9,45 +9,39 @@
// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
import { Route as rootRouteImport } from "./routes/__root"; import { Route as rootRouteImport } from "./routes/__root";
import { Route as DashboardRouteRouteImport } from "./routes/dashboard/route";
import { Route as AuthRouteRouteImport } from "./routes/auth/route";
import { Route as AgentRouteRouteImport } from "./routes/agent/route";
import { Route as HomeRouteRouteImport } from "./routes/_home/route"; import { Route as HomeRouteRouteImport } from "./routes/_home/route";
import { Route as DashboardIndexRouteImport } from "./routes/dashboard/index"; import { Route as AgentRouteRouteImport } from "./routes/agent/route";
import { Route as AuthIndexRouteImport } from "./routes/auth/index"; import { Route as AuthRouteRouteImport } from "./routes/auth/route";
import { Route as AgentIndexRouteImport } from "./routes/agent/index"; import { Route as DashboardRouteRouteImport } from "./routes/dashboard/route";
import { Route as HomeIndexRouteImport } from "./routes/_home/index";
import { Route as TemplatesSplatRouteImport } from "./routes/templates/$";
import { Route as AuthVerify2faBackupRouteImport } from "./routes/auth/verify-2fa-backup";
import { Route as AuthVerify2faRouteImport } from "./routes/auth/verify-2fa";
import { Route as AuthResumePasswordRouteImport } from "./routes/auth/resume-password";
import { Route as AuthResetPasswordRouteImport } from "./routes/auth/reset-password";
import { Route as AuthRegisterRouteImport } from "./routes/auth/register";
import { Route as AuthLoginRouteImport } from "./routes/auth/login";
import { Route as AuthForgotPasswordRouteImport } from "./routes/auth/forgot-password";
import { Route as AgentNewRouteImport } from "./routes/agent/new";
import { Route as AgentThreadIdRouteImport } from "./routes/agent/$threadId";
import { Route as UsernameSlugRouteImport } from "./routes/$username/$slug"; import { Route as UsernameSlugRouteImport } from "./routes/$username/$slug";
import { Route as HomeIndexRouteImport } from "./routes/_home/index";
import { Route as AgentIndexRouteImport } from "./routes/agent/index";
import { Route as AgentThreadIdRouteImport } from "./routes/agent/$threadId";
import { Route as AgentNewRouteImport } from "./routes/agent/new";
import { Route as AuthIndexRouteImport } from "./routes/auth/index";
import { Route as AuthForgotPasswordRouteImport } from "./routes/auth/forgot-password";
import { Route as AuthLoginRouteImport } from "./routes/auth/login";
import { Route as AuthRegisterRouteImport } from "./routes/auth/register";
import { Route as AuthResetPasswordRouteImport } from "./routes/auth/reset-password";
import { Route as AuthResumePasswordRouteImport } from "./routes/auth/resume-password";
import { Route as AuthVerify2faRouteImport } from "./routes/auth/verify-2fa";
import { Route as AuthVerify2faBackupRouteImport } from "./routes/auth/verify-2fa-backup";
import { Route as BuilderResumeIdRouteRouteImport } from "./routes/builder/$resumeId/route"; import { Route as BuilderResumeIdRouteRouteImport } from "./routes/builder/$resumeId/route";
import { Route as DashboardResumesIndexRouteImport } from "./routes/dashboard/resumes/index"; import { Route as DashboardIndexRouteImport } from "./routes/dashboard/index";
import { Route as DashboardApplicationsIndexRouteImport } from "./routes/dashboard/applications/index"; import { Route as TemplatesSplatRouteImport } from "./routes/templates/$";
import { Route as BuilderResumeIdIndexRouteImport } from "./routes/builder/$resumeId/index"; import { Route as BuilderResumeIdIndexRouteImport } from "./routes/builder/$resumeId/index";
import { Route as DashboardSettingsProfileRouteImport } from "./routes/dashboard/settings/profile"; import { Route as DashboardApplicationsIndexRouteImport } from "./routes/dashboard/applications/index";
import { Route as DashboardSettingsPreferencesRouteImport } from "./routes/dashboard/settings/preferences"; import { Route as DashboardResumesIndexRouteImport } from "./routes/dashboard/resumes/index";
import { Route as DashboardSettingsJobSearchRouteImport } from "./routes/dashboard/settings/job-search";
import { Route as DashboardSettingsDangerZoneRouteImport } from "./routes/dashboard/settings/danger-zone";
import { Route as DashboardSettingsApiKeysRouteImport } from "./routes/dashboard/settings/api-keys"; import { Route as DashboardSettingsApiKeysRouteImport } from "./routes/dashboard/settings/api-keys";
import { Route as DashboardSettingsDangerZoneRouteImport } from "./routes/dashboard/settings/danger-zone";
import { Route as DashboardSettingsIntegrationsRouteRouteImport } from "./routes/dashboard/settings/integrations/route"; import { Route as DashboardSettingsIntegrationsRouteRouteImport } from "./routes/dashboard/settings/integrations/route";
import { Route as DashboardSettingsJobSearchRouteImport } from "./routes/dashboard/settings/job-search";
import { Route as DashboardSettingsPreferencesRouteImport } from "./routes/dashboard/settings/preferences";
import { Route as DashboardSettingsProfileRouteImport } from "./routes/dashboard/settings/profile";
import { Route as DashboardSettingsAuthenticationIndexRouteImport } from "./routes/dashboard/settings/authentication/index"; import { Route as DashboardSettingsAuthenticationIndexRouteImport } from "./routes/dashboard/settings/authentication/index";
const DashboardRouteRoute = DashboardRouteRouteImport.update({ const HomeRouteRoute = HomeRouteRouteImport.update({
id: "/dashboard", id: "/_home",
path: "/dashboard",
getParentRoute: () => rootRouteImport,
} as any);
const AuthRouteRoute = AuthRouteRouteImport.update({
id: "/auth",
path: "/auth",
getParentRoute: () => rootRouteImport, getParentRoute: () => rootRouteImport,
} as any); } as any);
const AgentRouteRoute = AgentRouteRouteImport.update({ const AgentRouteRoute = AgentRouteRouteImport.update({
@@ -55,73 +49,29 @@ const AgentRouteRoute = AgentRouteRouteImport.update({
path: "/agent", path: "/agent",
getParentRoute: () => rootRouteImport, getParentRoute: () => rootRouteImport,
} as any); } as any);
const HomeRouteRoute = HomeRouteRouteImport.update({ const AuthRouteRoute = AuthRouteRouteImport.update({
id: "/_home", id: "/auth",
path: "/auth",
getParentRoute: () => rootRouteImport, getParentRoute: () => rootRouteImport,
} as any); } as any);
const DashboardIndexRoute = DashboardIndexRouteImport.update({ const DashboardRouteRoute = DashboardRouteRouteImport.update({
id: "/", id: "/dashboard",
path: "/", path: "/dashboard",
getParentRoute: () => DashboardRouteRoute, getParentRoute: () => rootRouteImport,
} as any); } as any);
const AuthIndexRoute = AuthIndexRouteImport.update({ const UsernameSlugRoute = UsernameSlugRouteImport.update({
id: "/", id: "/$username/$slug",
path: "/", path: "/$username/$slug",
getParentRoute: () => AuthRouteRoute, getParentRoute: () => rootRouteImport,
} as any);
const AgentIndexRoute = AgentIndexRouteImport.update({
id: "/",
path: "/",
getParentRoute: () => AgentRouteRoute,
} as any); } as any);
const HomeIndexRoute = HomeIndexRouteImport.update({ const HomeIndexRoute = HomeIndexRouteImport.update({
id: "/", id: "/",
path: "/", path: "/",
getParentRoute: () => HomeRouteRoute, getParentRoute: () => HomeRouteRoute,
} as any); } as any);
const TemplatesSplatRoute = TemplatesSplatRouteImport.update({ const AgentIndexRoute = AgentIndexRouteImport.update({
id: "/templates/$", id: "/",
path: "/templates/$", path: "/",
getParentRoute: () => rootRouteImport,
} as any);
const AuthVerify2faBackupRoute = AuthVerify2faBackupRouteImport.update({
id: "/verify-2fa-backup",
path: "/verify-2fa-backup",
getParentRoute: () => AuthRouteRoute,
} as any);
const AuthVerify2faRoute = AuthVerify2faRouteImport.update({
id: "/verify-2fa",
path: "/verify-2fa",
getParentRoute: () => AuthRouteRoute,
} as any);
const AuthResumePasswordRoute = AuthResumePasswordRouteImport.update({
id: "/resume-password",
path: "/resume-password",
getParentRoute: () => AuthRouteRoute,
} as any);
const AuthResetPasswordRoute = AuthResetPasswordRouteImport.update({
id: "/reset-password",
path: "/reset-password",
getParentRoute: () => AuthRouteRoute,
} as any);
const AuthRegisterRoute = AuthRegisterRouteImport.update({
id: "/register",
path: "/register",
getParentRoute: () => AuthRouteRoute,
} as any);
const AuthLoginRoute = AuthLoginRouteImport.update({
id: "/login",
path: "/login",
getParentRoute: () => AuthRouteRoute,
} as any);
const AuthForgotPasswordRoute = AuthForgotPasswordRouteImport.update({
id: "/forgot-password",
path: "/forgot-password",
getParentRoute: () => AuthRouteRoute,
} as any);
const AgentNewRoute = AgentNewRouteImport.update({
id: "/new",
path: "/new",
getParentRoute: () => AgentRouteRoute, getParentRoute: () => AgentRouteRoute,
} as any); } as any);
const AgentThreadIdRoute = AgentThreadIdRouteImport.update({ const AgentThreadIdRoute = AgentThreadIdRouteImport.update({
@@ -129,48 +79,86 @@ const AgentThreadIdRoute = AgentThreadIdRouteImport.update({
path: "/$threadId", path: "/$threadId",
getParentRoute: () => AgentRouteRoute, getParentRoute: () => AgentRouteRoute,
} as any); } as any);
const UsernameSlugRoute = UsernameSlugRouteImport.update({ const AgentNewRoute = AgentNewRouteImport.update({
id: "/$username/$slug", id: "/new",
path: "/$username/$slug", path: "/new",
getParentRoute: () => rootRouteImport, getParentRoute: () => AgentRouteRoute,
} as any);
const AuthIndexRoute = AuthIndexRouteImport.update({
id: "/",
path: "/",
getParentRoute: () => AuthRouteRoute,
} as any);
const AuthForgotPasswordRoute = AuthForgotPasswordRouteImport.update({
id: "/forgot-password",
path: "/forgot-password",
getParentRoute: () => AuthRouteRoute,
} as any);
const AuthLoginRoute = AuthLoginRouteImport.update({
id: "/login",
path: "/login",
getParentRoute: () => AuthRouteRoute,
} as any);
const AuthRegisterRoute = AuthRegisterRouteImport.update({
id: "/register",
path: "/register",
getParentRoute: () => AuthRouteRoute,
} as any);
const AuthResetPasswordRoute = AuthResetPasswordRouteImport.update({
id: "/reset-password",
path: "/reset-password",
getParentRoute: () => AuthRouteRoute,
} as any);
const AuthResumePasswordRoute = AuthResumePasswordRouteImport.update({
id: "/resume-password",
path: "/resume-password",
getParentRoute: () => AuthRouteRoute,
} as any);
const AuthVerify2faRoute = AuthVerify2faRouteImport.update({
id: "/verify-2fa",
path: "/verify-2fa",
getParentRoute: () => AuthRouteRoute,
} as any);
const AuthVerify2faBackupRoute = AuthVerify2faBackupRouteImport.update({
id: "/verify-2fa-backup",
path: "/verify-2fa-backup",
getParentRoute: () => AuthRouteRoute,
} as any); } as any);
const BuilderResumeIdRouteRoute = BuilderResumeIdRouteRouteImport.update({ const BuilderResumeIdRouteRoute = BuilderResumeIdRouteRouteImport.update({
id: "/builder/$resumeId", id: "/builder/$resumeId",
path: "/builder/$resumeId", path: "/builder/$resumeId",
getParentRoute: () => rootRouteImport, getParentRoute: () => rootRouteImport,
} as any); } as any);
const DashboardResumesIndexRoute = DashboardResumesIndexRouteImport.update({ const DashboardIndexRoute = DashboardIndexRouteImport.update({
id: "/resumes/", id: "/",
path: "/resumes/", path: "/",
getParentRoute: () => DashboardRouteRoute, getParentRoute: () => DashboardRouteRoute,
} as any); } as any);
const TemplatesSplatRoute = TemplatesSplatRouteImport.update({
id: "/templates/$",
path: "/templates/$",
getParentRoute: () => rootRouteImport,
} as any);
const BuilderResumeIdIndexRoute = BuilderResumeIdIndexRouteImport.update({
id: "/",
path: "/",
getParentRoute: () => BuilderResumeIdRouteRoute,
} as any);
const DashboardApplicationsIndexRoute = const DashboardApplicationsIndexRoute =
DashboardApplicationsIndexRouteImport.update({ DashboardApplicationsIndexRouteImport.update({
id: "/applications/", id: "/applications/",
path: "/applications/", path: "/applications/",
getParentRoute: () => DashboardRouteRoute, getParentRoute: () => DashboardRouteRoute,
} as any); } as any);
const BuilderResumeIdIndexRoute = BuilderResumeIdIndexRouteImport.update({ const DashboardResumesIndexRoute = DashboardResumesIndexRouteImport.update({
id: "/", id: "/resumes/",
path: "/", path: "/resumes/",
getParentRoute: () => BuilderResumeIdRouteRoute, getParentRoute: () => DashboardRouteRoute,
} as any); } as any);
const DashboardSettingsProfileRoute = const DashboardSettingsApiKeysRoute =
DashboardSettingsProfileRouteImport.update({ DashboardSettingsApiKeysRouteImport.update({
id: "/settings/profile", id: "/settings/api-keys",
path: "/settings/profile", path: "/settings/api-keys",
getParentRoute: () => DashboardRouteRoute,
} as any);
const DashboardSettingsPreferencesRoute =
DashboardSettingsPreferencesRouteImport.update({
id: "/settings/preferences",
path: "/settings/preferences",
getParentRoute: () => DashboardRouteRoute,
} as any);
const DashboardSettingsJobSearchRoute =
DashboardSettingsJobSearchRouteImport.update({
id: "/settings/job-search",
path: "/settings/job-search",
getParentRoute: () => DashboardRouteRoute, getParentRoute: () => DashboardRouteRoute,
} as any); } as any);
const DashboardSettingsDangerZoneRoute = const DashboardSettingsDangerZoneRoute =
@@ -179,18 +167,30 @@ const DashboardSettingsDangerZoneRoute =
path: "/settings/danger-zone", path: "/settings/danger-zone",
getParentRoute: () => DashboardRouteRoute, getParentRoute: () => DashboardRouteRoute,
} as any); } as any);
const DashboardSettingsApiKeysRoute =
DashboardSettingsApiKeysRouteImport.update({
id: "/settings/api-keys",
path: "/settings/api-keys",
getParentRoute: () => DashboardRouteRoute,
} as any);
const DashboardSettingsIntegrationsRouteRoute = const DashboardSettingsIntegrationsRouteRoute =
DashboardSettingsIntegrationsRouteRouteImport.update({ DashboardSettingsIntegrationsRouteRouteImport.update({
id: "/settings/integrations", id: "/settings/integrations",
path: "/settings/integrations", path: "/settings/integrations",
getParentRoute: () => DashboardRouteRoute, getParentRoute: () => DashboardRouteRoute,
} as any); } as any);
const DashboardSettingsJobSearchRoute =
DashboardSettingsJobSearchRouteImport.update({
id: "/settings/job-search",
path: "/settings/job-search",
getParentRoute: () => DashboardRouteRoute,
} as any);
const DashboardSettingsPreferencesRoute =
DashboardSettingsPreferencesRouteImport.update({
id: "/settings/preferences",
path: "/settings/preferences",
getParentRoute: () => DashboardRouteRoute,
} as any);
const DashboardSettingsProfileRoute =
DashboardSettingsProfileRouteImport.update({
id: "/settings/profile",
path: "/settings/profile",
getParentRoute: () => DashboardRouteRoute,
} as any);
const DashboardSettingsAuthenticationIndexRoute = const DashboardSettingsAuthenticationIndexRoute =
DashboardSettingsAuthenticationIndexRouteImport.update({ DashboardSettingsAuthenticationIndexRouteImport.update({
id: "/settings/authentication/", id: "/settings/authentication/",
@@ -394,18 +394,11 @@ export interface RootRouteChildren {
declare module "@tanstack/react-router" { declare module "@tanstack/react-router" {
interface FileRoutesByPath { interface FileRoutesByPath {
"/dashboard": { "/_home": {
id: "/dashboard"; id: "/_home";
path: "/dashboard"; path: "";
fullPath: "/dashboard"; fullPath: "/";
preLoaderRoute: typeof DashboardRouteRouteImport; preLoaderRoute: typeof HomeRouteRouteImport;
parentRoute: typeof rootRouteImport;
};
"/auth": {
id: "/auth";
path: "/auth";
fullPath: "/auth";
preLoaderRoute: typeof AuthRouteRouteImport;
parentRoute: typeof rootRouteImport; parentRoute: typeof rootRouteImport;
}; };
"/agent": { "/agent": {
@@ -415,33 +408,26 @@ declare module "@tanstack/react-router" {
preLoaderRoute: typeof AgentRouteRouteImport; preLoaderRoute: typeof AgentRouteRouteImport;
parentRoute: typeof rootRouteImport; parentRoute: typeof rootRouteImport;
}; };
"/_home": { "/auth": {
id: "/_home"; id: "/auth";
path: ""; path: "/auth";
fullPath: "/"; fullPath: "/auth";
preLoaderRoute: typeof HomeRouteRouteImport; preLoaderRoute: typeof AuthRouteRouteImport;
parentRoute: typeof rootRouteImport; parentRoute: typeof rootRouteImport;
}; };
"/dashboard/": { "/dashboard": {
id: "/dashboard/"; id: "/dashboard";
path: "/"; path: "/dashboard";
fullPath: "/dashboard/"; fullPath: "/dashboard";
preLoaderRoute: typeof DashboardIndexRouteImport; preLoaderRoute: typeof DashboardRouteRouteImport;
parentRoute: typeof DashboardRouteRoute; parentRoute: typeof rootRouteImport;
}; };
"/auth/": { "/$username/$slug": {
id: "/auth/"; id: "/$username/$slug";
path: "/"; path: "/$username/$slug";
fullPath: "/auth/"; fullPath: "/$username/$slug";
preLoaderRoute: typeof AuthIndexRouteImport; preLoaderRoute: typeof UsernameSlugRouteImport;
parentRoute: typeof AuthRouteRoute; parentRoute: typeof rootRouteImport;
};
"/agent/": {
id: "/agent/";
path: "/";
fullPath: "/agent/";
preLoaderRoute: typeof AgentIndexRouteImport;
parentRoute: typeof AgentRouteRoute;
}; };
"/_home/": { "/_home/": {
id: "/_home/"; id: "/_home/";
@@ -450,67 +436,11 @@ declare module "@tanstack/react-router" {
preLoaderRoute: typeof HomeIndexRouteImport; preLoaderRoute: typeof HomeIndexRouteImport;
parentRoute: typeof HomeRouteRoute; parentRoute: typeof HomeRouteRoute;
}; };
"/templates/$": { "/agent/": {
id: "/templates/$"; id: "/agent/";
path: "/templates/$"; path: "/";
fullPath: "/templates/$"; fullPath: "/agent/";
preLoaderRoute: typeof TemplatesSplatRouteImport; preLoaderRoute: typeof AgentIndexRouteImport;
parentRoute: typeof rootRouteImport;
};
"/auth/verify-2fa-backup": {
id: "/auth/verify-2fa-backup";
path: "/verify-2fa-backup";
fullPath: "/auth/verify-2fa-backup";
preLoaderRoute: typeof AuthVerify2faBackupRouteImport;
parentRoute: typeof AuthRouteRoute;
};
"/auth/verify-2fa": {
id: "/auth/verify-2fa";
path: "/verify-2fa";
fullPath: "/auth/verify-2fa";
preLoaderRoute: typeof AuthVerify2faRouteImport;
parentRoute: typeof AuthRouteRoute;
};
"/auth/resume-password": {
id: "/auth/resume-password";
path: "/resume-password";
fullPath: "/auth/resume-password";
preLoaderRoute: typeof AuthResumePasswordRouteImport;
parentRoute: typeof AuthRouteRoute;
};
"/auth/reset-password": {
id: "/auth/reset-password";
path: "/reset-password";
fullPath: "/auth/reset-password";
preLoaderRoute: typeof AuthResetPasswordRouteImport;
parentRoute: typeof AuthRouteRoute;
};
"/auth/register": {
id: "/auth/register";
path: "/register";
fullPath: "/auth/register";
preLoaderRoute: typeof AuthRegisterRouteImport;
parentRoute: typeof AuthRouteRoute;
};
"/auth/login": {
id: "/auth/login";
path: "/login";
fullPath: "/auth/login";
preLoaderRoute: typeof AuthLoginRouteImport;
parentRoute: typeof AuthRouteRoute;
};
"/auth/forgot-password": {
id: "/auth/forgot-password";
path: "/forgot-password";
fullPath: "/auth/forgot-password";
preLoaderRoute: typeof AuthForgotPasswordRouteImport;
parentRoute: typeof AuthRouteRoute;
};
"/agent/new": {
id: "/agent/new";
path: "/new";
fullPath: "/agent/new";
preLoaderRoute: typeof AgentNewRouteImport;
parentRoute: typeof AgentRouteRoute; parentRoute: typeof AgentRouteRoute;
}; };
"/agent/$threadId": { "/agent/$threadId": {
@@ -520,12 +450,68 @@ declare module "@tanstack/react-router" {
preLoaderRoute: typeof AgentThreadIdRouteImport; preLoaderRoute: typeof AgentThreadIdRouteImport;
parentRoute: typeof AgentRouteRoute; parentRoute: typeof AgentRouteRoute;
}; };
"/$username/$slug": { "/agent/new": {
id: "/$username/$slug"; id: "/agent/new";
path: "/$username/$slug"; path: "/new";
fullPath: "/$username/$slug"; fullPath: "/agent/new";
preLoaderRoute: typeof UsernameSlugRouteImport; preLoaderRoute: typeof AgentNewRouteImport;
parentRoute: typeof rootRouteImport; parentRoute: typeof AgentRouteRoute;
};
"/auth/": {
id: "/auth/";
path: "/";
fullPath: "/auth/";
preLoaderRoute: typeof AuthIndexRouteImport;
parentRoute: typeof AuthRouteRoute;
};
"/auth/forgot-password": {
id: "/auth/forgot-password";
path: "/forgot-password";
fullPath: "/auth/forgot-password";
preLoaderRoute: typeof AuthForgotPasswordRouteImport;
parentRoute: typeof AuthRouteRoute;
};
"/auth/login": {
id: "/auth/login";
path: "/login";
fullPath: "/auth/login";
preLoaderRoute: typeof AuthLoginRouteImport;
parentRoute: typeof AuthRouteRoute;
};
"/auth/register": {
id: "/auth/register";
path: "/register";
fullPath: "/auth/register";
preLoaderRoute: typeof AuthRegisterRouteImport;
parentRoute: typeof AuthRouteRoute;
};
"/auth/reset-password": {
id: "/auth/reset-password";
path: "/reset-password";
fullPath: "/auth/reset-password";
preLoaderRoute: typeof AuthResetPasswordRouteImport;
parentRoute: typeof AuthRouteRoute;
};
"/auth/resume-password": {
id: "/auth/resume-password";
path: "/resume-password";
fullPath: "/auth/resume-password";
preLoaderRoute: typeof AuthResumePasswordRouteImport;
parentRoute: typeof AuthRouteRoute;
};
"/auth/verify-2fa": {
id: "/auth/verify-2fa";
path: "/verify-2fa";
fullPath: "/auth/verify-2fa";
preLoaderRoute: typeof AuthVerify2faRouteImport;
parentRoute: typeof AuthRouteRoute;
};
"/auth/verify-2fa-backup": {
id: "/auth/verify-2fa-backup";
path: "/verify-2fa-backup";
fullPath: "/auth/verify-2fa-backup";
preLoaderRoute: typeof AuthVerify2faBackupRouteImport;
parentRoute: typeof AuthRouteRoute;
}; };
"/builder/$resumeId": { "/builder/$resumeId": {
id: "/builder/$resumeId"; id: "/builder/$resumeId";
@@ -534,19 +520,19 @@ declare module "@tanstack/react-router" {
preLoaderRoute: typeof BuilderResumeIdRouteRouteImport; preLoaderRoute: typeof BuilderResumeIdRouteRouteImport;
parentRoute: typeof rootRouteImport; parentRoute: typeof rootRouteImport;
}; };
"/dashboard/resumes/": { "/dashboard/": {
id: "/dashboard/resumes/"; id: "/dashboard/";
path: "/resumes"; path: "/";
fullPath: "/dashboard/resumes/"; fullPath: "/dashboard/";
preLoaderRoute: typeof DashboardResumesIndexRouteImport; preLoaderRoute: typeof DashboardIndexRouteImport;
parentRoute: typeof DashboardRouteRoute; parentRoute: typeof DashboardRouteRoute;
}; };
"/dashboard/applications/": { "/templates/$": {
id: "/dashboard/applications/"; id: "/templates/$";
path: "/applications"; path: "/templates/$";
fullPath: "/dashboard/applications/"; fullPath: "/templates/$";
preLoaderRoute: typeof DashboardApplicationsIndexRouteImport; preLoaderRoute: typeof TemplatesSplatRouteImport;
parentRoute: typeof DashboardRouteRoute; parentRoute: typeof rootRouteImport;
}; };
"/builder/$resumeId/": { "/builder/$resumeId/": {
id: "/builder/$resumeId/"; id: "/builder/$resumeId/";
@@ -555,32 +541,18 @@ declare module "@tanstack/react-router" {
preLoaderRoute: typeof BuilderResumeIdIndexRouteImport; preLoaderRoute: typeof BuilderResumeIdIndexRouteImport;
parentRoute: typeof BuilderResumeIdRouteRoute; parentRoute: typeof BuilderResumeIdRouteRoute;
}; };
"/dashboard/settings/profile": { "/dashboard/applications/": {
id: "/dashboard/settings/profile"; id: "/dashboard/applications/";
path: "/settings/profile"; path: "/applications";
fullPath: "/dashboard/settings/profile"; fullPath: "/dashboard/applications/";
preLoaderRoute: typeof DashboardSettingsProfileRouteImport; preLoaderRoute: typeof DashboardApplicationsIndexRouteImport;
parentRoute: typeof DashboardRouteRoute; parentRoute: typeof DashboardRouteRoute;
}; };
"/dashboard/settings/preferences": { "/dashboard/resumes/": {
id: "/dashboard/settings/preferences"; id: "/dashboard/resumes/";
path: "/settings/preferences"; path: "/resumes";
fullPath: "/dashboard/settings/preferences"; fullPath: "/dashboard/resumes/";
preLoaderRoute: typeof DashboardSettingsPreferencesRouteImport; preLoaderRoute: typeof DashboardResumesIndexRouteImport;
parentRoute: typeof DashboardRouteRoute;
};
"/dashboard/settings/job-search": {
id: "/dashboard/settings/job-search";
path: "/settings/job-search";
fullPath: "/dashboard/settings/job-search";
preLoaderRoute: typeof DashboardSettingsJobSearchRouteImport;
parentRoute: typeof DashboardRouteRoute;
};
"/dashboard/settings/danger-zone": {
id: "/dashboard/settings/danger-zone";
path: "/settings/danger-zone";
fullPath: "/dashboard/settings/danger-zone";
preLoaderRoute: typeof DashboardSettingsDangerZoneRouteImport;
parentRoute: typeof DashboardRouteRoute; parentRoute: typeof DashboardRouteRoute;
}; };
"/dashboard/settings/api-keys": { "/dashboard/settings/api-keys": {
@@ -590,6 +562,13 @@ declare module "@tanstack/react-router" {
preLoaderRoute: typeof DashboardSettingsApiKeysRouteImport; preLoaderRoute: typeof DashboardSettingsApiKeysRouteImport;
parentRoute: typeof DashboardRouteRoute; parentRoute: typeof DashboardRouteRoute;
}; };
"/dashboard/settings/danger-zone": {
id: "/dashboard/settings/danger-zone";
path: "/settings/danger-zone";
fullPath: "/dashboard/settings/danger-zone";
preLoaderRoute: typeof DashboardSettingsDangerZoneRouteImport;
parentRoute: typeof DashboardRouteRoute;
};
"/dashboard/settings/integrations": { "/dashboard/settings/integrations": {
id: "/dashboard/settings/integrations"; id: "/dashboard/settings/integrations";
path: "/settings/integrations"; path: "/settings/integrations";
@@ -597,6 +576,27 @@ declare module "@tanstack/react-router" {
preLoaderRoute: typeof DashboardSettingsIntegrationsRouteRouteImport; preLoaderRoute: typeof DashboardSettingsIntegrationsRouteRouteImport;
parentRoute: typeof DashboardRouteRoute; parentRoute: typeof DashboardRouteRoute;
}; };
"/dashboard/settings/job-search": {
id: "/dashboard/settings/job-search";
path: "/settings/job-search";
fullPath: "/dashboard/settings/job-search";
preLoaderRoute: typeof DashboardSettingsJobSearchRouteImport;
parentRoute: typeof DashboardRouteRoute;
};
"/dashboard/settings/preferences": {
id: "/dashboard/settings/preferences";
path: "/settings/preferences";
fullPath: "/dashboard/settings/preferences";
preLoaderRoute: typeof DashboardSettingsPreferencesRouteImport;
parentRoute: typeof DashboardRouteRoute;
};
"/dashboard/settings/profile": {
id: "/dashboard/settings/profile";
path: "/settings/profile";
fullPath: "/dashboard/settings/profile";
preLoaderRoute: typeof DashboardSettingsProfileRouteImport;
parentRoute: typeof DashboardRouteRoute;
};
"/dashboard/settings/authentication/": { "/dashboard/settings/authentication/": {
id: "/dashboard/settings/authentication/"; id: "/dashboard/settings/authentication/";
path: "/settings/authentication"; path: "/settings/authentication";
+8 -8
View File
@@ -13,7 +13,7 @@
"type": "git", "type": "git",
"url": "https://github.com/amruthpillai/reactive-resume.git" "url": "https://github.com/amruthpillai/reactive-resume.git"
}, },
"packageManager": "pnpm@11.10.0", "packageManager": "pnpm@11.17.0+sha512.cca3cea332ad254bb84145f966d19f4879615210346fc92c79a047f23a0d7b3cca3c3792f0076ba1f1831d277efbcf0a9119b31a9a60eca7fb3d6231f331ef72",
"workspaces": [ "workspaces": [
"apps/*", "apps/*",
"packages/*", "packages/*",
@@ -41,25 +41,25 @@
"test:agent": "turbo run test:agent" "test:agent": "turbo run test:agent"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "^2.5.3", "@biomejs/biome": "^2.5.5",
"@commitlint/cli": "^21.2.1", "@commitlint/cli": "^21.2.1",
"@commitlint/config-conventional": "^21.2.0", "@commitlint/config-conventional": "^21.2.0",
"@playwright/test": "^1.61.1", "@playwright/test": "^1.62.0",
"@reactive-resume/config": "workspace:*", "@reactive-resume/config": "workspace:*",
"@testing-library/dom": "^10.4.1", "@testing-library/dom": "^10.4.1",
"@testing-library/jest-dom": "^6.9.1", "@testing-library/jest-dom": "^7.0.0",
"@testing-library/react": "^16.3.2", "@testing-library/react": "^16.3.2",
"@testing-library/user-event": "^14.6.1", "@testing-library/user-event": "^14.6.1",
"@types/node": "^26.1.1", "@types/node": "^26.1.1",
"@types/pg": "^8.20.0", "@types/pg": "^8.20.0",
"@vitest/coverage-v8": "^4.1.10", "@vitest/coverage-v8": "^4.1.10",
"github-actionlint": "1.7.12", "github-actionlint": "1.7.12",
"happy-dom": "^20.10.6", "happy-dom": "^20.11.1",
"knip": "^6.25.0", "knip": "^6.29.0",
"lefthook": "^2.1.10", "lefthook": "^2.1.10",
"markdownlint-cli2": "0.23.0", "markdownlint-cli2": "0.23.2",
"pg": "^8.22.0", "pg": "^8.22.0",
"turbo": "^2.10.4", "turbo": "^2.10.7",
"typescript": "^7.0.2", "typescript": "^7.0.2",
"vitest": "^4.1.10" "vitest": "^4.1.10"
} }
+21 -21
View File
@@ -18,23 +18,23 @@
"test:agent": "vitest run --reporter=agent --reporter=json --outputFile.json=reports/vitest-results.json --passWithNoTests" "test:agent": "vitest run --reporter=agent --reporter=json --outputFile.json=reports/vitest-results.json --passWithNoTests"
}, },
"dependencies": { "dependencies": {
"@ai-sdk/anthropic": "^4.0.10", "@ai-sdk/anthropic": "^4.0.21",
"@ai-sdk/cerebras": "^3.0.6", "@ai-sdk/cerebras": "^3.0.14",
"@ai-sdk/cohere": "^4.0.6", "@ai-sdk/cohere": "^4.0.12",
"@ai-sdk/deepseek": "^3.0.6", "@ai-sdk/deepseek": "^3.0.13",
"@ai-sdk/fireworks": "^3.0.7", "@ai-sdk/fireworks": "^3.0.15",
"@ai-sdk/google": "^4.0.10", "@ai-sdk/google": "^4.0.24",
"@ai-sdk/groq": "^4.0.6", "@ai-sdk/groq": "^4.0.13",
"@ai-sdk/mistral": "^4.0.7", "@ai-sdk/mistral": "^4.0.14",
"@ai-sdk/openai": "^4.0.9", "@ai-sdk/openai": "^4.0.20",
"@ai-sdk/openai-compatible": "^3.0.6", "@ai-sdk/openai-compatible": "^3.0.14",
"@ai-sdk/perplexity": "^4.0.7", "@ai-sdk/perplexity": "^4.0.13",
"@ai-sdk/togetherai": "^3.0.7", "@ai-sdk/togetherai": "^3.0.15",
"@ai-sdk/xai": "^4.0.9", "@ai-sdk/xai": "^4.0.18",
"@aws-sdk/client-s3": "^3.1081.0", "@aws-sdk/client-s3": "^3.1095.0",
"@orpc/client": "^1.14.7", "@orpc/client": "^1.14.10",
"@orpc/experimental-ratelimit": "^1.14.7", "@orpc/experimental-ratelimit": "^1.14.10",
"@orpc/server": "^1.14.7", "@orpc/server": "^1.14.10",
"@reactive-resume/ai": "workspace:*", "@reactive-resume/ai": "workspace:*",
"@reactive-resume/auth": "workspace:*", "@reactive-resume/auth": "workspace:*",
"@reactive-resume/db": "workspace:*", "@reactive-resume/db": "workspace:*",
@@ -43,15 +43,15 @@
"@reactive-resume/resume": "workspace:*", "@reactive-resume/resume": "workspace:*",
"@reactive-resume/schema": "workspace:*", "@reactive-resume/schema": "workspace:*",
"@reactive-resume/utils": "workspace:*", "@reactive-resume/utils": "workspace:*",
"ai": "^7.0.18", "ai": "^7.0.37",
"bcrypt": "^6.0.0", "bcrypt": "^6.0.0",
"better-auth": "1.6.23", "better-auth": "1.6.25",
"drizzle-orm": "1.0.0-rc.4", "drizzle-orm": "1.0.0-rc.4",
"drizzle-zod": "1.0.0-beta.14-a36c63d", "drizzle-zod": "1.0.0-beta.14-a36c63d",
"es-toolkit": "^1.49.0", "es-toolkit": "^1.50.0",
"ioredis": "^5.11.1", "ioredis": "^5.11.1",
"ollama-ai-provider-v2": "^4.0.1", "ollama-ai-provider-v2": "^4.0.1",
"react": "^19.2.7", "react": "^19.2.8",
"resumable-stream": "^2.2.12", "resumable-stream": "^2.2.12",
"sharp": "^0.35.3", "sharp": "^0.35.3",
"ts-pattern": "^5.9.0", "ts-pattern": "^5.9.0",
+14 -18
View File
@@ -52,14 +52,14 @@ describe("agent tools", () => {
expect(tools).not.toHaveProperty("web_search"); expect(tools).not.toHaveProperty("web_search");
}); });
it.each([ it.each(["https://api.openai.com/v1?proxy=1", "https://api.openai.com/v1#fragment"])(
"https://api.openai.com/v1?proxy=1", "does not add provider-native web search for OpenAI providers with non-exact base URL %s",
"https://api.openai.com/v1#fragment", (baseURL) => {
])("does not add provider-native web search for OpenAI providers with non-exact base URL %s", (baseURL) => { const tools = buildTools("openai", { baseURL });
const tools = buildTools("openai", { baseURL });
expect(tools).not.toHaveProperty("web_search"); expect(tools).not.toHaveProperty("web_search");
}); },
);
it("does not add provider-native web search for unsupported OpenAI models", () => { it("does not add provider-native web search for unsupported OpenAI models", () => {
const tools = buildTools("openai", { model: "custom-model" }); const tools = buildTools("openai", { model: "custom-model" });
@@ -67,18 +67,14 @@ describe("agent tools", () => {
expect(tools).not.toHaveProperty("web_search"); expect(tools).not.toHaveProperty("web_search");
}); });
it.each<AIProvider>([ it.each<AIProvider>(["anthropic", "gemini", "vercel-ai-gateway", "openrouter", "ollama", "openai-compatible"])(
"anthropic", "does not add provider-native web search for %s",
"gemini", (provider) => {
"vercel-ai-gateway", const tools = buildTools(provider);
"openrouter",
"ollama",
"openai-compatible",
])("does not add provider-native web search for %s", (provider) => {
const tools = buildTools(provider);
expect(tools).not.toHaveProperty("web_search"); expect(tools).not.toHaveProperty("web_search");
}); },
);
it("keeps instructions explicit about native search availability", () => { it("keeps instructions explicit about native search availability", () => {
expect(buildAgentInstructions({ hasProviderNativeSearch: true })).toContain("Use web_search"); expect(buildAgentInstructions({ hasProviderNativeSearch: true })).toContain("Use web_search");
+8 -8
View File
@@ -15,20 +15,20 @@
"test:agent": "vitest run --reporter=agent --reporter=json --outputFile.json=reports/vitest-results.json --passWithNoTests" "test:agent": "vitest run --reporter=agent --reporter=json --outputFile.json=reports/vitest-results.json --passWithNoTests"
}, },
"dependencies": { "dependencies": {
"@better-auth/api-key": "^1.6.23", "@better-auth/api-key": "^1.6.25",
"@better-auth/drizzle-adapter": "^1.6.23", "@better-auth/drizzle-adapter": "^1.6.25",
"@better-auth/infra": "^0.3.5", "@better-auth/infra": "^0.3.7",
"@better-auth/oauth-provider": "^1.6.23", "@better-auth/oauth-provider": "^1.6.25",
"@better-auth/passkey": "^1.6.23", "@better-auth/passkey": "^1.6.25",
"@reactive-resume/db": "workspace:*", "@reactive-resume/db": "workspace:*",
"@reactive-resume/email": "workspace:*", "@reactive-resume/email": "workspace:*",
"@reactive-resume/env": "workspace:*", "@reactive-resume/env": "workspace:*",
"@reactive-resume/utils": "workspace:*", "@reactive-resume/utils": "workspace:*",
"bcrypt": "^6.0.0", "bcrypt": "^6.0.0",
"better-auth": "1.6.23", "better-auth": "1.6.25",
"drizzle-orm": "1.0.0-rc.4", "drizzle-orm": "1.0.0-rc.4",
"jose": "^6.2.3", "jose": "^6.2.4",
"react": "^19.2.7" "react": "^19.2.8"
}, },
"devDependencies": { "devDependencies": {
"@reactive-resume/config": "workspace:*", "@reactive-resume/config": "workspace:*",
+3 -3
View File
@@ -18,11 +18,11 @@
"dependencies": { "dependencies": {
"@reactive-resume/env": "workspace:*", "@reactive-resume/env": "workspace:*",
"nodemailer": "^9.0.3", "nodemailer": "^9.0.3",
"react": "^19.2.7", "react": "^19.2.8",
"react-email": "^6.6.8" "react-email": "^6.9.1"
}, },
"devDependencies": { "devDependencies": {
"@react-email/ui": "^6.6.8", "@react-email/ui": "^6.9.1",
"@reactive-resume/config": "workspace:*", "@reactive-resume/config": "workspace:*",
"@types/nodemailer": "^8.0.1", "@types/nodemailer": "^8.0.1",
"@types/react": "^19.2.17", "@types/react": "^19.2.17",
+1 -1
View File
@@ -20,7 +20,7 @@
}, },
"dependencies": { "dependencies": {
"@modelcontextprotocol/sdk": "^1.29.0", "@modelcontextprotocol/sdk": "^1.29.0",
"@orpc/server": "^1.14.7", "@orpc/server": "^1.14.10",
"@reactive-resume/ai": "workspace:*", "@reactive-resume/ai": "workspace:*",
"@reactive-resume/api": "workspace:*", "@reactive-resume/api": "workspace:*",
"@reactive-resume/env": "workspace:*", "@reactive-resume/env": "workspace:*",
+1 -1
View File
@@ -27,7 +27,7 @@
"cjk-regex": "^3.4.0", "cjk-regex": "^3.4.0",
"node-html-parser": "^9.0.0", "node-html-parser": "^9.0.0",
"phosphor-icons-react-pdf": "^0.1.3", "phosphor-icons-react-pdf": "^0.1.3",
"react": "^19.2.7", "react": "^19.2.8",
"react-pdf-html": "^2.1.5" "react-pdf-html": "^2.1.5"
}, },
"devDependencies": { "devDependencies": {
@@ -27,21 +27,22 @@ describe("rich text template styles", () => {
expect(richListItemContentBlock?.groups?.body).not.toMatch(/\blineHeight:/); expect(richListItemContentBlock?.groups?.body).not.toMatch(/\blineHeight:/);
}); });
it.each( it.each(templatePageFiles.map((file) => [basename(file), file]))(
templatePageFiles.map((file) => [basename(file), file]), "%s keeps list item rich text on the global body line height",
)("%s keeps list item rich text on the global body line height", (_name, file) => { (_name, file) => {
const source = readFileSync(file, "utf8"); const source = readFileSync(file, "utf8");
if (source.includes("createBaseTemplateStyles")) { if (source.includes("createBaseTemplateStyles")) {
// Factory handles richListItemContent; guard is on the factory test above. // Factory handles richListItemContent; guard is on the factory test above.
expect(source).toContain("createBaseTemplateStyles"); expect(source).toContain("createBaseTemplateStyles");
return; return;
} }
// Legacy: template defines richListItemContent inline — no lineHeight override allowed. // Legacy: template defines richListItemContent inline — no lineHeight override allowed.
const richListItemContentBlock = source.match(/richListItemContent:\s*{(?<body>[\s\S]*?)^\s*},/m); const richListItemContentBlock = source.match(/richListItemContent:\s*{(?<body>[\s\S]*?)^\s*},/m);
expect(richListItemContentBlock?.groups?.body).toBeDefined(); expect(richListItemContentBlock?.groups?.body).toBeDefined();
expect(richListItemContentBlock?.groups?.body).toContain("...bodyText"); expect(richListItemContentBlock?.groups?.body).toContain("...bodyText");
expect(richListItemContentBlock?.groups?.body).not.toMatch(/\blineHeight:/); expect(richListItemContentBlock?.groups?.body).not.toMatch(/\blineHeight:/);
}); },
);
}); });
+8 -8
View File
@@ -19,7 +19,7 @@
}, },
"dependencies": { "dependencies": {
"@base-ui/react": "^1.6.0", "@base-ui/react": "^1.6.0",
"@fontsource-variable/ibm-plex-sans": "^5.2.8", "@fontsource-variable/ibm-plex-sans": "^5.3.0",
"@phosphor-icons/react": "^2.1.10", "@phosphor-icons/react": "^2.1.10",
"@phosphor-icons/web": "^2.1.2", "@phosphor-icons/web": "^2.1.2",
"@reactive-resume/utils": "workspace:*", "@reactive-resume/utils": "workspace:*",
@@ -27,22 +27,22 @@
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"cmdk": "^1.1.1", "cmdk": "^1.1.1",
"next-themes": "^0.4.6", "next-themes": "^0.4.6",
"react": "^19.2.7", "react": "^19.2.8",
"react-dom": "^19.2.7", "react-dom": "^19.2.8",
"react-resizable-panels": "^4.12.1", "react-resizable-panels": "^4.12.2",
"shadcn": "^4.13.0", "shadcn": "^4.15.0",
"sonner": "^2.0.7", "sonner": "^2.0.7",
"tw-animate-css": "^1.4.0" "tw-animate-css": "^1.4.0"
}, },
"devDependencies": { "devDependencies": {
"@reactive-resume/config": "workspace:*", "@reactive-resume/config": "workspace:*",
"@tailwindcss/postcss": "^4.3.2", "@tailwindcss/postcss": "^4.3.3",
"@tailwindcss/typography": "^0.5.20", "@tailwindcss/typography": "^0.5.20",
"@types/react": "^19.2.17", "@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3", "@types/react-dom": "^19.2.3",
"@typescript/native-preview": "7.0.0-dev.20260707.2", "@typescript/native-preview": "7.0.0-dev.20260707.2",
"postcss": "^8.5.16", "postcss": "^8.5.23",
"tailwindcss": "^4.3.2", "tailwindcss": "^4.3.3",
"typescript": "^7.0.2" "typescript": "^7.0.2"
} }
} }
+7 -9
View File
@@ -14,15 +14,13 @@ describe("Badge", () => {
expect(screen.getByText("x")).toHaveClass("my-extra"); expect(screen.getByText("x")).toHaveClass("my-extra");
}); });
it.each([ it.each([["default"], ["secondary"], ["destructive"], ["outline"]] as const)(
["default"], "renders variant=%s without throwing",
["secondary"], (variant) => {
["destructive"], render(<Badge variant={variant}>{variant}</Badge>);
["outline"], expect(screen.getByText(variant)).toBeInTheDocument();
] as const)("renders variant=%s without throwing", (variant) => { },
render(<Badge variant={variant}>{variant}</Badge>); );
expect(screen.getByText(variant)).toBeInTheDocument();
});
it("forwards aria attributes", () => { it("forwards aria attributes", () => {
render(<Badge aria-label="status indicator">3</Badge>); render(<Badge aria-label="status indicator">3</Badge>);
+14 -24
View File
@@ -52,31 +52,21 @@ describe("Button", () => {
expect(screen.getByRole("button")).toBeDisabled(); expect(screen.getByRole("button")).toBeDisabled();
}); });
it.each([ it.each([["default"], ["outline"], ["secondary"], ["ghost"], ["destructive"], ["link"]] as const)(
["default"], "renders variant=%s without throwing",
["outline"], (variant) => {
["secondary"], render(<Button variant={variant}>x</Button>);
["ghost"], expect(screen.getByRole("button")).toBeInTheDocument();
["destructive"], },
["link"], );
] as const)("renders variant=%s without throwing", (variant) => {
render(<Button variant={variant}>x</Button>);
expect(screen.getByRole("button")).toBeInTheDocument();
});
it.each([ it.each([["default"], ["xs"], ["sm"], ["lg"], ["icon"], ["icon-xs"], ["icon-sm"], ["icon-lg"]] as const)(
["default"], "renders size=%s without throwing",
["xs"], (size) => {
["sm"], render(<Button size={size}>x</Button>);
["lg"], expect(screen.getByRole("button")).toBeInTheDocument();
["icon"], },
["icon-xs"], );
["icon-sm"],
["icon-lg"],
] as const)("renders size=%s without throwing", (size) => {
render(<Button size={size}>x</Button>);
expect(screen.getByRole("button")).toBeInTheDocument();
});
it("forwards aria-label", () => { it("forwards aria-label", () => {
render(<Button aria-label="Close">×</Button>); render(<Button aria-label="Close">×</Button>);
+2387 -2050
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -15,6 +15,6 @@
"@typescript/native-preview": "7.0.0-dev.20260707.2", "@typescript/native-preview": "7.0.0-dev.20260707.2",
"drizzle-orm": "1.0.0-rc.4", "drizzle-orm": "1.0.0-rc.4",
"pg": "^8.22.0", "pg": "^8.22.0",
"tsx": "^4.23.0" "tsx": "^4.23.1"
} }
} }
+1 -1
View File
@@ -1,5 +1,5 @@
{ {
"$schema": "https://turbo.build/schema.json", "$schema": "https://v2-10-7.turborepo.dev/schema.json",
"ui": "stream", "ui": "stream",
"boundaries": { "boundaries": {
"dependencies": { "dependencies": {