patch: bump balena-lint to 7.2.1

This commit is contained in:
Edwin Joassart 2023-10-30 18:09:09 +01:00
parent 3eea1c48a0
commit 93dee42b52
22 changed files with 2312 additions and 402 deletions

9
.eslintrc.js Normal file
View 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",
},
};

View File

@ -38,7 +38,6 @@ import * as windowProgress from './os/window-progress';
import MainPage from './pages/main/MainPage'; import MainPage from './pages/main/MainPage';
import './css/main.css'; import './css/main.css';
import * as i18next from 'i18next'; import * as i18next from 'i18next';
import { promises } from 'dns';
import { SourceMetadata } from '../../shared/typings/source-selector'; import { SourceMetadata } from '../../shared/typings/source-selector';
window.addEventListener( window.addEventListener(

View File

@ -302,6 +302,7 @@ export class DriveSelector extends React.Component<
status: string, status: string,
drive: { device: string; size: number }, drive: { device: string; size: number },
) { ) {
let size;
switch (status) { switch (status) {
case compatibility.containsImage(): case compatibility.containsImage():
return warning.sourceDrive(); return warning.sourceDrive();
@ -310,9 +311,11 @@ export class DriveSelector extends React.Component<
case compatibility.system(): case compatibility.system():
return warning.systemDrive(); return warning.systemDrive();
case compatibility.tooSmall(): case compatibility.tooSmall():
const size = size =
this.state.image?.recommendedDriveSize || this.state.image?.size || 0; this.state.image?.recommendedDriveSize || this.state.image?.size || 0;
return warning.tooSmall({ size }, drive); return warning.tooSmall({ size }, drive);
default:
return '';
} }
} }
@ -444,6 +447,9 @@ export class DriveSelector extends React.Component<
isDrivelistDrive(row) && row.isSystem ? ['system'] : [] isDrivelistDrive(row) && row.isSystem ? ['system'] : []
} }
rowKey="displayName" 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[]) => { onCheck={(rows: Drive[]) => {
let newSelection = rows.filter(isDrivelistDrive); let newSelection = rows.filter(isDrivelistDrive);
if (this.props.multipleSelection) { if (this.props.multipleSelection) {

View File

@ -1,5 +1,4 @@
import ExclamationTriangleSvg from '@fortawesome/fontawesome-free/svgs/solid/triangle-exclamation.svg'; import ExclamationTriangleSvg from '@fortawesome/fontawesome-free/svgs/solid/triangle-exclamation.svg';
import * as _ from 'lodash';
import * as React from 'react'; import * as React from 'react';
import { Badge, Flex, Txt, ModalProps } from 'rendition'; import { Badge, Flex, Txt, ModalProps } from 'rendition';
import { Modal, ScrollableFlex } from '../../styled-components'; import { Modal, ScrollableFlex } from '../../styled-components';

View File

@ -122,6 +122,7 @@ export class SafeWebview extends React.PureComponent<
ref={this.webviewRef} ref={this.webviewRef}
partition={ELECTRON_SESSION} partition={ELECTRON_SESSION}
style={style} style={style}
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
allowpopups="true" allowpopups="true"
/> />

View File

@ -388,6 +388,7 @@ export class SourceSelector extends React.Component<
SourceType: Source, SourceType: Source,
auth?: Authentication, auth?: Authentication,
): { promise: Promise<void>; cancel: () => void } { ): { promise: Promise<void>; cancel: () => void } {
// eslint-disable-next-line
let cancelled = false; let cancelled = false;
return { return {
cancel: () => { cancel: () => {
@ -519,6 +520,8 @@ export class SourceSelector extends React.Component<
} }
private async onDrop(event: React.DragEvent<HTMLDivElement>) { private async onDrop(event: React.DragEvent<HTMLDivElement>) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
const [file] = event.dataTransfer.files; const [file] = event.dataTransfer.files;
if (file) { if (file) {
await this.selectSource(file.path, 'File').promise; await this.selectSource(file.path, 'File').promise;
@ -584,6 +587,8 @@ export class SourceSelector extends React.Component<
let image: SourceMetadata | DrivelistDrive = let image: SourceMetadata | DrivelistDrive =
selectionImage !== undefined ? selectionImage : ({} as SourceMetadata); selectionImage !== undefined ? selectionImage : ({} as SourceMetadata);
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
image = image.drive ?? image; image = image.drive ?? image;
let cancelURLSelection = () => { let cancelURLSelection = () => {

View File

@ -142,12 +142,13 @@ export function setProgressState(
}); });
} }
export function getFlashResults() { export function getFlashResults(): any {
return store.getState().toJS().flashResults; return store.getState().toJS().flashResults;
} }
export function getFlashState() { export function getFlashState(): any {
return store.getState().get('flashState').toJS(); const flashState = store.getState().get('flashState')! as any;
return flashState.toJS();
} }
export function wasLastFlashCancelled() { export function wasLastFlashCancelled() {
@ -155,7 +156,7 @@ export function wasLastFlashCancelled() {
} }
export function getLastFlashSourceChecksum(): string { export function getLastFlashSourceChecksum(): string {
return getFlashResults().sourceChecksum; return getFlashResults()!.sourceChecksum;
} }
export function getLastFlashErrorCode() { export function getLastFlashErrorCode() {

View File

@ -43,6 +43,7 @@ function blink(t: number) {
return Math.floor(t) % 2; return Math.floor(t) % 2;
} }
// eslint-disable-next-line @typescript-eslint/no-unused-vars
function one(_t: number) { function one(_t: number) {
return 1; return 1;
} }

View File

@ -52,7 +52,7 @@ export const anonymizeSentryData = (
return event; return event;
}; };
const extractPathRegex = /(.*)(^|\s)(file\:\/\/)?(\w\:)?([\\\/].+)/; const extractPathRegex = /(.*)(^|\s)(file:\/\/)?(\w:)?([\\/].+)/;
const etcherSegmentMarkers = ['app.asar', 'Resources']; const etcherSegmentMarkers = ['app.asar', 'Resources'];
export const anonymizePath = (input: string) => { export const anonymizePath = (input: string) => {
@ -156,7 +156,7 @@ function flattenObject(obj: any) {
const toReturn: AnalyticsPayload = {}; const toReturn: AnalyticsPayload = {};
for (const i in obj) { for (const i in obj) {
if (!obj.hasOwnProperty(i)) { if (!Object.prototype.hasOwnProperty.call(obj, i)) {
continue; continue;
} }
@ -168,7 +168,7 @@ function flattenObject(obj: any) {
if (typeof obj[i] === 'object' && obj[i] !== null) { if (typeof obj[i] === 'object' && obj[i] !== null) {
const flatObject = flattenObject(obj[i]); const flatObject = flattenObject(obj[i]);
for (const x in flatObject) { for (const x in flatObject) {
if (!flatObject.hasOwnProperty(x)) { if (!Object.prototype.hasOwnProperty.call(flatObject, x)) {
continue; continue;
} }

View File

@ -25,7 +25,6 @@ import * as settings from '../models/settings';
import * as analytics from '../modules/analytics'; import * as analytics from '../modules/analytics';
import * as windowProgress from '../os/window-progress'; import * as windowProgress from '../os/window-progress';
import { startApiAndSpawnChild } from './api'; import { startApiAndSpawnChild } from './api';
import { terminateScanningServer } from '../app';
/** /**
* @summary Handle a flash error and log it to analytics * @summary Handle a flash error and log it to analytics
@ -81,6 +80,7 @@ async function performWrite(
console.log({ image, drives }); console.log({ image, drives });
// eslint-disable-next-line no-async-promise-executor
return await new Promise(async (resolve, reject) => { return await new Promise(async (resolve, reject) => {
const flashResults: FlashResults = {}; const flashResults: FlashResults = {};
@ -92,7 +92,7 @@ async function performWrite(
flashInstanceUuid: flashState.getFlashUuid(), flashInstanceUuid: flashState.getFlashUuid(),
}; };
const onFail = ({ device, error }) => { const onFail = ({ device, error }: { device: any; error: any }) => {
console.log('fail event'); console.log('fail event');
console.log(device); console.log(device);
console.log(error); console.log(error);
@ -103,7 +103,7 @@ async function performWrite(
finish(); finish();
}; };
const onDone = (event) => { const onDone = (event: any) => {
console.log('done event'); console.log('done event');
event.results.errors = event.results.errors.map( event.results.errors = event.results.errors.map(
(data: Dictionary<any> & { message: string }) => { (data: Dictionary<any> & { message: string }) => {

View File

@ -116,10 +116,10 @@ interface MainPageState {
} }
export class MainPage extends React.Component< export class MainPage extends React.Component<
{}, object,
MainPageState & MainPageStateFromStore MainPageState & MainPageStateFromStore
> { > {
constructor(props: {}) { constructor(props: object) {
super(props); super(props);
this.state = { this.state = {
current: 'main', current: 'main',
@ -273,6 +273,7 @@ export class MainPage extends React.Component<
paddingTop="14px" paddingTop="14px"
style={{ style={{
// Allow window to be dragged from header // Allow window to be dragged from header
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
WebkitAppRegion: 'drag', WebkitAppRegion: 'drag',
position: 'relative', position: 'relative',

View File

@ -1,3 +1,4 @@
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-nocheck // @ts-nocheck
import { main } from './app'; import { main } from './app';
import './i18n'; import './i18n';

View File

@ -14,7 +14,6 @@
* limitations under the License. * limitations under the License.
*/ */
import * as _ from 'lodash';
import * as React from 'react'; import * as React from 'react';
import { import {
Alert as AlertBase, Alert as AlertBase,
@ -113,14 +112,25 @@ export const DetailsText = (props: FlexProps) => (
const modalFooterShadowCss = css` const modalFooterShadowCss = css`
overflow: auto; 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%; linear-gradient(rgba(255, 255, 255, 0), rgba(221, 225, 240, 0.5) 70%) 0 100%;
background-repeat: no-repeat; 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-repeat: no-repeat;
background-color: white; 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; background-attachment: local, local, scroll, scroll;
`; `;
@ -238,7 +248,7 @@ export interface GenericTableProps<T> extends BaseTableProps<T> {
const GenericTable: <T>( const GenericTable: <T>(
props: GenericTableProps<T>, props: GenericTableProps<T>,
) => React.ReactElement<GenericTableProps<T>> = <T extends {}>({ ) => React.ReactElement<GenericTableProps<T>> = <T extends object>({
refFn, refFn,
...props ...props
}: GenericTableProps<T>) => ( }: 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>(); const TypedStyledFunctional = StyledTable<T>();
return <TypedStyledFunctional {...props} />; return <TypedStyledFunctional {...props} />;
}; };

View File

@ -43,6 +43,8 @@ let mainWindow: any = null;
remoteMain.initialize(); remoteMain.initialize();
const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
async function checkForUpdates(interval: number) { async function checkForUpdates(interval: number) {
// We use a while loop instead of a setInterval to preserve // We use a while loop instead of a setInterval to preserve
// async execution time between each function call // async execution time between each function call
@ -138,14 +140,6 @@ electron.app.on('open-url', async (event, data) => {
await selectImageURL(data); await selectImageURL(data);
}); });
interface AutoUpdaterConfig {
autoDownload?: boolean;
autoInstallOnAppQuit?: boolean;
allowPrerelease?: boolean;
fullChangelog?: boolean;
allowDowngrade?: boolean;
}
async function createMainWindow() { async function createMainWindow() {
const fullscreen = Boolean(await settings.get('fullscreen')); const fullscreen = Boolean(await settings.get('fullscreen'));
const defaultWidth = settings.DEFAULT_WIDTH; const defaultWidth = settings.DEFAULT_WIDTH;
@ -195,7 +189,7 @@ async function createMainWindow() {
// Prevent external resources from being loaded (like images) // Prevent external resources from being loaded (like images)
// when dropping them on the WebView. // when dropping them on the WebView.
// See https://github.com/electron/electron/issues/5919 // See https://github.com/electron/electron/issues/5919
mainWindow.webContents.on('will-navigate', (event) => { mainWindow.webContents.on('will-navigate', (event: any) => {
event.preventDefault(); event.preventDefault();
}); });
@ -272,7 +266,7 @@ async function main(): Promise<void> {
const webview = electron.webContents.fromId(id); const webview = electron.webContents.fromId(id);
// Open link in browser if it's opened as a 'foreground-tab' // Open link in browser if it's opened as a 'foreground-tab'
webview.setWindowOpenHandler((event) => { webview!.setWindowOpenHandler((event) => {
const url = new URL(event.url); const url = new URL(event.url);
if ( if (
(url.protocol === 'http:' || url.protocol === 'https:') && (url.protocol === 'http:' || url.protocol === 'https:') &&

View File

@ -40,6 +40,7 @@ ipc.config.silent = true;
// The purpose behind this change is for this process // The purpose behind this change is for this process
// to emit a "disconnect" event as soon as the GUI // to emit a "disconnect" event as soon as the GUI
// process is closed, so we can kill this process as well. // 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) // @ts-ignore (0 is a valid value for stopRetrying and is not the same as false)
ipc.config.stopRetrying = 0; ipc.config.stopRetrying = 0;

View File

@ -52,6 +52,7 @@ async function write(options: WriteOptions) {
const onFail = (destination: SourceDestination, error: Error) => { const onFail = (destination: SourceDestination, error: Error) => {
emitFail({ emitFail({
// TODO: device should be destination // TODO: device should be destination
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore (destination.drive is private) // @ts-ignore (destination.drive is private)
device: destination.drive, device: destination.drive,
error: toJSON(error), error: toJSON(error),

View File

@ -38,7 +38,6 @@ if (platform !== 'linux' || euid === 0) {
if (platform === 'win32') { if (platform === 'win32') {
const { const {
DriverlessDeviceAdapter: driverless, DriverlessDeviceAdapter: driverless,
// tslint:disable-next-line:no-var-requires
} = require('etcher-sdk/build/scanner/adapters/driverless'); } = require('etcher-sdk/build/scanner/adapters/driverless');
adapters.push(new driverless()); adapters.push(new driverless());
} }

View File

@ -69,13 +69,16 @@ type Drive =
function prepareDrive(drive: Drive) { function prepareDrive(drive: Drive) {
if (drive instanceof sdk.sourceDestination.BlockDevice) { if (drive instanceof sdk.sourceDestination.BlockDevice) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore (BlockDevice.drive is private) // @ts-ignore (BlockDevice.drive is private)
return drive.drive; return drive.drive;
} else if (drive instanceof sdk.sourceDestination.UsbbootDrive) { } else if (drive instanceof sdk.sourceDestination.UsbbootDrive) {
// This is a workaround etcher expecting a device string and a size // This is a workaround etcher expecting a device string and a size
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
drive.device = drive.usbDevice.portId; drive.device = drive.usbDevice.portId;
drive.size = null; drive.size = null;
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
drive.progress = 0; drive.progress = 0;
drive.disabled = true; drive.disabled = true;
@ -140,9 +143,11 @@ function updateDriveProgress(
progress: number, progress: number,
) { ) {
const drives = getDrives(); const drives = getDrives();
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
const driveInMap = drives[drive.device]; const driveInMap = drives[drive.device];
if (driveInMap) { if (driveInMap) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
drives[drive.device] = { ...driveInMap, progress }; drives[drive.device] = { ...driveInMap, progress };
setDrives(drives); setDrives(drives);

2607
npm-shrinkwrap.json generated

File diff suppressed because it is too large Load Diff

View File

@ -53,7 +53,7 @@
"license": "Apache-2.0", "license": "Apache-2.0",
"devDependencies": { "devDependencies": {
"@babel/register": "^7.22.15", "@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", "@balena/sudo-prompt": "9.2.1-workaround-windows-amperstand-in-username-0849e215b947987a643fe5763902aea201255534",
"@electron/remote": "^2.0.12", "@electron/remote": "^2.0.12",
"@fortawesome/fontawesome-free": "6.4.2", "@fortawesome/fontawesome-free": "6.4.2",
@ -90,7 +90,7 @@
"husky": "^8.0.3", "husky": "^8.0.3",
"i18next": "23.6.0", "i18next": "23.6.0",
"immutable": "4.3.4", "immutable": "4.3.4",
"lint-staged": "15.0.1", "lint-staged": "15.0.2",
"lodash": "4.17.21", "lodash": "4.17.21",
"mini-css-extract-plugin": "1.6.2", "mini-css-extract-plugin": "1.6.2",
"mocha": "^10.2.0", "mocha": "^10.2.0",

View File

@ -19,7 +19,6 @@ import * as path from 'path';
import { promisify } from 'util'; import { promisify } from 'util';
import * as shrinkwrap from '../npm-shrinkwrap.json'; import * as shrinkwrap from '../npm-shrinkwrap.json';
import * as packageInfo from '../package.json';
const writeFileAsync = promisify(writeFile); const writeFileAsync = promisify(writeFile);
@ -28,8 +27,9 @@ const SHRINKWRAP_FILENAME = path.join(__dirname, '..', 'npm-shrinkwrap.json');
async function main() { async function main() {
try { try {
const cleaned = omit(shrinkwrap, packageInfo.platformSpecificDependencies); const cleaned = omit(shrinkwrap);
for (const item of Object.values(cleaned.dependencies)) { for (const item of Object.values(cleaned.dependencies)) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
item.dev = true; item.dev = true;
} }

View File

@ -1,8 +1,6 @@
// tslint:disable-next-line:no-var-requires
const { app } = require('electron'); const { app } = require('electron');
if (app !== undefined) { if (app !== undefined) {
// tslint:disable-next-line:no-var-requires
const remoteMain = require('@electron/remote/main'); const remoteMain = require('@electron/remote/main');
remoteMain.initialize(); remoteMain.initialize();