├── docs ├── .nojekyll ├── logo.png ├── docsify@4 │ ├── uuid │ │ └── esm-browser │ │ │ ├── nil.js │ │ │ ├── v3.js │ │ │ ├── v5.js │ │ │ ├── regex.js │ │ │ ├── native.js │ │ │ ├── validate.js │ │ │ ├── version.js │ │ │ ├── index.js │ │ │ ├── v4.js │ │ │ ├── rng.js │ │ │ ├── parse.js │ │ │ ├── stringify.js │ │ │ ├── v35.js │ │ │ ├── sha1.js │ │ │ └── v1.js │ ├── fonts.gstatic.com │ │ ├── 6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7l.woff2 │ │ ├── 6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu.woff2 │ │ ├── 6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu.woff2 │ │ └── L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_ROW9.ttf │ ├── fonts.googleapis.com │ │ └── css │ └── countable.min.js ├── assets │ ├── 1_vs_install.png │ └── 2_nodejs_c++_component.jpg ├── _sidebar.md ├── electron-mac-tray-icon-distortion.md └── README.md ├── src ├── main │ ├── utils │ │ ├── index.js │ │ ├── setTitle.js │ │ └── openDialog.js │ ├── sdk │ │ ├── index.js │ │ └── useSdk.js │ ├── counter │ │ ├── index.js │ │ └── updateCounter.js │ ├── log │ │ └── index.js │ ├── settings │ │ ├── index.js │ │ └── createWindow.js │ ├── preload │ │ ├── settings.js │ │ └── index.js │ ├── tray │ │ └── index.js │ ├── windows │ │ └── mainWindow.js │ └── background.js └── renderer │ ├── index │ ├── assets │ │ └── logo.png │ ├── utils │ │ └── updateCounter.js │ ├── store │ │ └── index.js │ ├── App.vue │ ├── main.js │ ├── components │ │ └── HelloWorld.vue │ ├── views │ │ ├── AboutView.vue │ │ └── HomeView.vue │ └── router │ │ └── index.js │ └── settings │ ├── main.js │ ├── views │ ├── AboutView.vue │ ├── GeneralView.vue │ ├── ShortcutsView.vue │ └── AccountView.vue │ ├── App.vue │ ├── router │ └── index.js │ └── components │ └── Navbar.vue ├── .env.development ├── .env.win32.x64 ├── .env.win32.ia32 ├── .env.darwin.arm64 ├── .env.darwin.x64 ├── babel.config.js ├── public ├── logo.png ├── sdk │ └── app1.dll ├── icons │ ├── png │ │ ├── icon.png │ │ ├── 1024x1024.png │ │ ├── 128x128.png │ │ ├── 256x256.png │ │ ├── 512x512.png │ │ ├── icon@1.5x.png │ │ ├── icon@2x.png │ │ ├── icon@3x.png │ │ └── icon@4x.png │ ├── win │ │ └── icon.ico │ └── mac │ │ └── icon.icns ├── settings.html └── index.html ├── .env.darwin.universal ├── .husky ├── pre-commit └── commit-msg ├── vue_devtools ├── icons │ ├── 16.png │ ├── 48.png │ ├── 128.png │ ├── 16-beta.png │ ├── 16-gray.png │ ├── 16.nuxt.png │ ├── 48-beta.png │ ├── 48-gray.png │ ├── 48.nuxt.png │ ├── 128-beta.png │ ├── 128-gray.png │ └── 128.nuxt.png ├── devtools-background.html ├── popups │ ├── devtools-screenshot.png │ ├── not-found.html │ ├── disabled.html │ ├── disabled.nuxt.html │ ├── enabled.html │ ├── enabled.nuxt.html │ └── popup.css ├── build │ ├── 2906.js.LICENSE.txt │ ├── proxy.js │ ├── devtools-background.js │ ├── 1569.js │ ├── 4896.js │ ├── background.js │ ├── 9741.js │ ├── 6330.js │ ├── 1594.js │ ├── 3553.js │ ├── 1585.js │ ├── 3315.js │ ├── 6331.js │ ├── 7135.js │ ├── 6022.js │ ├── 8309.js │ ├── 7125.js │ ├── 3855.js │ ├── 4035.js │ ├── 3673.js │ ├── 8147.js │ ├── 4454.js │ ├── 1593.js │ ├── 491.js │ ├── 3399.js │ ├── 8677.js │ ├── 868.js │ ├── 4073.js │ ├── 9342.js │ ├── 5924.js │ ├── 5669.js │ ├── 2014.js │ ├── 3504.js │ ├── 1649.js │ ├── 4511.js │ ├── 6844.js │ ├── 9953.js │ ├── 8947.js │ ├── 6792.js │ ├── 3008.js │ ├── 4610.js │ ├── 5974.js │ ├── 2906.js │ ├── 7447.js │ ├── 4558.js │ ├── 4858.js │ └── 6175.js ├── devtools.html ├── package.json └── manifest.json ├── .editorconfig ├── .npmrc ├── commitlint.config.js ├── jsconfig.json ├── .gitignore ├── .prettierignore ├── .eslintignore ├── .prettierrc.cjs ├── LICENSE.txt ├── .github └── workflows │ ├── build-mac.yml │ └── build-win.yml ├── README.md ├── crypto.js ├── package.json ├── CHANGELOG.md ├── .eslintrc.js └── vue.config.js /docs/.nojekyll: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/utils/index.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.env.development: -------------------------------------------------------------------------------- 1 | NODE_ENV=development 2 | # 正在打包安装包arch值 3 | VUE_APP_ARCH=arm64 -------------------------------------------------------------------------------- /.env.win32.x64: -------------------------------------------------------------------------------- 1 | NODE_ENV=production 2 | # 正在打包安装包arch值 3 | VUE_APP_PACK_ARCH=x64 -------------------------------------------------------------------------------- /.env.win32.ia32: -------------------------------------------------------------------------------- 1 | NODE_ENV=production 2 | # 正在打包安装包arch值 3 | VUE_APP_PACK_ARCH=ia32 -------------------------------------------------------------------------------- /.env.darwin.arm64: -------------------------------------------------------------------------------- 1 | NODE_ENV=production 2 | # 正在打包安装包arch值 3 | VUE_APP_PACK_ARCH=arm64 4 | -------------------------------------------------------------------------------- /.env.darwin.x64: -------------------------------------------------------------------------------- 1 | NODE_ENV=production 2 | # 正在打包安装包arch值 3 | VUE_APP_PACK_ARCH=x64 4 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['@vue/cli-plugin-babel/preset'] 3 | }; 4 | -------------------------------------------------------------------------------- /docs/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/docs/logo.png -------------------------------------------------------------------------------- /public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/logo.png -------------------------------------------------------------------------------- /.env.darwin.universal: -------------------------------------------------------------------------------- 1 | NODE_ENV=production 2 | # 正在打包安装包arch值 3 | VUE_APP_PACK_ARCH=universal 4 | -------------------------------------------------------------------------------- /docs/docsify@4/uuid/esm-browser/nil.js: -------------------------------------------------------------------------------- 1 | export default '00000000-0000-0000-0000-000000000000'; 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npm run lint 5 | -------------------------------------------------------------------------------- /public/sdk/app1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/sdk/app1.dll -------------------------------------------------------------------------------- /public/icons/png/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/png/icon.png -------------------------------------------------------------------------------- /public/icons/win/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/win/icon.ico -------------------------------------------------------------------------------- /vue_devtools/icons/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/16.png -------------------------------------------------------------------------------- /vue_devtools/icons/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/48.png -------------------------------------------------------------------------------- /public/icons/mac/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/mac/icon.icns -------------------------------------------------------------------------------- /vue_devtools/icons/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/128.png -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npx --no -- commitlint --edit $1 5 | -------------------------------------------------------------------------------- /docs/assets/1_vs_install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/docs/assets/1_vs_install.png -------------------------------------------------------------------------------- /public/icons/png/1024x1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/png/1024x1024.png -------------------------------------------------------------------------------- /public/icons/png/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/png/128x128.png -------------------------------------------------------------------------------- /public/icons/png/256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/png/256x256.png -------------------------------------------------------------------------------- /public/icons/png/512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/png/512x512.png -------------------------------------------------------------------------------- /public/icons/png/icon@1.5x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/png/icon@1.5x.png -------------------------------------------------------------------------------- /public/icons/png/icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/png/icon@2x.png -------------------------------------------------------------------------------- /public/icons/png/icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/png/icon@3x.png -------------------------------------------------------------------------------- /public/icons/png/icon@4x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/public/icons/png/icon@4x.png -------------------------------------------------------------------------------- /vue_devtools/devtools-background.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /vue_devtools/icons/16-beta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/16-beta.png -------------------------------------------------------------------------------- /vue_devtools/icons/16-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/16-gray.png -------------------------------------------------------------------------------- /vue_devtools/icons/16.nuxt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/16.nuxt.png -------------------------------------------------------------------------------- /vue_devtools/icons/48-beta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/48-beta.png -------------------------------------------------------------------------------- /vue_devtools/icons/48-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/48-gray.png -------------------------------------------------------------------------------- /vue_devtools/icons/48.nuxt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/48.nuxt.png -------------------------------------------------------------------------------- /vue_devtools/icons/128-beta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/128-beta.png -------------------------------------------------------------------------------- /vue_devtools/icons/128-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/128-gray.png -------------------------------------------------------------------------------- /vue_devtools/icons/128.nuxt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/icons/128.nuxt.png -------------------------------------------------------------------------------- /src/renderer/index/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/src/renderer/index/assets/logo.png -------------------------------------------------------------------------------- /docs/assets/2_nodejs_c++_component.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/docs/assets/2_nodejs_c++_component.jpg -------------------------------------------------------------------------------- /src/main/sdk/index.js: -------------------------------------------------------------------------------- 1 | const useSdk = require('./useSdk.js'); 2 | 3 | exports.initialize = function initialize() { 4 | useSdk(); 5 | }; 6 | -------------------------------------------------------------------------------- /vue_devtools/popups/devtools-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/vue_devtools/popups/devtools-screenshot.png -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{js,jsx,ts,tsx,vue}] 2 | indent_style = space 3 | indent_size = 2 4 | trim_trailing_whitespace = true 5 | insert_final_newline = true 6 | -------------------------------------------------------------------------------- /docs/_sidebar.md: -------------------------------------------------------------------------------- 1 | - [首页-快速开始](/) 2 | 3 | - [常见问题](/FrequentlyAskedQuestions.md) 4 | 5 | - [Electron Mac 系统托盘图标失真问题](/electron-mac-tray-icon-distortion.md) 6 | -------------------------------------------------------------------------------- /docs/docsify@4/uuid/esm-browser/v3.js: -------------------------------------------------------------------------------- 1 | import v35 from './v35.js'; 2 | import md5 from './md5.js'; 3 | const v3 = v35('v3', 0x30, md5); 4 | export default v3; 5 | -------------------------------------------------------------------------------- /docs/docsify@4/uuid/esm-browser/v5.js: -------------------------------------------------------------------------------- 1 | import v35 from './v35.js'; 2 | import sha1 from './sha1.js'; 3 | const v5 = v35('v5', 0x50, sha1); 4 | export default v5; 5 | -------------------------------------------------------------------------------- /src/main/counter/index.js: -------------------------------------------------------------------------------- 1 | import updateCounter from './updateCounter.js'; 2 | 3 | export function initialize(mainWindow) { 4 | updateCounter(mainWindow); 5 | } 6 | -------------------------------------------------------------------------------- /docs/docsify@4/uuid/esm-browser/regex.js: -------------------------------------------------------------------------------- 1 | export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; 2 | -------------------------------------------------------------------------------- /src/renderer/settings/main.js: -------------------------------------------------------------------------------- 1 | import {createApp} from 'vue'; 2 | import App from './App.vue'; 3 | import router from './router'; 4 | 5 | createApp(App).use(router).mount('#app'); 6 | -------------------------------------------------------------------------------- /src/renderer/settings/views/AboutView.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/renderer/settings/views/GeneralView.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /docs/docsify@4/uuid/esm-browser/native.js: -------------------------------------------------------------------------------- 1 | const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto); 2 | export default { 3 | randomUUID 4 | }; 5 | -------------------------------------------------------------------------------- /src/renderer/index/utils/updateCounter.js: -------------------------------------------------------------------------------- 1 | export default function updateCounter(event, data) { 2 | console.log('[event, data]', event, data); 3 | // counter.value = counter.value + 1; 4 | } 5 | -------------------------------------------------------------------------------- /src/renderer/settings/views/ShortcutsView.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | registry=https://registry.npm.taobao.org/ 2 | electron_mirror=https://npm.taobao.org/mirrors/electron/ 3 | electron_builder_binaries_mirror=https://npm.taobao.org/mirrors/electron-builder-binaries/ 4 | -------------------------------------------------------------------------------- /docs/docsify@4/fonts.gstatic.com/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7l.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/docs/docsify@4/fonts.gstatic.com/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7l.woff2 -------------------------------------------------------------------------------- /docs/docsify@4/fonts.gstatic.com/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/docs/docsify@4/fonts.gstatic.com/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu.woff2 -------------------------------------------------------------------------------- /docs/docsify@4/fonts.gstatic.com/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/docs/docsify@4/fonts.gstatic.com/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu.woff2 -------------------------------------------------------------------------------- /docs/docsify@4/uuid/esm-browser/validate.js: -------------------------------------------------------------------------------- 1 | import REGEX from './regex.js'; 2 | 3 | function validate(uuid) { 4 | return typeof uuid === 'string' && REGEX.test(uuid); 5 | } 6 | 7 | export default validate; 8 | -------------------------------------------------------------------------------- /vue_devtools/popups/not-found.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

