Upgrade to Electron 7 (#1543)

* Upgrade to Electron 7

* Fix E2E test issue with Electron 7

* Fix native theme event

* Remove runtime native theme detection

* Update Electron to v7.0.1

* Fix keytar exception
This commit is contained in:
Felix Häusler 2019-11-02 16:41:51 +01:00 committed by GitHub
parent 0ced076328
commit 09f920eade
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 180 additions and 186 deletions

View File

@ -19,6 +19,7 @@ files:
- "!node_modules/vega-lite/build/vega-lite*.js.map" - "!node_modules/vega-lite/build/vega-lite*.js.map"
# Don't bundle build files # Don't bundle build files
- "!node_modules/@felixrieseberg/spellchecker/bin" - "!node_modules/@felixrieseberg/spellchecker/bin"
- "!node_modules/@hfelix/spellchecker/bin"
- "!node_modules/ced/bin" - "!node_modules/ced/bin"
- "!node_modules/ced/vendor" - "!node_modules/ced/vendor"
- "!node_modules/cld/bin" - "!node_modules/cld/bin"
@ -34,6 +35,7 @@ files:
- "!node_modules/ced/build/vendor" - "!node_modules/ced/build/vendor"
# Don't bundle LGPL source files # Don't bundle LGPL source files
- "!node_modules/@felixrieseberg/spellchecker/vendor" - "!node_modules/@felixrieseberg/spellchecker/vendor"
- "!node_modules/@hfelix/spellchecker/vendor"
extraFiles: extraFiles:
- "LICENSE" - "LICENSE"
- from: "resources/THIRD-PARTY-LICENSES.txt" - from: "resources/THIRD-PARTY-LICENSES.txt"

View File

@ -34,7 +34,7 @@
}, },
"dependencies": { "dependencies": {
"@hfelix/electron-localshortcut": "^3.1.1", "@hfelix/electron-localshortcut": "^3.1.1",
"@hfelix/electron-spellchecker": "^1.0.0-rc.1", "@hfelix/electron-spellchecker": "^1.0.0-rc.3",
"@octokit/rest": "^16.33.1", "@octokit/rest": "^16.33.1",
"arg": "^4.1.1", "arg": "^4.1.1",
"axios": "^0.19.0", "axios": "^0.19.0",
@ -65,7 +65,7 @@
"joplin-turndown-plugin-gfm": "^1.0.11", "joplin-turndown-plugin-gfm": "^1.0.11",
"katex": "^0.11.1", "katex": "^0.11.1",
"keyboard-layout": "^2.0.16", "keyboard-layout": "^2.0.16",
"keytar": "^5.0.0-beta.3", "keytar": "5.0.0-beta.4",
"mermaid": "^8.4.0", "mermaid": "^8.4.0",
"plist": "^3.0.1", "plist": "^3.0.1",
"popper.js": "^1.16.0", "popper.js": "^1.16.0",
@ -113,7 +113,7 @@
"del": "^5.1.0", "del": "^5.1.0",
"devtron": "^1.4.0", "devtron": "^1.4.0",
"dotenv": "^8.2.0", "dotenv": "^8.2.0",
"electron": "^6.1.0", "electron": "^7.0.1",
"electron-builder": "^21.2.0", "electron-builder": "^21.2.0",
"electron-devtools-installer": "^2.2.4", "electron-devtools-installer": "^2.2.4",
"electron-rebuild": "^1.8.6", "electron-rebuild": "^1.8.6",
@ -153,7 +153,7 @@
"postcss-preset-env": "^6.6.0", "postcss-preset-env": "^6.6.0",
"raw-loader": "^3.1.0", "raw-loader": "^3.1.0",
"require-dir": "^1.2.0", "require-dir": "^1.2.0",
"spectron": "^8.0.0", "spectron": "^9.0.0",
"style-loader": "^1.0.0", "style-loader": "^1.0.0",
"svg-sprite-loader": "^4.1.6", "svg-sprite-loader": "^4.1.6",
"svgo": "^1.3.0", "svgo": "^1.3.0",
@ -171,9 +171,6 @@
"webpack-hot-middleware": "^2.25.0", "webpack-hot-middleware": "^2.25.0",
"webpack-merge": "^4.2.1" "webpack-merge": "^4.2.1"
}, },
"optionalDependencies": {
"vscode-windows-registry": "^1.0.2"
},
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git@github.com:marktext/marktext.git" "url": "git@github.com:marktext/marktext.git"

View File

