From ab7df03aa3e3ab897c4d98c9ba971044dffd98bc Mon Sep 17 00:00:00 2001 From: leejooy96 Date: Sun, 13 Nov 2022 11:21:33 +0900 Subject: [PATCH] pack: prettier now use space instead of tab --- .editorconfig | 2 +- .eslintrc.json | 58 +++--- .prettierrc | 35 ++-- docs/.vitepress/config.mjs | 24 +-- docs/build-configuration.md | 42 ++-- electron-builder.json5 | 186 +++++++++--------- package.json | 124 ++++++------ src/main/MainRunner.ts | 134 ++++++------- src/main/index.ts | 30 +-- src/main/utils/Constants.ts | 22 +-- src/main/utils/Menus.ts | 12 +- src/preload/index.ts | 2 +- src/renderer/App.vue | 16 +- .../components/layout/DefaultLayout.vue | 16 +- .../components/layout/HeaderLayout.vue | 50 ++--- src/renderer/index.html | 14 +- src/renderer/locales/en.json | 34 ++-- src/renderer/locales/ko.json | 34 ++-- src/renderer/locales/zh-hans.json | 34 ++-- src/renderer/locales/zh-hant.json | 34 ++-- src/renderer/plugins/i18n.ts | 20 +- src/renderer/plugins/vuetify.ts | 56 +++--- src/renderer/router/index.ts | 56 +++--- src/renderer/screens/ErrorScreen.vue | 2 +- src/renderer/screens/MainScreen.vue | 136 ++++++------- src/renderer/screens/SecondScreen.vue | 16 +- src/renderer/store/temp.ts | 22 +-- src/renderer/utils/index.ts | 12 +- tsconfig.json | 52 ++--- tsconfig.node.json | 20 +- vite.config.ts | 116 +++++------ 31 files changed, 705 insertions(+), 706 deletions(-) diff --git a/.editorconfig b/.editorconfig index 6d0e97b..db6c853 100644 --- a/.editorconfig +++ b/.editorconfig @@ -4,7 +4,7 @@ root = true [*] charset = utf-8 end_of_line = lf -indent_style = tab +indent_style = space indent_size = 2 insert_final_newline = true max_line_length = 80 diff --git a/.eslintrc.json b/.eslintrc.json index 507c67b..7a4d27c 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,31 +1,31 @@ { - "root": true, - "parser": "vue-eslint-parser", - "parserOptions": { - "parser": "@typescript-eslint/parser", - "sourceType": "module", - "ecmaVersion": 2022, - "ecmaFeatures": { - "jsx": true - } - }, - "env": { - "node": true, - "es6": true - }, - "extends": ["standard", "plugin:vue/vue3-recommended", "prettier"], - "globals": { - "__static": true - }, - "plugins": ["vue"], - "rules": { - "arrow-parens": 0, - "generator-star-spacing": 0, - "no-case-declarations": 0, - "array-callback-return": 0, - "no-trailing-spaces": 1, - "no-control-regex": 0, - "no-useless-constructor": 0, - "node/no-deprecated-api": 0 - } + "root": true, + "parser": "vue-eslint-parser", + "parserOptions": { + "parser": "@typescript-eslint/parser", + "sourceType": "module", + "ecmaVersion": 2022, + "ecmaFeatures": { + "jsx": true + } + }, + "env": { + "node": true, + "es6": true + }, + "extends": ["standard", "plugin:vue/vue3-recommended", "prettier"], + "globals": { + "__static": true + }, + "plugins": ["vue"], + "rules": { + "arrow-parens": 0, + "generator-star-spacing": 0, + "no-case-declarations": 0, + "array-callback-return": 0, + "no-trailing-spaces": 1, + "no-control-regex": 0, + "no-useless-constructor": 0, + "node/no-deprecated-api": 0 + } } diff --git a/.prettierrc b/.prettierrc index 57073a4..8c8c261 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,20 +1,19 @@ { - "printWidth": 100, - "tabWidth": 2, - "useTabs": true, - "semi": false, - "vueIndentScriptAndStyle": false, - "singleQuote": true, - "quoteProps": "as-needed", - "trailingComma": "none", - "bracketSpacing": true, - "bracketSameLine": false, - "jsxBracketSameLine": false, - "jsxSingleQuote": false, - "arrowParens": "always", - "insertPragma": false, - "requirePragma": false, - "proseWrap": "never", - "htmlWhitespaceSensitivity": "strict", - "endOfLine": "lf" + "printWidth": 100, + "useTabs": false, + "semi": false, + "vueIndentScriptAndStyle": false, + "singleQuote": true, + "quoteProps": "as-needed", + "trailingComma": "none", + "bracketSpacing": true, + "bracketSameLine": false, + "jsxBracketSameLine": false, + "jsxSingleQuote": false, + "arrowParens": "always", + "insertPragma": false, + "requirePragma": false, + "proseWrap": "never", + "htmlWhitespaceSensitivity": "strict", + "endOfLine": "lf" } diff --git a/docs/.vitepress/config.mjs b/docs/.vitepress/config.mjs index 291619b..1e54e8e 100644 --- a/docs/.vitepress/config.mjs +++ b/docs/.vitepress/config.mjs @@ -1,16 +1,16 @@ import { generateSidebar } from 'vitepress-sidebar' export default { - title: 'Vutron', - description: 'Quick Start Templates for Vite + Vue 3 + Electron', - themeConfig: { - sidebar: generateSidebar({ - root: 'docs', - collapsible: false, - collapsed: false, - useTitleFromFileHeading: true, - sortByFileName: ['getting-started.md', 'build-configuration.md', 'npm-scripts.md'] - }), - socialLinks: [{ icon: 'github', link: 'https://github.com/jooy2/vutron' }] - } + title: 'Vutron', + description: 'Quick Start Templates for Vite + Vue 3 + Electron', + themeConfig: { + sidebar: generateSidebar({ + root: 'docs', + collapsible: false, + collapsed: false, + useTitleFromFileHeading: true, + sortByFileName: ['getting-started.md', 'build-configuration.md', 'npm-scripts.md'] + }), + socialLinks: [{ icon: 'github', link: 'https://github.com/jooy2/vutron' }] + } } diff --git a/docs/build-configuration.md b/docs/build-configuration.md index 14665be..a783c56 100644 --- a/docs/build-configuration.md +++ b/docs/build-configuration.md @@ -21,9 +21,9 @@ For projects that use the **Native Node Module**, add the following script to yo ```json { - "scripts": { - "postinstall": "electron-builder install-app-deps" - } + "scripts": { + "postinstall": "electron-builder install-app-deps" + } } ``` @@ -49,23 +49,23 @@ Below is an unnecessary `node_modules` file pattern that can further save bundle ```json [ - "!**/.*", - "!**/node_modules/**/{CONTRIBUTORS,CNAME,AUTHOR,TODO,CONTRIBUTING,COPYING,INSTALL,NEWS,PORTING,Makefile,htdocs,CHANGELOG,ChangeLog,changelog,README,Readme,readme,test,sample,example,demo,composer.json,tsconfig.json,jsdoc.json,tslint.json,typings.json,gulpfile,bower.json,package-lock,Gruntfile,CMakeLists,karma.conf,yarn.lock}*", - "!**/node_modules/**/{man,benchmark,node_modules,spec,cmake,browser,vagrant,doxy*,bin,obj,obj.target,example,examples,test,tests,doc,docs,msvc,Xcode,CVS,RCS,SCCS}{,/**/*}", - "!**/node_modules/**/*.{conf,png,pc,coffee,txt,spec.js,ts,js.flow,html,def,jst,xml,ico,in,ac,sln,dsp,dsw,cmd,vcproj,vcxproj,vcxproj.filters,pdb,exp,obj,lib,map,md,sh,gypi,gyp,h,cpp,yml,log,tlog,Makefile,mk,c,cc,rc,xcodeproj,xcconfig,d.ts,yaml,hpp}", - "!**/node_modules/**/node-v*-x64{,/**/*}", - "!**/node_modules/bluebird/js/browser{,/**/*}", - "!**/node_modules/bluebird/js/browser{,/**/*}", - "!**/node_modules/source-map/dist{,/**/*}", - "!**/node_modules/lodash/fp{,/**/*}", - "!**/node_modules/async/!(dist|package.json)", - "!**/node_modules/async/internal{,/**/*}", - "!**/node_modules/ajv/dist{,/**/*}", - "!**/node_modules/ajv/scripts{,/**/*}", - "!**/node_modules/node-pre-gyp/!(lib|package.json)", - "!**/node_modules/node-pre-gyp/lib/!(util|pre-binding.js|node-pre-gyp.js)", - "!**/node_modules/node-pre-gyp/lib/util/!(versioning.js|abi_crosswalk.json)", - "!**/node_modules/source-map-support/browser-source-map-support.js", - "!**/node_modules/json-schema/!(package.json|lib)" + "!**/.*", + "!**/node_modules/**/{CONTRIBUTORS,CNAME,AUTHOR,TODO,CONTRIBUTING,COPYING,INSTALL,NEWS,PORTING,Makefile,htdocs,CHANGELOG,ChangeLog,changelog,README,Readme,readme,test,sample,example,demo,composer.json,tsconfig.json,jsdoc.json,tslint.json,typings.json,gulpfile,bower.json,package-lock,Gruntfile,CMakeLists,karma.conf,yarn.lock}*", + "!**/node_modules/**/{man,benchmark,node_modules,spec,cmake,browser,vagrant,doxy*,bin,obj,obj.target,example,examples,test,tests,doc,docs,msvc,Xcode,CVS,RCS,SCCS}{,/**/*}", + "!**/node_modules/**/*.{conf,png,pc,coffee,txt,spec.js,ts,js.flow,html,def,jst,xml,ico,in,ac,sln,dsp,dsw,cmd,vcproj,vcxproj,vcxproj.filters,pdb,exp,obj,lib,map,md,sh,gypi,gyp,h,cpp,yml,log,tlog,Makefile,mk,c,cc,rc,xcodeproj,xcconfig,d.ts,yaml,hpp}", + "!**/node_modules/**/node-v*-x64{,/**/*}", + "!**/node_modules/bluebird/js/browser{,/**/*}", + "!**/node_modules/bluebird/js/browser{,/**/*}", + "!**/node_modules/source-map/dist{,/**/*}", + "!**/node_modules/lodash/fp{,/**/*}", + "!**/node_modules/async/!(dist|package.json)", + "!**/node_modules/async/internal{,/**/*}", + "!**/node_modules/ajv/dist{,/**/*}", + "!**/node_modules/ajv/scripts{,/**/*}", + "!**/node_modules/node-pre-gyp/!(lib|package.json)", + "!**/node_modules/node-pre-gyp/lib/!(util|pre-binding.js|node-pre-gyp.js)", + "!**/node_modules/node-pre-gyp/lib/util/!(versioning.js|abi_crosswalk.json)", + "!**/node_modules/source-map-support/browser-source-map-support.js", + "!**/node_modules/json-schema/!(package.json|lib)" ] ``` diff --git a/electron-builder.json5 b/electron-builder.json5 index d696278..67b8778 100644 --- a/electron-builder.json5 +++ b/electron-builder.json5 @@ -1,97 +1,97 @@ { - productName: 'Vutron', - appId: 'com.vutron.vutron', - asar: true, - extends: null, - compression: 'maximum', - copyright: 'ⓒ 2022 ${author}', - artifactName: '${productName} ${version}_${arch}.${ext}', - directories: { - buildResources: 'buildAssets', - output: './release/${version}' - }, - /* A list of files not to be included in the build. */ - files: [ - /* + productName: 'Vutron', + appId: 'com.vutron.vutron', + asar: true, + extends: null, + compression: 'maximum', + copyright: 'ⓒ 2022 ${author}', + artifactName: '${productName} ${version}_${arch}.${ext}', + directories: { + buildResources: 'buildAssets', + output: './release/${version}' + }, + /* A list of files not to be included in the build. */ + files: [ + /* (Required) The files and folders listed below should not be included in the build. */ - 'dist/**/*', - '!docs/**/*', - '!release/**/*' - ], - mac: { - bundleVersion: '1.0', - hardenedRuntime: true, - gatekeeperAssess: false, - icon: 'buildAssets/icons/icon.icns', - type: 'distribution', - target: [ - { - target: 'dmg', - arch: ['x64', 'arm64', 'universal'] - } - ] - }, - dmg: { - contents: [ - { - x: 410, - y: 150, - type: 'link', - path: '/Applications' - }, - { - x: 130, - y: 150, - type: 'file' - } - ], - sign: false - }, - win: { - icon: 'buildAssets/icons/icon.ico', - target: [ - { - target: 'appx', - arch: 'x64' - }, - { - target: 'zip', - arch: 'x64' - }, - { - target: 'portable', - arch: 'x64' - }, - { - target: 'nsis', - arch: 'x64' - } - ] - }, - portable: { - artifactName: '${productName} ${version}_${arch} Portable.${ext}' - }, - nsis: { - oneClick: true - }, - linux: { - executableName: 'vutron', - icon: 'buildAssets/icons', - category: 'Utility', - target: [ - { - target: 'snap', - arch: 'x64' - }, - { - target: 'deb', - arch: 'x64' - }, - { - target: 'rpm', - arch: 'x64' - } - ] - } + 'dist/**/*', + '!docs/**/*', + '!release/**/*' + ], + mac: { + bundleVersion: '1.0', + hardenedRuntime: true, + gatekeeperAssess: false, + icon: 'buildAssets/icons/icon.icns', + type: 'distribution', + target: [ + { + target: 'dmg', + arch: ['x64', 'arm64', 'universal'] + } + ] + }, + dmg: { + contents: [ + { + x: 410, + y: 150, + type: 'link', + path: '/Applications' + }, + { + x: 130, + y: 150, + type: 'file' + } + ], + sign: false + }, + win: { + icon: 'buildAssets/icons/icon.ico', + target: [ + { + target: 'appx', + arch: 'x64' + }, + { + target: 'zip', + arch: 'x64' + }, + { + target: 'portable', + arch: 'x64' + }, + { + target: 'nsis', + arch: 'x64' + } + ] + }, + portable: { + artifactName: '${productName} ${version}_${arch} Portable.${ext}' + }, + nsis: { + oneClick: true + }, + linux: { + executableName: 'vutron', + icon: 'buildAssets/icons', + category: 'Utility', + target: [ + { + target: 'snap', + arch: 'x64' + }, + { + target: 'deb', + arch: 'x64' + }, + { + target: 'rpm', + arch: 'x64' + } + ] + } } diff --git a/package.json b/package.json index d2f33f1..82508e1 100644 --- a/package.json +++ b/package.json @@ -1,64 +1,64 @@ { - "name": "vutron", - "version": "1.0.0", - "description": "Quick Start Templates for Vite + Vue 3 + Electron", - "homepage": "https://vutron.jooy2.com", - "author": "jooy2 ", - "license": "MIT", - "main": "dist/main/index.js", - "scripts": { - "dev": "cross-env NODE_ENV=development vite", - "build": "npm run build:pre && electron-builder -wml", - "build:pre": "npm run format:fix && vue-tsc --noEmit && cross-env NODE_ENV=production vite build", - "build:dir": "npm run build:pre && electron-builder --dir", - "build:mac": "npm run build:pre && CSC_IDENTITY_AUTO_DISCOVERY=false electron-builder --mac", - "build:linux": "npm run build:pre && electron-builder --linux", - "build:win": "npm run build:pre && electron-builder --windows", - "lint": "eslint --ext .js,.ts,.vue -f ./node_modules/eslint-friendly-formatter src", - "lint:fix": "eslint --ext .js,.ts,.vue -f ./node_modules/eslint-friendly-formatter --fix src", - "format": "prettier .", - "format:fix": "prettier . --write", - "docs:install": "npm i --no-save vitepress vitepress-sidebar", - "docs:dev": "vitepress dev docs", - "docs:build": "npm run format:fix && vitepress build docs", - "docs:serve": "npm run docs:build && vitepress serve docs" - }, - "engines": { - "node": ">=16.0.0" - }, - "dependencies": { - "@electron/remote": "^2.0.8", - "pinia": "^2.0.22", - "vue": "^3.2.39", - "vue-i18n": "^9.2.2", - "vue-router": "^4.1.6", - "vuetify": "^3.0.0" - }, - "devDependencies": { - "@mdi/font": "^7.0.96", - "@typescript-eslint/eslint-plugin": "^5.42.0", - "@typescript-eslint/parser": "^5.42.0", - "@vitejs/plugin-vue": "^3.2.0", - "@vitejs/plugin-vue-jsx": "^2.1.1", - "cross-env": "^7.0.3", - "electron": "^21.2.2", - "electron-builder": "^23.3.3", - "eslint": "^8.27.0", - "eslint-config-prettier": "^8.5.0", - "eslint-config-standard": "^17.0.0", - "eslint-friendly-formatter": "^4.0.1", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-n": "^15.5.0", - "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-vue": "^9.7.0", - "prettier": "^2.7.1", - "typescript": "^4.8.4", - "vite": "^3.2.3", - "vite-plugin-electron": "^0.10.2", - "vite-plugin-electron-renderer": "^0.10.2", - "vite-plugin-eslint": "^1.8.1", - "vite-plugin-vuetify": "^1.0.0", - "vue-eslint-parser": "^9.1.0", - "vue-tsc": "^1.0.9" - } + "name": "vutron", + "version": "1.0.0", + "description": "Quick Start Templates for Vite + Vue 3 + Electron", + "homepage": "https://vutron.jooy2.com", + "author": "jooy2 ", + "license": "MIT", + "main": "dist/main/index.js", + "scripts": { + "dev": "cross-env NODE_ENV=development vite", + "build": "npm run build:pre && electron-builder -wml", + "build:pre": "npm run format:fix && vue-tsc --noEmit && cross-env NODE_ENV=production vite build", + "build:dir": "npm run build:pre && electron-builder --dir", + "build:mac": "npm run build:pre && CSC_IDENTITY_AUTO_DISCOVERY=false electron-builder --mac", + "build:linux": "npm run build:pre && electron-builder --linux", + "build:win": "npm run build:pre && electron-builder --windows", + "lint": "eslint --ext .js,.ts,.vue -f ./node_modules/eslint-friendly-formatter src", + "lint:fix": "eslint --ext .js,.ts,.vue -f ./node_modules/eslint-friendly-formatter --fix src", + "format": "prettier .", + "format:fix": "prettier . --write", + "docs:install": "npm i --no-save vitepress vitepress-sidebar", + "docs:dev": "vitepress dev docs", + "docs:build": "npm run format:fix && vitepress build docs", + "docs:serve": "npm run docs:build && vitepress serve docs" + }, + "engines": { + "node": ">=16.0.0" + }, + "dependencies": { + "@electron/remote": "^2.0.8", + "pinia": "^2.0.22", + "vue": "^3.2.39", + "vue-i18n": "^9.2.2", + "vue-router": "^4.1.6", + "vuetify": "^3.0.0" + }, + "devDependencies": { + "@mdi/font": "^7.0.96", + "@typescript-eslint/eslint-plugin": "^5.42.0", + "@typescript-eslint/parser": "^5.42.0", + "@vitejs/plugin-vue": "^3.2.0", + "@vitejs/plugin-vue-jsx": "^2.1.1", + "cross-env": "^7.0.3", + "electron": "^21.2.2", + "electron-builder": "^23.3.3", + "eslint": "^8.27.0", + "eslint-config-prettier": "^8.5.0", + "eslint-config-standard": "^17.0.0", + "eslint-friendly-formatter": "^4.0.1", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-n": "^15.5.0", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-vue": "^9.7.0", + "prettier": "^2.7.1", + "typescript": "^4.8.4", + "vite": "^3.2.3", + "vite-plugin-electron": "^0.10.2", + "vite-plugin-electron-renderer": "^0.10.2", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-vuetify": "^1.0.0", + "vue-eslint-parser": "^9.1.0", + "vue-tsc": "^1.0.9" + } } diff --git a/src/main/MainRunner.ts b/src/main/MainRunner.ts index 045c7eb..985cbbb 100644 --- a/src/main/MainRunner.ts +++ b/src/main/MainRunner.ts @@ -3,91 +3,91 @@ import Constants from './utils/Constants' import * as electronRemote from '@electron/remote/main' const exitApp = (mainWindow: BrowserWindow): void => { - if (mainWindow && !mainWindow.isDestroyed()) { - mainWindow.hide() - } - mainWindow.destroy() - app.exit() + if (mainWindow && !mainWindow.isDestroyed()) { + mainWindow.hide() + } + mainWindow.destroy() + app.exit() } export const createMainWindow = async (mainWindow: BrowserWindow): Promise => { - mainWindow = new BrowserWindow({ - title: Constants.APP_NAME, - show: false, - width: Constants.IS_DEV_ENV ? 1500 : 1200, - height: 650, - useContentSize: true, - webPreferences: Constants.DEFAULT_WEB_PREFERENCES - }) + mainWindow = new BrowserWindow({ + title: Constants.APP_NAME, + show: false, + width: Constants.IS_DEV_ENV ? 1500 : 1200, + height: 650, + useContentSize: true, + webPreferences: Constants.DEFAULT_WEB_PREFERENCES + }) - mainWindow.setMenu(null) + mainWindow.setMenu(null) - mainWindow.on('close', (event: Event) => { - event.preventDefault() - exitApp(mainWindow) - }) + mainWindow.on('close', (event: Event) => { + event.preventDefault() + exitApp(mainWindow) + }) - mainWindow.webContents.on('did-frame-finish-load', () => { - if (Constants.IS_DEV_ENV) { - mainWindow.webContents.openDevTools() - } - }) + mainWindow.webContents.on('did-frame-finish-load', () => { + if (Constants.IS_DEV_ENV) { + mainWindow.webContents.openDevTools() + } + }) - mainWindow.once('ready-to-show', () => { - mainWindow.setAlwaysOnTop(true) - mainWindow.show() - mainWindow.focus() - mainWindow.setAlwaysOnTop(false) + mainWindow.once('ready-to-show', () => { + mainWindow.setAlwaysOnTop(true) + mainWindow.show() + mainWindow.focus() + mainWindow.setAlwaysOnTop(false) - electronRemote.initialize() - }) + electronRemote.initialize() + }) - if (Constants.IS_DEV_ENV) { - await mainWindow.loadURL(Constants.APP_INDEX_URL_DEV) - } else { - await mainWindow.loadFile(Constants.APP_INDEX_URL_PROD) - } + if (Constants.IS_DEV_ENV) { + await mainWindow.loadURL(Constants.APP_INDEX_URL_DEV) + } else { + await mainWindow.loadFile(Constants.APP_INDEX_URL_PROD) + } - return mainWindow + return mainWindow } export const createErrorWindow = async ( - errorWindow: BrowserWindow, - mainWindow: BrowserWindow, - details?: RenderProcessGoneDetails + errorWindow: BrowserWindow, + mainWindow: BrowserWindow, + details?: RenderProcessGoneDetails ): Promise => { - if (!Constants.IS_DEV_ENV) { - mainWindow?.hide() - } + if (!Constants.IS_DEV_ENV) { + mainWindow?.hide() + } - errorWindow = new BrowserWindow({ - title: Constants.APP_NAME, - show: false, - resizable: Constants.IS_DEV_ENV, - webPreferences: Constants.DEFAULT_WEB_PREFERENCES - }) + errorWindow = new BrowserWindow({ + title: Constants.APP_NAME, + show: false, + resizable: Constants.IS_DEV_ENV, + webPreferences: Constants.DEFAULT_WEB_PREFERENCES + }) - errorWindow.setMenu(null) + errorWindow.setMenu(null) - if (Constants.IS_DEV_ENV) { - await errorWindow.loadURL(`${Constants.APP_INDEX_URL_DEV}#/error`) - } else { - await errorWindow.loadFile(Constants.APP_INDEX_URL_PROD, { hash: 'error' }) - } + if (Constants.IS_DEV_ENV) { + await errorWindow.loadURL(`${Constants.APP_INDEX_URL_DEV}#/error`) + } else { + await errorWindow.loadFile(Constants.APP_INDEX_URL_PROD, { hash: 'error' }) + } - errorWindow.on('ready-to-show', () => { - if (!Constants.IS_DEV_ENV && mainWindow && !mainWindow.isDestroyed()) { - mainWindow.destroy() - } - errorWindow.show() - errorWindow.focus() - }) + errorWindow.on('ready-to-show', () => { + if (!Constants.IS_DEV_ENV && mainWindow && !mainWindow.isDestroyed()) { + mainWindow.destroy() + } + errorWindow.show() + errorWindow.focus() + }) - errorWindow.webContents.on('did-frame-finish-load', () => { - if (Constants.IS_DEV_ENV) { - errorWindow.webContents.openDevTools() - } - }) + errorWindow.webContents.on('did-frame-finish-load', () => { + if (Constants.IS_DEV_ENV) { + errorWindow.webContents.openDevTools() + } + }) - return errorWindow + return errorWindow } diff --git a/src/main/index.ts b/src/main/index.ts index 9067f2b..30e9f96 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -7,33 +7,33 @@ let mainWindow let errorWindow app.on('ready', () => { - macOSDisableDefaultMenuItem() + macOSDisableDefaultMenuItem() - mainWindow = createMainWindow(mainWindow) + mainWindow = createMainWindow(mainWindow) }) app.on('activate', () => { - if (!mainWindow) { - mainWindow = createMainWindow(mainWindow) - } + if (!mainWindow) { + mainWindow = createMainWindow(mainWindow) + } }) app.on('window-all-closed', () => { - mainWindow = null - errorWindow = null + mainWindow = null + errorWindow = null - if (!Constants.IS_MAC) { - app.quit() - } + if (!Constants.IS_MAC) { + app.quit() + } }) app.on( - 'render-process-gone', - (event: Event, webContents: WebContents, details: RenderProcessGoneDetails) => { - errorWindow = createErrorWindow(errorWindow, mainWindow, details) - } + 'render-process-gone', + (event: Event, webContents: WebContents, details: RenderProcessGoneDetails) => { + errorWindow = createErrorWindow(errorWindow, mainWindow, details) + } ) process.on('uncaughtException', () => { - errorWindow = createErrorWindow(errorWindow, mainWindow) + errorWindow = createErrorWindow(errorWindow, mainWindow) }) diff --git a/src/main/utils/Constants.ts b/src/main/utils/Constants.ts index c4ede10..7ce85cb 100644 --- a/src/main/utils/Constants.ts +++ b/src/main/utils/Constants.ts @@ -1,19 +1,19 @@ import { join } from 'path' export default class Constants { - static APP_NAME = 'Vutron' + static APP_NAME = 'Vutron' - static IS_DEV_ENV = process.env.NODE_ENV === 'development' + static IS_DEV_ENV = process.env.NODE_ENV === 'development' - static IS_MAC = process.platform === 'darwin' + static IS_MAC = process.platform === 'darwin' - static DEFAULT_WEB_PREFERENCES = { - nodeIntegration: true, - contextIsolation: false, - nodeIntegrationInWorker: true, - preload: join(__dirname, '../preload/index.js') - } + static DEFAULT_WEB_PREFERENCES = { + nodeIntegration: true, + contextIsolation: false, + nodeIntegrationInWorker: true, + preload: join(__dirname, '../preload/index.js') + } - static APP_INDEX_URL_DEV = 'http://localhost:5173/index.html' - static APP_INDEX_URL_PROD = join(__dirname, '../index.html') + static APP_INDEX_URL_DEV = 'http://localhost:5173/index.html' + static APP_INDEX_URL_PROD = join(__dirname, '../index.html') } diff --git a/src/main/utils/Menus.ts b/src/main/utils/Menus.ts index 3c228d7..b05c164 100644 --- a/src/main/utils/Menus.ts +++ b/src/main/utils/Menus.ts @@ -2,12 +2,12 @@ import { systemPreferences } from 'electron' import Constants from './Constants' export default class Menus { - static macOSDisableDefaultMenuItem(): void { - if (Constants.IS_MAC) { - systemPreferences.setUserDefault('NSDisabledDictationMenuItem', 'boolean', true) - systemPreferences.setUserDefault('NSDisabledCharacterPaletteMenuItem', 'boolean', true) - } - } + static macOSDisableDefaultMenuItem(): void { + if (Constants.IS_MAC) { + systemPreferences.setUserDefault('NSDisabledDictationMenuItem', 'boolean', true) + systemPreferences.setUserDefault('NSDisabledCharacterPaletteMenuItem', 'boolean', true) + } + } } export const { macOSDisableDefaultMenuItem } = Menus diff --git a/src/preload/index.ts b/src/preload/index.ts index 26df21e..7cb1724 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -1,5 +1,5 @@ const main = (): void => { - console.log('[Preload] Script loaded.') + console.log('[Preload] Script loaded.') } main() diff --git a/src/renderer/App.vue b/src/renderer/App.vue index 09b7d94..ae5bd88 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -3,23 +3,23 @@ import { DefaultLayout } from '@/renderer/components/layout' diff --git a/src/renderer/components/layout/DefaultLayout.vue b/src/renderer/components/layout/DefaultLayout.vue index ca10691..83282a1 100644 --- a/src/renderer/components/layout/DefaultLayout.vue +++ b/src/renderer/components/layout/DefaultLayout.vue @@ -3,12 +3,12 @@ import HeaderLayout from '@/renderer/components/layout/HeaderLayout.vue' diff --git a/src/renderer/components/layout/HeaderLayout.vue b/src/renderer/components/layout/HeaderLayout.vue index 53a91e8..0b3bacb 100644 --- a/src/renderer/components/layout/HeaderLayout.vue +++ b/src/renderer/components/layout/HeaderLayout.vue @@ -6,41 +6,41 @@ const route = useRoute() const titleKey: string = (route?.meta?.titleKey || 'title.main') as string const handleRoute = (path: string): void => { - router.push(path) + router.push(path) } const isCurrentRoute = (path: string): boolean => { - return path === route.path + return path === route.path } diff --git a/src/renderer/index.html b/src/renderer/index.html index b6aee85..c83ba6b 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -1,10 +1,10 @@ - - - - -
- - + + + + +
+ + diff --git a/src/renderer/locales/en.json b/src/renderer/locales/en.json index d44fcfe..50ce555 100644 --- a/src/renderer/locales/en.json +++ b/src/renderer/locales/en.json @@ -1,19 +1,19 @@ { - "desc": { - "welcome-title": "Hello Vutron! Everything is ready.", - "welcome-desc": "You can now write cross-platform web applications. See changes in real time and build to multiple platforms with one command. If you're not already familiar with it, you can get help from the documentation page below, or run some pre-written example code.", - "second-desc": "You have moved to the second screen! There is nothing here!" - }, - "title": { - "main": "Main Screen", - "second": "Second Screen", - "error": "Unknown Error" - }, - "menu": { - "change-theme": "Change Theme", - "change-language": "Change Language", - "increase-count": "Count 1 increment", - "documentation": "Documentation", - "github": "Source Code" - } + "desc": { + "welcome-title": "Hello Vutron! Everything is ready.", + "welcome-desc": "You can now write cross-platform web applications. See changes in real time and build to multiple platforms with one command. If you're not already familiar with it, you can get help from the documentation page below, or run some pre-written example code.", + "second-desc": "You have moved to the second screen! There is nothing here!" + }, + "title": { + "main": "Main Screen", + "second": "Second Screen", + "error": "Unknown Error" + }, + "menu": { + "change-theme": "Change Theme", + "change-language": "Change Language", + "increase-count": "Count 1 increment", + "documentation": "Documentation", + "github": "Source Code" + } } diff --git a/src/renderer/locales/ko.json b/src/renderer/locales/ko.json index 6a8b274..1deff8e 100644 --- a/src/renderer/locales/ko.json +++ b/src/renderer/locales/ko.json @@ -1,19 +1,19 @@ { - "desc": { - "welcome-title": "안녕 Vutron! 모든 준비를 마쳤습니다.", - "welcome-desc": "이제 크로스플랫폼 웹 애플리케이션을 작성할 수 있습니다. 변경사항을 실시간으로 확인하고 한 번의 명령으로 여러 플랫폼으로 빌드하세요. 아직 익숙하지 않다면, 아래 문서 페이지에서 도움을 받아보거나 사전에 작성된 예제 코드를 실행해볼 수 있습니다.", - "second-desc": "두번째 화면으로 이동하였습니다! 여기는 아무 것도 없습니다!" - }, - "title": { - "main": "메인 화면", - "second": "두번째 화면", - "error": "에러 발생" - }, - "menu": { - "change-theme": "테마 변경", - "change-language": "언어 변경", - "increase-count": "카운트 1 증가", - "documentation": "문서", - "github": "소스코드" - } + "desc": { + "welcome-title": "안녕 Vutron! 모든 준비를 마쳤습니다.", + "welcome-desc": "이제 크로스플랫폼 웹 애플리케이션을 작성할 수 있습니다. 변경사항을 실시간으로 확인하고 한 번의 명령으로 여러 플랫폼으로 빌드하세요. 아직 익숙하지 않다면, 아래 문서 페이지에서 도움을 받아보거나 사전에 작성된 예제 코드를 실행해볼 수 있습니다.", + "second-desc": "두번째 화면으로 이동하였습니다! 여기는 아무 것도 없습니다!" + }, + "title": { + "main": "메인 화면", + "second": "두번째 화면", + "error": "에러 발생" + }, + "menu": { + "change-theme": "테마 변경", + "change-language": "언어 변경", + "increase-count": "카운트 1 증가", + "documentation": "문서", + "github": "소스코드" + } } diff --git a/src/renderer/locales/zh-hans.json b/src/renderer/locales/zh-hans.json index dc4faed..958a4fe 100644 --- a/src/renderer/locales/zh-hans.json +++ b/src/renderer/locales/zh-hans.json @@ -1,19 +1,19 @@ { - "desc": { - "welcome-title": "你好武特龙! 一切都准备好了。", - "welcome-desc": "您现在可以编写跨平台的 Web 应用程序。 实时查看更改并使用一个命令构建到多个平台。 如果您还不熟悉它,可以从下面的文档页面获得帮助,或者运行一些预先编写的示例代码。", - "second-desc": "您已移至第二个屏幕! 这里什么都没有!" - }, - "title": { - "main": "主屏幕", - "second": "第二屏", - "error": "未知错误" - }, - "menu": { - "change-theme": "改变主题", - "change-language": "改变语言", - "increase-count": "计数 1 个增量", - "documentation": "文档", - "github": "源代码" - } + "desc": { + "welcome-title": "你好武特龙! 一切都准备好了。", + "welcome-desc": "您现在可以编写跨平台的 Web 应用程序。 实时查看更改并使用一个命令构建到多个平台。 如果您还不熟悉它,可以从下面的文档页面获得帮助,或者运行一些预先编写的示例代码。", + "second-desc": "您已移至第二个屏幕! 这里什么都没有!" + }, + "title": { + "main": "主屏幕", + "second": "第二屏", + "error": "未知错误" + }, + "menu": { + "change-theme": "改变主题", + "change-language": "改变语言", + "increase-count": "计数 1 个增量", + "documentation": "文档", + "github": "源代码" + } } diff --git a/src/renderer/locales/zh-hant.json b/src/renderer/locales/zh-hant.json index 8d54fc6..d5dd386 100644 --- a/src/renderer/locales/zh-hant.json +++ b/src/renderer/locales/zh-hant.json @@ -1,19 +1,19 @@ { - "desc": { - "welcome-title": "你好武特龍! 一切都準備好了。", - "welcome-desc": "您現在可以編寫跨平台的 Web 應用程序。 實時查看更改並使用一個命令構建到多個平台。 如果您還不熟悉它,可以從下面的文檔頁面獲得幫助,或者運行一些預先編寫的示例代碼。", - "second-desc": "您已移至第二個屏幕! 這裡什麼都沒有!" - }, - "title": { - "main": "主屏幕", - "second": "第二屏", - "error": "未知錯誤" - }, - "menu": { - "change-theme": "改變主題", - "change-language": "改變語言", - "increase-count": "計數 1 個增量", - "documentation": "文檔", - "github": "源代碼" - } + "desc": { + "welcome-title": "你好武特龍! 一切都準備好了。", + "welcome-desc": "您現在可以編寫跨平台的 Web 應用程序。 實時查看更改並使用一個命令構建到多個平台。 如果您還不熟悉它,可以從下面的文檔頁面獲得幫助,或者運行一些預先編寫的示例代碼。", + "second-desc": "您已移至第二個屏幕! 這裡什麼都沒有!" + }, + "title": { + "main": "主屏幕", + "second": "第二屏", + "error": "未知錯誤" + }, + "menu": { + "change-theme": "改變主題", + "change-language": "改變語言", + "increase-count": "計數 1 個增量", + "documentation": "文檔", + "github": "源代碼" + } } diff --git a/src/renderer/plugins/i18n.ts b/src/renderer/plugins/i18n.ts index 5eb4abf..3cc4d68 100644 --- a/src/renderer/plugins/i18n.ts +++ b/src/renderer/plugins/i18n.ts @@ -6,14 +6,14 @@ import zhHant from '@/renderer/locales/zh-hant.json' import { getCurrentLocale } from '@/renderer/utils' export default createI18n({ - legacy: false, - locale: getCurrentLocale(), - fallbackLocale: 'en', - globalInjection: true, - messages: { - en, - ko, - zhHans, - zhHant - } + legacy: false, + locale: getCurrentLocale(), + fallbackLocale: 'en', + globalInjection: true, + messages: { + en, + ko, + zhHans, + zhHant + } }) diff --git a/src/renderer/plugins/vuetify.ts b/src/renderer/plugins/vuetify.ts index 56ec7d2..88d924a 100644 --- a/src/renderer/plugins/vuetify.ts +++ b/src/renderer/plugins/vuetify.ts @@ -7,32 +7,32 @@ import '@mdi/font/css/materialdesignicons.min.css' import colors from 'vuetify/lib/util/colors.mjs' export default createVuetify({ - locale: { - messages: { ko, en, zhHans, zhHant }, - locale: 'en', - fallback: 'en' - }, - icons: { - defaultSet: 'mdi', - aliases, - sets: { - mdi - } - }, - theme: { - themes: { - light: { - dark: false, - colors: { - primary: colors.green.darken2 - } - }, - dark: { - dark: true, - colors: { - primary: colors.green.darken4 - } - } - } - } + locale: { + messages: { ko, en, zhHans, zhHant }, + locale: 'en', + fallback: 'en' + }, + icons: { + defaultSet: 'mdi', + aliases, + sets: { + mdi + } + }, + theme: { + themes: { + light: { + dark: false, + colors: { + primary: colors.green.darken2 + } + }, + dark: { + dark: true, + colors: { + primary: colors.green.darken4 + } + } + } + } }) diff --git a/src/renderer/router/index.ts b/src/renderer/router/index.ts index 283695c..e7d0198 100644 --- a/src/renderer/router/index.ts +++ b/src/renderer/router/index.ts @@ -2,32 +2,32 @@ import { createRouter, createWebHashHistory } from 'vue-router/dist/vue-router.e import { MainScreen, ErrorScreen, SecondScreen } from '@/renderer/screens' export default createRouter({ - history: createWebHashHistory(), - routes: [ - { - path: '/', - component: MainScreen, - meta: { - titleKey: 'title.main' - } - }, - { - path: '/second', - component: SecondScreen, - meta: { - titleKey: 'title.second' - } - }, - { - path: '/error', - component: ErrorScreen, - meta: { - titleKey: 'title.error' - } - }, - { - path: '/:pathMatch(.*)*', - redirect: '/' - } - ] + history: createWebHashHistory(), + routes: [ + { + path: '/', + component: MainScreen, + meta: { + titleKey: 'title.main' + } + }, + { + path: '/second', + component: SecondScreen, + meta: { + titleKey: 'title.second' + } + }, + { + path: '/error', + component: ErrorScreen, + meta: { + titleKey: 'title.error' + } + }, + { + path: '/:pathMatch(.*)*', + redirect: '/' + } + ] }) diff --git a/src/renderer/screens/ErrorScreen.vue b/src/renderer/screens/ErrorScreen.vue index cf8528b..74a6e5b 100644 --- a/src/renderer/screens/ErrorScreen.vue +++ b/src/renderer/screens/ErrorScreen.vue @@ -1,5 +1,5 @@ diff --git a/src/renderer/screens/MainScreen.vue b/src/renderer/screens/MainScreen.vue index 0003f2a..1d6c31a 100644 --- a/src/renderer/screens/MainScreen.vue +++ b/src/renderer/screens/MainScreen.vue @@ -15,88 +15,88 @@ const languages = ref(['en']) languages.value = availableLocales const handleChangeTheme = (): void => { - theme.global.name.value = theme.global.current.value.dark ? 'light' : 'dark' + theme.global.name.value = theme.global.current.value.dark ? 'light' : 'dark' } const handleChangeLanguage = (val): void => { - locale.value = val + locale.value = val } const handleDocument = async (): Promise => { - await openExternal('https://vutron.jooy2.com') + await openExternal('https://vutron.jooy2.com') } const handleGitHub = async (): Promise => { - await openExternal('https://github.com/jooy2/vutron') + await openExternal('https://github.com/jooy2/vutron') } const handleCountIncrease = (): void => { - counterIncrease(1) + counterIncrease(1) } diff --git a/src/renderer/screens/SecondScreen.vue b/src/renderer/screens/SecondScreen.vue index 0604267..3f4c2a3 100644 --- a/src/renderer/screens/SecondScreen.vue +++ b/src/renderer/screens/SecondScreen.vue @@ -1,12 +1,12 @@ diff --git a/src/renderer/store/temp.ts b/src/renderer/store/temp.ts index c6a562e..a895399 100644 --- a/src/renderer/store/temp.ts +++ b/src/renderer/store/temp.ts @@ -1,15 +1,15 @@ import { defineStore } from 'pinia' export const useTempStore = defineStore('temp', { - state: () => ({ - counter: 0 - }), - getters: { - getCounter: (state): number => state.counter - }, - actions: { - counterIncrease(amount: number) { - this.counter += amount - } - } + state: () => ({ + counter: 0 + }), + getters: { + getCounter: (state): number => state.counter + }, + actions: { + counterIncrease(amount: number) { + this.counter += amount + } + } }) diff --git a/src/renderer/utils/index.ts b/src/renderer/utils/index.ts index ed4af5f..2789d80 100644 --- a/src/renderer/utils/index.ts +++ b/src/renderer/utils/index.ts @@ -1,13 +1,13 @@ import { shell } from 'electron' export default class Utils { - static getCurrentLocale(): string { - return navigator?.language?.split('-')[0] || 'en' - } + static getCurrentLocale(): string { + return navigator?.language?.split('-')[0] || 'en' + } - static async openExternal(url: string): Promise { - await shell.openExternal(url) - } + static async openExternal(url: string): Promise { + await shell.openExternal(url) + } } export const { getCurrentLocale, openExternal } = Utils diff --git a/tsconfig.json b/tsconfig.json index a673c30..5ccd3d2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,28 +1,28 @@ { - "compilerOptions": { - "baseUrl": "./", - "outDir": "./dist", - "target": "esnext", - "module": "esnext", - "moduleResolution": "node", - "jsx": "preserve", - "noImplicitAny": false, - "allowSyntheticDefaultImports": true, - "declaration": true, - "resolveJsonModule": true, - "esModuleInterop": true, - "sourceMap": true, - "strict": true, - "skipLibCheck": true, - "paths": { - "@/*": ["./src/*"] - }, - "lib": ["esnext", "dom"] - }, - "include": ["src/**/*/*.ts", "src/**/*/*.d.ts", "src/**/*/*.tsx", "src/**/*/*.vue"], - "references": [ - { - "path": "./tsconfig.node.json" - } - ] + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist", + "target": "esnext", + "module": "esnext", + "moduleResolution": "node", + "jsx": "preserve", + "noImplicitAny": false, + "allowSyntheticDefaultImports": true, + "declaration": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "sourceMap": true, + "strict": true, + "skipLibCheck": true, + "paths": { + "@/*": ["./src/*"] + }, + "lib": ["esnext", "dom"] + }, + "include": ["src/**/*/*.ts", "src/**/*/*.d.ts", "src/**/*/*.tsx", "src/**/*/*.vue"], + "references": [ + { + "path": "./tsconfig.node.json" + } + ] } diff --git a/tsconfig.node.json b/tsconfig.node.json index d711ff2..5cd3bd4 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -1,12 +1,12 @@ { - "compilerOptions": { - "target": "esnext", - "module": "esnext", - "jsx": "preserve", - "moduleResolution": "node", - "composite": true, - "resolveJsonModule": true, - "allowSyntheticDefaultImports": true - }, - "include": ["package.json"] + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "jsx": "preserve", + "moduleResolution": "node", + "composite": true, + "resolveJsonModule": true, + "allowSyntheticDefaultImports": true + }, + "include": ["package.json"] } diff --git a/vite.config.ts b/vite.config.ts index 62d31c3..6856aca 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -13,62 +13,62 @@ import { builtinModules } from 'module' rmSync('dist', { recursive: true, force: true }) export default defineConfig({ - define: { - __VUE_I18N_FULL_INSTALL__: true, - __VUE_I18N_LEGACY_API__: false, - __INTLIFY_PROD_DEVTOOLS__: false - }, - resolve: { - extensions: ['.mjs', '.js', '.ts', '.vue', '.json', '.scss'], - alias: { - '@': resolve(dirname(fileURLToPath(import.meta.url)), 'src') - } - }, - base: './', - root: resolve('./src/renderer'), - publicDir: resolve('./src/renderer/public'), - clearScreen: false, - build: { - assetsDir: '', // See: https://github.com/electron-vite/electron-vite-vue/issues/287 - outDir: resolve('./dist') - }, - plugins: [ - vue(), - vueJsx(), - // Docs: https://github.com/vuetifyjs/vuetify-loader - vuetifyPlugin({ - autoImport: true - }), - // Docs: https://github.com/gxmari007/vite-plugin-eslint - eslintPlugin(), - // Docs: https://github.com/electron-vite/vite-plugin-electron - electronPlugin([ - { - entry: ['src/preload/index.ts'], - vite: { - build: { - outDir: 'dist/preload' - } - } - }, - { - entry: ['src/main/index.ts'], - onstart: (options) => { - options.startup(['.', '--no-sandbox']) - }, - vite: { - build: { - assetsDir: '.', - outDir: 'dist/main', - rollupOptions: { - external: ['electron', ...builtinModules] - } - } - } - } - ]), - rendererPlugin({ - nodeIntegration: true - }) - ] + define: { + __VUE_I18N_FULL_INSTALL__: true, + __VUE_I18N_LEGACY_API__: false, + __INTLIFY_PROD_DEVTOOLS__: false + }, + resolve: { + extensions: ['.mjs', '.js', '.ts', '.vue', '.json', '.scss'], + alias: { + '@': resolve(dirname(fileURLToPath(import.meta.url)), 'src') + } + }, + base: './', + root: resolve('./src/renderer'), + publicDir: resolve('./src/renderer/public'), + clearScreen: false, + build: { + assetsDir: '', // See: https://github.com/electron-vite/electron-vite-vue/issues/287 + outDir: resolve('./dist') + }, + plugins: [ + vue(), + vueJsx(), + // Docs: https://github.com/vuetifyjs/vuetify-loader + vuetifyPlugin({ + autoImport: true + }), + // Docs: https://github.com/gxmari007/vite-plugin-eslint + eslintPlugin(), + // Docs: https://github.com/electron-vite/vite-plugin-electron + electronPlugin([ + { + entry: ['src/preload/index.ts'], + vite: { + build: { + outDir: 'dist/preload' + } + } + }, + { + entry: ['src/main/index.ts'], + onstart: (options) => { + options.startup(['.', '--no-sandbox']) + }, + vite: { + build: { + assetsDir: '.', + outDir: 'dist/main', + rollupOptions: { + external: ['electron', ...builtinModules] + } + } + } + } + ]), + rendererPlugin({ + nodeIntegration: true + }) + ] })