mirror of
https://github.com/DayuanJiang/next-ai-draw-io.git
synced 2026-01-02 14:22:28 +08:00
* feat(electron): add desktop application support with electron - implement complete Electron main process architecture with window management, app menu, IPC handlers, and settings window - integrate Next.js server for production builds with embedded standalone server - add configuration management with persistent storage and env file support - create preload scripts with secure context bridge for renderer communication - set up electron-builder configuration for multi-platform packaging (macOS, Windows, Linux) - add GitHub Actions workflow for automated release builds - include development scripts for hot-reload during Electron development * feat(electron): enhance security and stability - encrypt API keys using Electron safeStorage API before persisting to disk - add error handling and rollback for preset switching failures - extract inline styles to external CSS file and remove unsafe-inline from CSP - implement dynamic port allocation with automatic fallback for production builds * fix(electron): add maintainer field for Linux .deb package - add maintainer email to linux configuration in electron-builder.yml - required for building .deb packages * fix(electron): use shx for cross-platform file copying - replace Unix-only cp -r with npx shx cp -r - add shx as devDependency for Windows compatibility * fix(electron): fix runtime icon path for all platforms - use icon.png directly instead of platform-specific formats - electron-builder handles icon conversion during packaging - macOS uses embedded icon from app bundle, no explicit path needed - add icon.png to extraResources for Windows/Linux runtime access * fix(electron): add security warning for plaintext API key storage - warn user when safeStorage is unavailable (Linux without keyring) - fail secure: throw error if encryption fails instead of storing plaintext - prevent duplicate warnings with hasWarnedAboutPlaintext flag * fix(electron): add remaining review fixes - Add Windows ARM64 architecture support - Add IPC input validation with config key whitelist - Add server.js existence check before starting Next.js server - Make afterPack throw error on missing directories - Add workflow permissions for release job --------- Co-authored-by: dayuan.jiang <jdy.toh@gmail.com>
40 lines
1.5 KiB
JavaScript
40 lines
1.5 KiB
JavaScript
/**
|
|
* electron-builder afterPack hook
|
|
* Copies node_modules to the standalone directory in the packaged app
|
|
*/
|
|
|
|
const { cpSync, existsSync } = require("fs")
|
|
const path = require("path")
|
|
|
|
module.exports = async function (context) {
|
|
const appOutDir = context.appOutDir
|
|
const resourcesDir = path.join(
|
|
appOutDir,
|
|
context.packager.platform.name === "mac"
|
|
? `${context.packager.appInfo.productFilename}.app/Contents/Resources`
|
|
: "resources"
|
|
)
|
|
const standaloneDir = path.join(resourcesDir, "standalone")
|
|
const sourceNodeModules = path.join(
|
|
context.packager.projectDir,
|
|
"electron-standalone",
|
|
"node_modules"
|
|
)
|
|
const targetNodeModules = path.join(standaloneDir, "node_modules")
|
|
|
|
console.log(`[afterPack] Copying node_modules to ${targetNodeModules}`)
|
|
|
|
if (existsSync(sourceNodeModules) && existsSync(standaloneDir)) {
|
|
cpSync(sourceNodeModules, targetNodeModules, { recursive: true })
|
|
console.log("[afterPack] node_modules copied successfully")
|
|
} else {
|
|
console.error("[afterPack] Source or target directory not found!")
|
|
console.error(` Source: ${sourceNodeModules} exists: ${existsSync(sourceNodeModules)}`)
|
|
console.error(` Target dir: ${standaloneDir} exists: ${existsSync(standaloneDir)}`)
|
|
throw new Error(
|
|
"[afterPack] Failed: Required directories not found. " +
|
|
"Ensure 'npm run electron:prepare' was run before building."
|
|
)
|
|
}
|
|
}
|