mirror of
https://github.com/balena-io/etcher.git
synced 2025-07-25 12:16:37 +00:00
Add generic error's message
Change-type: patch Changelog-entry: Add generic error's message Signed-off-by: Lorenzo Alberto Maria Ambrosi <lorenzothunder.ambrosi@gmail.com>
This commit is contained in:
parent
94a0be3b05
commit
ac2e973cb0
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
import { faFile, faLink } from '@fortawesome/free-solid-svg-icons';
|
import { faFile, faLink } from '@fortawesome/free-solid-svg-icons';
|
||||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
||||||
import * as jsonStorageCb from 'electron-json-storage';
|
|
||||||
import { sourceDestination } from 'etcher-sdk';
|
import { sourceDestination } from 'etcher-sdk';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import { GPTPartition, MBRPartition } from 'partitioninfo';
|
import { GPTPartition, MBRPartition } from 'partitioninfo';
|
||||||
@ -46,35 +45,36 @@ import { colors } from '../../theme';
|
|||||||
import { middleEllipsis } from '../../utils/middle-ellipsis';
|
import { middleEllipsis } from '../../utils/middle-ellipsis';
|
||||||
import { SVGIcon } from '../svg-icon/svg-icon';
|
import { SVGIcon } from '../svg-icon/svg-icon';
|
||||||
|
|
||||||
const jsonStorage = {
|
const recentUrlImagesKey = 'recentUrlImages';
|
||||||
get: (key: string) => {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
jsonStorageCb.get(key, (err, value) => {
|
|
||||||
if (err) {
|
|
||||||
reject(err);
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
resolve(value);
|
|
||||||
return value;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
set: (key: string, value: object) => {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
jsonStorageCb.set(key, value, err => {
|
|
||||||
if (err) {
|
|
||||||
reject(err);
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
resolve(value);
|
|
||||||
return value;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const getRecentUrlImages = () =>
|
function normalizeRecentUrlImages(urls: any[]): string[] {
|
||||||
jsonStorage.get('recentUrlImages') as Promise<string[]>;
|
if (!Array.isArray(urls)) {
|
||||||
|
urls = [];
|
||||||
|
}
|
||||||
|
return _.chain(urls)
|
||||||
|
.filter(_.isString)
|
||||||
|
.reject(_.isEmpty)
|
||||||
|
.uniq()
|
||||||
|
.takeRight(5)
|
||||||
|
.value();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getRecentUrlImages(): string[] {
|
||||||
|
let urls = [];
|
||||||
|
try {
|
||||||
|
urls = JSON.parse(localStorage.getItem(recentUrlImagesKey) || '[]');
|
||||||
|
} catch {
|
||||||
|
// noop
|
||||||
|
}
|
||||||
|
return normalizeRecentUrlImages(urls);
|
||||||
|
}
|
||||||
|
|
||||||
|
function setRecentUrlImages(urls: string[]) {
|
||||||
|
localStorage.setItem(
|
||||||
|
recentUrlImagesKey,
|
||||||
|
JSON.stringify(normalizeRecentUrlImages(urls)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
const Card = styled(BaseCard)`
|
const Card = styled(BaseCard)`
|
||||||
hr {
|
hr {
|
||||||
@ -107,32 +107,27 @@ const URLSelector = ({ done }: { done: (imageURL: string) => void }) => {
|
|||||||
string[],
|
string[],
|
||||||
(value: React.SetStateAction<string[]>) => void,
|
(value: React.SetStateAction<string[]>) => void,
|
||||||
] = React.useState([]);
|
] = React.useState([]);
|
||||||
|
const [loading, setLoading] = React.useState(false);
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
const fetchRecentUrlImages = async () => {
|
const fetchRecentUrlImages = async () => {
|
||||||
try {
|
const recentUrlImages: string[] = await getRecentUrlImages();
|
||||||
const recentUrlImages: string[] = await getRecentUrlImages();
|
setRecentImages(recentUrlImages);
|
||||||
if (!Array.isArray(recentUrlImages)) {
|
|
||||||
setRecentImages([]);
|
|
||||||
} else {
|
|
||||||
setRecentImages(recentUrlImages);
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
console.error(err);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
fetchRecentUrlImages();
|
fetchRecentUrlImages();
|
||||||
}, []);
|
}, []);
|
||||||
return (
|
return (
|
||||||
<Modal
|
<Modal
|
||||||
|
primaryButtonProps={{
|
||||||
|
disabled: loading,
|
||||||
|
}}
|
||||||
done={async () => {
|
done={async () => {
|
||||||
const sanitizedRecentUrls = _.uniq(
|
setLoading(true);
|
||||||
_.reject([...recentImages, imageURL], _.isEmpty),
|
const sanitizedRecentUrls = normalizeRecentUrlImages([
|
||||||
);
|
...recentImages,
|
||||||
await jsonStorage.set(
|
imageURL,
|
||||||
'recentUrlImages',
|
]);
|
||||||
_.takeRight(sanitizedRecentUrls, 5),
|
setRecentUrlImages(sanitizedRecentUrls);
|
||||||
);
|
await done(imageURL);
|
||||||
done(imageURL);
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<label style={{ width: '100%' }}>
|
<label style={{ width: '100%' }}>
|
||||||
@ -228,7 +223,6 @@ export class SourceSelector extends React.Component<
|
|||||||
> {
|
> {
|
||||||
private unsubscribe: () => void;
|
private unsubscribe: () => void;
|
||||||
private afterSelected: SourceSelectorProps['afterSelected'];
|
private afterSelected: SourceSelectorProps['afterSelected'];
|
||||||
private flows: Flow[];
|
|
||||||
|
|
||||||
constructor(props: SourceSelectorProps) {
|
constructor(props: SourceSelectorProps) {
|
||||||
super(props);
|
super(props);
|
||||||
@ -245,19 +239,6 @@ export class SourceSelector extends React.Component<
|
|||||||
this.onDrop = this.onDrop.bind(this);
|
this.onDrop = this.onDrop.bind(this);
|
||||||
this.showSelectedImageDetails = this.showSelectedImageDetails.bind(this);
|
this.showSelectedImageDetails = this.showSelectedImageDetails.bind(this);
|
||||||
this.afterSelected = props.afterSelected.bind(this);
|
this.afterSelected = props.afterSelected.bind(this);
|
||||||
|
|
||||||
this.flows = [
|
|
||||||
{
|
|
||||||
onClick: this.openImageSelector,
|
|
||||||
label: 'Flash from file',
|
|
||||||
icon: <FontAwesomeIcon icon={faFile} />,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
onClick: this.openURLSelector,
|
|
||||||
label: 'Flash from URL',
|
|
||||||
icon: <FontAwesomeIcon icon={faLink} />,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public componentDidMount() {
|
public componentDidMount() {
|
||||||
@ -376,7 +357,7 @@ export class SourceSelector extends React.Component<
|
|||||||
}
|
}
|
||||||
|
|
||||||
let source;
|
let source;
|
||||||
if (SourceType.name === sourceDestination.File.name) {
|
if (SourceType === sourceDestination.File) {
|
||||||
source = new sourceDestination.File({
|
source = new sourceDestination.File({
|
||||||
path: imagePath,
|
path: imagePath,
|
||||||
});
|
});
|
||||||
@ -545,9 +526,24 @@ export class SourceSelector extends React.Component<
|
|||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
<StepSelection>
|
<StepSelection>
|
||||||
{_.map(this.flows, flow => {
|
<FlowSelector
|
||||||
return <FlowSelector key={flow.label} flow={flow} />;
|
key="Flash from file"
|
||||||
})}
|
flow={{
|
||||||
|
onClick: this.openImageSelector,
|
||||||
|
label: 'Flash from file',
|
||||||
|
icon: <FontAwesomeIcon icon={faFile} />,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
;
|
||||||
|
<FlowSelector
|
||||||
|
key="Flash from URL"
|
||||||
|
flow={{
|
||||||
|
onClick: this.openURLSelector,
|
||||||
|
label: 'Flash from URL',
|
||||||
|
icon: <FontAwesomeIcon icon={faLink} />,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
;
|
||||||
</StepSelection>
|
</StepSelection>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
@ -593,7 +589,7 @@ export class SourceSelector extends React.Component<
|
|||||||
|
|
||||||
{showURLSelector && (
|
{showURLSelector && (
|
||||||
<URLSelector
|
<URLSelector
|
||||||
done={(imagePath: string) => {
|
done={async (imagePath: string) => {
|
||||||
// Avoid analytics and selection state changes
|
// Avoid analytics and selection state changes
|
||||||
// if no file was resolved from the dialog.
|
// if no file was resolved from the dialog.
|
||||||
if (!imagePath) {
|
if (!imagePath) {
|
||||||
@ -609,7 +605,7 @@ export class SourceSelector extends React.Component<
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.selectImageByPath({
|
await this.selectImageByPath({
|
||||||
imagePath,
|
imagePath,
|
||||||
SourceType: sourceDestination.Http,
|
SourceType: sourceDestination.Http,
|
||||||
});
|
});
|
||||||
|
@ -25,7 +25,7 @@ import * as path from 'path';
|
|||||||
import * as packageJSON from '../../../../package.json';
|
import * as packageJSON from '../../../../package.json';
|
||||||
import * as errors from '../../../shared/errors';
|
import * as errors from '../../../shared/errors';
|
||||||
import * as permissions from '../../../shared/permissions';
|
import * as permissions from '../../../shared/permissions';
|
||||||
import { SourceOptions } from '../components/source-selector/source-selector.js';
|
import { SourceOptions } from '../components/source-selector/source-selector';
|
||||||
import * as flashState from '../models/flash-state';
|
import * as flashState from '../models/flash-state';
|
||||||
import * as selectionState from '../models/selection-state';
|
import * as selectionState from '../models/selection-state';
|
||||||
import * as settings from '../models/settings';
|
import * as settings from '../models/settings';
|
||||||
|
@ -164,11 +164,17 @@ const formatSeconds = (totalSeconds: number) => {
|
|||||||
return `${minutes}m${seconds}s`;
|
return `${minutes}m${seconds}s`;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
interface FlashProps {
|
||||||
|
shouldFlashStepBeDisabled: boolean;
|
||||||
|
goToSuccess: () => void;
|
||||||
|
source: SourceOptions;
|
||||||
|
}
|
||||||
|
|
||||||
export const Flash = ({
|
export const Flash = ({
|
||||||
shouldFlashStepBeDisabled,
|
shouldFlashStepBeDisabled,
|
||||||
goToSuccess,
|
goToSuccess,
|
||||||
source,
|
source,
|
||||||
}: any) => {
|
}: FlashProps) => {
|
||||||
const state: any = flashState.getFlashState();
|
const state: any = flashState.getFlashState();
|
||||||
const isFlashing = flashState.isFlashing();
|
const isFlashing = flashState.isFlashing();
|
||||||
const flashErrorCode = flashState.getLastFlashErrorCode();
|
const flashErrorCode = flashState.getLastFlashErrorCode();
|
||||||
|
@ -97,7 +97,6 @@ async function writeAndValidate(
|
|||||||
onProgress: sdk.multiWrite.OnProgressFunction,
|
onProgress: sdk.multiWrite.OnProgressFunction,
|
||||||
onFail: sdk.multiWrite.OnFailFunction,
|
onFail: sdk.multiWrite.OnFailFunction,
|
||||||
): Promise<WriteResult> {
|
): Promise<WriteResult> {
|
||||||
console.log('source', source);
|
|
||||||
let innerSource: sdk.sourceDestination.SourceDestination = await source.getInnerSource();
|
let innerSource: sdk.sourceDestination.SourceDestination = await source.getInnerSource();
|
||||||
if (trim && (await innerSource.canRead())) {
|
if (trim && (await innerSource.canRead())) {
|
||||||
innerSource = new sdk.sourceDestination.ConfiguredSource({
|
innerSource = new sdk.sourceDestination.ConfiguredSource({
|
||||||
|
@ -131,8 +131,8 @@ export const error = {
|
|||||||
].join(' ');
|
].join(' ');
|
||||||
},
|
},
|
||||||
|
|
||||||
genericFlashError: () => {
|
genericFlashError: (err: Error) => {
|
||||||
return 'Something went wrong. If it is a compressed image, please check that the archive is not corrupted.';
|
return `Something went wrong. If it is a compressed image, please check that the archive is not corrupted.\n${err.message}`;
|
||||||
},
|
},
|
||||||
|
|
||||||
validation: () => {
|
validation: () => {
|
||||||
|
132
npm-shrinkwrap.json
generated
132
npm-shrinkwrap.json
generated
@ -497,98 +497,6 @@
|
|||||||
"@types/domhandler": "*"
|
"@types/domhandler": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/electron-json-storage": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/electron-json-storage/-/electron-json-storage-4.0.0.tgz",
|
|
||||||
"integrity": "sha512-b1+VXOjCPENmXhV0q41NCsJIFwpIjPfuJk++h53O4dQhb2RBZYEMTuAnu/UC+0+PhvmysT1f5WNt8RHM3vGevA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"electron": "^1.7.5"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@types/node": {
|
|
||||||
"version": "8.10.59",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.59.tgz",
|
|
||||||
"integrity": "sha512-8RkBivJrDCyPpBXhVZcjh7cQxVBSmRk9QM7hOketZzp6Tg79c0N8kkpAIito9bnJ3HCVCHVYz+KHTEbfQNfeVQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"debug": {
|
|
||||||
"version": "2.6.9",
|
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
|
||||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"ms": "2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"electron": {
|
|
||||||
"version": "1.8.8",
|
|
||||||
"resolved": "https://registry.npmjs.org/electron/-/electron-1.8.8.tgz",
|
|
||||||
"integrity": "sha512-1f9zJehcTTGjrkb06o6ds+gsRq6SYhZJyxOk6zIWjRH8hVy03y/RzUDELzNas71f5vcvXmfGVvyjeEsadDI8tg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@types/node": "^8.0.24",
|
|
||||||
"electron-download": "^3.0.1",
|
|
||||||
"extract-zip": "^1.0.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"electron-download": {
|
|
||||||
"version": "3.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/electron-download/-/electron-download-3.3.0.tgz",
|
|
||||||
"integrity": "sha1-LP1U1pZsAZxNSa1l++Zcyc3vaMg=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"debug": "^2.2.0",
|
|
||||||
"fs-extra": "^0.30.0",
|
|
||||||
"home-path": "^1.0.1",
|
|
||||||
"minimist": "^1.2.0",
|
|
||||||
"nugget": "^2.0.0",
|
|
||||||
"path-exists": "^2.1.0",
|
|
||||||
"rc": "^1.1.2",
|
|
||||||
"semver": "^5.3.0",
|
|
||||||
"sumchecker": "^1.2.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"fs-extra": {
|
|
||||||
"version": "0.30.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
|
|
||||||
"integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"graceful-fs": "^4.1.2",
|
|
||||||
"jsonfile": "^2.1.0",
|
|
||||||
"klaw": "^1.0.0",
|
|
||||||
"path-is-absolute": "^1.0.0",
|
|
||||||
"rimraf": "^2.2.8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"jsonfile": {
|
|
||||||
"version": "2.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
|
|
||||||
"integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"graceful-fs": "^4.1.6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ms": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"sumchecker": {
|
|
||||||
"version": "1.3.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz",
|
|
||||||
"integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"debug": "^2.2.0",
|
|
||||||
"es6-promise": "^4.0.5"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@types/events": {
|
"@types/events": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
|
||||||
@ -4604,19 +4512,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"electron-json-storage": {
|
|
||||||
"version": "4.1.8",
|
|
||||||
"resolved": "https://registry.npmjs.org/electron-json-storage/-/electron-json-storage-4.1.8.tgz",
|
|
||||||
"integrity": "sha512-cBaxfSVG5SLWIvgkRJyl96W2VPCvvBcLjNaOfKC1oCENzStMt2BDzh/Qfxcz2M1mK4kNnsVv//CD46jIRrqWPw==",
|
|
||||||
"requires": {
|
|
||||||
"async": "^2.0.0",
|
|
||||||
"lockfile": "^1.0.4",
|
|
||||||
"lodash": "^4.0.1",
|
|
||||||
"mkdirp": "^0.5.1",
|
|
||||||
"rimraf": "^2.5.1",
|
|
||||||
"write-file-atomic": "^2.4.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"electron-mocha": {
|
"electron-mocha": {
|
||||||
"version": "8.2.0",
|
"version": "8.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/electron-mocha/-/electron-mocha-8.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/electron-mocha/-/electron-mocha-8.2.0.tgz",
|
||||||
@ -6897,12 +6792,6 @@
|
|||||||
"react-is": "^16.7.0"
|
"react-is": "^16.7.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"home-path": {
|
|
||||||
"version": "1.0.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.7.tgz",
|
|
||||||
"integrity": "sha512-tM1pVa+u3ZqQwIkXcWfhUlY3HWS3TsnKsfi2OHHvnhkX52s9etyktPyy1rQotkr0euWimChDq+QkQuDe8ngUlQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"homedir-polyfill": {
|
"homedir-polyfill": {
|
||||||
"version": "1.0.3",
|
"version": "1.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
|
||||||
@ -7260,7 +7149,8 @@
|
|||||||
"imurmurhash": {
|
"imurmurhash": {
|
||||||
"version": "0.1.4",
|
"version": "0.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
|
||||||
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
|
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"in-publish": {
|
"in-publish": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
@ -7913,15 +7803,6 @@
|
|||||||
"integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
|
"integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"klaw": {
|
|
||||||
"version": "1.3.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
|
|
||||||
"integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"graceful-fs": "^4.1.9"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"known-css-properties": {
|
"known-css-properties": {
|
||||||
"version": "0.3.0",
|
"version": "0.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.3.0.tgz",
|
||||||
@ -8286,14 +8167,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lockfile": {
|
|
||||||
"version": "1.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz",
|
|
||||||
"integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==",
|
|
||||||
"requires": {
|
|
||||||
"signal-exit": "^3.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"lodash": {
|
"lodash": {
|
||||||
"version": "4.17.15",
|
"version": "4.17.15",
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
|
||||||
@ -14345,6 +14218,7 @@
|
|||||||
"version": "2.4.3",
|
"version": "2.4.3",
|
||||||
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
|
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
|
||||||
"integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
|
"integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"graceful-fs": "^4.1.11",
|
"graceful-fs": "^4.1.11",
|
||||||
"imurmurhash": "^0.1.4",
|
"imurmurhash": "^0.1.4",
|
||||||
|
@ -60,7 +60,6 @@
|
|||||||
"color": "^2.0.1",
|
"color": "^2.0.1",
|
||||||
"d3": "^4.13.0",
|
"d3": "^4.13.0",
|
||||||
"debug": "^3.1.0",
|
"debug": "^3.1.0",
|
||||||
"electron-json-storage": "^4.1.8",
|
|
||||||
"electron-updater": "4.0.6",
|
"electron-updater": "4.0.6",
|
||||||
"etcher-sdk": "^3.0.1",
|
"etcher-sdk": "^3.0.1",
|
||||||
"flexboxgrid": "^6.3.0",
|
"flexboxgrid": "^6.3.0",
|
||||||
@ -91,7 +90,6 @@
|
|||||||
"@types/bindings": "^1.3.0",
|
"@types/bindings": "^1.3.0",
|
||||||
"@types/bluebird": "^3.5.30",
|
"@types/bluebird": "^3.5.30",
|
||||||
"@types/chai": "^4.2.7",
|
"@types/chai": "^4.2.7",
|
||||||
"@types/electron-json-storage": "^4.0.0",
|
|
||||||
"@types/mime-types": "^2.1.0",
|
"@types/mime-types": "^2.1.0",
|
||||||
"@types/mocha": "^5.2.7",
|
"@types/mocha": "^5.2.7",
|
||||||
"@types/node": "^12.12.24",
|
"@types/node": "^12.12.24",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user