mirror of
https://github.com/balena-io/etcher.git
synced 2025-07-29 06:06:33 +00:00
patch: bump balena-lint to 7.2.1
This commit is contained in:
parent
3eea1c48a0
commit
93dee42b52
9
.eslintrc.js
Normal file
9
.eslintrc.js
Normal file
@ -0,0 +1,9 @@
|
||||
module.exports = {
|
||||
extends: ["./node_modules/@balena/lint/config/.eslintrc.js"],
|
||||
root: true,
|
||||
ignorePatterns: ["node_modules/", "dist/", "examples/", "tests/"],
|
||||
rules: {
|
||||
"@typescript-eslint/no-floating-promises": "off",
|
||||
"@typescript-eslint/no-var-requires": "off",
|
||||
},
|
||||
};
|
@ -38,7 +38,6 @@ import * as windowProgress from './os/window-progress';
|
||||
import MainPage from './pages/main/MainPage';
|
||||
import './css/main.css';
|
||||
import * as i18next from 'i18next';
|
||||
import { promises } from 'dns';
|
||||
import { SourceMetadata } from '../../shared/typings/source-selector';
|
||||
|
||||
window.addEventListener(
|
||||
|
@ -302,6 +302,7 @@ export class DriveSelector extends React.Component<
|
||||
status: string,
|
||||
drive: { device: string; size: number },
|
||||
) {
|
||||
let size;
|
||||
switch (status) {
|
||||
case compatibility.containsImage():
|
||||
return warning.sourceDrive();
|
||||
@ -310,9 +311,11 @@ export class DriveSelector extends React.Component<
|
||||
case compatibility.system():
|
||||
return warning.systemDrive();
|
||||
case compatibility.tooSmall():
|
||||
const size =
|
||||
size =
|
||||
this.state.image?.recommendedDriveSize || this.state.image?.size || 0;
|
||||
return warning.tooSmall({ size }, drive);
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
@ -444,6 +447,9 @@ export class DriveSelector extends React.Component<
|
||||
isDrivelistDrive(row) && row.isSystem ? ['system'] : []
|
||||
}
|
||||
rowKey="displayName"
|
||||
// TODO: check why this is not passing the typescheck
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
onCheck={(rows: Drive[]) => {
|
||||
let newSelection = rows.filter(isDrivelistDrive);
|
||||
if (this.props.multipleSelection) {
|
||||
|
@ -1,5 +1,4 @@
|
||||
import ExclamationTriangleSvg from '@fortawesome/fontawesome-free/svgs/solid/triangle-exclamation.svg';
|
||||
import * as _ from 'lodash';
|
||||
import * as React from 'react';
|
||||
import { Badge, Flex, Txt, ModalProps } from 'rendition';
|
||||
import { Modal, ScrollableFlex } from '../../styled-components';
|
||||
|
@ -122,6 +122,7 @@ export class SafeWebview extends React.PureComponent<
|
||||
ref={this.webviewRef}
|
||||
partition={ELECTRON_SESSION}
|
||||
style={style}
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
allowpopups="true"
|
||||
/>
|
||||
|
@ -388,6 +388,7 @@ export class SourceSelector extends React.Component<
|
||||
SourceType: Source,
|
||||
auth?: Authentication,
|
||||
): { promise: Promise<void>; cancel: () => void } {
|
||||
// eslint-disable-next-line
|
||||
let cancelled = false;
|
||||
return {
|
||||
cancel: () => {
|
||||
@ -519,6 +520,8 @@ export class SourceSelector extends React.Component<
|
||||
}
|
||||
|
||||
private async onDrop(event: React.DragEvent<HTMLDivElement>) {
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
const [file] = event.dataTransfer.files;
|
||||
if (file) {
|
||||
await this.selectSource(file.path, 'File').promise;
|
||||
@ -584,6 +587,8 @@ export class SourceSelector extends React.Component<
|
||||
let image: SourceMetadata | DrivelistDrive =
|
||||
selectionImage !== undefined ? selectionImage : ({} as SourceMetadata);
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
image = image.drive ?? image;
|
||||
|
||||
let cancelURLSelection = () => {
|
||||
|
@ -142,12 +142,13 @@ export function setProgressState(
|
||||
});
|
||||
}
|
||||
|
||||
export function getFlashResults() {
|
||||
export function getFlashResults(): any {
|
||||
return store.getState().toJS().flashResults;
|
||||
}
|
||||
|
||||
export function getFlashState() {
|
||||
return store.getState().get('flashState').toJS();
|
||||
export function getFlashState(): any {
|
||||
const flashState = store.getState().get('flashState')! as any;
|
||||
return flashState.toJS();
|
||||
}
|
||||
|
||||
export function wasLastFlashCancelled() {
|
||||
@ -155,7 +156,7 @@ export function wasLastFlashCancelled() {
|
||||
}
|
||||
|
||||
export function getLastFlashSourceChecksum(): string {
|
||||
return getFlashResults().sourceChecksum;
|
||||
return getFlashResults()!.sourceChecksum;
|
||||
}
|
||||
|
||||
export function getLastFlashErrorCode() {
|
||||
|
@ -43,6 +43,7 @@ function blink(t: number) {
|
||||
return Math.floor(t) % 2;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
function one(_t: number) {
|
||||
return 1;
|
||||
}
|
||||
|
@ -52,7 +52,7 @@ export const anonymizeSentryData = (
|
||||
return event;
|
||||
};
|
||||
|
||||
const extractPathRegex = /(.*)(^|\s)(file\:\/\/)?(\w\:)?([\\\/].+)/;
|
||||
const extractPathRegex = /(.*)(^|\s)(file:\/\/)?(\w:)?([\\/].+)/;
|
||||
const etcherSegmentMarkers = ['app.asar', 'Resources'];
|
||||
|
||||
export const anonymizePath = (input: string) => {
|
||||
@ -156,7 +156,7 @@ function flattenObject(obj: any) {
|
||||
const toReturn: AnalyticsPayload = {};
|
||||
|
||||
for (const i in obj) {
|
||||
if (!obj.hasOwnProperty(i)) {
|
||||
if (!Object.prototype.hasOwnProperty.call(obj, i)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -168,7 +168,7 @@ function flattenObject(obj: any) {
|
||||
if (typeof obj[i] === 'object' && obj[i] !== null) {
|
||||
const flatObject = flattenObject(obj[i]);
|
||||
for (const x in flatObject) {
|
||||
if (!flatObject.hasOwnProperty(x)) {
|
||||
if (!Object.prototype.hasOwnProperty.call(flatObject, x)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -25,7 +25,6 @@ import * as settings from '../models/settings';
|
||||
import * as analytics from '../modules/analytics';
|
||||
import * as windowProgress from '../os/window-progress';
|
||||
import { startApiAndSpawnChild } from './api';
|
||||
import { terminateScanningServer } from '../app';
|
||||
|
||||
/**
|
||||
* @summary Handle a flash error and log it to analytics
|
||||
@ -81,6 +80,7 @@ async function performWrite(
|
||||
|
||||
console.log({ image, drives });
|
||||
|
||||
// eslint-disable-next-line no-async-promise-executor
|
||||
return await new Promise(async (resolve, reject) => {
|
||||
const flashResults: FlashResults = {};
|
||||
|
||||
@ -92,7 +92,7 @@ async function performWrite(
|
||||
flashInstanceUuid: flashState.getFlashUuid(),
|
||||
};
|
||||
|
||||
const onFail = ({ device, error }) => {
|
||||
const onFail = ({ device, error }: { device: any; error: any }) => {
|
||||
console.log('fail event');
|
||||
console.log(device);
|
||||
console.log(error);
|
||||
@ -103,7 +103,7 @@ async function performWrite(
|
||||
finish();
|
||||
};
|
||||
|
||||
const onDone = (event) => {
|
||||
const onDone = (event: any) => {
|
||||
console.log('done event');
|
||||
event.results.errors = event.results.errors.map(
|
||||
(data: Dictionary<any> & { message: string }) => {
|
||||
|
@ -116,10 +116,10 @@ interface MainPageState {
|
||||
}
|
||||
|
||||
export class MainPage extends React.Component<
|
||||
{},
|
||||
object,
|
||||
MainPageState & MainPageStateFromStore
|
||||
> {
|
||||
constructor(props: {}) {
|
||||
constructor(props: object) {
|
||||
super(props);
|
||||
this.state = {
|
||||
current: 'main',
|
||||
@ -273,6 +273,7 @@ export class MainPage extends React.Component<
|
||||
paddingTop="14px"
|
||||
style={{
|
||||
// Allow window to be dragged from header
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
WebkitAppRegion: 'drag',
|
||||
position: 'relative',
|
||||
|
@ -1,3 +1,4 @@
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-nocheck
|
||||
import { main } from './app';
|
||||
import './i18n';
|
||||
|
@ -14,7 +14,6 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import * as _ from 'lodash';
|
||||
import * as React from 'react';
|
||||
import {
|
||||
Alert as AlertBase,
|
||||
@ -113,14 +112,25 @@ export const DetailsText = (props: FlexProps) => (
|
||||
|
||||
const modalFooterShadowCss = css`
|
||||
overflow: auto;
|
||||
background: 0, linear-gradient(rgba(255, 255, 255, 0), white 70%) 0 100%, 0,
|
||||
background:
|
||||
0,
|
||||
linear-gradient(rgba(255, 255, 255, 0), white 70%) 0 100%,
|
||||
0,
|
||||
linear-gradient(rgba(255, 255, 255, 0), rgba(221, 225, 240, 0.5) 70%) 0 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100% 40px, 100% 40px, 100% 8px, 100% 8px;
|
||||
background-size:
|
||||
100% 40px,
|
||||
100% 40px,
|
||||
100% 8px,
|
||||
100% 8px;
|
||||
|
||||
background-repeat: no-repeat;
|
||||
background-color: white;
|
||||
background-size: 100% 40px, 100% 40px, 100% 8px, 100% 8px;
|
||||
background-size:
|
||||
100% 40px,
|
||||
100% 40px,
|
||||
100% 8px,
|
||||
100% 8px;
|
||||
background-attachment: local, local, scroll, scroll;
|
||||
`;
|
||||
|
||||
@ -238,7 +248,7 @@ export interface GenericTableProps<T> extends BaseTableProps<T> {
|
||||
|
||||
const GenericTable: <T>(
|
||||
props: GenericTableProps<T>,
|
||||
) => React.ReactElement<GenericTableProps<T>> = <T extends {}>({
|
||||
) => React.ReactElement<GenericTableProps<T>> = <T extends object>({
|
||||
refFn,
|
||||
...props
|
||||
}: GenericTableProps<T>) => (
|
||||
@ -318,7 +328,7 @@ function StyledTable<T>() {
|
||||
`;
|
||||
}
|
||||
|
||||
export const Table = <T extends {}>(props: GenericTableProps<T>) => {
|
||||
export const Table = <T extends object>(props: GenericTableProps<T>) => {
|
||||
const TypedStyledFunctional = StyledTable<T>();
|
||||
return <TypedStyledFunctional {...props} />;
|
||||
};
|
||||
|
@ -43,6 +43,8 @@ let mainWindow: any = null;
|
||||
|
||||
remoteMain.initialize();
|
||||
|
||||
const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
|
||||
|
||||
async function checkForUpdates(interval: number) {
|
||||
// We use a while loop instead of a setInterval to preserve
|
||||
// async execution time between each function call
|
||||
@ -138,14 +140,6 @@ electron.app.on('open-url', async (event, data) => {
|
||||
await selectImageURL(data);
|
||||
});
|
||||
|
||||
interface AutoUpdaterConfig {
|
||||
autoDownload?: boolean;
|
||||
autoInstallOnAppQuit?: boolean;
|
||||
allowPrerelease?: boolean;
|
||||
fullChangelog?: boolean;
|
||||
allowDowngrade?: boolean;
|
||||
}
|
||||
|
||||
async function createMainWindow() {
|
||||
const fullscreen = Boolean(await settings.get('fullscreen'));
|
||||
const defaultWidth = settings.DEFAULT_WIDTH;
|
||||
@ -195,7 +189,7 @@ async function createMainWindow() {
|
||||
// Prevent external resources from being loaded (like images)
|
||||
// when dropping them on the WebView.
|
||||
// See https://github.com/electron/electron/issues/5919
|
||||
mainWindow.webContents.on('will-navigate', (event) => {
|
||||
mainWindow.webContents.on('will-navigate', (event: any) => {
|
||||
event.preventDefault();
|
||||
});
|
||||
|
||||
@ -272,7 +266,7 @@ async function main(): Promise<void> {
|
||||
const webview = electron.webContents.fromId(id);
|
||||
|
||||
// Open link in browser if it's opened as a 'foreground-tab'
|
||||
webview.setWindowOpenHandler((event) => {
|
||||
webview!.setWindowOpenHandler((event) => {
|
||||
const url = new URL(event.url);
|
||||
if (
|
||||
(url.protocol === 'http:' || url.protocol === 'https:') &&
|
||||
|
@ -40,6 +40,7 @@ ipc.config.silent = true;
|
||||
// The purpose behind this change is for this process
|
||||
// to emit a "disconnect" event as soon as the GUI
|
||||
// process is closed, so we can kill this process as well.
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore (0 is a valid value for stopRetrying and is not the same as false)
|
||||
ipc.config.stopRetrying = 0;
|
||||
|
||||
|
@ -52,6 +52,7 @@ async function write(options: WriteOptions) {
|
||||
const onFail = (destination: SourceDestination, error: Error) => {
|
||||
emitFail({
|
||||
// TODO: device should be destination
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore (destination.drive is private)
|
||||
device: destination.drive,
|
||||
error: toJSON(error),
|
||||
|
@ -38,7 +38,6 @@ if (platform !== 'linux' || euid === 0) {
|
||||
if (platform === 'win32') {
|
||||
const {
|
||||
DriverlessDeviceAdapter: driverless,
|
||||
// tslint:disable-next-line:no-var-requires
|
||||
} = require('etcher-sdk/build/scanner/adapters/driverless');
|
||||
adapters.push(new driverless());
|
||||
}
|
||||
|
@ -69,13 +69,16 @@ type Drive =
|
||||
|
||||
function prepareDrive(drive: Drive) {
|
||||
if (drive instanceof sdk.sourceDestination.BlockDevice) {
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore (BlockDevice.drive is private)
|
||||
return drive.drive;
|
||||
} else if (drive instanceof sdk.sourceDestination.UsbbootDrive) {
|
||||
// This is a workaround etcher expecting a device string and a size
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
drive.device = drive.usbDevice.portId;
|
||||
drive.size = null;
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
drive.progress = 0;
|
||||
drive.disabled = true;
|
||||
@ -140,9 +143,11 @@ function updateDriveProgress(
|
||||
progress: number,
|
||||
) {
|
||||
const drives = getDrives();
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
const driveInMap = drives[drive.device];
|
||||
if (driveInMap) {
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
drives[drive.device] = { ...driveInMap, progress };
|
||||
setDrives(drives);
|
||||
|
2607
npm-shrinkwrap.json
generated
2607
npm-shrinkwrap.json
generated
File diff suppressed because it is too large
Load Diff
@ -53,7 +53,7 @@
|
||||
"license": "Apache-2.0",
|
||||
"devDependencies": {
|
||||
"@babel/register": "^7.22.15",
|
||||
"@balena/lint": "5.4.2",
|
||||
"@balena/lint": "7.2.1",
|
||||
"@balena/sudo-prompt": "9.2.1-workaround-windows-amperstand-in-username-0849e215b947987a643fe5763902aea201255534",
|
||||
"@electron/remote": "^2.0.12",
|
||||
"@fortawesome/fontawesome-free": "6.4.2",
|
||||
@ -90,7 +90,7 @@
|
||||
"husky": "^8.0.3",
|
||||
"i18next": "23.6.0",
|
||||
"immutable": "4.3.4",
|
||||
"lint-staged": "15.0.1",
|
||||
"lint-staged": "15.0.2",
|
||||
"lodash": "4.17.21",
|
||||
"mini-css-extract-plugin": "1.6.2",
|
||||
"mocha": "^10.2.0",
|
||||
|
@ -19,7 +19,6 @@ import * as path from 'path';
|
||||
import { promisify } from 'util';
|
||||
|
||||
import * as shrinkwrap from '../npm-shrinkwrap.json';
|
||||
import * as packageInfo from '../package.json';
|
||||
|
||||
const writeFileAsync = promisify(writeFile);
|
||||
|
||||
@ -28,8 +27,9 @@ const SHRINKWRAP_FILENAME = path.join(__dirname, '..', 'npm-shrinkwrap.json');
|
||||
|
||||
async function main() {
|
||||
try {
|
||||
const cleaned = omit(shrinkwrap, packageInfo.platformSpecificDependencies);
|
||||
const cleaned = omit(shrinkwrap);
|
||||
for (const item of Object.values(cleaned.dependencies)) {
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
item.dev = true;
|
||||
}
|
||||
|
@ -1,8 +1,6 @@
|
||||
// tslint:disable-next-line:no-var-requires
|
||||
const { app } = require('electron');
|
||||
|
||||
if (app !== undefined) {
|
||||
// tslint:disable-next-line:no-var-requires
|
||||
const remoteMain = require('@electron/remote/main');
|
||||
|
||||
remoteMain.initialize();
|
||||
|
Loading…
x
Reference in New Issue
Block a user