diff --git a/waspc/ChangeLog.md b/waspc/ChangeLog.md index d4e0dac0e6..df0b925bd5 100644 --- a/waspc/ChangeLog.md +++ b/waspc/ChangeLog.md @@ -126,9 +126,9 @@ Follow the [the official migration guide](https://wasp.sh/docs/migration-guides/ #### Env variables validation with Zod -Wasp now uses Zod to validate environment variables, allowing it to fail faster if something is misconfigured. This means you’ll get more relevant error messages when running your app with incorrect env variables. +Wasp now uses Zod to validate environment variables, allowing it to fail faster if something is misconfigured. This means you'll get more relevant error messages when running your app with incorrect env variables. -You can also use Zod to validate your own environment variables. Here’s an example: +You can also use Zod to validate your own environment variables. Here's an example: ```ts // src/env.ts @@ -155,7 +155,7 @@ app myApp { ### Deployment docs upgrade -Based on feedback from our Discord community, we’ve revamped our deployment docs to make it simpler to deploy your app to production. We focused on explaining key deployment concepts, regardless of the deployment method you choose. We’ve added guides on hosting Wasp apps on your own servers, for example, how to use Coolify and Caprover for self-hosting. The Env Variables section now includes a comprehensive list of all available Wasp env variables and provides clearer instructions on how to set them up in a deployed app. +Based on feedback from our Discord community, we've revamped our deployment docs to make it simpler to deploy your app to production. We focused on explaining key deployment concepts, regardless of the deployment method you choose. We've added guides on hosting Wasp apps on your own servers, for example, how to use Coolify and Caprover for self-hosting. The Env Variables section now includes a comprehensive list of all available Wasp env variables and provides clearer instructions on how to set them up in a deployed app. Check the updated deployment docs here: https://wasp.sh/docs/deployment/intro @@ -956,8 +956,8 @@ Check below for details on each of them! ### ⚠️ Breaking changes -- Wasp's **signup action** `import signup from '@wasp/auth/signup` now accepts only the user entity fields relevant to the auth process (e.g. `username` and `password`). - This ensures no unexpected data can be inserted into the database during signup, but it also means you can't any more set any user entity fields via signup action (e.g. `age` or `address`). +- Wasp's **signup action** `import signup from '@wasp/auth/signup' now accepts only the user entity fields relevant to the auth process (e.g. `username`and`password`). +This ensures no unexpected data can be inserted into the database during signup, but it also means you can't any more set any user entity fields via signup action (e.g. `age`or`address`). Instead, those should be set in the separate step after signup, or via a custom signup action of your own. - Wasp now uses **React 18**! Check the following upgrade guide for details: https://react.dev/blog/2022/03/08/react-18-upgrade-guide . The most obvious difference you might notice is that your `useEffect` hooks run twice on component mount. @@ -1921,3 +1921,5 @@ For exact details about new syntax, check https://wasp.sh/docs/language/syntax . - and more! ## Unreleased changes + +- Wasp apps now expose Chrome DevTools Automatic Workspace Folders metadata in dev mode, so the browser automatically maps edited files to your real project directory. The Vite dev-server serves /.well-known/appspecific/com.chrome.devtools.json with per-project UUID caching and Windows/WSL/Docker path handling. diff --git a/waspc/data/Generator/templates/react-app/vite.config.ts b/waspc/data/Generator/templates/react-app/vite.config.ts index cc1b524ac2..d904843989 100644 --- a/waspc/data/Generator/templates/react-app/vite.config.ts +++ b/waspc/data/Generator/templates/react-app/vite.config.ts @@ -6,6 +6,7 @@ import { defaultExclude } from "vitest/config" import { detectServerImports } from "./vite/detectServerImports" import { validateEnv } from "./vite/validateEnv.js"; import path from "node:path" +import devtoolsJson from "vite-plugin-devtools-json"; {=# customViteConfig.isDefined =} // Ignoring the TS error because we are importing a file outside of TS root dir. @@ -23,6 +24,13 @@ const defaultViteConfig = { validateEnv(), react(), detectServerImports(), + devtoolsJson({ + // Relative path that resolves to the Wasp project root at runtime + // ("../../../" when evaluated from .wasp/out/web-app). + projectRoot: "{= projectDir =}", + // Keep UNC-path rewriting enabled (default) for WSL / Docker on Windows + normalizeForWindowsContainer: true, + }), ], optimizeDeps: { exclude: ['wasp'] diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums index b46f502f2a..ceec8a7ff3 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/.waspchecksums @@ -578,7 +578,7 @@ "file", "web-app/package.json" ], - "a4013f0a45e86a308859279ba4e5881818f90a2a7b09f3c06cb2a0c2b266bc39" + "3323d778f366504215bba989868bb0e0b62bbbe622ba416c0f6eedb77597c1d9" ], [ [ @@ -704,7 +704,7 @@ "file", "web-app/vite.config.ts" ], - "4978521ed6bc33f15d8ce08ec77f5f0e812bb5bbeb430e37bdc6d41625c72de1" + "3ed291bbae685706c48c92d6946d870e65a7cce86545a6327f7cafd9a03da580" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/installedNpmDepsLog.json b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/installedNpmDepsLog.json index d77d7458f3..fa9aa38ad7 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/installedNpmDepsLog.json +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/installedNpmDepsLog.json @@ -1 +1 @@ -{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~5.1.0"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^2.2.1"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"},{"name":"zod","version":"^3.23.8"}],"devDependencies":[{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"5.8.2"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"4.5.1"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"^16.0.2"},{"name":"express","version":"~5.1.0"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"superjson","version":"^2.2.1"}],"devDependencies":[{"name":"@rollup/plugin-node-resolve","version":"^16.0.0"},{"name":"@tsconfig/node20","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"},{"name":"@types/node","version":"^20.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"}]}}} \ No newline at end of file +{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~5.1.0"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^2.2.1"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"},{"name":"zod","version":"^3.23.8"}],"devDependencies":[{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"5.8.2"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"4.5.1"},{"name":"vite-plugin-devtools-json","version":"^0.3.0"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"^16.0.2"},{"name":"express","version":"~5.1.0"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"superjson","version":"^2.2.1"}],"devDependencies":[{"name":"@rollup/plugin-node-resolve","version":"^16.0.0"},{"name":"@tsconfig/node20","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"},{"name":"@types/node","version":"^20.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"}]}}} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/package.json b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/package.json index 0360f3cbb3..3050cd4047 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/package.json +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/package.json @@ -18,7 +18,8 @@ "devDependencies": { "@tsconfig/vite-react": "^2.0.0", "@types/react-dom": "^18.0.11", - "@vitejs/plugin-react": "4.5.1" + "@vitejs/plugin-react": "4.5.1", + "vite-plugin-devtools-json": "^0.3.0" }, "engineStrict": true, "engines": { diff --git a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/vite.config.ts b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/vite.config.ts index d5169f7d34..31c340e76f 100644 --- a/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/vite.config.ts +++ b/waspc/e2e-test/test-outputs/waspBuild-golden/waspBuild/.wasp/build/web-app/vite.config.ts @@ -5,6 +5,7 @@ import { defaultExclude } from "vitest/config" import { detectServerImports } from "./vite/detectServerImports" import { validateEnv } from "./vite/validateEnv.js"; import path from "node:path" +import devtoolsJson from "vite-plugin-devtools-json"; // Ignoring the TS error because we are importing a file outside of TS root dir. // @ts-ignore @@ -17,6 +18,13 @@ const defaultViteConfig = { validateEnv(), react(), detectServerImports(), + devtoolsJson({ + // Relative path that resolves to the Wasp project root at runtime + // ("../../../" when evaluated from .wasp/out/web-app). + projectRoot: "../../../", + // Keep UNC-path rewriting enabled (default) for WSL / Docker on Windows + normalizeForWindowsContainer: true, + }), ], optimizeDeps: { exclude: ['wasp'] diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums index d5441f53c6..b02fcfaf0f 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/.waspchecksums @@ -592,7 +592,7 @@ "file", "web-app/package.json" ], - "f276211a2e31df7afcefc31b7e9e439c95e11b8d02c32fcb031dae1e921841fb" + "07bb69c5d91b1340fd04c81f9bed4d541560fdcad6145c39ba6c02cf63c345f2" ], [ [ @@ -718,7 +718,7 @@ "file", "web-app/vite.config.ts" ], - "4978521ed6bc33f15d8ce08ec77f5f0e812bb5bbeb430e37bdc6d41625c72de1" + "3ed291bbae685706c48c92d6946d870e65a7cce86545a6327f7cafd9a03da580" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/installedNpmDepsLog.json b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/installedNpmDepsLog.json index d77d7458f3..fa9aa38ad7 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/installedNpmDepsLog.json +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/installedNpmDepsLog.json @@ -1 +1 @@ -{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~5.1.0"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^2.2.1"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"},{"name":"zod","version":"^3.23.8"}],"devDependencies":[{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"5.8.2"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"4.5.1"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"^16.0.2"},{"name":"express","version":"~5.1.0"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"superjson","version":"^2.2.1"}],"devDependencies":[{"name":"@rollup/plugin-node-resolve","version":"^16.0.0"},{"name":"@tsconfig/node20","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"},{"name":"@types/node","version":"^20.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"}]}}} \ No newline at end of file +{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~5.1.0"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^2.2.1"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"},{"name":"zod","version":"^3.23.8"}],"devDependencies":[{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"5.8.2"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"4.5.1"},{"name":"vite-plugin-devtools-json","version":"^0.3.0"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"^16.0.2"},{"name":"express","version":"~5.1.0"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"superjson","version":"^2.2.1"}],"devDependencies":[{"name":"@rollup/plugin-node-resolve","version":"^16.0.0"},{"name":"@tsconfig/node20","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"},{"name":"@types/node","version":"^20.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"}]}}} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/package.json b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/package.json index 799e66d385..ee72db2d5c 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/package.json +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/package.json @@ -18,7 +18,8 @@ "devDependencies": { "@tsconfig/vite-react": "^2.0.0", "@types/react-dom": "^18.0.11", - "@vitejs/plugin-react": "4.5.1" + "@vitejs/plugin-react": "4.5.1", + "vite-plugin-devtools-json": "^0.3.0" }, "engineStrict": true, "engines": { diff --git a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/vite.config.ts b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/vite.config.ts index d5169f7d34..31c340e76f 100644 --- a/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/vite.config.ts +++ b/waspc/e2e-test/test-outputs/waspCompile-golden/waspCompile/.wasp/out/web-app/vite.config.ts @@ -5,6 +5,7 @@ import { defaultExclude } from "vitest/config" import { detectServerImports } from "./vite/detectServerImports" import { validateEnv } from "./vite/validateEnv.js"; import path from "node:path" +import devtoolsJson from "vite-plugin-devtools-json"; // Ignoring the TS error because we are importing a file outside of TS root dir. // @ts-ignore @@ -17,6 +18,13 @@ const defaultViteConfig = { validateEnv(), react(), detectServerImports(), + devtoolsJson({ + // Relative path that resolves to the Wasp project root at runtime + // ("../../../" when evaluated from .wasp/out/web-app). + projectRoot: "../../../", + // Keep UNC-path rewriting enabled (default) for WSL / Docker on Windows + normalizeForWindowsContainer: true, + }), ], optimizeDeps: { exclude: ['wasp'] diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums index f0cdcdb97e..7894a07103 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/.waspchecksums @@ -1229,7 +1229,7 @@ "file", "web-app/package.json" ], - "16d5d7a468e045233ff065edf6660f856009df2dab17485f39ee0c7b7c881df0" + "31df33dc9aa5d47e293fcf1edb63c776b14ae8d7e08b36d79abd166f316e224b" ], [ [ @@ -1369,7 +1369,7 @@ "file", "web-app/vite.config.ts" ], - "4978521ed6bc33f15d8ce08ec77f5f0e812bb5bbeb430e37bdc6d41625c72de1" + "3ed291bbae685706c48c92d6946d870e65a7cce86545a6327f7cafd9a03da580" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/installedNpmDepsLog.json b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/installedNpmDepsLog.json index 0fc6ace20b..2ea731727d 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/installedNpmDepsLog.json +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/installedNpmDepsLog.json @@ -1 +1 @@ -{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~5.1.0"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^2.2.1"},{"name":"@stitches/react","version":"^1.2.8"},{"name":"@node-rs/argon2","version":"^1.8.3"},{"name":"arctic","version":"^1.2.1"},{"name":"lucia","version":"^3.0.1"},{"name":"oslo","version":"^1.1.2"},{"name":"@lucia-auth/adapter-prisma","version":"^4.0.0"},{"name":"@sendgrid/mail","version":"^7.7.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"},{"name":"pg-boss","version":"^8.4.2"},{"name":"zod","version":"^3.23.8"}],"devDependencies":[{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"5.8.2"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"4.5.1"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"^16.0.2"},{"name":"express","version":"~5.1.0"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"superjson","version":"^2.2.1"}],"devDependencies":[{"name":"@rollup/plugin-node-resolve","version":"^16.0.0"},{"name":"@tsconfig/node20","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"},{"name":"@types/node","version":"^20.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"}]}}} \ No newline at end of file +{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~5.1.0"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^2.2.1"},{"name":"@stitches/react","version":"^1.2.8"},{"name":"@node-rs/argon2","version":"^1.8.3"},{"name":"arctic","version":"^1.2.1"},{"name":"lucia","version":"^3.0.1"},{"name":"oslo","version":"^1.1.2"},{"name":"@lucia-auth/adapter-prisma","version":"^4.0.0"},{"name":"@sendgrid/mail","version":"^7.7.0"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"},{"name":"pg-boss","version":"^8.4.2"},{"name":"zod","version":"^3.23.8"}],"devDependencies":[{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"5.8.2"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"4.5.1"},{"name":"vite-plugin-devtools-json","version":"^0.3.0"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"^16.0.2"},{"name":"express","version":"~5.1.0"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"superjson","version":"^2.2.1"}],"devDependencies":[{"name":"@rollup/plugin-node-resolve","version":"^16.0.0"},{"name":"@tsconfig/node20","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"},{"name":"@types/node","version":"^20.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"}]}}} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/package.json b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/package.json index 4ad5de71bf..1777e0665a 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/package.json +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/package.json @@ -18,7 +18,8 @@ "devDependencies": { "@tsconfig/vite-react": "^2.0.0", "@types/react-dom": "^18.0.11", - "@vitejs/plugin-react": "4.5.1" + "@vitejs/plugin-react": "4.5.1", + "vite-plugin-devtools-json": "^0.3.0" }, "engineStrict": true, "engines": { diff --git a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/vite.config.ts b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/vite.config.ts index d5169f7d34..31c340e76f 100644 --- a/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/vite.config.ts +++ b/waspc/e2e-test/test-outputs/waspComplexTest-golden/waspComplexTest/.wasp/out/web-app/vite.config.ts @@ -5,6 +5,7 @@ import { defaultExclude } from "vitest/config" import { detectServerImports } from "./vite/detectServerImports" import { validateEnv } from "./vite/validateEnv.js"; import path from "node:path" +import devtoolsJson from "vite-plugin-devtools-json"; // Ignoring the TS error because we are importing a file outside of TS root dir. // @ts-ignore @@ -17,6 +18,13 @@ const defaultViteConfig = { validateEnv(), react(), detectServerImports(), + devtoolsJson({ + // Relative path that resolves to the Wasp project root at runtime + // ("../../../" when evaluated from .wasp/out/web-app). + projectRoot: "../../../", + // Keep UNC-path rewriting enabled (default) for WSL / Docker on Windows + normalizeForWindowsContainer: true, + }), ], optimizeDeps: { exclude: ['wasp'] diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums index 0cc82ce936..b178cfd234 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/.waspchecksums @@ -690,7 +690,7 @@ "file", "web-app/package.json" ], - "5f82c47c99523900b638bde2706d1ce09fb9351ae9269f50761a753c1f43a31f" + "975508bb2b2bf49fc44d5e91de626563468891e3c01d123274d2aff53f099f83" ], [ [ @@ -816,7 +816,7 @@ "file", "web-app/vite.config.ts" ], - "4978521ed6bc33f15d8ce08ec77f5f0e812bb5bbeb430e37bdc6d41625c72de1" + "3ed291bbae685706c48c92d6946d870e65a7cce86545a6327f7cafd9a03da580" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/installedNpmDepsLog.json b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/installedNpmDepsLog.json index d18c72ca1c..90dd5e61c6 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/installedNpmDepsLog.json +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/installedNpmDepsLog.json @@ -1 +1 @@ -{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~5.1.0"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^2.2.1"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"},{"name":"pg-boss","version":"^8.4.2"},{"name":"zod","version":"^3.23.8"}],"devDependencies":[{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"5.8.2"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"4.5.1"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"^16.0.2"},{"name":"express","version":"~5.1.0"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"superjson","version":"^2.2.1"}],"devDependencies":[{"name":"@rollup/plugin-node-resolve","version":"^16.0.0"},{"name":"@tsconfig/node20","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"},{"name":"@types/node","version":"^20.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"}]}}} \ No newline at end of file +{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~5.1.0"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^2.2.1"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"},{"name":"pg-boss","version":"^8.4.2"},{"name":"zod","version":"^3.23.8"}],"devDependencies":[{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"5.8.2"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"4.5.1"},{"name":"vite-plugin-devtools-json","version":"^0.3.0"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"^16.0.2"},{"name":"express","version":"~5.1.0"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"superjson","version":"^2.2.1"}],"devDependencies":[{"name":"@rollup/plugin-node-resolve","version":"^16.0.0"},{"name":"@tsconfig/node20","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"},{"name":"@types/node","version":"^20.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"}]}}} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/package.json b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/package.json index ac7aa6c360..59cecbc004 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/package.json +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/package.json @@ -18,7 +18,8 @@ "devDependencies": { "@tsconfig/vite-react": "^2.0.0", "@types/react-dom": "^18.0.11", - "@vitejs/plugin-react": "4.5.1" + "@vitejs/plugin-react": "4.5.1", + "vite-plugin-devtools-json": "^0.3.0" }, "engineStrict": true, "engines": { diff --git a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/vite.config.ts b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/vite.config.ts index d5169f7d34..31c340e76f 100644 --- a/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/vite.config.ts +++ b/waspc/e2e-test/test-outputs/waspJob-golden/waspJob/.wasp/out/web-app/vite.config.ts @@ -5,6 +5,7 @@ import { defaultExclude } from "vitest/config" import { detectServerImports } from "./vite/detectServerImports" import { validateEnv } from "./vite/validateEnv.js"; import path from "node:path" +import devtoolsJson from "vite-plugin-devtools-json"; // Ignoring the TS error because we are importing a file outside of TS root dir. // @ts-ignore @@ -17,6 +18,13 @@ const defaultViteConfig = { validateEnv(), react(), detectServerImports(), + devtoolsJson({ + // Relative path that resolves to the Wasp project root at runtime + // ("../../../" when evaluated from .wasp/out/web-app). + projectRoot: "../../../", + // Keep UNC-path rewriting enabled (default) for WSL / Docker on Windows + normalizeForWindowsContainer: true, + }), ], optimizeDeps: { exclude: ['wasp'] diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums index db69fc37e3..d89e75d5e8 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/.waspchecksums @@ -599,7 +599,7 @@ "file", "web-app/package.json" ], - "9d0609be5a87344c50c95d5e2f9b49b13285e281042734f071a498896486f549" + "0ebe2f5bb7be0a87e7879002e6ed46357caaaaff8e35d3e7935559e297833e37" ], [ [ @@ -725,7 +725,7 @@ "file", "web-app/vite.config.ts" ], - "4978521ed6bc33f15d8ce08ec77f5f0e812bb5bbeb430e37bdc6d41625c72de1" + "3ed291bbae685706c48c92d6946d870e65a7cce86545a6327f7cafd9a03da580" ], [ [ diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/installedNpmDepsLog.json b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/installedNpmDepsLog.json index d77d7458f3..fa9aa38ad7 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/installedNpmDepsLog.json +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/installedNpmDepsLog.json @@ -1 +1 @@ -{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~5.1.0"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^2.2.1"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"},{"name":"zod","version":"^3.23.8"}],"devDependencies":[{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"5.8.2"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"4.5.1"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"^16.0.2"},{"name":"express","version":"~5.1.0"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"superjson","version":"^2.2.1"}],"devDependencies":[{"name":"@rollup/plugin-node-resolve","version":"^16.0.0"},{"name":"@tsconfig/node20","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"},{"name":"@types/node","version":"^20.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"}]}}} \ No newline at end of file +{"_waspSdkNpmDeps":{"dependencies":[{"name":"@prisma/client","version":"5.19.1"},{"name":"prisma","version":"5.19.1"},{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"},{"name":"express","version":"~5.1.0"},{"name":"mitt","version":"3.0.0"},{"name":"react","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"react-hook-form","version":"^7.45.4"},{"name":"superjson","version":"^2.2.1"},{"name":"vitest","version":"^1.2.1"},{"name":"@vitest/ui","version":"^1.2.1"},{"name":"jsdom","version":"^21.1.1"},{"name":"@testing-library/react","version":"^14.1.2"},{"name":"@testing-library/jest-dom","version":"^6.3.0"},{"name":"msw","version":"^1.1.0"},{"name":"zod","version":"^3.23.8"}],"devDependencies":[{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"}]},"_userNpmDeps":{"userDependencies":[{"name":"react","version":"^18.2.0"},{"name":"react-dom","version":"^18.2.0"},{"name":"react-router-dom","version":"^6.26.2"},{"name":"wasp","version":"file:.wasp/out/sdk/wasp"}],"userDevDependencies":[{"name":"@types/react","version":"^18.0.37"},{"name":"prisma","version":"5.19.1"},{"name":"typescript","version":"5.8.2"},{"name":"vite","version":"^4.3.9"}]},"_waspFrameworkNpmDeps":{"npmDepsForWebApp":{"dependencies":[{"name":"@tanstack/react-query","version":"4.36.1"},{"name":"axios","version":"^1.4.0"}],"devDependencies":[{"name":"@tsconfig/vite-react","version":"^2.0.0"},{"name":"@types/react-dom","version":"^18.0.11"},{"name":"@vitejs/plugin-react","version":"4.5.1"},{"name":"vite-plugin-devtools-json","version":"^0.3.0"}]},"npmDepsForServer":{"dependencies":[{"name":"cookie-parser","version":"~1.4.6"},{"name":"cors","version":"^2.8.5"},{"name":"dotenv","version":"^16.0.2"},{"name":"express","version":"~5.1.0"},{"name":"helmet","version":"^6.0.0"},{"name":"morgan","version":"~1.10.0"},{"name":"superjson","version":"^2.2.1"}],"devDependencies":[{"name":"@rollup/plugin-node-resolve","version":"^16.0.0"},{"name":"@tsconfig/node20","version":"latest"},{"name":"@types/cors","version":"^2.8.5"},{"name":"@types/express","version":"^5.0.0"},{"name":"@types/express-serve-static-core","version":"^5.0.0"},{"name":"@types/node","version":"^20.0.0"},{"name":"nodemon","version":"^2.0.19"},{"name":"rollup","version":"^4.9.6"},{"name":"rollup-plugin-esbuild","version":"^6.1.1"}]}}} \ No newline at end of file diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/package.json b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/package.json index 40d7c58b1e..29872ddb22 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/package.json +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/package.json @@ -18,7 +18,8 @@ "devDependencies": { "@tsconfig/vite-react": "^2.0.0", "@types/react-dom": "^18.0.11", - "@vitejs/plugin-react": "4.5.1" + "@vitejs/plugin-react": "4.5.1", + "vite-plugin-devtools-json": "^0.3.0" }, "engineStrict": true, "engines": { diff --git a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/vite.config.ts b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/vite.config.ts index d5169f7d34..31c340e76f 100644 --- a/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/vite.config.ts +++ b/waspc/e2e-test/test-outputs/waspMigrate-golden/waspMigrate/.wasp/out/web-app/vite.config.ts @@ -5,6 +5,7 @@ import { defaultExclude } from "vitest/config" import { detectServerImports } from "./vite/detectServerImports" import { validateEnv } from "./vite/validateEnv.js"; import path from "node:path" +import devtoolsJson from "vite-plugin-devtools-json"; // Ignoring the TS error because we are importing a file outside of TS root dir. // @ts-ignore @@ -17,6 +18,13 @@ const defaultViteConfig = { validateEnv(), react(), detectServerImports(), + devtoolsJson({ + // Relative path that resolves to the Wasp project root at runtime + // ("../../../" when evaluated from .wasp/out/web-app). + projectRoot: "../../../", + // Keep UNC-path rewriting enabled (default) for WSL / Docker on Windows + normalizeForWindowsContainer: true, + }), ], optimizeDeps: { exclude: ['wasp'] diff --git a/waspc/src/Wasp/Generator/WebAppGenerator.hs b/waspc/src/Wasp/Generator/WebAppGenerator.hs index 9ed9140db0..dd9e52b9ec 100644 --- a/waspc/src/Wasp/Generator/WebAppGenerator.hs +++ b/waspc/src/Wasp/Generator/WebAppGenerator.hs @@ -158,6 +158,8 @@ npmDepsForWasp _spec = -- Core issue: https://github.com/wasp-lang/wasp/issues/2726 -- Long term fix: https://github.com/wasp-lang/wasp/issues/1838 ("@vitejs/plugin-react", "4.5.1"), + -- Provides Chrome DevTools workspace mapping via official plugin. + ("vite-plugin-devtools-json", "^0.3.0"), -- NOTE: Make sure to bump the version of the tsconfig -- when updating Vite or React versions ("@tsconfig/vite-react", "^2.0.0") diff --git a/waspc/src/Wasp/Generator/WebAppGenerator/Start.hs b/waspc/src/Wasp/Generator/WebAppGenerator/Start.hs index 6bd126f6b3..0c1cdf0555 100644 --- a/waspc/src/Wasp/Generator/WebAppGenerator/Start.hs +++ b/waspc/src/Wasp/Generator/WebAppGenerator/Start.hs @@ -12,4 +12,10 @@ import Wasp.Job.Process (runNodeCommandAsJob) startWebApp :: Path' Abs (Dir ProjectRootDir) -> J.Job startWebApp projectDir = do let webAppDir = projectDir Common.webAppRootDirInProjectRootDir + -- We previously passed the absolute project root via the WASP_PROJECT_ROOT + -- environment variable so the vendored DevToolsJson Vite plugin could + -- resolve the correct path at runtime. That plugin has now been replaced + -- by the upstream `vite-plugin-devtools-json`, and the project root is + -- injected directly into `vite.config.ts` during code-generation, so the + -- extra environment variable is no longer required. runNodeCommandAsJob webAppDir "npm" ["start"] J.WebApp diff --git a/waspc/src/Wasp/Generator/WebAppGenerator/Vite/VitePlugin.hs b/waspc/src/Wasp/Generator/WebAppGenerator/Vite/VitePlugin.hs index 62a0fc0b52..46894cc43b 100644 --- a/waspc/src/Wasp/Generator/WebAppGenerator/Vite/VitePlugin.hs +++ b/waspc/src/Wasp/Generator/WebAppGenerator/Vite/VitePlugin.hs @@ -32,7 +32,9 @@ vitePlugins = (\name -> (name, getTmplFilePathForVitePlugin name)) vitePluginNames where - vitePluginNames = [minBound .. maxBound] + -- We intentionally exclude the legacy `DevToolsJson` plugin now that + -- Wasp relies on the upstream `vite-plugin-devtools-json` npm package. + vitePluginNames = [DetectServerImports, ValidateEnv] data WebAppVitePluginsDir