Skip to content

Commit

Permalink
patch: upgrade balena-lint
Browse files Browse the repository at this point in the history
- upgrade balena-lint to 7.2.4
- downgrade pretty-bytes to 5.6.0
- upgrade electron-mocha to 10.2.0
  • Loading branch information
aethernet committed Dec 11, 2023
1 parent 9260bc4 commit 24f9a0a
Show file tree
Hide file tree
Showing 24 changed files with 2,917 additions and 1,599 deletions.
10 changes: 10 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
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",
"@typescript-eslint/ban-ts-comment": "off",
},
};
16 changes: 8 additions & 8 deletions forge.sidecar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@ function addWebpackDefine(

const value = isStartScrpt()
? // on `npm start`, point directly to the binary
path.resolve(binDir, binName)
path.resolve(binDir, binName)
: // otherwise point relative to the resources folder of the bundled app
binName;
binName;

debug(`define '${defineName}'='${value}'`);

Expand Down Expand Up @@ -69,10 +69,10 @@ function build(
buildForArchs.split(',').forEach((arch) => {
const binPath = isStartScrpt()
? // on `npm start`, we don't know the arch we're building for at the time we're
// adding the webpack define, so we just build under binDir
path.resolve(binDir, binName)
// adding the webpack define, so we just build under binDir
path.resolve(binDir, binName)
: // otherwise build in arch-specific directory within binDir
path.resolve(binDir, arch, binName);
path.resolve(binDir, arch, binName);

// FIXME: rebuilding mountutils shouldn't be necessary, but it is. It's comming from etcher-sdk a fix has been upstreamed but to use the latest etcher-sdk we need to upgrade axios at the same time)
commands.push([
Expand Down Expand Up @@ -121,10 +121,10 @@ function copyArtifact(
) {
const binPath = isStartScrpt()
? // on `npm start`, we don't know the arch we're building for at the time we're
// adding the webpack define, so look for the binary directly under binDir
path.resolve(binDir, binName)
// adding the webpack define, so look for the binary directly under binDir
path.resolve(binDir, binName)
: // otherwise look into arch-specific directory within binDir
path.resolve(binDir, arch, binName);
path.resolve(binDir, arch, binName);

// buildPath points to appPath, which is inside resources dir which is the one we actually want
const resourcesPath = path.dirname(buildPath);
Expand Down
1 change: 0 additions & 1 deletion lib/gui/app/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
7 changes: 6 additions & 1 deletion lib/gui/app/components/drive-selector/drive-selector.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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 '';
}
}

Expand Down Expand Up @@ -444,6 +447,8 @@ export class DriveSelector extends React.Component<
isDrivelistDrive(row) && row.isSystem ? ['system'] : []
}
rowKey="displayName"
// TODO: check why this is not passing the typescheck
// @ts-ignore
onCheck={(rows: Drive[]) => {
let newSelection = rows.filter(isDrivelistDrive);
if (this.props.multipleSelection) {
Expand Down
Original file line number Diff line number Diff line change
@@ -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';
Expand Down
4 changes: 4 additions & 0 deletions lib/gui/app/components/source-selector/source-selector.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -388,6 +388,8 @@ export class SourceSelector extends React.Component<
SourceType: Source,
auth?: Authentication,
): { promise: Promise<void>; cancel: () => void } {
// TODO: precise the disabled rule
// eslint-disable-next-line
let cancelled = false;
return {
cancel: () => {
Expand Down Expand Up @@ -519,6 +521,7 @@ export class SourceSelector extends React.Component<
}

private async onDrop(event: React.DragEvent<HTMLDivElement>) {
// @ts-ignore
const [file] = event.dataTransfer.files;
if (file) {
await this.selectSource(file.path, 'File').promise;
Expand Down Expand Up @@ -584,6 +587,7 @@ export class SourceSelector extends React.Component<
let image: SourceMetadata | DrivelistDrive =
selectionImage !== undefined ? selectionImage : ({} as SourceMetadata);

// @ts-ignore
image = image.drive ?? image;

let cancelURLSelection = () => {
Expand Down
9 changes: 5 additions & 4 deletions lib/gui/app/models/flash-state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -142,20 +142,21 @@ 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() {
return _.get(getFlashResults(), ['cancelled'], false);
}

export function getLastFlashSourceChecksum(): string {
return getFlashResults().sourceChecksum;
return getFlashResults()!.sourceChecksum;
}

export function getLastFlashErrorCode() {
Expand Down
1 change: 1 addition & 0 deletions lib/gui/app/models/leds.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
2 changes: 1 addition & 1 deletion lib/gui/app/models/store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ interface Action {
* @returns {Object} new state
*/
function getAvailableDrives(state: typeof DEFAULT_STATE) {
return state.get('availableDrives').toJS();
return state.get('availableDrives')!.toJS();
}

/**
Expand Down
6 changes: 3 additions & 3 deletions lib/gui/app/modules/analytics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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) => {
Expand Down Expand Up @@ -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;
}

Expand All @@ -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;
}

Expand Down
6 changes: 3 additions & 3 deletions lib/gui/app/modules/image-writer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 = {};

Expand All @@ -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);
Expand All @@ -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 }) => {
Expand Down
4 changes: 2 additions & 2 deletions lib/gui/app/pages/main/MainPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
22 changes: 16 additions & 6 deletions lib/gui/app/styled-components.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
* limitations under the License.
*/

import * as _ from 'lodash';
import * as React from 'react';
import {
Alert as AlertBase,
Expand Down Expand Up @@ -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;
`;

Expand Down Expand Up @@ -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>) => (
Expand Down Expand Up @@ -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} />;
};
14 changes: 4 additions & 10 deletions lib/gui/etcher.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,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
Expand Down Expand Up @@ -144,14 +146,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;
Expand Down Expand Up @@ -202,7 +196,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();
});

Expand Down Expand Up @@ -287,7 +281,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:') &&
Expand Down
4 changes: 2 additions & 2 deletions lib/shared/messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -164,11 +164,11 @@ export const error = {
? i18next.t('message.toDrive', {
description: drives[0].description,
name: drives[0].displayName,
})
})
: i18next.t('message.toTarget', {
count: drives.length,
num: drives.length,
});
});
return i18next.t('message.flashError', {
image: imageBasename,
targets: target,
Expand Down
1 change: 1 addition & 0 deletions lib/util/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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.

// @ts-ignore (0 is a valid value for stopRetrying and is not the same as false)
ipc.config.stopRetrying = 0;

Expand Down
1 change: 1 addition & 0 deletions lib/util/child-writer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ async function write(options: WriteOptions) {
const onFail = (destination: SourceDestination, error: Error) => {
emitFail({
// TODO: device should be destination

// @ts-ignore (destination.drive is private)
device: destination.drive,
error: toJSON(error),
Expand Down
1 change: 0 additions & 1 deletion lib/util/drive-scanner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ if (platform !== 'linux' || (geteuid && geteuid() === 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());
}
Expand Down
3 changes: 3 additions & 0 deletions lib/util/scanner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,11 @@ function prepareDrive(drive: Drive) {
return drive.drive;
} else if (drive instanceof sdk.sourceDestination.UsbbootDrive) {
// This is a workaround etcher expecting a device string and a size

// @ts-ignore
drive.device = drive.usbDevice.portId;
drive.size = null;

// @ts-ignore
drive.progress = 0;
drive.disabled = true;
Expand Down Expand Up @@ -140,6 +142,7 @@ function updateDriveProgress(
progress: number,
) {
const drives = getDrives();

// @ts-ignore
const driveInMap = drives[drive.device];
if (driveInMap) {
Expand Down
Loading

0 comments on commit 24f9a0a

Please sign in to comment.