|
@ -1,39 +1,40 @@ |
|
|
import { defineConfig, UserConfig, Plugin } from "vite"; |
|
|
import { defineConfig, UserConfig } from "vite"; |
|
|
import vue from "@vitejs/plugin-vue"; |
|
|
import vue from "@vitejs/plugin-vue"; |
|
|
import dotenv from "dotenv"; |
|
|
import dotenv from "dotenv"; |
|
|
import { loadAppConfig } from "./vite.config.common-utils.mts"; |
|
|
import { loadAppConfig } from "./vite.config.common-utils.mts"; |
|
|
import path from "path"; |
|
|
import path from "path"; |
|
|
import { fileURLToPath } from 'url'; |
|
|
import { fileURLToPath } from 'url'; |
|
|
|
|
|
import { NodeEnv, BuildEnv, BuildPlatform } from "./src/interfaces/build.ts"; |
|
|
export type BuildMode = 'web' | 'electron' | 'capacitor' | 'pywebview'; |
|
|
|
|
|
export type BuildEnv = 'dev' | 'test' | 'prod'; |
|
|
|
|
|
|
|
|
|
|
|
// Load environment variables |
|
|
// Load environment variables |
|
|
if ( |
|
|
let buildEnv: BuildEnv; |
|
|
process.env.NODE_ENV === 'dev' |
|
|
if (process.env.NODE_ENV === NodeEnv.Dev) { |
|
|
|| process.env.NODE_ENV === 'test' |
|
|
buildEnv = BuildEnv.Development; |
|
|
|| process.env.NODE_ENV === 'prod' |
|
|
} else if (process.env.NODE_ENV === NodeEnv.Test) { |
|
|
) { |
|
|
buildEnv = BuildEnv.Testing; |
|
|
console.log(`NODE_ENV=${process.env.NODE_ENV}`); |
|
|
} else if (process.env.NODE_ENV === NodeEnv.Prod) { |
|
|
|
|
|
buildEnv = BuildEnv.Production; |
|
|
} else { |
|
|
} else { |
|
|
console.error("NODE_ENV is not set. Invoke with NODE_ENV=dev|test|prod"); |
|
|
console.error("NODE_ENV is not set. Invoke with NODE_ENV=" + Object.values(NodeEnv).join("|")); |
|
|
throw new Error("NODE_ENV is not set. Invoke with NODE_ENV=dev|test|prod"); |
|
|
throw new Error("NODE_ENV is not set. Invoke with NODE_ENV=" + Object.values(NodeEnv).join("|")); |
|
|
// process.exit(1); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
console.log(`Environment: ${buildEnv}`); |
|
|
|
|
|
|
|
|
dotenv.config({ path: `.env.${process.env.NODE_ENV}` }); |
|
|
dotenv.config({ path: `.env.${buildEnv}` }); |
|
|
|
|
|
|
|
|
const __filename = fileURLToPath(import.meta.url); |
|
|
const __filename = fileURLToPath(import.meta.url); |
|
|
const __dirname = path.dirname(__filename); |
|
|
const __dirname = path.dirname(__filename); |
|
|
|
|
|
|
|
|
export async function createBuildConfig(mode: BuildMode): Promise<UserConfig> { |
|
|
export async function createBuildConfig(platform: BuildPlatform): Promise<UserConfig> { |
|
|
const appConfig = await loadAppConfig(); |
|
|
const appConfig = await loadAppConfig(); |
|
|
const isElectron = mode === "electron"; |
|
|
|
|
|
const isCapacitor = mode === "capacitor"; |
|
|
console.log(`Platform: ${platform}`); |
|
|
const isPyWebView = mode === "pywebview"; |
|
|
const isElectron = platform === BuildPlatform.Electron; |
|
|
|
|
|
const isCapacitor = platform === BuildPlatform.Capacitor; |
|
|
|
|
|
const isPyWebView = platform === BuildPlatform.PyWebView; |
|
|
|
|
|
|
|
|
// Explicitly set platform and disable PWA for Electron |
|
|
// Explicitly set platform and disable PWA for Electron |
|
|
process.env.VITE_PLATFORM = mode; |
|
|
process.env.VITE_PLATFORM = platform; |
|
|
process.env.VITE_PWA_ENABLED = (isElectron || isPyWebView || isCapacitor) |
|
|
process.env.VITE_PWA_ENABLED = (isElectron || isPyWebView || isCapacitor) |
|
|
? 'false' |
|
|
? 'false' |
|
|
: 'true'; |
|
|
: 'true'; |
|
@ -69,7 +70,7 @@ export async function createBuildConfig(mode: BuildMode): Promise<UserConfig> { |
|
|
}, |
|
|
}, |
|
|
define: { |
|
|
define: { |
|
|
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV), |
|
|
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV), |
|
|
'process.env.VITE_PLATFORM': JSON.stringify(mode), |
|
|
'process.env.VITE_PLATFORM': JSON.stringify(platform), |
|
|
'process.env.VITE_PWA_ENABLED': JSON.stringify(!isElectron), |
|
|
'process.env.VITE_PWA_ENABLED': JSON.stringify(!isElectron), |
|
|
'process.env.VITE_DISABLE_PWA': JSON.stringify(isElectron), |
|
|
'process.env.VITE_DISABLE_PWA': JSON.stringify(isElectron), |
|
|
__dirname: isElectron ? JSON.stringify(process.cwd()) : '""', |
|
|
__dirname: isElectron ? JSON.stringify(process.cwd()) : '""', |
|
@ -91,10 +92,10 @@ export async function createBuildConfig(mode: BuildMode): Promise<UserConfig> { |
|
|
'path': path.resolve(__dirname, './src/utils/node-modules/path.js'), |
|
|
'path': path.resolve(__dirname, './src/utils/node-modules/path.js'), |
|
|
'fs': path.resolve(__dirname, './src/utils/node-modules/fs.js'), |
|
|
'fs': path.resolve(__dirname, './src/utils/node-modules/fs.js'), |
|
|
'crypto': path.resolve(__dirname, './src/utils/node-modules/crypto.js'), |
|
|
'crypto': path.resolve(__dirname, './src/utils/node-modules/crypto.js'), |
|
|
'nostr-tools/nip06': mode === 'development' |
|
|
'nostr-tools/nip06': buildEnv === BuildEnv.Development |
|
|
? 'nostr-tools/nip06' |
|
|
? 'nostr-tools/nip06' |
|
|
: path.resolve(__dirname, 'node_modules/nostr-tools/nip06'), |
|
|
: path.resolve(__dirname, 'node_modules/nostr-tools/nip06'), |
|
|
'nostr-tools/core': mode === 'development' |
|
|
'nostr-tools/core': buildEnv === BuildEnv.Development |
|
|
? 'nostr-tools' |
|
|
? 'nostr-tools' |
|
|
: path.resolve(__dirname, 'node_modules/nostr-tools'), |
|
|
: path.resolve(__dirname, 'node_modules/nostr-tools'), |
|
|
'nostr-tools': path.resolve(__dirname, 'node_modules/nostr-tools'), |
|
|
'nostr-tools': path.resolve(__dirname, 'node_modules/nostr-tools'), |
|
@ -121,4 +122,4 @@ export async function createBuildConfig(mode: BuildMode): Promise<UserConfig> { |
|
|
}; |
|
|
}; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
export default defineConfig(async () => createBuildConfig('web')); |
|
|
export default defineConfig(async () => createBuildConfig(BuildPlatform.Web)); |
|
|