From 087fb43b351c5242501768f644912de47c887c53 Mon Sep 17 00:00:00 2001 From: David Lechner Date: Mon, 15 Jun 2020 08:24:37 -0500 Subject: [PATCH] check for missing files in firmware.zip Found by https://github.com/pybricks/pybricks-code/pull/98/checks?check_run_id=772712591 --- src/sagas/flash-firmware.ts | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/sagas/flash-firmware.ts b/src/sagas/flash-firmware.ts index 926170de..44f0d0fe 100644 --- a/src/sagas/flash-firmware.ts +++ b/src/sagas/flash-firmware.ts @@ -126,13 +126,28 @@ function* loadFirmware( data: ArrayBuffer, ): Generator { const zip = (yield call(() => JSZip.loadAsync(data))) as JSZip; + + const firmwareBaseFile = zip.file('firmware-base.bin'); + if (firmwareBaseFile === null) { + throw Error('Missing firmware-base.bin'); + } const firmwareBase = (yield call(() => - zip.file('firmware-base.bin').async('uint8array'), + firmwareBaseFile.async('uint8array'), )) as Uint8Array; + + const metadataFile = zip.file('firmware.metadata.json'); + if (metadataFile === null) { + throw Error('Missing firmware.metadata.json'); + } const metadata = JSON.parse( - (yield call(() => zip.file('firmware.metadata.json').async('text'))) as string, + (yield call(() => metadataFile.async('text'))) as string, ) as FirmwareMetadata; - const main = (yield call(() => zip.file('main.py').async('text'))) as string; + + const mainFile = zip.file('main.py'); + if (mainFile === null) { + throw Error('Missing main.py'); + } + const main = (yield call(() => mainFile.async('text'))) as string; if (metadata['mpy-abi-version'] !== 5) { throw Error(