diff --git a/waspc/data/Generator/templates/react-app/plugins/validateEnv.ts b/waspc/data/Generator/templates/react-app/plugins/validateEnv.ts new file mode 100644 index 0000000000..6c13d96c48 --- /dev/null +++ b/waspc/data/Generator/templates/react-app/plugins/validateEnv.ts @@ -0,0 +1,14 @@ +import { type Plugin, loadEnv } from "vite"; + +import { ensureEnvSchema } from 'wasp/env' +import { clientEnvSchema } from 'wasp/client/env/schema' + +export function validateEnv(): Plugin { + return { + name: 'wasp-validate-env', + config: (config) => { + const env = loadEnv(config.mode, process.cwd(), config.envPrefix) + ensureEnvSchema(env, clientEnvSchema) + }, + }; +} diff --git a/waspc/data/Generator/templates/react-app/tsconfig.node.json b/waspc/data/Generator/templates/react-app/tsconfig.node.json index d90bb30d80..3b1dd9cea2 100644 --- a/waspc/data/Generator/templates/react-app/tsconfig.node.json +++ b/waspc/data/Generator/templates/react-app/tsconfig.node.json @@ -6,5 +6,5 @@ "moduleResolution": "bundler", "allowSyntheticDefaultImports": true }, - "include": ["vite.config.ts", "./src/ext-src/vite.config.ts"] + "include": ["vite.config.ts", "./src/ext-src/vite.config.ts", "./plugins/"] } diff --git a/waspc/data/Generator/templates/react-app/vite.config.ts b/waspc/data/Generator/templates/react-app/vite.config.ts index db6b6453db..3434be3077 100644 --- a/waspc/data/Generator/templates/react-app/vite.config.ts +++ b/waspc/data/Generator/templates/react-app/vite.config.ts @@ -1,11 +1,10 @@ {{={= =}=}} /// -import { mergeConfig, type Plugin, loadEnv } from "vite"; +import { mergeConfig } from "vite"; import react from "@vitejs/plugin-react"; import { defaultExclude } from "vitest/config" -import { ensureEnvSchema } from 'wasp/dev' -import { clientEnvSchema } from 'wasp/client/env/schema' +import { validateEnv } from "./plugins/validateEnv.js"; {=# customViteConfig.isDefined =} // Ignoring the TS error because we are importing a file outside of TS root dir. @@ -20,8 +19,8 @@ const _waspUserProvidedConfig = {}; const defaultViteConfig = { base: "{= baseDir =}", plugins: [ - react(), validateEnv(), + react(), ], optimizeDeps: { exclude: ['wasp'] @@ -59,13 +58,3 @@ export default mergeConfig( defaultViteConfig, _waspUserProvidedConfig ); - -function validateEnv(): Plugin { - return { - name: 'wasp-validate-env', - config: (config) => { - const env = loadEnv(config.mode, process.cwd(), config.envPrefix) - ensureEnvSchema(env, clientEnvSchema) - }, - }; -} diff --git a/waspc/data/Generator/templates/sdk/wasp/client/env/schema.ts b/waspc/data/Generator/templates/sdk/wasp/client/env/schema.ts index 71ecc87f0f..29ab2d679d 100644 --- a/waspc/data/Generator/templates/sdk/wasp/client/env/schema.ts +++ b/waspc/data/Generator/templates/sdk/wasp/client/env/schema.ts @@ -1,7 +1,7 @@ {{={= =}=}} import * as z from 'zod' -// PRIVATE API (SDK, Vite config) +// PRIVATE API (sdk, Vite config) export const clientEnvSchema = z.object({ REACT_APP_API_URL: z .string() diff --git a/waspc/data/Generator/templates/sdk/wasp/dev/index.ts b/waspc/data/Generator/templates/sdk/wasp/dev/index.ts index bccbfb2adb..e9bd93f7da 100644 --- a/waspc/data/Generator/templates/sdk/wasp/dev/index.ts +++ b/waspc/data/Generator/templates/sdk/wasp/dev/index.ts @@ -15,5 +15,3 @@ import { join as joinPaths } from 'path' export function resolveProjectPath(path: string): string { return joinPaths('../../../', path) } - -export { ensureEnvSchema } from '../env/index.js' diff --git a/waspc/data/Generator/templates/sdk/wasp/env/index.ts b/waspc/data/Generator/templates/sdk/wasp/env/index.ts index 9d81bd80bf..92402b11dd 100644 --- a/waspc/data/Generator/templates/sdk/wasp/env/index.ts +++ b/waspc/data/Generator/templates/sdk/wasp/env/index.ts @@ -2,6 +2,7 @@ import * as z from 'zod' const redColor = '\x1b[31m' +// PRIVATE API (SDK, Vite config) export function ensureEnvSchema( data: unknown, schema: Schema diff --git a/waspc/data/Generator/templates/sdk/wasp/package.json b/waspc/data/Generator/templates/sdk/wasp/package.json index 9155ef49fa..84e2be6777 100644 --- a/waspc/data/Generator/templates/sdk/wasp/package.json +++ b/waspc/data/Generator/templates/sdk/wasp/package.json @@ -109,6 +109,7 @@ "./client/test": "./dist/client/test/index.js", "./client": "./dist/client/index.js", "./client/env/schema": "./dist/client/env/schema.js", + "./env": "./dist/env/index.js", "./dev": "./dist/dev/index.js", {=! todo(filip): Fixes below are for type errors in 0.13.1, remove ASAP =} diff --git a/waspc/src/Wasp/Generator/WebAppGenerator.hs b/waspc/src/Wasp/Generator/WebAppGenerator.hs index 2f896c4f4c..95410c1385 100644 --- a/waspc/src/Wasp/Generator/WebAppGenerator.hs +++ b/waspc/src/Wasp/Generator/WebAppGenerator.hs @@ -71,6 +71,8 @@ genWebApp spec = do genNpmrc, genGitignore, genIndexHtml spec, + -- Vite plugins + genFileCopy [relfile|plugins/validateEnv.ts|], genViteConfig spec ] <++> genSrcDir spec