From 91c4ee9606558a0aaa132aea7699935c0e035118 Mon Sep 17 00:00:00 2001 From: neil Date: Mon, 6 Feb 2023 12:41:22 +0800 Subject: [PATCH] convert electron.cjs into ts --- modules/desktop/.eslintignore | 3 +- modules/desktop/.eslintrc.cjs | 3 ++ modules/desktop/.gitignore | 3 +- modules/desktop/.prettierignore | 3 +- modules/desktop/electron-builder.config.cjs | 2 +- .../electron/{electron.cjs => electron.ts} | 37 +++++++++--------- modules/desktop/electron/vite.config.ts | 38 +++++++++++++++++++ modules/desktop/package.json | 12 +++--- 8 files changed, 75 insertions(+), 26 deletions(-) rename modules/desktop/electron/{electron.cjs => electron.ts} (74%) create mode 100644 modules/desktop/electron/vite.config.ts diff --git a/modules/desktop/.eslintignore b/modules/desktop/.eslintignore index af70cc6..ac538c3 100644 --- a/modules/desktop/.eslintignore +++ b/modules/desktop/.eslintignore @@ -13,4 +13,5 @@ package-lock.json yarn.lock coverage/* build/* -dist/* \ No newline at end of file +dist/* +electron/dist/* \ No newline at end of file diff --git a/modules/desktop/.eslintrc.cjs b/modules/desktop/.eslintrc.cjs index 6524f50..1310276 100644 --- a/modules/desktop/.eslintrc.cjs +++ b/modules/desktop/.eslintrc.cjs @@ -24,5 +24,8 @@ module.exports = { browser: true, es2017: true, node: true + }, + rules: { + '@typescript-eslint/ban-ts-comment': ['error', { 'ts-ignore': 'allow-with-description' }] } }; diff --git a/modules/desktop/.gitignore b/modules/desktop/.gitignore index f2b5c30..a01848b 100644 --- a/modules/desktop/.gitignore +++ b/modules/desktop/.gitignore @@ -7,4 +7,5 @@ node_modules .env.* !.env.example coverage/* -dist/* \ No newline at end of file +dist/* +electron/dist/* \ No newline at end of file diff --git a/modules/desktop/.prettierignore b/modules/desktop/.prettierignore index f3a8782..d8715c3 100644 --- a/modules/desktop/.prettierignore +++ b/modules/desktop/.prettierignore @@ -15,4 +15,5 @@ build coverage/* **/*.plist build/* -dist/* \ No newline at end of file +dist/* +electron/dist/* \ No newline at end of file diff --git a/modules/desktop/electron-builder.config.cjs b/modules/desktop/electron-builder.config.cjs index 21a2479..58939db 100644 --- a/modules/desktop/electron-builder.config.cjs +++ b/modules/desktop/electron-builder.config.cjs @@ -7,7 +7,7 @@ module.exports = { productName: 'tea', asar: false, directories: { output: 'dist' }, - files: ['electron/electron.cjs', { from: 'build', to: '' }] + files: ['electron/dist/electron.cjs', { from: 'build', to: '' }] // TODO: if xcrun altool exists eventually in our self-hosted macos // SOLUTION: is notarize separately in next pipeline step // afterSign: async (params) => { diff --git a/modules/desktop/electron/electron.cjs b/modules/desktop/electron/electron.ts similarity index 74% rename from modules/desktop/electron/electron.cjs rename to modules/desktop/electron/electron.ts index abe9166..a2d96e5 100644 --- a/modules/desktop/electron/electron.cjs +++ b/modules/desktop/electron/electron.ts @@ -1,12 +1,15 @@ -const windowStateManager = require('electron-window-state'); -const { app, BrowserWindow, ipcMain } = require('electron'); -const contextMenu = require('electron-context-menu'); -const serve = require('electron-serve'); -const path = require('path'); -const fs = require('fs'); +import windowStateManager from 'electron-window-state'; +import { app, BrowserWindow, ipcMain } from 'electron'; +import contextMenu from 'electron-context-menu'; +import serve from 'electron-serve'; +import path from 'path'; +import fs from 'fs'; try { - require('electron-reloader')(module); + //@ts-ignore only used in dev should not be packaged inprod + /* eslint-disable */ + const er = require('electron-reloader'); + er(module); } catch (e) { console.error(e); } @@ -14,10 +17,10 @@ try { const serveURL = serve({ directory: '.' }); const port = process.env.PORT || 3000; const dev = !app.isPackaged; -let mainWindow; +let mainWindow: BrowserWindow | null; function createWindow() { - let windowState = windowStateManager({ + const windowState = windowStateManager({ defaultWidth: 800, defaultHeight: 600 }); @@ -32,7 +35,7 @@ function createWindow() { minHeight: 450, minWidth: 500, webPreferences: { - enableRemoteModule: true, + // enableRemoteModule: true, contextIsolation: false, nodeIntegration: true, spellcheck: false, @@ -72,7 +75,7 @@ contextMenu({ }); function loadVite(port) { - mainWindow.loadURL(`http://localhost:${port}`).catch((e) => { + mainWindow?.loadURL(`http://localhost:${port}`).catch((e) => { console.log('Error loading URL, retrying', e); setTimeout(() => { loadVite(port); @@ -101,7 +104,7 @@ app.on('window-all-closed', () => { }); ipcMain.on('to-main', (event, count) => { - return mainWindow.webContents.send('from-main', `next count is ${count + 1}`); + return mainWindow?.webContents.send('from-main', `next count is ${count + 1}`); }); ipcMain.handle('get-installed-packages', async () => { @@ -114,10 +117,10 @@ ipcMain.handle('get-installed-packages', async () => { const deepReadDir = async (dirPath) => { let arrayOfFiles; try { - arrayOfFiles = fs.readdirSync(dirPath) - console.log(arrayOfFiles) - } catch(e) { - console.log(e) + arrayOfFiles = fs.readdirSync(dirPath); + console.log(arrayOfFiles); + } catch (e) { + console.log(e); } // await Promise.all( // (await readdir(dirPath, {withFileTypes: true})).map(async (dirent) => { @@ -126,4 +129,4 @@ const deepReadDir = async (dirPath) => { // }), // ) return arrayOfFiles; -} \ No newline at end of file +}; diff --git a/modules/desktop/electron/vite.config.ts b/modules/desktop/electron/vite.config.ts new file mode 100644 index 0000000..f9d7e3d --- /dev/null +++ b/modules/desktop/electron/vite.config.ts @@ -0,0 +1,38 @@ +import { join } from 'path'; + +const PACKAGE_ROOT = __dirname; +const PROJECT_ROOT = join(PACKAGE_ROOT, '../..'); + +/** + * @type {import('vite').UserConfig} + * @see https://vitejs.dev/config/ + */ +const config = { + root: PACKAGE_ROOT, + envDir: PROJECT_ROOT, + resolve: { + alias: { + '/@/': join(PACKAGE_ROOT, 'src') + '/' + } + }, + build: { + ssr: true, + sourcemap: 'inline', + outDir: 'dist', + assetsDir: '.', + minify: process.env.MODE !== 'development', + lib: { + entry: 'electron.ts', + formats: ['cjs'] + }, + rollupOptions: { + output: { + entryFileNames: '[name].cjs' + } + }, + emptyOutDir: true, + reportCompressedSize: false + } +}; + +export default config; diff --git a/modules/desktop/package.json b/modules/desktop/package.json index 93a1639..14aa0b8 100644 --- a/modules/desktop/package.json +++ b/modules/desktop/package.json @@ -4,19 +4,21 @@ "private": true, "description": "tea gui app", "author": "tea.xyz", - "main": "electron/electron.cjs", + "main": "electron/dist/electron.cjs", "scripts": { "dev": "cross-env NODE_ENV=dev npm run dev:all", - "dev:all": "concurrently -n=svelte,electron -c='#ff3e00',blue \"npm run dev:svelte\" \"npm run dev:electron\"", + "dev:all": "concurrently -n=svelte,electron -c='#ff3e00',blue \"pnpm dev:main\" \"pnpm dev:svelte\" \"pnpm dev:electron\"", "dev:svelte": "vite dev", - "dev:electron": "electron electron/electron.cjs", + "dev:electron": "electron electron/dist/electron.cjs", + "dev:main": "cd ./electron && vite build --watch", + "build:main": "cd ./electron && vite build", "pack": "electron-builder --dir --config electron-builder.config.cjs", "dist": "pnpm build && electron-builder --config electron-builder.config.cjs", "package": "pnpm build && electron-builder --config electron-builder.config.cjs", "dev:package": "pnpm build && electron-builder --config electron-builder.config.cjs --dir", - "electron": "concurrently --kill-others \"vite dev\" \"electron electron/electron.cjs\"", + "electron": "concurrently --kill-others \"vite dev\" \"electron electron/dist/electron.cjs\"", "olddev": "vite dev", - "build": "vite build && cp build/app.html build/index.html", + "build": "pnpm build:main && vite build && cp build/app.html build/index.html", "preview": "vite preview", "unit:test": "vitest", "coverage": "vitest run --coverage",