@ -3,7 +3,7 @@ import fse from 'fs-extra'
import { exec } from 'child_process' import { exec } from 'child_process'
import dayjs from 'dayjs' import dayjs from 'dayjs'
import log from 'electron-log' import log from 'electron-log'
import { app, BrowserWindow, clipboard, dialog, ipcMain, systemPreferences } from 'electron' import { app, BrowserWindow, clipboard, dialog, ipcMain, nativeTheme } from 'electron'
import { isChildOfDirectory } from 'common/filesystem/paths' import { isChildOfDirectory } from 'common/filesystem/paths'
import { isLinux, isOsx, isWindows } from '../config' import { isLinux, isOsx, isWindows } from '../config'
import parseArgs from '../cli/parser' import parseArgs from '../cli/parser'
@ -115,7 +115,7 @@ class App {
const { paths } = this._accessor const { paths } = this._accessor
ensureDefaultDict(paths.userDataPath) ensureDefaultDict(paths.userDataPath)
.catch(error => { .catch(error => {
log.error(error) log.error('Error copying Hunspell dictionary: ', error)
}) })
} }
@ -143,7 +143,13 @@ class App {
} }
} }
const { startUpAction, defaultDirectoryToOpen } = preferences.getAll() const {
startUpAction,
defaultDirectoryToOpen,
autoSwitchTheme,
theme
} = preferences.getAll()
if (startUpAction === 'folder' && defaultDirectoryToOpen) { if (startUpAction === 'folder' && defaultDirectoryToOpen) {
const info = normalizeMarkdownPath(defaultDirectoryToOpen) const info = normalizeMarkdownPath(defaultDirectoryToOpen)
if (info) { if (info) {
@ -151,29 +157,32 @@ class App {
} }
} }
// Set initial native theme for theme in preferences.
const isDarkTheme = /dark/i.test(theme)
if (autoSwitchTheme === 0 && isDarkTheme !== nativeTheme.shouldUseDarkColors) {
selectTheme(nativeTheme.shouldUseDarkColors ? 'dark' : 'light')
nativeTheme.themeSource = nativeTheme.shouldUseDarkColors ? 'dark' : 'light'
} else {
nativeTheme.themeSource = isDarkTheme ? 'dark' : 'light'
}
let isDarkMode = nativeTheme.shouldUseDarkColors
ipcMain.on('broadcast-preferences-changed', change => {
// Set Chromium's color for native elements after theme change.
if (change.theme) {
const isDarkTheme = /dark/i.test(change.theme)
if (isDarkMode !== isDarkTheme) {
isDarkMode = isDarkTheme
nativeTheme.themeSource = isDarkTheme ? 'dark' : 'light'
} else if (nativeTheme.themeSource === 'system') {
// Need to set dark or light theme because we set `system` to get the current system theme.
nativeTheme.themeSource = isDarkMode ? 'dark' : 'light'
}
}
})
if (isOsx) { if (isOsx) {
app.dock.setMenu(dockMenu) app.dock.setMenu(dockMenu)
// Listen for system theme change and change Mark Text own `dark` and `light`.
// In macOS 10.14 Mojave, Apple introduced a new system-wide dark mode for
// all macOS computers.
systemPreferences.subscribeNotification(
'AppleInterfaceThemeChangedNotification',
() => {
const preferences = this._accessor.preferences
const { theme } = preferences.getAll()
// Application menu is automatically updated via preference manager.
if (systemPreferences.isDarkMode() && theme !== 'dark' &&
theme !== 'material-dark' && theme !== 'one-dark') {
selectTheme('dark')
}
if (!systemPreferences.isDarkMode() && theme !== 'light' &&
theme !== 'ulysses' && theme !== 'graphite') {
selectTheme('light')
}
}
)
} else if (isWindows) { } else if (isWindows) {
app.setJumpList([{ app.setJumpList([{
type: 'recent' type: 'recent'

View File

@ -16,7 +16,7 @@ export const editorWinOptions = {
zoomFactor: 1.0 zoomFactor: 1.0
} }
export const defaultPreferenceWinOptions = { export const preferencesWinOptions = {
width: 950, width: 950,
height: 650, height: 650,
webPreferences: { webPreferences: {

View File

@ -71,7 +71,7 @@ class DataCenter extends EventEmitter {
return Object.assign(data, encryptObj) return Object.assign(data, encryptObj)
} catch (err) { } catch (err) {
log.error(err) log.error('Failed to decrypt secure keys:', err)
return data return data
} }
} }
@ -133,7 +133,7 @@ class DataCenter extends EventEmitter {
try { try {
return await keytar.setPassword(serviceName, key, value) return await keytar.setPassword(serviceName, key, value)
} catch (err) { } catch (err) {
log.error(err) log.error('dataCenter::setItem:', err)
} }
} else { } else {
return this.store.set(key, value) return this.store.set(key, value)

View File

@ -235,7 +235,7 @@ class Watcher {
}) })
} }
} else { } else {
log.error(error) log.error('Error while watching files:', error)
} }
}) })

View File

