mirror of
https://github.com/LBRYFoundation/lbry-desktop.git
synced 2025-08-30 08:51:24 +00:00
autoLaunch on startup
This commit is contained in:
parent
30270f2df9
commit
8cb4208282
14 changed files with 176 additions and 12 deletions
|
@ -17,6 +17,8 @@ export default appState => {
|
||||||
defaultHeight: height,
|
defaultHeight: height,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const startMinimized = (process.argv || []).includes('--hidden');
|
||||||
|
|
||||||
const windowConfiguration = {
|
const windowConfiguration = {
|
||||||
backgroundColor: '#270f34', // Located in src/scss/init/_vars.scss `--color-background--splash`
|
backgroundColor: '#270f34', // Located in src/scss/init/_vars.scss `--color-background--splash`
|
||||||
minWidth: 950,
|
minWidth: 950,
|
||||||
|
@ -126,9 +128,13 @@ export default appState => {
|
||||||
});
|
});
|
||||||
|
|
||||||
window.once('ready-to-show', () => {
|
window.once('ready-to-show', () => {
|
||||||
window.show();
|
startMinimized ? window.hide() : window.show();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
window.webContents.once('dom-ready', () => {
|
||||||
|
startMinimized && window.hide()
|
||||||
|
})
|
||||||
|
|
||||||
window.webContents.on('did-finish-load', () => {
|
window.webContents.on('did-finish-load', () => {
|
||||||
window.webContents.session.setUserAgent(`LBRY/${app.getVersion()}`);
|
window.webContents.session.setUserAgent(`LBRY/${app.getVersion()}`);
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
"postinstall:warning": "echo '\n\nWARNING\n\nNot all node modules were installed because NODE_ENV is set to \"production\".\nThis should only be set after installing dependencies with \"yarn\". The app will not work.\n\n'"
|
"postinstall:warning": "echo '\n\nWARNING\n\nNot all node modules were installed because NODE_ENV is set to \"production\".\nThis should only be set after installing dependencies with \"yarn\". The app will not work.\n\n'"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"auto-launch": "^5.0.5",
|
||||||
"electron-dl": "^1.11.0",
|
"electron-dl": "^1.11.0",
|
||||||
"electron-log": "^2.2.12",
|
"electron-log": "^2.2.12",
|
||||||
"electron-notarize": "^0.1.1",
|
"electron-notarize": "^0.1.1",
|
||||||
|
|
|
@ -24,7 +24,6 @@ export default function EmbedArea(props: Props) {
|
||||||
|
|
||||||
function copyToClipboard() {
|
function copyToClipboard() {
|
||||||
const topRef = input.current;
|
const topRef = input.current;
|
||||||
console.log(topRef);
|
|
||||||
if (topRef && topRef.input && topRef.input.current) {
|
if (topRef && topRef.input && topRef.input.current) {
|
||||||
topRef.input.current.select();
|
topRef.input.current.select();
|
||||||
document.execCommand('copy');
|
document.execCommand('copy');
|
||||||
|
|
20
ui/component/settingAutoLaunch/index.js
Normal file
20
ui/component/settingAutoLaunch/index.js
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
import { connect } from 'react-redux';
|
||||||
|
import * as SETTINGS from 'constants/settings';
|
||||||
|
import { doSetAutoLaunch } from 'redux/actions/settings';
|
||||||
|
import { makeSelectClientSetting } from 'redux/selectors/settings';
|
||||||
|
import { doToast } from 'lbry-redux';
|
||||||
|
import SettingAutoLaunch from './view';
|
||||||
|
|
||||||
|
const select = state => ({
|
||||||
|
autoLaunch: makeSelectClientSetting(SETTINGS.AUTO_LAUNCH)(state),
|
||||||
|
});
|
||||||
|
|
||||||
|
const perform = dispatch => ({
|
||||||
|
showToast: options => dispatch(doToast(options)),
|
||||||
|
setAutoLaunch: value => dispatch(doSetAutoLaunch(value)),
|
||||||
|
});
|
||||||
|
|
||||||
|
export default connect(
|
||||||
|
select,
|
||||||
|
perform
|
||||||
|
)(SettingAutoLaunch);
|
33
ui/component/settingAutoLaunch/view.jsx
Normal file
33
ui/component/settingAutoLaunch/view.jsx
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
// @flow
|
||||||
|
|
||||||
|
import React from 'react';
|
||||||
|
import { FormField } from 'component/common/form';
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
autoLaunch: string,
|
||||||
|
showToast: ({}) => void,
|
||||||
|
setAutoLaunch: boolean => void,
|
||||||
|
};
|
||||||
|
|
||||||
|
function SettingAutoLaunch(props: Props) {
|
||||||
|
const { autoLaunch, setAutoLaunch } = props;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<React.Fragment>
|
||||||
|
<FormField
|
||||||
|
type="checkbox"
|
||||||
|
name="autolaunch"
|
||||||
|
onChange={e => {
|
||||||
|
setAutoLaunch(e.target.checked);
|
||||||
|
}}
|
||||||
|
checked={autoLaunch}
|
||||||
|
label={__('Start minimized')}
|
||||||
|
helper={__(
|
||||||
|
'Improve view speed and help the LBRY network by allowing the app to cuddle up in your system tray.'
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
</React.Fragment>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default SettingAutoLaunch;
|
|
@ -16,6 +16,7 @@ export const AUTOMATIC_DARK_MODE_ENABLED = 'automatic_dark_mode_enabled';
|
||||||
export const AUTOPLAY = 'autoplay';
|
export const AUTOPLAY = 'autoplay';
|
||||||
export const OS_NOTIFICATIONS_ENABLED = 'os_notifications_enabled';
|
export const OS_NOTIFICATIONS_ENABLED = 'os_notifications_enabled';
|
||||||
export const AUTO_DOWNLOAD = 'auto_download';
|
export const AUTO_DOWNLOAD = 'auto_download';
|
||||||
|
export const AUTO_LAUNCH = 'auto_launch';
|
||||||
export const SUPPORT_OPTION = 'support_option';
|
export const SUPPORT_OPTION = 'support_option';
|
||||||
export const HIDE_BALANCE = 'hide_balance';
|
export const HIDE_BALANCE = 'hide_balance';
|
||||||
export const HIDE_SPLASH_ANIMATION = 'hide_splash_animation';
|
export const HIDE_SPLASH_ANIMATION = 'hide_splash_animation';
|
||||||
|
|
16
ui/index.jsx
16
ui/index.jsx
|
@ -228,8 +228,9 @@ document.addEventListener('click', event => {
|
||||||
});
|
});
|
||||||
|
|
||||||
function AppWrapper() {
|
function AppWrapper() {
|
||||||
const haveLaunched = window.sessionStorage.getItem('loaded') === 'y';
|
// Splash screen and sdk setup not needed on web
|
||||||
const [readyToLaunch, setReadyToLaunch] = useState(haveLaunched || IS_WEB);
|
const [readyToLaunch, setReadyToLaunch] = useState(IS_WEB);
|
||||||
|
const [persistDone, setPersistDone] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// @if TARGET='app'
|
// @if TARGET='app'
|
||||||
|
@ -255,22 +256,25 @@ function AppWrapper() {
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (readyToLaunch) {
|
if (readyToLaunch && persistDone) {
|
||||||
app.store.dispatch(doUpdateIsNightAsync());
|
app.store.dispatch(doUpdateIsNightAsync());
|
||||||
app.store.dispatch(doDaemonReady());
|
app.store.dispatch(doDaemonReady());
|
||||||
app.store.dispatch(doBlackListedOutpointsSubscribe());
|
app.store.dispatch(doBlackListedOutpointsSubscribe());
|
||||||
app.store.dispatch(doFilteredOutpointsSubscribe());
|
app.store.dispatch(doFilteredOutpointsSubscribe());
|
||||||
window.sessionStorage.setItem('loaded', 'y');
|
|
||||||
|
|
||||||
const appReadyTime = Date.now();
|
const appReadyTime = Date.now();
|
||||||
const timeToStart = appReadyTime - startTime;
|
const timeToStart = appReadyTime - startTime;
|
||||||
analytics.readyEvent(timeToStart);
|
analytics.readyEvent(timeToStart);
|
||||||
}
|
}
|
||||||
}, [readyToLaunch, haveLaunched]);
|
}, [readyToLaunch, persistDone]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Provider store={store}>
|
<Provider store={store}>
|
||||||
<PersistGate persistor={persistor} loading={<div className="main--launching" />}>
|
<PersistGate
|
||||||
|
persistor={persistor}
|
||||||
|
onBeforeLift={() => setPersistDone(true)}
|
||||||
|
loading={<div className="main--launching" />}
|
||||||
|
>
|
||||||
<Fragment>
|
<Fragment>
|
||||||
{readyToLaunch ? (
|
{readyToLaunch ? (
|
||||||
<ConnectedRouter history={history}>
|
<ConnectedRouter history={history}>
|
||||||
|
|
|
@ -195,13 +195,11 @@ class HelpPage extends React.PureComponent<Props, State> {
|
||||||
<header className="table__header">
|
<header className="table__header">
|
||||||
<h2 className="section__title">{__('About')}</h2>
|
<h2 className="section__title">{__('About')}</h2>
|
||||||
|
|
||||||
{this.state.upgradeAvailable !== null && this.state.upgradeAvailable ? (
|
{this.state.upgradeAvailable !== null && this.state.upgradeAvailable && (
|
||||||
<p className="section__subtitle">
|
<p className="section__subtitle">
|
||||||
{__('A newer version of LBRY is available.')}{' '}
|
{__('A newer version of LBRY is available.')}{' '}
|
||||||
<Button button="link" href={newVerLink} label={__('Download now!')} />
|
<Button button="link" href={newVerLink} label={__('Download now!')} />
|
||||||
</p>
|
</p>
|
||||||
) : (
|
|
||||||
<p className="section__subtitle">{__('Your LBRY app is up to date.')}</p>
|
|
||||||
)}
|
)}
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
|
|
@ -11,10 +11,16 @@ import Button from 'component/button';
|
||||||
import I18nMessage from 'component/i18nMessage';
|
import I18nMessage from 'component/i18nMessage';
|
||||||
import Page from 'component/page';
|
import Page from 'component/page';
|
||||||
import SettingLanguage from 'component/settingLanguage';
|
import SettingLanguage from 'component/settingLanguage';
|
||||||
|
import SettingAutoLaunch from 'component/settingAutoLaunch';
|
||||||
import FileSelector from 'component/common/file-selector';
|
import FileSelector from 'component/common/file-selector';
|
||||||
import SyncToggle from 'component/syncToggle';
|
import SyncToggle from 'component/syncToggle';
|
||||||
import Card from 'component/common/card';
|
import Card from 'component/common/card';
|
||||||
import { getSavedPassword } from 'util/saved-passwords';
|
import { getSavedPassword } from 'util/saved-passwords';
|
||||||
|
|
||||||
|
// @if TARGET='app'
|
||||||
|
export const IS_MAC = process.platform === 'darwin';
|
||||||
|
// @endif
|
||||||
|
|
||||||
type Price = {
|
type Price = {
|
||||||
currency: string,
|
currency: string,
|
||||||
amount: number,
|
amount: number,
|
||||||
|
@ -632,6 +638,11 @@ class SettingsPage extends React.PureComponent<Props, State> {
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
{/* @if TARGET='app' */}
|
||||||
|
{/* Auto launch in a hidden state doesn't work on mac https://github.com/Teamwork/node-auto-launch/issues/81 */}
|
||||||
|
{!IS_MAC && <Card title={__('Startup Preferences')} actions={<SettingAutoLaunch />} />}
|
||||||
|
{/* @endif */}
|
||||||
|
|
||||||
<Card
|
<Card
|
||||||
title={__('Application Cache')}
|
title={__('Application Cache')}
|
||||||
subtitle={
|
subtitle={
|
||||||
|
|
|
@ -22,7 +22,7 @@ import {
|
||||||
doClearSupport,
|
doClearSupport,
|
||||||
} from 'lbry-redux';
|
} from 'lbry-redux';
|
||||||
import Native from 'native';
|
import Native from 'native';
|
||||||
import { doFetchDaemonSettings } from 'redux/actions/settings';
|
import { doFetchDaemonSettings, doSetAutoLaunch } from 'redux/actions/settings';
|
||||||
import {
|
import {
|
||||||
selectIsUpgradeSkipped,
|
selectIsUpgradeSkipped,
|
||||||
selectUpdateUrl,
|
selectUpdateUrl,
|
||||||
|
@ -323,6 +323,7 @@ export function doDaemonReady() {
|
||||||
|
|
||||||
// @if TARGET='app'
|
// @if TARGET='app'
|
||||||
dispatch(doBalanceSubscribe());
|
dispatch(doBalanceSubscribe());
|
||||||
|
dispatch(doSetAutoLaunch());
|
||||||
dispatch(doFetchDaemonSettings());
|
dispatch(doFetchDaemonSettings());
|
||||||
dispatch(doFetchFileInfosAndPublishedClaims());
|
dispatch(doFetchFileInfosAndPublishedClaims());
|
||||||
if (!selectIsUpgradeSkipped(state)) {
|
if (!selectIsUpgradeSkipped(state)) {
|
||||||
|
|
|
@ -3,7 +3,10 @@ import * as SETTINGS from 'constants/settings';
|
||||||
import * as LOCAL_ACTIONS from 'constants/action_types';
|
import * as LOCAL_ACTIONS from 'constants/action_types';
|
||||||
import analytics from 'analytics';
|
import analytics from 'analytics';
|
||||||
import SUPPORTED_LANGUAGES from 'constants/supported_languages';
|
import SUPPORTED_LANGUAGES from 'constants/supported_languages';
|
||||||
|
import { launcher } from 'util/autoLaunch';
|
||||||
|
import { makeSelectClientSetting } from 'redux/selectors/settings';
|
||||||
|
|
||||||
|
export const IS_MAC = process.platform === 'darwin';
|
||||||
const UPDATE_IS_NIGHT_INTERVAL = 5 * 60 * 1000;
|
const UPDATE_IS_NIGHT_INTERVAL = 5 * 60 * 1000;
|
||||||
|
|
||||||
export function doFetchDaemonSettings() {
|
export function doFetchDaemonSettings() {
|
||||||
|
@ -120,3 +123,54 @@ export function doSetLanguage(language) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function doSetAutoLaunch(value) {
|
||||||
|
return (dispatch, getState) => {
|
||||||
|
const state = getState();
|
||||||
|
const autoLaunch = makeSelectClientSetting(SETTINGS.AUTO_LAUNCH)(state);
|
||||||
|
|
||||||
|
if (IS_MAC) {
|
||||||
|
launcher.disable();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value === undefined) {
|
||||||
|
launcher.isEnabled().then(isEnabled => {
|
||||||
|
if (isEnabled) {
|
||||||
|
if (!autoLaunch) {
|
||||||
|
launcher.disable().then(() => {
|
||||||
|
dispatch(doSetClientSetting(SETTINGS.AUTO_LAUNCH, false));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (autoLaunch || autoLaunch === null || autoLaunch === undefined) {
|
||||||
|
launcher.enable().then(() => {
|
||||||
|
dispatch(doSetClientSetting(SETTINGS.AUTO_LAUNCH, true));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (value === true) {
|
||||||
|
launcher.isEnabled().then(function(isEnabled) {
|
||||||
|
if (!isEnabled) {
|
||||||
|
launcher.enable().then(() => {
|
||||||
|
dispatch(doSetClientSetting(SETTINGS.AUTO_LAUNCH, true));
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
dispatch(doSetClientSetting(SETTINGS.AUTO_LAUNCH, true));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// value = false
|
||||||
|
launcher.isEnabled().then(function(isEnabled) {
|
||||||
|
if (isEnabled) {
|
||||||
|
launcher.disable().then(() => {
|
||||||
|
dispatch(doSetClientSetting(SETTINGS.AUTO_LAUNCH, false));
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
dispatch(doSetClientSetting(SETTINGS.AUTO_LAUNCH, false));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ const defaultState = {
|
||||||
[SETTINGS.HIDE_BALANCE]: false,
|
[SETTINGS.HIDE_BALANCE]: false,
|
||||||
[SETTINGS.OS_NOTIFICATIONS_ENABLED]: true,
|
[SETTINGS.OS_NOTIFICATIONS_ENABLED]: true,
|
||||||
[SETTINGS.AUTOMATIC_DARK_MODE_ENABLED]: false,
|
[SETTINGS.AUTOMATIC_DARK_MODE_ENABLED]: false,
|
||||||
|
|
||||||
[SETTINGS.DARK_MODE_TIMES]: {
|
[SETTINGS.DARK_MODE_TIMES]: {
|
||||||
from: { hour: '21', min: '00', formattedTime: '21:00' },
|
from: { hour: '21', min: '00', formattedTime: '21:00' },
|
||||||
to: { hour: '8', min: '00', formattedTime: '8:00' },
|
to: { hour: '8', min: '00', formattedTime: '8:00' },
|
||||||
|
@ -40,6 +41,9 @@ const defaultState = {
|
||||||
[SETTINGS.AUTOPLAY]: true,
|
[SETTINGS.AUTOPLAY]: true,
|
||||||
[SETTINGS.FLOATING_PLAYER]: true,
|
[SETTINGS.FLOATING_PLAYER]: true,
|
||||||
[SETTINGS.AUTO_DOWNLOAD]: true,
|
[SETTINGS.AUTO_DOWNLOAD]: true,
|
||||||
|
|
||||||
|
// OS
|
||||||
|
[SETTINGS.AUTO_LAUNCH]: true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
6
ui/util/autoLaunch.js
Normal file
6
ui/util/autoLaunch.js
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
const AutoLaunch = require('auto-launch');
|
||||||
|
|
||||||
|
export const launcher = new AutoLaunch({
|
||||||
|
name: 'LBRY',
|
||||||
|
isHidden: true,
|
||||||
|
});
|
26
yarn.lock
26
yarn.lock
|
@ -1577,6 +1577,11 @@ app-builder-lib@21.2.0, app-builder-lib@~21.2.0:
|
||||||
semver "^6.3.0"
|
semver "^6.3.0"
|
||||||
temp-file "^3.3.4"
|
temp-file "^3.3.4"
|
||||||
|
|
||||||
|
applescript@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/applescript/-/applescript-1.0.0.tgz#bb87af568cad034a4e48c4bdaf6067a3a2701317"
|
||||||
|
integrity sha1-u4evVoytA0pOSMS9r2Bno6JwExc=
|
||||||
|
|
||||||
aproba@^1.0.3, aproba@^1.1.1:
|
aproba@^1.0.3, aproba@^1.1.1:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
|
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
|
||||||
|
@ -1766,6 +1771,17 @@ atob@^2.1.1:
|
||||||
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
|
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
|
||||||
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
|
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
|
||||||
|
|
||||||
|
auto-launch@^5.0.5:
|
||||||
|
version "5.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/auto-launch/-/auto-launch-5.0.5.tgz#d14bd002b1ef642f85e991a6195ff5300c8ad3c0"
|
||||||
|
integrity sha512-ppdF4mihhYzMYLuCcx9H/c5TUOCev8uM7en53zWVQhyYAJrurd2bFZx3qQVeJKF2jrc7rsPRNN5cD+i23l6PdA==
|
||||||
|
dependencies:
|
||||||
|
applescript "^1.0.0"
|
||||||
|
mkdirp "^0.5.1"
|
||||||
|
path-is-absolute "^1.0.0"
|
||||||
|
untildify "^3.0.2"
|
||||||
|
winreg "1.2.4"
|
||||||
|
|
||||||
autoprefixer@^6.3.1:
|
autoprefixer@^6.3.1:
|
||||||
version "6.7.7"
|
version "6.7.7"
|
||||||
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
|
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
|
||||||
|
@ -12222,6 +12238,11 @@ unset-value@^1.0.0:
|
||||||
has-value "^0.3.1"
|
has-value "^0.3.1"
|
||||||
isobject "^3.0.0"
|
isobject "^3.0.0"
|
||||||
|
|
||||||
|
untildify@^3.0.2:
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.3.tgz#1e7b42b140bcfd922b22e70ca1265bfe3634c7c9"
|
||||||
|
integrity sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==
|
||||||
|
|
||||||
unused-filename@^1.0.0:
|
unused-filename@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/unused-filename/-/unused-filename-1.0.0.tgz#d340880f71ae2115ebaa1325bef05cc6684469c6"
|
resolved "https://registry.yarnpkg.com/unused-filename/-/unused-filename-1.0.0.tgz#d340880f71ae2115ebaa1325bef05cc6684469c6"
|
||||||
|
@ -12804,6 +12825,11 @@ windows-release@^3.1.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
execa "^1.0.0"
|
execa "^1.0.0"
|
||||||
|
|
||||||
|
winreg@1.2.4:
|
||||||
|
version "1.2.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/winreg/-/winreg-1.2.4.tgz#ba065629b7a925130e15779108cf540990e98d1b"
|
||||||
|
integrity sha1-ugZWKbepJRMOFXeRCM9UCZDpjRs=
|
||||||
|
|
||||||
wordwrap@~1.0.0:
|
wordwrap@~1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
|
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
|
||||||
|
|
Loading…
Add table
Reference in a new issue