5 | Vue.js not detected 6 |

7 | -------------------------------------------------------------------------------- /docs/docsify@4/fonts.gstatic.com/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_ROW9.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xieerduos/electron-template/HEAD/docs/docsify@4/fonts.gstatic.com/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_ROW9.ttf -------------------------------------------------------------------------------- /src/renderer/index/store/index.js: -------------------------------------------------------------------------------- 1 | import {defineStore} from 'pinia'; 2 | export const useUserStore = defineStore('userStore', { 3 | state: () => { 4 | return {}; 5 | }, 6 | getters: {}, 7 | actions: {} 8 | }); 9 | -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line no-undef 2 | module.exports = { 3 | extends: ['@commitlint/config-conventional'], 4 | rules: { 5 | 'body-max-line-length': [0, 'always', Infinity] // 关闭正文行长度限制 6 | } 7 | }; 8 | -------------------------------------------------------------------------------- /src/renderer/index/App.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/renderer/settings/views/AccountView.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/renderer/index/main.js: -------------------------------------------------------------------------------- 1 | import {createApp} from 'vue'; 2 | import App from './App.vue'; 3 | import router from './router'; 4 | import {createPinia} from 'pinia'; 5 | 6 | const pinia = createPinia(); 7 | 8 | createApp(App).use(pinia).use(router).mount('#app'); 9 | -------------------------------------------------------------------------------- /src/main/utils/setTitle.js: -------------------------------------------------------------------------------- 1 | import {BrowserWindow} from 'electron'; 2 | 3 | export function handleSetTitle(event, title) { 4 | const webContents = event.sender; 5 | const mainWindow = BrowserWindow.fromWebContents(webContents); 6 | mainWindow.setTitle(title); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/utils/openDialog.js: -------------------------------------------------------------------------------- 1 | import {dialog} from 'electron'; 2 | 3 | export async function handleFileOpen() { 4 | const {canceled, filePaths} = await dialog.showOpenDialog(); 5 | if (canceled) { 6 | return ''; 7 | } else { 8 | return filePaths[0]; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /docs/docsify@4/uuid/esm-browser/version.js: -------------------------------------------------------------------------------- 1 | import validate from './validate.js'; 2 | 3 | function version(uuid) { 4 | if (!validate(uuid)) { 5 | throw TypeError('Invalid UUID'); 6 | } 7 | 8 | return parseInt(uuid.slice(14, 15), 16); 9 | } 10 | 11 | export default version; 12 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "esnext", 5 | "baseUrl": "./", 6 | "moduleResolution": "node", 7 | "paths": { 8 | "@/*": ["src/*"] 9 | }, 10 | "lib": ["esnext", "dom", "dom.iterable", "scripthost"] 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /vue_devtools/build/2906.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /*!--------------------------------------------------------------------------------------------- 2 | * Copyright (C) David Owens II, owensd.io. All rights reserved. 3 | *--------------------------------------------------------------------------------------------*/ 4 | -------------------------------------------------------------------------------- /vue_devtools/popups/disabled.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

5 | Vue.js is detected on this page.
6 | Devtools inspection is not available because it's in 7 | production mode or explicitly disabled by the author. 8 |

9 | -------------------------------------------------------------------------------- /vue_devtools/popups/disabled.nuxt.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

5 | Nuxt + Vue.js is detected on this page.
6 | Devtools inspection is not available because it's in 7 | production mode or explicitly disabled by the author. 8 |

9 | -------------------------------------------------------------------------------- /src/renderer/index/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | 25 | #Electron-builder output 26 | /dist_electron 27 | 28 | *.log -------------------------------------------------------------------------------- /docs/docsify@4/uuid/esm-browser/index.js: -------------------------------------------------------------------------------- 1 | export {default as v1} from './v1.js'; 2 | export {default as v3} from './v3.js'; 3 | export {default as v4} from './v4.js'; 4 | export {default as v5} from './v5.js'; 5 | export {default as NIL} from './nil.js'; 6 | export {default as version} from './version.js'; 7 | export {default as validate} from './validate.js'; 8 | export {default as stringify} from './stringify.js'; 9 | export {default as parse} from './parse.js'; 10 | -------------------------------------------------------------------------------- /src/main/log/index.js: -------------------------------------------------------------------------------- 1 | const electronLog = require('electron-log'); 2 | const {app} = require('electron'); 3 | const path = require('path'); 4 | 5 | const log = electronLog.create('main-process'); 6 | 7 | log.transports.file.resolvePath = () => path.join(app.getPath('userData'), 'logs/main.log'); 8 | log.transports.file.format = '[{y}-{m}-{d} {h}:{i}:{s}.{ms}] [{level}] {text}'; 9 | 10 | log.transports.file.level = true; 11 | log.transports.console.level = true; 12 | 13 | module.exports = log; 14 | -------------------------------------------------------------------------------- /vue_devtools/devtools.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 15 | 16 | 17 |
18 |
19 |
20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /vue_devtools/build/proxy.js: -------------------------------------------------------------------------------- 1 | (()=>{const e=chrome.runtime.connect({name:"content-script"});function n(e){window.postMessage({source:"vue-devtools-proxy",payload:e},"*")}function t(t){t.data&&"vue-devtools-backend"===t.data.source?e.postMessage(t.data.payload):t.data&&"vue-devtools-backend-injection"===t.data.source&&"listening"===t.data.payload&&n("init")}function o(){window.removeEventListener("message",t),n("shutdown")}e.onMessage.addListener(n),window.addEventListener("message",t),e.onDisconnect.addListener(o),n("init")})(); -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | .DS_Store 12 | /qa 13 | /rd 14 | /prod 15 | dist 16 | dist-ssr 17 | coverage 18 | *.local 19 | 20 | /cypress/videos/ 21 | /cypress/screenshots/ 22 | 23 | # Editor directories and files 24 | .vscode/* 25 | !.vscode/extensions.json 26 | .idea 27 | *.suo 28 | *.ntvs* 29 | *.njsproj 30 | *.sln 31 | *.sw? 32 | 33 | /docs/docsify@4 34 | .nojekyll 35 | #Electron-builder output 36 | /dist_electron 37 | /vue_devtools -------------------------------------------------------------------------------- /vue_devtools/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@vue-devtools/shell-chrome", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "build": "rimraf ./build && cross-env NODE_ENV=production webpack --progress" 6 | }, 7 | "dependencies": { 8 | "@vue-devtools/app-backend-core": "^0.0.0", 9 | "@vue-devtools/app-frontend": "^0.0.0", 10 | "@vue-devtools/shared-utils": "^0.0.0" 11 | }, 12 | "devDependencies": { 13 | "@vue-devtools/build-tools": "^0.0.0", 14 | "rimraf": "^3.0.2", 15 | "webpack": "^5.35.1", 16 | "webpack-cli": "^4.6.0" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | .DS_Store 12 | /qa 13 | /rd 14 | /prod 15 | dist 16 | dist-ssr 17 | coverage 18 | *.local 19 | 20 | /cypress/videos/ 21 | /cypress/screenshots/ 22 | 23 | # Editor directories and files 24 | .vscode/* 25 | !.vscode/extensions.json 26 | .idea 27 | *.suo 28 | *.ntvs* 29 | *.njsproj 30 | *.sln 31 | *.sw? 32 | 33 | # 文档文件 34 | docs/docsify@4 35 | 36 | .husky 37 | 38 | #Electron-builder output 39 | /dist_electron 40 | 41 | /vue_devtools -------------------------------------------------------------------------------- /src/renderer/settings/App.vue: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | 34 | -------------------------------------------------------------------------------- /vue_devtools/popups/enabled.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |
6 | Screenshot 7 |
8 | 9 |
10 |

11 | Vue.js is detected on this page.
12 | Open DevTools and look for the Vue panel. 13 |

14 | 15 |

16 | Troubleshooting 17 |

18 |
19 |
20 | -------------------------------------------------------------------------------- /vue_devtools/popups/enabled.nuxt.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |
6 | Screenshot 7 |
8 | 9 |
10 |

11 | Nuxt + Vue.js is detected on this page.
12 | Open DevTools and look for the Vue panel. 13 |

14 | 15 |

16 | Troubleshooting 17 |

18 |
19 |
20 | -------------------------------------------------------------------------------- /vue_devtools/build/devtools-background.js: -------------------------------------------------------------------------------- 1 | (()=>{let e=!1,n=0;chrome.devtools.network.onNavigated.addListener(t);const o=setInterval(t,1e3);function t(){e||n++>10?clearInterval(o):chrome.devtools.inspectedWindow.eval("!!(window.__VUE_DEVTOOLS_GLOBAL_HOOK__ && (window.__VUE_DEVTOOLS_GLOBAL_HOOK__.Vue || window.__VUE_DEVTOOLS_GLOBAL_HOOK__.apps.length))",(function(n){n&&!e&&(clearInterval(o),e=!0,chrome.devtools.panels.create("Vue","icons/128.png","devtools.html",(e=>{e.onShown.addListener(d),e.onHidden.addListener(_)})))}))}function d(){chrome.runtime.sendMessage("vue-panel-shown")}function _(){chrome.runtime.sendMessage("vue-panel-hidden")}t()})(); -------------------------------------------------------------------------------- /public/settings.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Settings 9 | 10 | 11 | 17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/renderer/index/views/AboutView.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 27 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <%= htmlWebpackPlugin.options.title %> 9 | 10 | 11 | 17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/renderer/index/router/index.js: -------------------------------------------------------------------------------- 1 | import {createRouter, createWebHashHistory} from 'vue-router'; 2 | import HomeView from '../views/HomeView.vue'; 3 | 4 | const routes = [ 5 | { 6 | path: '/', 7 | name: 'home', 8 | component: HomeView 9 | }, 10 | { 11 | path: '/about', 12 | name: 'about', 13 | // route level code-splitting 14 | // this generates a separate chunk (about.[hash].js) for this route 15 | // which is lazy-loaded when the route is visited. 16 | component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue') 17 | } 18 | ]; 19 | 20 | const router = createRouter({ 21 | history: createWebHashHistory(process.env.BASE_URL), 22 | routes 23 | }); 24 | 25 | export default router; 26 | -------------------------------------------------------------------------------- /docs/electron-mac-tray-icon-distortion.md: -------------------------------------------------------------------------------- 1 | # Electron Mac 系统托盘图标失真问题 2 | 3 | 我们使用 `electron-icon-builder` 方式生成的 electron 图标 4 | 5 | ```bash 6 | electron-icon-builder --input=./public/logo.png --output=./public/ 7 | ``` 8 | 9 | 例如下面: 10 | 11 | ```txt 12 | 16x16.png 13 | 24x24.png 14 | 32x32.png 15 | 48x48.png 16 | 64x64.png 17 | ``` 18 | 19 | 把上面的内容修改为下面的形式就可以了 20 | 21 | ```txt 22 | icon.png 23 | icon@1.5.png 24 | icon@2.png 25 | icon@3.png 26 | icon@4.png 27 | ``` 28 | 29 | 系统托盘使用的地方 30 | 31 | ```js 32 | const iconPath = process.platform === 'win32' ? 'win/icon.ico' : 'png/icon.png'; 33 | 34 | const tray = new Tray(path.join(__static, `icons/${iconPath}`)); 35 | ``` 36 | 37 | 参考地址: https://www.electronjs.org/zh/docs/latest/api/native-image#%E9%AB%98%E5%88%86%E8%BE%A8%E7%8E%87 38 | -------------------------------------------------------------------------------- /src/main/counter/updateCounter.js: -------------------------------------------------------------------------------- 1 | import {app, Menu} from 'electron'; 2 | 3 | export default function updateCounter(mainWindow) { 4 | // setInterval(() => { 5 | 6 | // mainWindow.webContents.send('update-counter', 1); 7 | // }, 3000); 8 | // const menu = Menu.buildFromTemplate([ 9 | // { 10 | // label: app.name, 11 | // submenu: [ 12 | // { 13 | // click: () => mainWindow.webContents.send('update-counter', 1), 14 | // label: 'Increment' 15 | // }, 16 | // { 17 | // click: () => mainWindow.webContents.send('update-counter', -1), 18 | // label: 'Decrement' 19 | // } 20 | // ] 21 | // } 22 | // ]); 23 | 24 | // Menu.setApplicationMenu(menu); 25 | } 26 | -------------------------------------------------------------------------------- /docs/docsify@4/uuid/esm-browser/v4.js: -------------------------------------------------------------------------------- 1 | import native from './native.js'; 2 | import rng from './rng.js'; 3 | import {unsafeStringify} from './stringify.js'; 4 | 5 | function v4(options, buf, offset) { 6 | if (native.randomUUID && !buf && !options) { 7 | return native.randomUUID(); 8 | } 9 | 10 | options = options || {}; 11 | const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` 12 | 13 | rnds[6] = (rnds[6] & 0x0f) | 0x40; 14 | rnds[8] = (rnds[8] & 0x3f) | 0x80; // Copy bytes to buffer, if provided 15 | 16 | if (buf) { 17 | offset = offset || 0; 18 | 19 | for (let i = 0; i < 16; ++i) { 20 | buf[offset + i] = rnds[i]; 21 | } 22 | 23 | return buf; 24 | } 25 | 26 | return unsafeStringify(rnds); 27 | } 28 | 29 | export default v4; 30 | -------------------------------------------------------------------------------- /vue_devtools/build/1569.js: -------------------------------------------------------------------------------- 1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[1569],{51569:(e,t,s)=>{s.r(t),s.d(t,{conf:()=>n,language:()=>o});var n={comments:{lineComment:"#"}},o={defaultToken:"keyword",ignoreCase:!0,tokenPostfix:".azcli",str:/[^#\s]/,tokenizer:{root:[{include:"@comment"},[/\s-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":{token:"key.identifier",next:"@type"}}}],[/^-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":{token:"key.identifier",next:"@type"}}}]],type:[{include:"@comment"},[/-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":"key.identifier"}}],[/@str+\s*/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}]],comment:[[/#.*$/,{cases:{"@eos":{token:"comment",next:"@popall"}}}]]}}}}]); -------------------------------------------------------------------------------- /docs/docsify@4/fonts.googleapis.com/css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Roboto Mono'; 3 | font-style: normal; 4 | font-weight: 400; 5 | src: url(/docsify@4/fonts.gstatic.com/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_ROW9.ttf) format('truetype'); 6 | } 7 | @font-face { 8 | font-family: 'Source Sans Pro'; 9 | font-style: normal; 10 | font-weight: 300; 11 | src: url(/docsify@4/fonts.gstatic.com/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdr.ttf) format('truetype'); 12 | } 13 | @font-face { 14 | font-family: 'Source Sans Pro'; 15 | font-style: normal; 16 | font-weight: 400; 17 | src: url(/docsify@4/fonts.gstatic.com/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7g.ttf) format('truetype'); 18 | } 19 | @font-face { 20 | font-family: 'Source Sans Pro'; 21 | font-style: normal; 22 | font-weight: 600; 23 | src: url(/docsify@4/fonts.gstatic.com/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdr.ttf) format('truetype'); 24 | } 25 | -------------------------------------------------------------------------------- /src/renderer/settings/router/index.js: -------------------------------------------------------------------------------- 1 | import {createRouter, createWebHashHistory} from 'vue-router'; 2 | import AccountView from '../views/AccountView.vue'; 3 | import AboutView from '../views/AboutView.vue'; 4 | import GeneralView from '../views/GeneralView.vue'; 5 | import ShortcutsView from '../views/ShortcutsView.vue'; 6 | 7 | const routes = [ 8 | { 9 | path: '/', 10 | name: 'Account', 11 | component: AccountView 12 | }, 13 | { 14 | path: '/general', 15 | name: 'General', 16 | component: GeneralView 17 | }, 18 | { 19 | path: '/shortcuts', 20 | name: 'Shortcuts', 21 | component: ShortcutsView 22 | }, 23 | { 24 | path: '/about', 25 | name: 'about', 26 | component: AboutView 27 | } 28 | ]; 29 | 30 | const router = createRouter({ 31 | history: createWebHashHistory(process.env.BASE_URL), 32 | routes 33 | }); 34 | 35 | export default router; 36 | -------------------------------------------------------------------------------- /vue_devtools/popups/popup.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700,700i'); 2 | 3 | body { 4 | font-family: Roboto, Avenir, Helvetica, Arial, sans-serif; 5 | font-size: 14px; 6 | font-weight: 400; 7 | line-height: 1.4; 8 | padding: 18px 24px; 9 | color: #2c3e50; 10 | } 11 | 12 | body, 13 | p { 14 | margin: 0; 15 | } 16 | 17 | p { 18 | min-width: 200px; 19 | max-width: 300px; 20 | } 21 | 22 | .short-paragraph { 23 | min-width: initial; 24 | white-space: nowrap; 25 | } 26 | 27 | a { 28 | color: #42B983; 29 | } 30 | 31 | .flex { 32 | display: flex; 33 | align-items: center; 34 | } 35 | 36 | .screenshot { 37 | position: relative; 38 | } 39 | 40 | .screenshot > img { 41 | width: 140px; 42 | height: 140px; 43 | object-fit: cover; 44 | border-radius: 100%; 45 | margin-right: 24px; 46 | box-shadow: 0 0 15px rgb(0 0 0 / 10%); 47 | } 48 | -------------------------------------------------------------------------------- /docs/docsify@4/uuid/esm-browser/rng.js: -------------------------------------------------------------------------------- 1 | // Unique ID creation requires a high quality random # generator. In the browser we therefore 2 | // require the crypto API and do not support built-in fallback to lower quality random number 3 | // generators (like Math.random()). 4 | let getRandomValues; 5 | const rnds8 = new Uint8Array(16); 6 | export default function rng() { 7 | // lazy load so that environments that need to polyfill have a chance to do so 8 | if (!getRandomValues) { 9 | // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. 10 | getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto); 11 | 12 | if (!getRandomValues) { 13 | throw new Error( 14 | 'crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported' 15 | ); 16 | } 17 | } 18 | 19 | return getRandomValues(rnds8); 20 | } 21 | -------------------------------------------------------------------------------- /.prettierrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | // 使用 prettier 的配置 schema。 3 | $schema: 'https://json.schemastore.org/prettierrc', 4 | arrowParens: 'always', // 将箭头函数的参数始终用括号包裹起来。 5 | bracketSameLine: true, // 在同一行中书写对象大括号和数组大括号。 6 | bracketSpacing: false, // 在对象大括号内不添加空格。 7 | embeddedLanguageFormatting: 'auto', // 根据需要自动格式化嵌入式语言,如在模板字符串中的 JavaScript 代码。 8 | htmlWhitespaceSensitivity: 'css', // HTML 空格敏感性使用 css。 9 | jsxSingleQuote: false, // 不使用单引号而是使用双引号来包裹 JSX 属性。 10 | printWidth: 120, // 设置每行的字符数限制,超过则格式化。 11 | proseWrap: 'preserve', // 不在 markdown 文件中强制断行。 12 | quoteProps: 'as-needed', // 只有在必要时才将属性名称用引号包裹起来,例如包含空格或保留关键字的属性名。 13 | insertPragma: false, // 不插入任何格式化代码,例如 Prettier 的特殊注释。 14 | requirePragma: false, // 不要在格式化的文件中要求使用特殊注释。 15 | semi: true, // 在语句末尾添加分号。 16 | singleQuote: true, // 使用单引号而不是双引号。 17 | tabWidth: 2, // 设置一个 tab 的宽度。 18 | trailingComma: 'none', // 不在多行的末尾添加逗号。 19 | useTabs: false, // 使用空格而不是制表符来缩进。 20 | vueIndentScriptAndStyle: false // 不缩进 .vue 文件中的 40 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 - present 李钟意 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.github/workflows/build-mac.yml: -------------------------------------------------------------------------------- 1 | name: Build and Release for MacOS 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | tags: 8 | - '*' 9 | jobs: 10 | build: 11 | runs-on: macos-latest 12 | 13 | steps: 14 | - name: Checkout code 15 | uses: actions/checkout@v2 16 | 17 | - name: Set up Python 3.x 18 | uses: actions/setup-python@v2 19 | with: 20 | python-version: 3.x # Here we specify Python 3.x 21 | 22 | - name: Get Python Path 23 | run: | 24 | echo "PYTHON_PATH=$(which python3)" >> $GITHUB_ENV # Updated to python3 25 | echo "Python Path: $PYTHON_PATH" 26 | 27 | - name: Install Node.js 28 | uses: actions/setup-node@v2 29 | with: 30 | node-version: 18 31 | - name: Install dependencies 32 | run: npm install npm install --ignore-engines --legacy-peer-deps 33 | 34 | - name: Build 35 | run: npm run build:mac 36 | 37 | - name: Release 38 | uses: softprops/action-gh-release@v1 39 | with: 40 | files: | 41 | dist_electron/*.dmg 42 | dist_electron/*.zip 43 | env: 44 | GITHUB_TOKEN: ${{ secrets.ELECTRON_TEMPLATE_TOKEN }} 45 | -------------------------------------------------------------------------------- /docs/docsify@4/uuid/esm-browser/parse.js: -------------------------------------------------------------------------------- 1 | import validate from './validate.js'; 2 | 3 | function parse(uuid) { 4 | if (!validate(uuid)) { 5 | throw TypeError('Invalid UUID'); 6 | } 7 | 8 | let v; 9 | const arr = new Uint8Array(16); // Parse ########-....-....-....-............ 10 | 11 | arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; 12 | arr[1] = (v >>> 16) & 0xff; 13 | arr[2] = (v >>> 8) & 0xff; 14 | arr[3] = v & 0xff; // Parse ........-####-....-....-............ 15 | 16 | arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; 17 | arr[5] = v & 0xff; // Parse ........-....-####-....-............ 18 | 19 | arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; 20 | arr[7] = v & 0xff; // Parse ........-....-....-####-............ 21 | 22 | arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; 23 | arr[9] = v & 0xff; // Parse ........-....-....-....-############ 24 | // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) 25 | 26 | arr[10] = ((v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000) & 0xff; 27 | arr[11] = (v / 0x100000000) & 0xff; 28 | arr[12] = (v >>> 24) & 0xff; 29 | arr[13] = (v >>> 16) & 0xff; 30 | arr[14] = (v >>> 8) & 0xff; 31 | arr[15] = v & 0xff; 32 | return arr; 33 | } 34 | 35 | export default parse; 36 | -------------------------------------------------------------------------------- /.github/workflows/build-win.yml: -------------------------------------------------------------------------------- 1 | name: Build and Release for Windows 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | tags: 8 | - '*' 9 | jobs: 10 | build: 11 | runs-on: windows-latest 12 | 13 | steps: 14 | - name: Checkout code 15 | uses: actions/checkout@v2 16 | 17 | - name: Set up Python 3.9 18 | uses: actions/setup-python@v2 19 | with: 20 | python-version: 3.9 21 | 22 | - name: Get Python Path 23 | run: | 24 | echo "PYTHON_PATH=$(where python | select -first 1)" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 25 | echo "Python Path: $env:PYTHON_PATH" 26 | 27 | - name: Install Node.js 28 | uses: actions/setup-node@v2 29 | with: 30 | node-version: 18 31 | 32 | - name: Install dependencies 33 | run: npm install --ignore-engines --legacy-peer-deps 34 | 35 | - name: Build 36 | run: npm run electron:build 37 | 38 | - name: Release 39 | uses: softprops/action-gh-release@v1 40 | with: 41 | files: | 42 | dist_electron/*.exe 43 | dist_electron/*.msi 44 | dist_electron/*.zip 45 | env: 46 | GITHUB_TOKEN: ${{ secrets.ELECTRON_TEMPLATE_TOKEN }} 47 | -------------------------------------------------------------------------------- /src/main/preload/settings.js: -------------------------------------------------------------------------------- 1 | const {contextBridge, ipcRenderer} = require('electron'); 2 | 3 | contextBridge.exposeInMainWorld('electronAPI', { 4 | send: (channel, data) => { 5 | // whitelist channels 6 | const validChannels = ['toMain_settings']; 7 | if (validChannels.includes(channel)) { 8 | ipcRenderer.send(channel, data); 9 | } 10 | }, 11 | receive: (channel, func) => { 12 | const validChannels = ['fromMain']; 13 | if (validChannels.includes(channel)) { 14 | // 解决无法removeListener问题 15 | // https://github.com/reZach/secure-electron-template/issues/43#issuecomment-772303787 16 | const subscription = (event, ...args) => func(event, ...args); 17 | ipcRenderer.on(channel, subscription); 18 | return () => { 19 | ipcRenderer.removeListener(channel, subscription); 20 | }; 21 | } 22 | }, 23 | once: (channel, callback) => { 24 | const validChannels = ['fromMain']; 25 | if (validChannels.includes(channel)) { 26 | const newCallback = (_, data) => callback(data); 27 | ipcRenderer.once(channel, newCallback); 28 | } 29 | }, 30 | removeAllListeners: (channel) => { 31 | const validChannels = ['fromMain']; 32 | if (validChannels.includes(channel)) { 33 | ipcRenderer.removeAllListeners(channel); 34 | } 35 | } 36 | }); 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Electron Template 2 | 3 | Electron Template 是一个基于 [vue-cli-plugin-electron-builder](https://github.com/nklayman/vue-cli-plugin-electron-builder) 框架的开源项目模板。 4 | 5 | ## 基于该模版开发的项目案例 6 | 7 | electron + vue3 + element-plus + pinia: https://github.com/xieerduos/electron-ffmpeg-video-to-gif 8 | 9 | ## 快速开始 10 | 11 | ### 安装项目依赖 12 | 13 | ``` 14 | npm install 15 | ``` 16 | 17 | 安装过程中遇到问题? 18 | 19 | ``` 20 | npm install --ignore-engines --legacy-peer-deps 21 | ``` 22 | 23 | ### 启动项目 24 | 25 | ``` 26 | npm start 27 | ``` 28 | 29 | ### 打包构建 30 | 31 | ``` 32 | npm run electron:build 33 | ``` 34 | 35 | ### 代码检查和修复 36 | 37 | ``` 38 | npm run lint 39 | ``` 40 | 41 | ## 自定义配置 42 | 43 | Vue Cli https://cli.vuejs.org/config/ 44 | 45 | vue-cli-plugin-electron-builder https://github.com/nklayman/vue-cli-plugin-electron-builder 46 | 47 | ## 生成图标 48 | 49 | https://www.npmjs.com/package/electron-icon-builder 50 | 51 | 把 public/logo.png 换成你自己的,运行下面命令 52 | 53 | ```bash 54 | npm run logo 55 | ``` 56 | 57 | Electron Mac 系统托盘图标失真问题[electron-mac-tray-icon-distortion.md](docs/electron-mac-tray-icon-distortion.md) 58 | 59 | ## 常见问题 60 | 61 | 遇到问题了?可以先看看这里[docs/FrequentlyAskedQuestions.md](docs/FrequentlyAskedQuestions.md)有没有答案 62 | 63 | ## License 64 | 65 | Copyright (c) 李钟意. 66 | 67 | Licensed under the [MIT](LICENSE.txt) license. 68 | -------------------------------------------------------------------------------- /src/main/settings/createWindow.js: -------------------------------------------------------------------------------- 1 | const {BrowserWindow} = require('electron'); 2 | const path = require('path'); 3 | 4 | async function createWindow() { 5 | // Create the browser window. 6 | const settingsWindow = new BrowserWindow({ 7 | width: 550, 8 | height: 470, 9 | autoHideMenuBar: true, // 自动隐藏菜单 10 | // eslint-disable-next-line no-undef 11 | icon: path.join(__static, 'icons/win/icon.ico'), 12 | webPreferences: { 13 | // eslint-disable-next-line no-undef 14 | preload: path.join(__dirname, 'settingsWindow.js'), 15 | // Use pluginOptions.nodeIntegration, leave this alone 16 | // See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info 17 | nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION, 18 | contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION 19 | } 20 | }); 21 | 22 | if (process.env.WEBPACK_DEV_SERVER_URL) { 23 | // Load the url of the dev server if in development mode 24 | await settingsWindow.loadURL(process.env.WEBPACK_DEV_SERVER_URL + 'settings.html'); 25 | if (!process.env.IS_TEST) settingsWindow.webContents.openDevTools(); 26 | } else { 27 | // Load the index.html when not in development 28 | settingsWindow.loadURL('app://./settings.html'); 29 | } 30 | return settingsWindow; 31 | } 32 | 33 | module.exports = createWindow; 34 | -------------------------------------------------------------------------------- /vue_devtools/build/background.js: -------------------------------------------------------------------------------- 1 | (()=>{const e={};function n(e){return+e+""===e}function o(n){chrome.tabs.executeScript(n,{file:"/build/proxy.js"},(function(o){o||e[n].devtools.postMessage("proxy-fail")}))}function t(n,o,t){function s(e){if("log"===e.event)return console.log("tab "+n,e.payload);t.postMessage(e)}function a(e){if("log"===e.event)return console.log("tab "+n,e.payload);o.postMessage(e)}function c(){o.onMessage.removeListener(s),t.onMessage.removeListener(a),o.disconnect(),t.disconnect(),e[n]=null}o.onMessage.addListener(s),t.onMessage.addListener(a),o.onDisconnect.addListener(c),t.onDisconnect.addListener(c)}chrome.runtime.onConnect.addListener((s=>{let a,c;n(s.name)?(a=s.name,c="devtools",o(+s.name)):(a=s.sender.tab.id,c="backend"),e[a]||(e[a]={devtools:null,backend:null}),e[a][c]=s,e[a].devtools&&e[a].backend&&t(a,e[a].devtools,e[a].backend)})),chrome.runtime.onMessage.addListener(((e,n)=>{if(n.tab&&e.vueDetected){const o=e.nuxtDetected?".nuxt":"";chrome.browserAction.setIcon({tabId:n.tab.id,path:{16:`icons/16${o}.png`,48:`icons/48${o}.png`,128:`icons/128${o}.png`}}),chrome.browserAction.setPopup({tabId:n.tab.id,popup:e.devtoolsEnabled?`popups/enabled${o}.html`:`popups/disabled${o}.html`})}"vue-take-screenshot"===e.action&&"devtools_child"===n.envType&&browser.tabs.captureVisibleTab({format:"png"}).then((n=>{browser.runtime.sendMessage({action:"vue-screenshot-result",id:e.id,dataUrl:n})}))}))})(); -------------------------------------------------------------------------------- /vue_devtools/build/9741.js: -------------------------------------------------------------------------------- 1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[9741],{39741:(t,e,r)=>{r.r(e),r.d(e,{conf:()=>s,language:()=>o});var s={brackets:[],autoClosingPairs:[],surroundingPairs:[]},o={keywords:[],typeKeywords:[],tokenPostfix:".csp",operators:[],symbols:/[=> { 33 | return origCreateHash(alg === 'md4' ? 'md5' : alg, opts); 34 | }; 35 | } 36 | }; 37 | -------------------------------------------------------------------------------- /src/main/preload/index.js: -------------------------------------------------------------------------------- 1 | const {contextBridge, ipcRenderer} = require('electron'); 2 | 3 | contextBridge.exposeInMainWorld('electronAPI', { 4 | setTitle: (title) => ipcRenderer.send('set-title', title), 5 | openFile: () => ipcRenderer.invoke('dialog:openFile'), 6 | onShowMessage: (callback) => ipcRenderer.on('show-message', callback), 7 | send: (channel, data) => { 8 | // whitelist channels 9 | const validChannels = ['toMain']; 10 | if (validChannels.includes(channel)) { 11 | ipcRenderer.send(channel, data); 12 | } 13 | }, 14 | receive: (channel, func) => { 15 | const validChannels = ['fromMain', 'update-counter']; 16 | if (validChannels.includes(channel)) { 17 | // 解决无法removeListener问题 18 | // https://github.com/reZach/secure-electron-template/issues/43#issuecomment-772303787 19 | const subscription = (event, ...args) => func(event, ...args); 20 | ipcRenderer.on(channel, subscription); 21 | return () => { 22 | ipcRenderer.removeListener(channel, subscription); 23 | }; 24 | } 25 | }, 26 | once: (channel, callback) => { 27 | const validChannels = ['fromMain']; 28 | if (validChannels.includes(channel)) { 29 | const newCallback = (_, data) => callback(data); 30 | ipcRenderer.once(channel, newCallback); 31 | } 32 | }, 33 | removeAllListeners: (channel) => { 34 | const validChannels = ['fromMain', 'update-counter']; 35 | if (validChannels.includes(channel)) { 36 | ipcRenderer.removeAllListeners(channel); 37 | } 38 | } 39 | }); 40 | -------------------------------------------------------------------------------- /vue_devtools/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "update_url": "https://clients2.google.com/service/update2/crx", 3 | 4 | "name": "Vue.js devtools", 5 | "version": "6.5.1", 6 | "version_name": "6.5.1", 7 | "description": "Browser DevTools extension for debugging Vue.js applications.", 8 | "manifest_version": 2, 9 | "icons": { 10 | "16": "icons/16.png", 11 | "48": "icons/48.png", 12 | "128": "icons/128.png" 13 | }, 14 | "browser_action": { 15 | "default_icon": { 16 | "16": "icons/16-gray.png", 17 | "48": "icons/48-gray.png", 18 | "128": "icons/128-gray.png" 19 | }, 20 | "default_title": "Vue Devtools", 21 | "default_popup": "popups/not-found.html" 22 | }, 23 | "web_accessible_resources": [ 24 | "devtools.html", 25 | "devtools-background.html", 26 | "build/backend.js" 27 | ], 28 | "devtools_page": "devtools-background.html", 29 | "background": { 30 | "scripts": [ 31 | "build/background.js" 32 | ], 33 | "persistent": true 34 | }, 35 | "permissions": [ 36 | "", 37 | "storage" 38 | ], 39 | "content_scripts": [ 40 | { 41 | "matches": [ 42 | "" 43 | ], 44 | "js": [ 45 | "build/hook.js" 46 | ], 47 | "run_at": "document_start" 48 | }, 49 | { 50 | "matches": [ 51 | "" 52 | ], 53 | "js": [ 54 | "build/detector.js" 55 | ], 56 | "run_at": "document_idle" 57 | } 58 | ], 59 | "content_security_policy": "script-src 'self'; object-src 'self'" 60 | } -------------------------------------------------------------------------------- /src/renderer/settings/components/Navbar.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 35 | 36 | 60 | -------------------------------------------------------------------------------- /docs/docsify@4/countable.min.js: -------------------------------------------------------------------------------- 1 | var defaultOptions = { 2 | countable: !0, 3 | position: 'top', 4 | margin: '10px', 5 | float: 'right', 6 | fontsize: '0.9em', 7 | color: 'rgb(90,90,90)', 8 | language: 'english', 9 | isExpected: !0 10 | }; 11 | function plugin(t, n) { 12 | if (!defaultOptions.countable) return; 13 | let o; 14 | t.beforeEach(function (t) { 15 | return (o = t.match(/([\u4e00-\u9fa5]+?|[a-zA-Z0-9]+)/g).length), t; 16 | }), 17 | t.afterEach(function (t, n) { 18 | let i = o + ' words', 19 | e = Math.ceil(o / 400) + ' min'; 20 | 'chinese' === defaultOptions.language && ((i = o + ' 字'), (e = Math.ceil(o / 400) + ' 分钟')), 21 | n( 22 | `\n ${'bottom' === defaultOptions.position ? t : ''}\n
\n \n ${i}\n ${ 29 | defaultOptions.isExpected ? `  |  ${e}` : '' 30 | }\n \n
\n
\n ${ 31 | 'bottom' !== defaultOptions.position ? t : '' 32 | }\n ` 33 | ); 34 | }); 35 | } 36 | (window.$docsify.count = Object.assign(defaultOptions, window.$docsify.count)), 37 | (window.$docsify.plugins = [].concat(plugin, window.$docsify.plugins)); 38 | -------------------------------------------------------------------------------- /vue_devtools/build/6330.js: -------------------------------------------------------------------------------- 1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[6330],{6330:(e,o,n)=>{n.r(o),n.d(o,{conf:()=>s,language:()=>t});var s={comments:{lineComment:";",blockComment:["#|","|#"]},brackets:[["(",")"],["{","}"],["[","]"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}]},t={defaultToken:"",ignoreCase:!0,tokenPostfix:".scheme",brackets:[{open:"(",close:")",token:"delimiter.parenthesis"},{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"}],keywords:["case","do","let","loop","if","else","when","cons","car","cdr","cond","lambda","lambda*","syntax-rules","format","set!","quote","eval","append","list","list?","member?","load"],constants:["#t","#f"],operators:["eq?","eqv?","equal?","and","or","not","null?"],tokenizer:{root:[[/#[xXoObB][0-9a-fA-F]+/,"number.hex"],[/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?/,"number.float"],[/(?:\b(?:(define|define-syntax|define-macro))\b)(\s+)((?:\w|\-|\!|\?)*)/,["keyword","white","variable"]],{include:"@whitespace"},{include:"@strings"},[/[a-zA-Z_#][a-zA-Z0-9_\-\?\!\*]*/,{cases:{"@keywords":"keyword","@constants":"constant","@operators":"operators","@default":"identifier"}}]],comment:[[/[^\|#]+/,"comment"],[/#\|/,"comment","@push"],[/\|#/,"comment","@pop"],[/[\|#]/,"comment"]],whitespace:[[/[ \t\r\n]+/,"white"],[/#\|/,"comment","@comment"],[/;.*$/,"comment"]],strings:[[/"$/,"string","@popall"],[/"(?=.)/,"string","@multiLineString"]],multiLineString:[[/[^\\"]+$/,"string","@popall"],[/[^\\"]+/,"string"],[/\\./,"string.escape"],[/"/,"string","@popall"],[/\\$/,"string"]]}}}}]); -------------------------------------------------------------------------------- /vue_devtools/build/1594.js: -------------------------------------------------------------------------------- 1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[1594],{71594:(e,o,n)=>{n.r(o),n.d(o,{conf:()=>t,language:()=>r});var t={comments:{lineComment:"'"},brackets:[["(",")"],["[","]"],["If","EndIf"],["While","EndWhile"],["For","EndFor"],["Sub","EndSub"]],autoClosingPairs:[{open:'"',close:'"',notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]}]},r={defaultToken:"",tokenPostfix:".sb",ignoreCase:!0,brackets:[{token:"delimiter.array",open:"[",close:"]"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"keyword.tag-if",open:"If",close:"EndIf"},{token:"keyword.tag-while",open:"While",close:"EndWhile"},{token:"keyword.tag-for",open:"For",close:"EndFor"},{token:"keyword.tag-sub",open:"Sub",close:"EndSub"}],keywords:["Else","ElseIf","EndFor","EndIf","EndSub","EndWhile","For","Goto","If","Step","Sub","Then","To","While"],tagwords:["If","Sub","While","For"],operators:[">","<","<>","<=",">=","And","Or","+","-","*","/","="],identifier:/[a-zA-Z_][\w]*/,symbols:/[=><:+\-*\/%\.,]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[{include:"@whitespace"},[/(@identifier)(?=[.])/,"type"],[/@identifier/,{cases:{"@keywords":{token:"keyword.$0"},"@operators":"operator","@default":"variable.name"}}],[/([.])(@identifier)/,{cases:{$2:["delimiter","type.member"],"@default":""}}],[/\d*\.\d+/,"number.float"],[/\d+/,"number"],[/[()\[\]]/,"@brackets"],[/@symbols/,{cases:{"@operators":"operator","@default":"delimiter"}}],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"]],whitespace:[[/[ \t\r\n]+/,""],[/(\').*$/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"C?/,"string","@pop"]]}}}}]); -------------------------------------------------------------------------------- /docs/docsify@4/uuid/esm-browser/stringify.js: -------------------------------------------------------------------------------- 1 | import validate from './validate.js'; 2 | /** 3 | * Convert array of 16 byte values to UUID string format of the form: 4 | * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 5 | */ 6 | 7 | const byteToHex = []; 8 | 9 | for (let i = 0; i < 256; ++i) { 10 | byteToHex.push((i + 0x100).toString(16).slice(1)); 11 | } 12 | 13 | export function unsafeStringify(arr, offset = 0) { 14 | // Note: Be careful editing this code! It's been tuned for performance 15 | // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 16 | return ( 17 | byteToHex[arr[offset + 0]] + 18 | byteToHex[arr[offset + 1]] + 19 | byteToHex[arr[offset + 2]] + 20 | byteToHex[arr[offset + 3]] + 21 | '-' + 22 | byteToHex[arr[offset + 4]] + 23 | byteToHex[arr[offset + 5]] + 24 | '-' + 25 | byteToHex[arr[offset + 6]] + 26 | byteToHex[arr[offset + 7]] + 27 | '-' + 28 | byteToHex[arr[offset + 8]] + 29 | byteToHex[arr[offset + 9]] + 30 | '-' + 31 | byteToHex[arr[offset + 10]] + 32 | byteToHex[arr[offset + 11]] + 33 | byteToHex[arr[offset + 12]] + 34 | byteToHex[arr[offset + 13]] + 35 | byteToHex[arr[offset + 14]] + 36 | byteToHex[arr[offset + 15]] 37 | ).toLowerCase(); 38 | } 39 | 40 | function stringify(arr, offset = 0) { 41 | const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one 42 | // of the following: 43 | // - One or more input array values don't map to a hex octet (leading to 44 | // "undefined" in the uuid) 45 | // - Invalid input values for the RFC `version` or `variant` fields 46 | 47 | if (!validate(uuid)) { 48 | throw TypeError('Stringified UUID is invalid'); 49 | } 50 | 51 | return uuid; 52 | } 53 | 54 | export default stringify; 55 | -------------------------------------------------------------------------------- /vue_devtools/build/3553.js: -------------------------------------------------------------------------------- 1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[3553],{53553:(e,s,o)=>{o.r(s),o.d(s,{conf:()=>t,language:()=>n});var t={comments:{lineComment:"REM"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],surroundingPairs:[{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],folding:{markers:{start:new RegExp("^\\s*(::\\s*|REM\\s+)#region"),end:new RegExp("^\\s*(::\\s*|REM\\s+)#endregion")}}},n={defaultToken:"",ignoreCase:!0,tokenPostfix:".bat",brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"}],keywords:/call|defined|echo|errorlevel|exist|for|goto|if|pause|set|shift|start|title|not|pushd|popd/,symbols:/[=> { 20 | const mainWindow = getMainWindow({createIfNotFound: true}); 21 | mainWindow.show(); 22 | } 23 | }, 24 | { 25 | label: '设置', 26 | click: () => { 27 | ipcMain.emit('toMain_settings', null, {type: 'show'}); 28 | } 29 | }, 30 | { 31 | label: '退出', 32 | click: () => { 33 | const mainWindow = getMainWindow({createIfNotFound: false}); 34 | if (mainWindow && mainWindow.isDestroyed()) { 35 | // 1. 销毁主窗口 36 | mainWindow.destroy(); 37 | } 38 | // 2. 退出应用 39 | app.quit(); 40 | } 41 | } 42 | ]; 43 | 44 | const contextMenu = Menu.buildFromTemplate(template); 45 | tray.setToolTip('This is my application.'); 46 | tray.setContextMenu(contextMenu); 47 | 48 | const clickCallBack = () => { 49 | if (process.platform === 'darwin') { 50 | tray.popUpContextMenu(); 51 | } else { 52 | const mainWindow = getMainWindow({createIfNotFound: true}); 53 | mainWindow.show(); 54 | } 55 | }; 56 | 57 | if (process.platform === 'darwin') { 58 | tray.on('mouse-up', clickCallBack); 59 | } else { 60 | tray.on('click', clickCallBack); 61 | } 62 | return tray; 63 | } 64 | -------------------------------------------------------------------------------- /vue_devtools/build/1585.js: -------------------------------------------------------------------------------- 1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[1585],{11585:(e,s,o)=>{o.r(s),o.d(s,{conf:()=>l,language:()=>n});var l={brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},n={defaultToken:"",tokenPostfix:".dockerfile",variable:/\${?[\w]+}?/,tokenizer:{root:[{include:"@whitespace"},{include:"@comment"},[/(ONBUILD)(\s+)/,["keyword",""]],[/(ENV)(\s+)([\w]+)/,["keyword","",{token:"variable",next:"@arguments"}]],[/(FROM|MAINTAINER|RUN|EXPOSE|ENV|ADD|ARG|VOLUME|LABEL|USER|WORKDIR|COPY|CMD|STOPSIGNAL|SHELL|HEALTHCHECK|ENTRYPOINT)/,{token:"keyword",next:"@arguments"}]],arguments:[{include:"@whitespace"},{include:"@strings"},[/(@variable)/,{cases:{"@eos":{token:"variable",next:"@popall"},"@default":"variable"}}],[/\\/,{cases:{"@eos":"","@default":""}}],[/./,{cases:{"@eos":{token:"",next:"@popall"},"@default":""}}]],whitespace:[[/\s+/,{cases:{"@eos":{token:"",next:"@popall"},"@default":""}}]],comment:[[/(^#.*$)/,"comment","@popall"]],strings:[[/\\'$/,"","@popall"],[/\\'/,""],[/'$/,"string","@popall"],[/'/,"string","@stringBody"],[/"$/,"string","@popall"],[/"/,"string","@dblStringBody"]],stringBody:[[/[^\\\$']/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}],[/\\./,"string.escape"],[/'$/,"string","@popall"],[/'/,"string","@pop"],[/(@variable)/,"variable"],[/\\$/,"string"],[/$/,"string","@popall"]],dblStringBody:[[/[^\\\$"]/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}],[/\\./,"string.escape"],[/"$/,"string","@popall"],[/"/,"string","@pop"],[/(@variable)/,"variable"],[/\\$/,"string"],[/$/,"string","@popall"]]}}}}]); -------------------------------------------------------------------------------- /vue_devtools/build/3315.js: -------------------------------------------------------------------------------- 1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[3315],{3315:(e,o,n)=>{n.r(o),n.d(o,{conf:()=>s,language:()=>t});var s={comments:{lineComment:"//",blockComment:["(*","*)"]},brackets:[["{","}"],["[","]"],["(",")"],["<",">"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"}]},t={defaultToken:"",tokenPostfix:".pascaligo",ignoreCase:!0,brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],keywords:["begin","block","case","const","else","end","fail","for","from","function","if","is","nil","of","remove","return","skip","then","type","var","while","with","option","None","transaction"],typeKeywords:["bool","int","list","map","nat","record","string","unit","address","map","mtz","xtz"],operators:["=",">","<","<=",">=","<>",":",":=","and","mod","or","+","-","*","/","@","&","^","%"],symbols:/[=><:@\^&|+\-*\/\^%]+/,tokenizer:{root:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/\$[0-9a-fA-F]{1,16}/,"number.hex"],[/\d+/,"number"],[/[;,.]/,"delimiter"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/'/,"string","@string"],[/'[^\\']'/,"string"],[/'/,"string.invalid"],[/\#\d+/,"string"]],comment:[[/[^\(\*]+/,"comment"],[/\*\)/,"comment","@pop"],[/\(\*/,"comment"]],string:[[/[^\\']+/,"string"],[/\\./,"string.escape.invalid"],[/'/,{token:"string.quote",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,"white"],[/\(\*/,"comment","@comment"],[/\/\/.*$/,"comment"]]}}}}]); -------------------------------------------------------------------------------- /vue_devtools/build/6331.js: -------------------------------------------------------------------------------- 1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[6331],{36331:(e,o,t)=>{t.r(o),t.d(o,{conf:()=>n,language:()=>s});var n={comments:{lineComment:"//",blockComment:["(*","*)"]},brackets:[["{","}"],["[","]"],["(",")"],["<",">"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"}]},s={defaultToken:"",tokenPostfix:".cameligo",ignoreCase:!0,brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],keywords:["abs","begin","Bytes","Crypto","Current","else","end","failwith","false","fun","if","in","let","let%entry","let%init","List","list","Map","map","match","match%nat","mod","not","operation","Operation","of","Set","set","sender","source","String","then","true","type","with"],typeKeywords:["int","unit","string","tz"],operators:["=",">","<","<=",">=","<>",":",":=","and","mod","or","+","-","*","/","@","&","^","%","->","<-"],symbols:/[=><:@\^&|+\-*\/\^%]+/,tokenizer:{root:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/\$[0-9a-fA-F]{1,16}/,"number.hex"],[/\d+/,"number"],[/[;,.]/,"delimiter"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/'/,"string","@string"],[/'[^\\']'/,"string"],[/'/,"string.invalid"],[/\#\d+/,"string"]],comment:[[/[^\(\*]+/,"comment"],[/\*\)/,"comment","@pop"],[/\(\*/,"comment"]],string:[[/[^\\']+/,"string"],[/\\./,"string.escape.invalid"],[/'/,{token:"string.quote",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,"white"],[/\(\*/,"comment","@comment"],[/\/\/.*$/,"comment"]]}}}}]); -------------------------------------------------------------------------------- /vue_devtools/build/7135.js: -------------------------------------------------------------------------------- 1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[7135],{87135:(e,t,n)=>{n.r(t),n.d(t,{conf:()=>i,language:()=>a});var o=n(82526),i={comments:{blockComment:["\x3c!--","--\x3e"]},brackets:[["<",">"]],autoClosingPairs:[{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],surroundingPairs:[{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],onEnterRules:[{beforeText:new RegExp("<([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$","i"),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:o.Mj.IndentAction.IndentOutdent}},{beforeText:new RegExp("<(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$","i"),action:{indentAction:o.Mj.IndentAction.Indent}}]},a={defaultToken:"",tokenPostfix:".xml",ignoreCase:!0,qualifiedName:/(?:[\w\.\-]+:)?[\w\.\-]+/,tokenizer:{root:[[/[^<&]+/,""],{include:"@whitespace"},[/(<)(@qualifiedName)/,[{token:"delimiter"},{token:"tag",next:"@tag"}]],[/(<\/)(@qualifiedName)(\s*)(>)/,[{token:"delimiter"},{token:"tag"},"",{token:"delimiter"}]],[/(<\?)(@qualifiedName)/,[{token:"delimiter"},{token:"metatag",next:"@tag"}]],[/(<\!)(@qualifiedName)/,[{token:"delimiter"},{token:"metatag",next:"@tag"}]],[/<\!\[CDATA\[/,{token:"delimiter.cdata",next:"@cdata"}],[/&\w+;/,"string.escape"]],cdata:[[/[^\]]+/,""],[/\]\]>/,{token:"delimiter.cdata",next:"@pop"}],[/\]/,""]],tag:[[/[ \t\r\n]+/,""],[/(@qualifiedName)(\s*=\s*)("[^"]*"|'[^']*')/,["attribute.name","","attribute.value"]],[/(@qualifiedName)(\s*=\s*)("[^">?\/]*|'[^'>?\/]*)(?=[\?\/]\>)/,["attribute.name","","attribute.value"]],[/(@qualifiedName)(\s*=\s*)("[^">]*|'[^'>]*)/,["attribute.name","","attribute.value"]],[/@qualifiedName/,"attribute.name"],[/\?>/,{token:"delimiter",next:"@pop"}],[/(\/)(>)/,[{token:"tag"},{token:"delimiter",next:"@pop"}]],[/>/,{token:"delimiter",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,""],[//,{token:"comment",next:"@pop"}],[//,"comment","@pop"],[//,"comment","@pop"],[/[^-]+/,"comment.content"],[/./,"comment.content"]],otherTag:[[/\/?>/,"delimiter","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],scriptAfterType:[[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/>/,{token:"delimiter",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]],style:[[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],styleAfterType:[[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/>/,{token:"delimiter",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]]}}}}]); -------------------------------------------------------------------------------- /vue_devtools/build/4858.js: -------------------------------------------------------------------------------- 1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[4858],{64858:(e,t,n)=>{n.r(t),n.d(t,{conf:()=>r,language:()=>o});var r={wordPattern:/(#?-?\d*\.\d\w*%?)|((::|[@#.!:])?[\w-?]+%?)|::|[@#.!:]/g,comments:{blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*\\/\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\/"),end:new RegExp("^\\s*\\/\\*\\s*#endregion\\b.*\\*\\/")}}},o={defaultToken:"",tokenPostfix:".css",ws:"[ \t\n\r\f]*",identifier:"-?-?([a-zA-Z]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*",brackets:[{open:"{",close:"}",token:"delimiter.bracket"},{open:"[",close:"]",token:"delimiter.bracket"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],tokenizer:{root:[{include:"@selector"}],selector:[{include:"@comments"},{include:"@import"},{include:"@strings"},["[@](keyframes|-webkit-keyframes|-moz-keyframes|-o-keyframes)",{token:"keyword",next:"@keyframedeclaration"}],["[@](page|content|font-face|-moz-document)",{token:"keyword"}],["[@](charset|namespace)",{token:"keyword",next:"@declarationbody"}],["(url-prefix)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],["(url)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],{include:"@selectorname"},["[\\*]","tag"],["[>\\+,]","delimiter"],["\\[",{token:"delimiter.bracket",next:"@selectorattribute"}],["{",{token:"delimiter.bracket",next:"@selectorbody"}]],selectorbody:[{include:"@comments"},["[*_]?@identifier@ws:(?=(\\s|\\d|[^{;}]*[;}]))","attribute.name","@rulevalue"],["}",{token:"delimiter.bracket",next:"@pop"}]],selectorname:[["(\\.|#(?=[^{])|%|(@identifier)|:)+","tag"]],selectorattribute:[{include:"@term"},["]",{token:"delimiter.bracket",next:"@pop"}]],term:[{include:"@comments"},["(url-prefix)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],["(url)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],{include:"@functioninvocation"},{include:"@numbers"},{include:"@name"},{include:"@strings"},["([<>=\\+\\-\\*\\/\\^\\|\\~,])","delimiter"],[",","delimiter"]],rulevalue:[{include:"@comments"},{include:"@strings"},{include:"@term"},["!important","keyword"],[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],warndebug:[["[@](warn|debug)",{token:"keyword",next:"@declarationbody"}]],import:[["[@](import)",{token:"keyword",next:"@declarationbody"}]],urldeclaration:[{include:"@strings"},["[^)\r\n]+","string"],["\\)",{token:"delimiter.parenthesis",next:"@pop"}]],parenthizedterm:[{include:"@term"},["\\)",{token:"delimiter.parenthesis",next:"@pop"}]],declarationbody:[{include:"@term"},[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],comments:[["\\/\\*","comment","@comment"],["\\/\\/+.*","comment"]],comment:[["\\*\\/","comment","@pop"],[/[^*/]+/,"comment"],[/./,"comment"]],name:[["@identifier","attribute.value"]],numbers:[["-?(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?",{token:"attribute.value.number",next:"@units"}],["#[0-9a-fA-F_]+(?!\\w)","attribute.value.hex"]],units:[["(em|ex|ch|rem|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?","attribute.value.unit","@pop"]],keyframedeclaration:[["@identifier","attribute.value"],["{",{token:"delimiter.bracket",switchTo:"@keyframebody"}]],keyframebody:[{include:"@term"},["{",{token:"delimiter.bracket",next:"@selectorbody"}],["}",{token:"delimiter.bracket",next:"@pop"}]],functioninvocation:[["@identifier\\(",{token:"attribute.value",next:"@functionarguments"}]],functionarguments:[["\\$@identifier@ws:","attribute.name"],["[,]","delimiter"],{include:"@term"},["\\)",{token:"attribute.value",next:"@pop"}]],strings:[['~?"',{token:"string",next:"@stringenddoublequote"}],["~?'",{token:"string",next:"@stringendquote"}]],stringenddoublequote:[["\\\\.","string"],['"',{token:"string",next:"@pop"}],[/[^\\"]+/,"string"],[".","string"]],stringendquote:[["\\\\.","string"],["'",{token:"string",next:"@pop"}],[/[^\\']+/,"string"],[".","string"]]}}}}]); -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | const {defineConfig} = require('@vue/cli-service'); 2 | const useCrypto = require('./crypto.js'); 3 | const path = require('path'); 4 | 5 | useCrypto(); 6 | 7 | const name = 'ELT'; 8 | 9 | module.exports = defineConfig({ 10 | pages: { 11 | index: { 12 | entry: 'src/renderer/index/main.js', 13 | template: 'public/index.html', 14 | filename: 'index.html' 15 | }, 16 | settings: { 17 | entry: 'src/renderer/settings/main.js', 18 | template: 'public/settings.html', 19 | filename: 'settings.html' 20 | } 21 | }, 22 | transpileDependencies: true, 23 | pluginOptions: { 24 | electronBuilder: { 25 | cache: false, 26 | builderOptions: { 27 | // electronDist: 'avr_electron_6.1.12', 28 | // afterSign: './avr_scripts/after-sign.js', 29 | appId: 'com.yourappid.www', 30 | icon: 31 | process.platform === 'win32' 32 | ? path.join(__dirname, 'public/icons/win/icon.ico') 33 | : path.join(__dirname, 'public/icons/mac/icon.icns'), 34 | productName: name, 35 | // eslint-disable-next-line no-template-curly-in-string 36 | artifactName: name.toLowerCase() + '-${os}-${arch}-${version}.${ext}', 37 | copyright: 'Copyright © 2023 李钟意 All rights reserved.', 38 | directories: { 39 | // output: "./dist_electron/${platform}/${arch}/" 40 | }, 41 | extraResources: [], 42 | win: { 43 | icon: path.join(__dirname, 'public/icons/win/icon.ico'), 44 | // target:指定要打包的目标格式,这里使用了 msi 和 nsis 两个选项,分别代表 MSI 和 NSIS 格式的安装包。 45 | target: ['msi', 'nsis'], 46 | // verifyUpdateCodeSignature 布尔值,表示是否验证更新包的数字签名。 47 | // 在发布应用程序更新时,为了确保更新包的完整性和安全性,通常需要对更新包进行数字签名。 48 | // 这个选项可以控制是否在安装更新时验证数字签名。 49 | // 如果设置为 false,则不验证数字签名。 50 | verifyUpdateCodeSignature: false 51 | }, 52 | msi: { 53 | createDesktopShortcut: true, // 布尔值,表示是否在桌面上创建快捷方式。 54 | createStartMenuShortcut: true, // 布尔值,表示是否在开始菜单中创建快捷方式。 55 | runAfterFinish: false, // 布尔值,表示是否在安装完成后自动运行程序。 56 | oneClick: true, // 布尔值,表示是否启用单击安装模式。在单击安装模式下,用户只需单击一次安装程序即可开始安装。 57 | perMachine: true, // 布尔值,表示安装程序是否将应用程序安装为机器级别(即所有用户共享) 58 | shortcutName: name // 字符串,表示快捷方式的名称。 59 | }, 60 | 61 | // publish 指定应用程序的发布渠道和版本。 62 | // 这里使用了 generic 作为发布提供者,alpha 作为版本号,url 则是指定应用程序的发布地址。 63 | // 这些信息将用于自动化部署和更新应用程序。 64 | publish: [ 65 | { 66 | provider: 'generic', 67 | channel: 'alpha', 68 | url: '' 69 | } 70 | ], 71 | // asarUnpack:指定 asar 模块的解压设置。 72 | // asar 是 Electron 用来打包应用程序的一种文件格式,这个选项可以用于指定应用程序中需要解压缩的文件或目录。 73 | // 这里使用了一个数组,其中包含两个字符串。第一个字符串指定了需要解压缩的所有 .node 文件,第二个字符串指定了需要解压缩的两个目录 sdk 和 public。 74 | asarUnpack: [], 75 | mac: { 76 | // https://github.com/electron-userland/electron-builder/issues/5689 77 | target: { 78 | target: 'default', 79 | // arch: ['universal'] 80 | // arch: ['arm64'] 81 | // arch: ['x64'] 82 | arch: process.env.VUE_APP_PACK_ARCH 83 | }, 84 | // mergeASARs: false, // https://github.com/isaacs/minimatch/issues/173 85 | category: name, // 指定应用程序所属的分类,通常用于在 macOS Dock 中显示应用程序的图标。 86 | hardenedRuntime: true, // 布尔值,表示是否启用强化的 macOS 运行时保护机制。 87 | extendInfo: { 88 | // 用于指定 macOS 应用程序的扩展信息。 89 | // 这里指定了两个键值对,分别表示应用程序需要访问麦克风和摄像头。 90 | // 这些信息将在应用程序启动时显示给用户,以获得用户的授权。 91 | NSMicrophoneUsageDescription: true, // 请允许本程序访问您的麦克风 92 | NSCameraUsageDescription: true // 请允许本程序访问您的摄像头 93 | } 94 | } 95 | }, 96 | preload: { 97 | mainWindow: 'src/main/preload/index.js', 98 | settingsWindow: 'src/main/preload/settings.js' 99 | }, 100 | chainWebpackMainProcess: (config) => { 101 | config.module.rule('babel').test(/\.js$/).use('babel-loader').loader('babel-loader').end(); 102 | }, 103 | nodeIntegration: false, 104 | externals: ['ffi-napi', 'ref-napi'], 105 | mainProcessFile: 'src/main/background.js', 106 | mainProcessWatch: ['src/main/**/*'] 107 | } 108 | } 109 | }); 110 | -------------------------------------------------------------------------------- /vue_devtools/build/6175.js: -------------------------------------------------------------------------------- 1 | "use strict";(self["webpackChunk_vue_devtools_shell_chrome"]=self["webpackChunk_vue_devtools_shell_chrome"]||[]).push([[6175],{6175:(e,t,n)=>{n.r(t),n.d(t,{conf:()=>s,language:()=>o});var s={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\$\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],folding:{markers:{start:new RegExp("^\\s*#region\\b"),end:new RegExp("^\\s*#endregion\\b")}}},o={defaultToken:"",tokenPostfix:".cs",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],keywords:["extern","alias","using","bool","decimal","sbyte","byte","short","ushort","int","uint","long","ulong","char","float","double","object","dynamic","string","assembly","is","as","ref","out","this","base","new","typeof","void","checked","unchecked","default","delegate","var","const","if","else","switch","case","while","do","for","foreach","in","break","continue","goto","return","throw","try","catch","finally","lock","yield","from","let","where","join","on","equals","into","orderby","ascending","descending","select","group","by","namespace","partial","class","field","event","method","param","public","protected","internal","private","abstract","sealed","static","struct","readonly","volatile","virtual","override","params","get","set","add","remove","operator","true","false","implicit","explicit","interface","enum","null","async","await","fixed","sizeof","stackalloc","unsafe","nameof","when"],namespaceFollows:["namespace","using"],parenFollows:["if","for","while","switch","foreach","using","catch","when"],operators:["=","??","||","&&","|","^","&","==","!=","<=",">=","<<","+","-","*","/","%","!","~","++","--","+=","-=","*=","/=","%=","&=","|=","^=","<<=",">>=",">>","=>"],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/[0-9_]*\.[0-9_]+([eE][\-+]?\d+)?[fFdD]?/,"number.float"],[/0[xX][0-9a-fA-F_]+/,"number.hex"],[/0[bB][01_]+/,"number.hex"],[/[0-9_]+/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,{token:"string.quote",next:"@string"}],[/\$\@"/,{token:"string.quote",next:"@litinterpstring"}],[/\@"/,{token:"string.quote",next:"@litstring"}],[/\$"/,{token:"string.quote",next:"@interpolatedstring"}],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],qualified:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],[/\./,"delimiter"],["","","@pop"]],namespace:[{include:"@whitespace"},[/[A-Z]\w*/,"namespace"],[/[\.=]/,"delimiter"],["","","@pop"]],comment:[[/[^\/*]+/,"comment"],["\\*/","comment","@pop"],[/[\/*]/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",next:"@pop"}]],litstring:[[/[^"]+/,"string"],[/""/,"string.escape"],[/"/,{token:"string.quote",next:"@pop"}]],litinterpstring:[[/[^"{]+/,"string"],[/""/,"string.escape"],[/{{/,"string.escape"],[/}}/,"string.escape"],[/{/,{token:"string.quote",next:"root.litinterpstring"}],[/"/,{token:"string.quote",next:"@pop"}]],interpolatedstring:[[/[^\\"{]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/{{/,"string.escape"],[/}}/,"string.escape"],[/{/,{token:"string.quote",next:"root.interpolatedstring"}],[/"/,{token:"string.quote",next:"@pop"}]],whitespace:[[/^[ \t\v\f]*#((r)|(load))(?=\s)/,"directive.csx"],[/^[ \t\v\f]*#\w.*$/,"namespace.cpp"],[/[ \t\v\f\r\n]+/,""],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]]}}}}]); --------------------------------------------------------------------------------