@ -60,9 +60,7 @@ try {
// Catch errors that may come from invalid configuration files like settings. // Catch errors that may come from invalid configuration files like settings.
const msgHint = err.message.includes('Config schema violation') const msgHint = err.message.includes('Config schema violation')
? 'This seems to be an issue with your configuration file(s). ' : '' ? 'This seems to be an issue with your configuration file(s). ' : ''
log.error(`Loading Mark Text failed during initialization! ${msgHint}`, err)
log.error(`Loading Mark Text failed during initialization! ${msgHint}`)
log.error(err)
const EXIT_ON_ERROR = !!process.env.MARKTEXT_EXIT_ON_ERROR const EXIT_ON_ERROR = !!process.env.MARKTEXT_EXIT_ON_ERROR
const SHOW_ERROR_DIALOG = !process.env.MARKTEXT_ERROR_INTERACTION const SHOW_ERROR_DIALOG = !process.env.MARKTEXT_ERROR_INTERACTION

View File

@ -62,7 +62,7 @@ const handleResponseForExport = async (e, { type, content, pathname, title, page
} }
win.webContents.send('AGANI::export-success', { type, filePath }) win.webContents.send('AGANI::export-success', { type, filePath })
} catch (err) { } catch (err) {
log.error(err) log.error('Error while exporting:', err)
const ERROR_MSG = err.message || `Error happened when export ${filePath}` const ERROR_MSG = err.message || `Error happened when export ${filePath}`
win.webContents.send('AGANI::show-notification', { win.webContents.send('AGANI::show-notification', {
title: 'Export failure', title: 'Export failure',
@ -80,19 +80,9 @@ const handleResponseForExport = async (e, { type, content, pathname, title, page
const handleResponseForPrint = e => { const handleResponseForPrint = e => {
const win = BrowserWindow.fromWebContents(e.sender) const win = BrowserWindow.fromWebContents(e.sender)
win.webContents.print({ printBackground: true }, () => {
// See GH#749, Electron#16085 and Electron#17523. removePrintServiceFromWindow(win)
dialog.showMessageBox(win, {
type: 'info',
buttons: ['OK'],
defaultId: 0,
noLink: true,
message: 'Printing doesn\'t work',
detail: 'Printing is disabled due to an Electron upstream issue. Please export the document as PDF and print the PDF file. We apologize for the inconvenience!'
}) })
// win.webContents.print({ printBackground: true }, () => {
// removePrintServiceFromWindow(win)
// })
} }
const handleResponseForSave = async (e, { id, filename, markdown, pathname, options, defaultPath }) => { const handleResponseForSave = async (e, { id, filename, markdown, pathname, options, defaultPath }) => {
@ -140,7 +130,7 @@ const handleResponseForSave = async (e, { id, filename, markdown, pathname, opti
return id return id
}) })
.catch(err => { .catch(err => {
log.error(err) log.error('Error while saving:', err)
win.webContents.send('mt::tab-save-failure', id, err.message) win.webContents.send('mt::tab-save-failure', id, err.message)
}) })
} }
@ -185,7 +175,7 @@ const openPandocFile = async (windowId, pathname) => {
const data = await converter() const data = await converter()
ipcMain.emit('app-open-markdown-by-id', windowId, data) ipcMain.emit('app-open-markdown-by-id', windowId, data)
} catch (err) { } catch (err) {
log.error(err) log.error('Error while converting file:', err)
} }
} }
@ -216,7 +206,7 @@ ipcMain.on('mt::save-and-close-tabs', async (e, unsavedFiles) => {
win.send('mt::force-close-tabs-by-id', tabIds) win.send('mt::force-close-tabs-by-id', tabIds)
}) })
.catch(err => { .catch(err => {
log.error(err.error) log.error('Error while save all:', err.error)
}) })
} else { } else {
const tabIds = unsavedFiles.map(f => f.id) const tabIds = unsavedFiles.map(f => f.id)
@ -262,7 +252,7 @@ ipcMain.on('AGANI::response-file-save-as', async (e, { id, filename, markdown, p
} }
}) })
.catch(err => { .catch(err => {
log.error(err) log.error('Error while save as:', err)
win.webContents.send('mt::tab-save-failure', id, err.message) win.webContents.send('mt::tab-save-failure', id, err.message)
}) })
} }
@ -282,8 +272,7 @@ ipcMain.on('mt::close-window-confirm', async (e, unsavedFiles) => {
ipcMain.emit('window-close-by-id', win.id) ipcMain.emit('window-close-by-id', win.id)
}) })
.catch(err => { .catch(err => {
console.log(err) log.error('Error while saving before quit:', err)
log.error(err)
// Notify user about the problem. // Notify user about the problem.
dialog.showMessageBox(win, { dialog.showMessageBox(win, {
@ -446,19 +435,9 @@ export const importFile = async win => {
} }
export const print = win => { export const print = win => {
if (!win) { if (win) {
return win.webContents.send('mt::show-export-dialog', 'print')
} }
// See GH#749, Electron#16085 and Electron#17523.
dialog.showMessageBox(win, {
type: 'info',
buttons: ['OK'],
defaultId: 0,
noLink: true,
message: 'Printing doesn\'t work',
detail: 'Printing is disabled due to an Electron upstream issue. Please export the document as PDF and print the PDF file. We apologize for the inconvenience!'
})
// win.webContents.send('mt::show-export-dialog', 'print')
} }
export const openFile = async win => { export const openFile = async win => {

View File

@ -9,13 +9,13 @@ export const toggleAlwaysOnTop = win => {
export const zoomIn = win => { export const zoomIn = win => {
const { webContents } = win const { webContents } = win
const zoom = webContents.getZoomFactor() const zoom = webContents.getZoomFactor()
// WORKAROUND: Electron#16018 // WORKAROUND: We need to set zoom on the browser window due to Electron#16018.
webContents.send('mt::window-zoom', Math.min(2.0, zoom + 0.125)) webContents.send('mt::window-zoom', Math.min(2.0, zoom + 0.125))
} }
export const zoomOut = win => { export const zoomOut = win => {
const { webContents } = win const { webContents } = win
const zoom = webContents.getZoomFactor() const zoom = webContents.getZoomFactor()
// WORKAROUND: Electron#16018 // WORKAROUND: We need to set zoom on the browser window due to Electron#16018.
webContents.send('mt::window-zoom', Math.max(1.0, zoom - 0.125)) webContents.send('mt::window-zoom', Math.max(1.0, zoom - 0.125))
} }

View File

@ -92,7 +92,7 @@ class AppMenu {
} }
return recentDocuments return recentDocuments
} catch (err) { } catch (err) {
log.error(err) log.error('Error while read recently used documents:', err)
return [] return []
} }
} }

View File

@ -17,19 +17,13 @@ export default function (keybindings) {
toggleAlwaysOnTop(browserWindow) toggleAlwaysOnTop(browserWindow)
} }
}, { }, {
// TODO: Disable due GH#1225.
visible: false,
type: 'separator' type: 'separator'
}, { }, {
// TODO: Disable due GH#1225.
visible: false,
label: 'Zoom In', label: 'Zoom In',
click (menuItem, browserWindow) { click (menuItem, browserWindow) {
zoomIn(browserWindow) zoomIn(browserWindow)
} }
}, { }, {
// TODO: Disable due GH#1225.
visible: false,
label: 'Zoom Out', label: 'Zoom Out',
click (menuItem, browserWindow) { click (menuItem, browserWindow) {
zoomOut(browserWindow) zoomOut(browserWindow)

View File

@ -1,34 +0,0 @@
import { isWindows } from '../../config'
let GetStringRegKey = null
if (isWindows) {
try {
GetStringRegKey = require('vscode-windows-registry').GetStringRegKey
} catch (e) {
// Ignore webpack build error on macOS and Linux.
}
}
export const winHKEY = {
HKCU: 'HKEY_CURRENT_USER',
HKLM: 'HKEY_LOCAL_MACHINE',
HKCR: 'HKEY_CLASSES_ROOT',
HKU: 'HKEY_USERS',
HKCC: 'HKEY_CURRENT_CONFIG'
}
/**
* Returns the registry key value.
*
* @param {winHKEY} hive The registry key
* @param {string} path The registry subkey
* @param {string} name The registry name
* @returns {string|null|undefined} The registry key value or null/undefined.
*/
export const getStringRegKey = (hive, path, name) => {
try {
return GetStringRegKey(hive, path, name)
} catch (e) {
return null
}
}

View File

@ -3,24 +3,12 @@ import fs from 'fs'
import path from 'path' import path from 'path'
import EventEmitter from 'events' import EventEmitter from 'events'
import Store from 'electron-store' import Store from 'electron-store'
import { BrowserWindow, ipcMain, systemPreferences } from 'electron' import { BrowserWindow, ipcMain, nativeTheme } from 'electron'
import log from 'electron-log' import log from 'electron-log'
import { isOsx, isWindows } from '../config' import { isWindows } from '../config'
import { hasSameKeys } from '../utils' import { hasSameKeys } from '../utils'
import { getStringRegKey, winHKEY } from '../platform/win32/registry.js'
import schema from './schema' import schema from './schema'
const isDarkSystemMode = () => {
if (isOsx) {
return systemPreferences.isDarkMode()
} else if (isWindows) {
// NOTE: This key is a 32-Bit DWORD but converted to JS string!
const buf = getStringRegKey(winHKEY.HKCU, 'Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize', 'AppsUseLightTheme')
return buf === '' // zero (0)
}
return false
}
const PREFERENCES_FILE_NAME = 'preferences' const PREFERENCES_FILE_NAME = 'preferences'
class Preference extends EventEmitter { class Preference extends EventEmitter {
@ -50,7 +38,9 @@ class Preference extends EventEmitter {
let defaultSettings = null let defaultSettings = null
try { try {
defaultSettings = fse.readJsonSync(this.staticPath) defaultSettings = fse.readJsonSync(this.staticPath)
if (isDarkSystemMode()) {
// Set best theme on first application start.
if (nativeTheme.shouldUseDarkColors) {
defaultSettings.theme = 'dark' defaultSettings.theme = 'dark'
} }
} catch (err) { } catch (err) {

View File

@ -247,6 +247,15 @@
"description": "Theme--Select the theme used in Mark Text", "description": "Theme--Select the theme used in Mark Text",
"type": "string" "type": "string"
}, },
"autoSwitchTheme": {
"description": "Theme--Automatically adjust application theme according system.",
"default": 2,
"enum": [
0,
1,
2
]
},
"spellcheckerEnabled": { "spellcheckerEnabled": {
"description": "Spelling--Whether spell checking is enabled.", "description": "Spelling--Whether spell checking is enabled.",

View File

@ -46,8 +46,9 @@ const filesHandler = (files, directory, key) => {
const rebuild = (directory) => { const rebuild = (directory) => {
fs.readdir(directory, (err, files) => { fs.readdir(directory, (err, files) => {
if (err) log.error(err) if (err) {
else { log.error('imagePathAutoComplement::rebuild:', err)
} else {
filesHandler(files, directory) filesHandler(files, directory)
} }
}) })

View File

@ -3,7 +3,7 @@ import { BrowserWindow, ipcMain } from 'electron'
import electronLocalshortcut from '@hfelix/electron-localshortcut' import electronLocalshortcut from '@hfelix/electron-localshortcut'
import BaseWindow, { WindowLifecycle, WindowType } from './base' import BaseWindow, { WindowLifecycle, WindowType } from './base'
import { centerWindowOptions } from './utils' import { centerWindowOptions } from './utils'
import { TITLE_BAR_HEIGHT, defaultPreferenceWinOptions, isLinux, isOsx } from '../config' import { TITLE_BAR_HEIGHT, preferencesWinOptions, isLinux, isOsx, isWindows } from '../config'
class SettingWindow extends BaseWindow { class SettingWindow extends BaseWindow {
/** /**
@ -21,12 +21,18 @@ class SettingWindow extends BaseWindow {
*/ */
createWindow (options = {}) { createWindow (options = {}) {
const { menu: appMenu, env, keybindings, preferences } = this._accessor const { menu: appMenu, env, keybindings, preferences } = this._accessor
const winOptions = Object.assign({}, defaultPreferenceWinOptions, options) const winOptions = Object.assign({}, preferencesWinOptions, options)
centerWindowOptions(winOptions) centerWindowOptions(winOptions)
if (isLinux) { if (isLinux) {
winOptions.icon = path.join(__static, 'logo-96px.png') winOptions.icon = path.join(__static, 'logo-96px.png')
} }
// WORKAROUND: Electron has issues with different DPI per monitor when
// setting a fixed window size.
if (isWindows) {
winOptions.resizable = true
}
// Enable native or custom/frameless window and titlebar // Enable native or custom/frameless window and titlebar
const { titleBarStyle, theme } = preferences.getAll() const { titleBarStyle, theme } = preferences.getAll()
if (!isOsx) { if (!isOsx) {

View File

@ -146,6 +146,7 @@ export default {
dispatch('LINTEN_FOR_PRINT_SERVICE_CLEARUP') dispatch('LINTEN_FOR_PRINT_SERVICE_CLEARUP')
dispatch('LINTEN_FOR_EXPORT_SUCCESS') dispatch('LINTEN_FOR_EXPORT_SUCCESS')
dispatch('LISTEN_FOR_FILE_CHANGE') dispatch('LISTEN_FOR_FILE_CHANGE')
dispatch('LISTEN_WINDOW_ZOOM')
// module: notification // module: notification
dispatch('LISTEN_FOR_NOTIFICATION') dispatch('LISTEN_FOR_NOTIFICATION')

View File

@ -18,3 +18,14 @@ export const themes = [
name: 'one-dark' name: 'one-dark'
} }
] ]
export const autoSwitchThemeOptions = [{
label: 'Adjust theme at startup', // Always
value: 0
}, /* {
label: 'Only at runtime',
value: 1
}, */ {
label: 'Never',
value: 2
}]

View File

@ -4,12 +4,19 @@
<section class="offcial-themes"> <section class="offcial-themes">
<div v-for="t of themes" :key="t.name" class="theme" <div v-for="t of themes" :key="t.name" class="theme"
:class="[t.name, { 'active': t.name === theme }]" :class="[t.name, { 'active': t.name === theme }]"
@click="handleSelectTheme(t.name)" @click="onSelectChange('theme', t.name)"
> >
<div v-html="t.html"></div> <div v-html="t.html"></div>
</div> </div>
</section> </section>
<separator></separator> <separator></separator>
<cur-select
description="Automatically adjust application theme according system."
:value="autoSwitchTheme"
:options="autoSwitchThemeOptions"
:onChange="value => onSelectChange('autoSwitchTheme', value)"
></cur-select>
<separator></separator>
<section class="import-themes ag-underdevelop"> <section class="import-themes ag-underdevelop">
<div> <div>
<span>Open the themes folder</span> <span>Open the themes folder</span>
@ -27,21 +34,25 @@
<script> <script>
import { mapState } from 'vuex' import { mapState } from 'vuex'
import themeMd from './theme.md' import themeMd from './theme.md'
import { themes } from './config' import { autoSwitchThemeOptions, themes } from './config'
import markdownToHtml from '@/util/markdownToHtml' import markdownToHtml from '@/util/markdownToHtml'
import CurSelect from '../common/select'
import Separator from '../common/separator' import Separator from '../common/separator'
export default { export default {
components: { components: {
CurSelect,
Separator Separator
}, },
data () { data () {
this.autoSwitchThemeOptions = autoSwitchThemeOptions
return { return {
themes: [] themes: []
} }
}, },
computed: { computed: {
...mapState({ ...mapState({
autoSwitchTheme: state => state.preferences.autoSwitchTheme,
theme: state => state.preferences.theme theme: state => state.preferences.theme
}) })
}, },
@ -60,11 +71,8 @@ export default {
}) })
}, },
methods: { methods: {
handleSelectTheme (theme) { onSelectChange (type, value) {
this.$store.dispatch('SET_SINGLE_PREFERENCE', { this.$store.dispatch('SET_SINGLE_PREFERENCE', { type, value })
type: 'theme',
value: theme
})
} }
} }
} }
@ -84,7 +92,7 @@ export default {
cursor: pointer; cursor: pointer;
width: 250px; width: 250px;
height: 100px; height: 100px;
margin: 0px 22px 10px 22px; margin: 0px 20px 10px 20px;
padding-left: 30px; padding-left: 30px;
padding-top: 20px; padding-top: 20px;
overflow: hidden; overflow: hidden;

View File

@ -44,6 +44,7 @@ const state = {
footnote: false, footnote: false,
theme: 'light', theme: 'light',
autoSwitchTheme: 2,
spellcheckerEnabled: false, spellcheckerEnabled: false,
spellcheckerIsHunspell: false, // macOS only spellcheckerIsHunspell: false, // macOS only

View File

@ -41,6 +41,7 @@
"footnote": false, "footnote": false,
"theme": "light", "theme": "light",
"autoSwitchTheme": 2,
"spellcheckerEnabled": false, "spellcheckerEnabled": false,
"spellcheckerIsHunspell": false, "spellcheckerIsHunspell": false,

115
yarn.lock
View File

@ -852,12 +852,17 @@
ajv "^6.1.0" ajv "^6.1.0"
ajv-keywords "^3.1.0" ajv-keywords "^3.1.0"
"@felixrieseberg/spellchecker@^4.0.10": "@electron/get@^1.0.1":
version "4.0.10" version "1.5.0"
resolved "https://registry.yarnpkg.com/@felixrieseberg/spellchecker/-/spellchecker-4.0.10.tgz#ec4b11bcaa98a45d0f1c768a2f3dfb2b8768ed3f" resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.5.0.tgz#6217d9d18fb71fbd8cd2445a31aa0edc723d19dd"
integrity sha512-b+BlHcBXjx+W7yGNAtoVpAv8dvmAQ8Tp2YhNjqxIgocb6Wq1nKLl4jfu9DG60UWC0hTNvvQ74ny9ojiUFNqGSA== integrity sha512-tafxBz6n08G6SX961F/h8XFtpB/DdwRvJJoDeOH9x78jDSCMQ2G/rRWqSwLFp9oeMFBJf0Pf5Kkw6TKt5w9TWg==
dependencies: dependencies:
nan "^2.13.2" debug "^4.1.1"
env-paths "^2.2.0"
fs-extra "^8.1.0"
got "^9.6.0"
sanitize-filename "^1.6.2"
sumchecker "^3.0.0"
"@hfelix/electron-localshortcut@^3.1.1": "@hfelix/electron-localshortcut@^3.1.1":
version "3.1.1" version "3.1.1"
@ -869,12 +874,12 @@
electron-is-accelerator "^0.1.0" electron-is-accelerator "^0.1.0"
keyboardevents-areequal "^0.2.1" keyboardevents-areequal "^0.2.1"
"@hfelix/electron-spellchecker@^1.0.0-rc.1": "@hfelix/electron-spellchecker@^1.0.0-rc.3":
version "1.0.0-rc.1" version "1.0.0-rc.3"
resolved "https://registry.yarnpkg.com/@hfelix/electron-spellchecker/-/electron-spellchecker-1.0.0-rc.1.tgz#595762825bd77d1dc43cbc38e725e84e5baa989a" resolved "https://registry.yarnpkg.com/@hfelix/electron-spellchecker/-/electron-spellchecker-1.0.0-rc.3.tgz#6a76eaf16a4c15987cdda00d42bd9896a0590e70"
integrity sha512-blQCgk2Dw0mep0eQPZzcMG5bYEmf+Zvih48doiGloclgYikxBb8kYR64hKZQycVg+SeXuLeTodL7L2KI5MXn0Q== integrity sha512-qG2YxRtoOLycA7vRJENds4POxV7VC8yVmDXi7dIz3czRUZgNJNCQDR5YoRQ9xPXVLWT3oYB/RLwOS3RJRP3AnA==
dependencies: dependencies:
"@felixrieseberg/spellchecker" "^4.0.10" "@hfelix/spellchecker" "^4.0.11"
bcp47 "^1.1.2" bcp47 "^1.1.2"
cld "^2.5.1" cld "^2.5.1"
debug "^4.1.1" debug "^4.1.1"
@ -888,6 +893,13 @@
resolved "https://registry.npmjs.org/@hfelix/keyboardevent-from-electron-accelerator/-/keyboardevent-from-electron-accelerator-1.1.1.tgz#7e1d4fd913759c381b7919cc7faf4c0c641d457c" resolved "https://registry.npmjs.org/@hfelix/keyboardevent-from-electron-accelerator/-/keyboardevent-from-electron-accelerator-1.1.1.tgz#7e1d4fd913759c381b7919cc7faf4c0c641d457c"
integrity sha512-1eVkDSqoRQkF2FrPPia2EZ3310c0TvFKYvSuJbaxHpRKbI6eVHcVGKpmOSDli6Qdn3Bu0h7ozfgMZbAEBD+BLQ== integrity sha512-1eVkDSqoRQkF2FrPPia2EZ3310c0TvFKYvSuJbaxHpRKbI6eVHcVGKpmOSDli6Qdn3Bu0h7ozfgMZbAEBD+BLQ==
"@hfelix/spellchecker@^4.0.11":
version "4.0.11"
resolved "https://registry.yarnpkg.com/@hfelix/spellchecker/-/spellchecker-4.0.11.tgz#bc86881e419c7e12c88ab996a5bbbe78f044385c"
integrity sha512-xBVSHB6OPnqD+KBL5cQO0o20/TIezigD0U1a7V+e+5OvAmCnqdWo23IOdZrUDA7bBhNvK2Pml9jF3U7HRo272A==
dependencies:
nan "^2.13.2"
"@markedjs/html-differ@^3.0.0": "@markedjs/html-differ@^3.0.0":
version "3.0.0" version "3.0.0"
resolved "https://registry.npmjs.org/@markedjs/html-differ/-/html-differ-3.0.0.tgz#d7084adc3e9c060fe3f39a7f86f5543bb545d727" resolved "https://registry.npmjs.org/@markedjs/html-differ/-/html-differ-3.0.0.tgz#d7084adc3e9c060fe3f39a7f86f5543bb545d727"
@ -1017,10 +1029,10 @@
resolved "https://registry.npmjs.org/@types/node/-/node-12.7.5.tgz#e19436e7f8e9b4601005d73673b6dc4784ffcc2f" resolved "https://registry.npmjs.org/@types/node/-/node-12.7.5.tgz#e19436e7f8e9b4601005d73673b6dc4784ffcc2f"
integrity sha512-9fq4jZVhPNW8r+UYKnxF1e2HkDWOWKM5bC2/7c9wPV835I0aOrVbS/Hw/pWPk2uKrNXQqg9Z959Kz+IYDd5p3w== integrity sha512-9fq4jZVhPNW8r+UYKnxF1e2HkDWOWKM5bC2/7c9wPV835I0aOrVbS/Hw/pWPk2uKrNXQqg9Z959Kz+IYDd5p3w==
"@types/node@^10.12.18": "@types/node@^12.0.12":
version "10.14.22" version "12.11.7"
resolved "https://registry.npmjs.org/@types/node/-/node-10.14.22.tgz#34bcdf6b6cb5fc0db33d24816ad9d3ece22feea4" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.11.7.tgz#57682a9771a3f7b09c2497f28129a0462966524a"
integrity sha512-9taxKC944BqoTVjE+UT3pQH0nHZlTvITwfsOZqyc+R3sfJuxaTtxWjfn1K2UlxyPcKHf0rnaXcVFrS9F9vf0bw== integrity sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA==
"@types/q@^1.5.1": "@types/q@^1.5.1":
version "1.5.2" version "1.5.2"
@ -1892,7 +1904,7 @@ bl@^1.0.0:
bl@^3.0.0: bl@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.npmjs.org/bl/-/bl-3.0.0.tgz#3611ec00579fd18561754360b21e9f784500ff88" resolved "https://registry.yarnpkg.com/bl/-/bl-3.0.0.tgz#3611ec00579fd18561754360b21e9f784500ff88"
integrity sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A== integrity sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==
dependencies: dependencies:
readable-stream "^3.0.1" readable-stream "^3.0.1"
@ -3769,7 +3781,7 @@ decompress-response@^3.3.0:
decompress-response@^4.2.0: decompress-response@^4.2.0:
version "4.2.1" version "4.2.1"
resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986"
integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==
dependencies: dependencies:
mimic-response "^2.0.0" mimic-response "^2.0.0"
@ -4287,10 +4299,10 @@ electron-builder@^21.2.0:
update-notifier "^3.0.1" update-notifier "^3.0.1"
yargs "^13.3.0" yargs "^13.3.0"
electron-chromedriver@^6.0.0: electron-chromedriver@^7.0.0:
version "6.0.0" version "7.0.0"
resolved "https://registry.npmjs.org/electron-chromedriver/-/electron-chromedriver-6.0.0.tgz#a91b940c83f1c42ced52c9ef0605d8721613a8a2" resolved "https://registry.yarnpkg.com/electron-chromedriver/-/electron-chromedriver-7.0.0.tgz#204e1bfcdf2dfd56e5a3b8e6f37d19b1433a7937"
integrity sha512-UIhRl0sN5flfUjqActXsFrZQU1NmBObvlxzPnyeud8vhR67TllXCoqfvhQJmIrJAJJK+5M1DFhJ5iTGT++dvkg== integrity sha512-7qymT0fn3VTit0peym1iz4Y+fTwq9EPsv1V9Qh+vQdoVqP/4SM9lOHrsBeuFN1JJADZLu7R119ZvMkP6EnLYhw==
dependencies: dependencies:
electron-download "^4.1.1" electron-download "^4.1.1"
extract-zip "^1.6.7" extract-zip "^1.6.7"
@ -4305,7 +4317,7 @@ electron-devtools-installer@^2.2.4:
rimraf "^2.5.2" rimraf "^2.5.2"
semver "^5.3.0" semver "^5.3.0"
electron-download@^4.1.0, electron-download@^4.1.1: electron-download@^4.1.1:
version "4.1.1" version "4.1.1"
resolved "https://registry.npmjs.org/electron-download/-/electron-download-4.1.1.tgz#02e69556705cc456e520f9e035556ed5a015ebe8" resolved "https://registry.npmjs.org/electron-download/-/electron-download-4.1.1.tgz#02e69556705cc456e520f9e035556ed5a015ebe8"
integrity sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg== integrity sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg==
@ -4393,13 +4405,13 @@ electron-window-state@^5.0.3:
jsonfile "^4.0.0" jsonfile "^4.0.0"
mkdirp "^0.5.1" mkdirp "^0.5.1"
electron@^6.1.0: electron@^7.0.1:
version "6.1.0" version "7.0.1"
resolved "https://registry.npmjs.org/electron/-/electron-6.1.0.tgz#f816347cc0b21cb231b829a4ba5133fbfbbbe100" resolved "https://registry.yarnpkg.com/electron/-/electron-7.0.1.tgz#6da2c07aa0513d3d156b5b027f317e0959261d43"
integrity sha512-CGdM6671gA0WUmsQCVO3stqpvm6/x+S+MkKlqgsk2N3GXnIa3KkfR8k4YNp8gnCgLSZQ0yucFQB/DyEYSjrzrA== integrity sha512-eMFoZIO0+eOAE9FyNC/f0Vp8l/sJziTMK+axEt2XIpGCagom1IZgUKPGwmHUcftZCX5lNKh+Tv53T0GcNnNTKQ==
dependencies: dependencies:
"@types/node" "^10.12.18" "@electron/get" "^1.0.1"
electron-download "^4.1.0" "@types/node" "^12.0.12"
extract-zip "^1.0.3" extract-zip "^1.0.3"
element-resize-detector@^1.2.0: element-resize-detector@^1.2.0:
@ -4449,13 +4461,20 @@ encodeurl@~1.0.2:
resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: end-of-stream@^1.0.0, end-of-stream@^1.1.0:
version "1.4.1" version "1.4.1"
resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
dependencies: dependencies:
once "^1.4.0" once "^1.4.0"
end-of-stream@^1.4.1:
version "1.4.4"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
dependencies:
once "^1.4.0"
engine.io-client@~3.2.0: engine.io-client@~3.2.0:
version "3.2.1" version "3.2.1"
resolved "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36" resolved "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36"
@ -7114,10 +7133,10 @@ keypress@0.1.x:
resolved "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz#4a3188d4291b66b4f65edb99f806aa9ae293592a" resolved "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz#4a3188d4291b66b4f65edb99f806aa9ae293592a"
integrity sha1-SjGI1CkbZrT2XtuZ+AaqmuKTWSo= integrity sha1-SjGI1CkbZrT2XtuZ+AaqmuKTWSo=
keytar@^5.0.0-beta.3: keytar@5.0.0-beta.4:
version "5.0.0-beta.3" version "5.0.0-beta.4"
resolved "https://registry.npmjs.org/keytar/-/keytar-5.0.0-beta.3.tgz#326793cd54336152311ba6ee23cba66b35d9c933" resolved "https://registry.yarnpkg.com/keytar/-/keytar-5.0.0-beta.4.tgz#273c842780ccfd1fda25b37832e284e8741eec9f"
integrity sha512-e6zEkaq9AahKi5olNm/cqJAxTD8MNDGEN2Ew2eqTcBSJ+UWDGTp84nWUJ8EyS31vuz+Fcu9tcZzPZB4F94Wqcw== integrity sha512-avv3gNY+y72AYsUCSQn1VdETCgRuTDy1YJ1Pm3kIuIHlfIhaaZzVKrZSRwVLt3omWxQ80aI8I8bHPP1c5zxjqw==
dependencies: dependencies:
nan "2.14.0" nan "2.14.0"
prebuild-install "5.3.2" prebuild-install "5.3.2"
@ -7878,7 +7897,7 @@ mimic-response@^1.0.0, mimic-response@^1.0.1:
mimic-response@^2.0.0: mimic-response@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-2.0.0.tgz#996a51c60adf12cb8a87d7fb8ef24c2f3d5ebb46" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.0.0.tgz#996a51c60adf12cb8a87d7fb8ef24c2f3d5ebb46"
integrity sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ== integrity sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ==
mini-css-extract-plugin@^0.8.0: mini-css-extract-plugin@^0.8.0:
@ -9470,7 +9489,7 @@ posthtml@^0.9.2:
prebuild-install@5.3.2: prebuild-install@5.3.2:
version "5.3.2" version "5.3.2"
resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.2.tgz#6392e9541ac0b879ef0f22b3d65037417eb2035e" resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.2.tgz#6392e9541ac0b879ef0f22b3d65037417eb2035e"
integrity sha512-INDfXzTPnhT+WYQemqnAXlP7SvfiFMopMozSgXCZ+RDLb279gKfIuLk4o7PgEawLp3WrMgIYGBpkxpraROHsSA== integrity sha512-INDfXzTPnhT+WYQemqnAXlP7SvfiFMopMozSgXCZ+RDLb279gKfIuLk4o7PgEawLp3WrMgIYGBpkxpraROHsSA==
dependencies: dependencies:
detect-libc "^1.0.3" detect-libc "^1.0.3"
@ -10526,7 +10545,7 @@ simple-concat@^1.0.0:
simple-get@^3.0.3: simple-get@^3.0.3:
version "3.1.0" version "3.1.0"
resolved "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3"
integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==
dependencies: dependencies:
decompress-response "^4.2.0" decompress-response "^4.2.0"
@ -10836,13 +10855,13 @@ spdy@^4.0.1:
select-hose "^2.0.0" select-hose "^2.0.0"
spdy-transport "^3.0.0" spdy-transport "^3.0.0"
spectron@^8.0.0: spectron@^9.0.0:
version "8.0.0" version "9.0.0"
resolved "https://registry.npmjs.org/spectron/-/spectron-8.0.0.tgz#86e83c5dccb174850c052e2e718d5b1158764a52" resolved "https://registry.yarnpkg.com/spectron/-/spectron-9.0.0.tgz#6581780027172095e168353c82ed934212a0c97f"
integrity sha512-MI9+lAamDnw7S0vKaxXjU3g5qaW5KANaFLc+Hgq+QmMCkQbZLt6ukFFGfalmwIuYrmq+yWQPCD4CXgt3VSHrLA== integrity sha512-aMxprQ+5/8hDl27P6FafIuuL8jAueJ7WEc6S6pEEQNU7xGCMcfj0RY6TB1i9BtkazMymIxAkmwqlK233Fbhcgw==
dependencies: dependencies:
dev-null "^0.1.1" dev-null "^0.1.1"
electron-chromedriver "^6.0.0" electron-chromedriver "^7.0.0"
request "^2.87.0" request "^2.87.0"
split "^1.0.0" split "^1.0.0"
webdriverio "^4.13.0" webdriverio "^4.13.0"
@ -11107,6 +11126,13 @@ sumchecker@^2.0.2:
dependencies: dependencies:
debug "^2.2.0" debug "^2.2.0"
sumchecker@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.0.tgz#da5457b4605184575c76540e5e99cc777cb8ce4c"
integrity sha512-yreseuC/z4iaodVoq07XULEOO9p4jnQazO7mbrnDSvWAU/y2cbyIKs+gWJptfcGu9R+1l27K8Rkj0bfvqnBpgQ==
dependencies:
debug "^4.1.0"
supports-color@6.0.0: supports-color@6.0.0:
version "6.0.0" version "6.0.0"
resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a"
@ -11247,7 +11273,7 @@ tapable@^1.0.0, tapable@^1.1.3:
tar-fs@^2.0.0: tar-fs@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz#677700fc0c8b337a78bee3623fdc235f21d7afad" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.0.tgz#677700fc0c8b337a78bee3623fdc235f21d7afad"
integrity sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA== integrity sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==
dependencies: dependencies:
chownr "^1.1.1" chownr "^1.1.1"
@ -11270,7 +11296,7 @@ tar-stream@^1.5.0:
tar-stream@^2.0.0: tar-stream@^2.0.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.0.tgz#d1aaa3661f05b38b5acc9b7020efdca5179a2cc3" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.0.tgz#d1aaa3661f05b38b5acc9b7020efdca5179a2cc3"
integrity sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw== integrity sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==
dependencies: dependencies:
bl "^3.0.0" bl "^3.0.0"
@ -12419,11 +12445,6 @@ vscode-ripgrep@^1.5.7:
resolved "https://registry.npmjs.org/vscode-ripgrep/-/vscode-ripgrep-1.5.7.tgz#acb6b548af488a4bca5d0f1bb5faf761343289ce" resolved "https://registry.npmjs.org/vscode-ripgrep/-/vscode-ripgrep-1.5.7.tgz#acb6b548af488a4bca5d0f1bb5faf761343289ce"
integrity sha512-/Vsz/+k8kTvui0q3O74pif9FK0nKopgFTiGNVvxicZANxtSA8J8gUE9GQ/4dpi7D/2yI/YVORszwVskFbz46hQ== integrity sha512-/Vsz/+k8kTvui0q3O74pif9FK0nKopgFTiGNVvxicZANxtSA8J8gUE9GQ/4dpi7D/2yI/YVORszwVskFbz46hQ==
vscode-windows-registry@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/vscode-windows-registry/-/vscode-windows-registry-1.0.2.tgz#b863e704a6a69c50b3098a55fbddbe595b0c124a"
integrity sha512-/CLLvuOSM2Vme2z6aNyB+4Omd7hDxpf4Thrt8ImxnXeQtxzel2bClJpFQvQqK/s4oaXlkBKS7LqVLeZM+uSVIA==
vue-electron@^1.0.6: vue-electron@^1.0.6:
version "1.0.6" version "1.0.6"
resolved "https://registry.npmjs.org/vue-electron/-/vue-electron-1.0.6.tgz#e798e03180b8933539defe31f92e53b9242b9406" resolved "https://registry.npmjs.org/vue-electron/-/vue-electron-1.0.6.tgz#e798e03180b8933539defe31f92e53b9242b9406"