@nordicsemiconductor/pc-nrfconnect-shared 230.0.0 → 232.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/Changelog.md +1688 -1674
  2. package/README.md +8 -8
  3. package/config/colors.js +1 -1
  4. package/config/eslintrc.js +25 -5
  5. package/config/jest.config.js +1 -1
  6. package/ipc/MetaFiles.ts +2 -2
  7. package/ipc/README.md +14 -14
  8. package/ipc/appDetails.ts +1 -1
  9. package/ipc/apps.ts +5 -5
  10. package/ipc/infrastructure/mainToRenderer.ts +3 -3
  11. package/ipc/infrastructure/rendererToMain.ts +5 -5
  12. package/ipc/open.ts +2 -2
  13. package/ipc/safeStorage.ts +2 -2
  14. package/ipc/schema/packageJson.ts +1 -1
  15. package/ipc/serialPort.ts +2 -2
  16. package/main/index.ts +7 -0
  17. package/mocks/electronStoreMock.ts +1 -1
  18. package/nrfutil/collectingResultParser.ts +3 -4
  19. package/nrfutil/device/batch.ts +37 -35
  20. package/nrfutil/device/boardController.ts +2 -2
  21. package/nrfutil/device/common.ts +6 -6
  22. package/nrfutil/device/deviceInfo.ts +3 -3
  23. package/nrfutil/device/erase.ts +2 -2
  24. package/nrfutil/device/getBoardControllerConfig.ts +2 -2
  25. package/nrfutil/device/getBoardControllerVersion.ts +2 -2
  26. package/nrfutil/device/getCoreInfo.ts +2 -2
  27. package/nrfutil/device/getFwInfo.ts +2 -2
  28. package/nrfutil/device/getProtectionStatus.ts +2 -2
  29. package/nrfutil/device/list.ts +2 -2
  30. package/nrfutil/device/logLibVersions.ts +7 -7
  31. package/nrfutil/device/program.ts +21 -40
  32. package/nrfutil/device/recover.ts +2 -2
  33. package/nrfutil/device/reset.ts +2 -2
  34. package/nrfutil/device/setMcuState.ts +2 -2
  35. package/nrfutil/device/setProtectionStatus.ts +2 -2
  36. package/nrfutil/device/xRead.ts +2 -2
  37. package/nrfutil/fs.ts +49 -0
  38. package/nrfutil/modules.ts +9 -9
  39. package/nrfutil/sandbox.ts +101 -53
  40. package/nrfutil/version/jlinkVersion.test.ts +34 -34
  41. package/nrfutil/version/jlinkVersion.ts +7 -7
  42. package/nrfutil/version/moduleVersion.ts +7 -7
  43. package/nrfutil/version/version.ts +3 -3
  44. package/package.json +7 -7
  45. package/release_notes.md +14 -2
  46. package/scripts/check-app-properties.ts +12 -12
  47. package/scripts/check-for-typescript.ts +2 -2
  48. package/scripts/create-source.ts +2 -2
  49. package/scripts/esbuild-renderer.ts +8 -8
  50. package/scripts/esbuild.ts +2 -2
  51. package/scripts/get-release-numbers.ts +1 -1
  52. package/scripts/is-releasable.ts +3 -3
  53. package/scripts/nordic-publish.ts +34 -34
  54. package/scripts/nrfconnect-license.ts +6 -6
  55. package/scripts/prepare-shared-release.ts +10 -10
  56. package/src/About/Feedback.tsx +3 -3
  57. package/src/About/SupportCard.tsx +1 -1
  58. package/src/App/App.test.tsx +1 -1
  59. package/src/App/App.tsx +3 -3
  60. package/src/App/VisibilityBar.tsx +1 -1
  61. package/src/App/appLayout.ts +12 -12
  62. package/src/Button/Button.tsx +1 -1
  63. package/src/ConfirmBeforeClose/ConfirmCloseDialog.tsx +1 -1
  64. package/src/ConfirmBeforeClose/confirmBeforeCloseSlice.ts +5 -5
  65. package/src/Device/DeviceSelector/DeviceList/Device.tsx +2 -2
  66. package/src/Device/DeviceSelector/DeviceList/DeviceList.tsx +3 -3
  67. package/src/Device/DeviceSelector/DeviceList/VirtualDevices.tsx +2 -2
  68. package/src/Device/DeviceSelector/DeviceSelector.test.tsx +16 -16
  69. package/src/Device/DeviceSelector/DeviceSelector.tsx +13 -13
  70. package/src/Device/DeviceSelector/Favorite.tsx +1 -1
  71. package/src/Device/DeviceSelector/SelectDevice.tsx +1 -1
  72. package/src/Device/DeviceSetup/DeviceSetupView.tsx +1 -1
  73. package/src/Device/deviceAutoSelectSlice.ts +5 -5
  74. package/src/Device/deviceInfo/deviceInfo.ts +2 -2
  75. package/src/Device/deviceLister.test.ts +4 -4
  76. package/src/Device/deviceLister.ts +49 -51
  77. package/src/Device/deviceSetup.ts +27 -26
  78. package/src/Device/deviceSetupSlice.ts +2 -2
  79. package/src/Device/deviceSlice.ts +17 -18
  80. package/src/Device/initPacket.ts +13 -13
  81. package/src/Device/jprogOperations.ts +11 -11
  82. package/src/Device/sdfuOperations.ts +47 -47
  83. package/src/Dropdown/Dropdown.test.tsx +3 -3
  84. package/src/Dropdown/Dropdown.tsx +6 -6
  85. package/src/Dropdown/DropdownHelpers.test.ts +1 -1
  86. package/src/Dropdown/DropdownHelpers.ts +4 -4
  87. package/src/ErrorBoundary/ErrorBoundary.test.tsx +5 -5
  88. package/src/ErrorBoundary/ErrorBoundary.tsx +7 -5
  89. package/src/ErrorDialog/ErrorDialog.tsx +4 -4
  90. package/src/ErrorDialog/errorDialogSlice.ts +3 -3
  91. package/src/FactoryReset/FactoryResetButton.test.tsx +1 -1
  92. package/src/FlashMessage/FlashMessage.tsx +8 -8
  93. package/src/FlashMessage/FlashMessageSlice.ts +3 -3
  94. package/src/Group/Group.tsx +11 -11
  95. package/src/InlineInput/InlineInput.tsx +4 -4
  96. package/src/InlineInput/NumberInlineInput.tsx +13 -13
  97. package/src/InlineInput/NumberInputWithDropdown.tsx +2 -2
  98. package/src/Link/ExternalLink.tsx +1 -1
  99. package/src/Link/FileLink.tsx +1 -1
  100. package/src/Log/LogEntry.tsx +2 -2
  101. package/src/Log/logSlice.ts +1 -1
  102. package/src/Log/syncLogToStore.ts +1 -1
  103. package/src/MasonryLayout/MasonryLayout.tsx +8 -6
  104. package/src/NavBar/NavMenuItem.tsx +1 -1
  105. package/src/NumberInput/NumberInput.tsx +3 -3
  106. package/src/Parsers/shellParser.test.ts +98 -104
  107. package/src/Parsers/shellParser.ts +20 -20
  108. package/src/PseudoButton/PseudoButton.tsx +1 -1
  109. package/src/SerialPort/ConflictingSettingsDialog.tsx +11 -9
  110. package/src/SerialPort/SerialPort.test.ts +4 -4
  111. package/src/SerialPort/SerialPort.ts +22 -18
  112. package/src/Slider/Handle.tsx +3 -3
  113. package/src/Slider/Slider.test.tsx +2 -2
  114. package/src/Slider/Slider.tsx +2 -2
  115. package/src/Slider/Ticks.tsx +2 -2
  116. package/src/Slider/percentage.ts +2 -2
  117. package/src/Slider/range.ts +7 -7
  118. package/src/StartStopButton/StartStopButton.tsx +1 -1
  119. package/src/StateSelector/StateSelector.tsx +1 -1
  120. package/src/Stepper/Stepper.tsx +2 -2
  121. package/src/Toggle/Toggle.tsx +2 -2
  122. package/src/logging/appTransport.test.ts +2 -2
  123. package/src/logging/appTransport.ts +1 -1
  124. package/src/logging/describeError.test.ts +1 -1
  125. package/src/logging/describeError.ts +1 -1
  126. package/src/logging/index.ts +4 -4
  127. package/src/logging/sendInitialLogMessages.ts +2 -2
  128. package/src/store.ts +4 -5
  129. package/src/telemetry/TelemetrySender.ts +2 -2
  130. package/src/telemetry/TelemetrySenderInMain.ts +1 -2
  131. package/src/telemetry/flatObject.test.ts +1 -1
  132. package/src/telemetry/telemetry.ts +3 -3
  133. package/src/utils/classNames.test.ts +2 -2
  134. package/src/utils/packageJson.ts +4 -4
  135. package/src/utils/persistentStore.ts +19 -19
  136. package/src/utils/systemReport.ts +8 -8
  137. package/src/utils/truncateMiddle.test.ts +1 -1
  138. package/src/utils/truncateMiddle.ts +1 -1
  139. package/src/utils/udevInstalled.ts +1 -1
  140. package/src/utils/useHotKey.ts +2 -2
  141. package/src/utils/useStopwatch.test.tsx +1 -11
  142. package/src/utils/useStopwatch.ts +3 -3
  143. package/test/dispatchTo.ts +1 -1
  144. package/test/setupTests.ts +3 -3
  145. package/test/testrenderer.tsx +4 -8
  146. package/typings/generated/ipc/appDetails.d.ts.map +1 -1
  147. package/typings/generated/ipc/apps.d.ts.map +1 -1
  148. package/typings/generated/ipc/infrastructure/mainToRenderer.d.ts +1 -1
  149. package/typings/generated/ipc/infrastructure/mainToRenderer.d.ts.map +1 -1
  150. package/typings/generated/ipc/infrastructure/rendererToMain.d.ts.map +1 -1
  151. package/typings/generated/ipc/open.d.ts.map +1 -1
  152. package/typings/generated/ipc/safeStorage.d.ts +4 -5
  153. package/typings/generated/ipc/safeStorage.d.ts.map +1 -1
  154. package/typings/generated/ipc/schema/packageJson.d.ts +3 -3
  155. package/typings/generated/ipc/schema/parseJson.d.ts +1 -1
  156. package/typings/generated/ipc/schema/parseJson.d.ts.map +1 -1
  157. package/typings/generated/ipc/serialPort.d.ts +10 -11
  158. package/typings/generated/ipc/serialPort.d.ts.map +1 -1
  159. package/typings/generated/main/index.d.ts +15 -14
  160. package/typings/generated/main/index.d.ts.map +1 -1
  161. package/typings/generated/nrfutil/collectingResultParser.d.ts +1 -2
  162. package/typings/generated/nrfutil/collectingResultParser.d.ts.map +1 -1
  163. package/typings/generated/nrfutil/common.d.ts +0 -1
  164. package/typings/generated/nrfutil/common.d.ts.map +1 -1
  165. package/typings/generated/nrfutil/device/__mocks__/device.d.ts +1 -2
  166. package/typings/generated/nrfutil/device/__mocks__/device.d.ts.map +1 -1
  167. package/typings/generated/nrfutil/device/batch.d.ts.map +1 -1
  168. package/typings/generated/nrfutil/device/batchTypes.d.ts.map +1 -1
  169. package/typings/generated/nrfutil/device/boardController.d.ts.map +1 -1
  170. package/typings/generated/nrfutil/device/common.d.ts.map +1 -1
  171. package/typings/generated/nrfutil/device/device.d.ts +17 -17
  172. package/typings/generated/nrfutil/device/device.d.ts.map +1 -1
  173. package/typings/generated/nrfutil/device/deviceInfo.d.ts.map +1 -1
  174. package/typings/generated/nrfutil/device/erase.d.ts.map +1 -1
  175. package/typings/generated/nrfutil/device/getBoardControllerConfig.d.ts.map +1 -1
  176. package/typings/generated/nrfutil/device/getBoardControllerVersion.d.ts.map +1 -1
  177. package/typings/generated/nrfutil/device/getCoreInfo.d.ts.map +1 -1
  178. package/typings/generated/nrfutil/device/getFwInfo.d.ts.map +1 -1
  179. package/typings/generated/nrfutil/device/getProtectionStatus.d.ts.map +1 -1
  180. package/typings/generated/nrfutil/device/list.d.ts +2 -2
  181. package/typings/generated/nrfutil/device/list.d.ts.map +1 -1
  182. package/typings/generated/nrfutil/device/logLibVersions.d.ts.map +1 -1
  183. package/typings/generated/nrfutil/device/program.d.ts +0 -2
  184. package/typings/generated/nrfutil/device/program.d.ts.map +1 -1
  185. package/typings/generated/nrfutil/device/recover.d.ts.map +1 -1
  186. package/typings/generated/nrfutil/device/reset.d.ts.map +1 -1
  187. package/typings/generated/nrfutil/device/setMcuState.d.ts.map +1 -1
  188. package/typings/generated/nrfutil/device/setProtectionStatus.d.ts +1 -1
  189. package/typings/generated/nrfutil/device/setProtectionStatus.d.ts.map +1 -1
  190. package/typings/generated/nrfutil/device/xRead.d.ts.map +1 -1
  191. package/typings/generated/nrfutil/fs.d.ts +12 -0
  192. package/typings/generated/nrfutil/fs.d.ts.map +1 -0
  193. package/typings/generated/nrfutil/modules.d.ts.map +1 -1
  194. package/typings/generated/nrfutil/nrfutilLogger.d.ts.map +1 -1
  195. package/typings/generated/nrfutil/sandbox.d.ts +6 -5
  196. package/typings/generated/nrfutil/sandbox.d.ts.map +1 -1
  197. package/typings/generated/nrfutil/version/jlinkVersion.d.ts.map +1 -1
  198. package/typings/generated/nrfutil/version/moduleVersion.d.ts +1 -1
  199. package/typings/generated/nrfutil/version/moduleVersion.d.ts.map +1 -1
  200. package/typings/generated/nrfutil/version/version.d.ts.map +1 -1
  201. package/typings/generated/scripts/check-app-properties.d.ts.map +1 -1
  202. package/typings/generated/scripts/esbuild-renderer.d.ts.map +1 -1
  203. package/typings/generated/scripts/get-release-numbers.d.ts.map +1 -1
  204. package/typings/generated/scripts/latest-changelog-entry.d.ts.map +1 -1
  205. package/typings/generated/src/About/About.d.ts.map +1 -1
  206. package/typings/generated/src/About/ApplicationCard.d.ts +0 -1
  207. package/typings/generated/src/About/ApplicationCard.d.ts.map +1 -1
  208. package/typings/generated/src/About/DeviceCard.d.ts +0 -1
  209. package/typings/generated/src/About/DeviceCard.d.ts.map +1 -1
  210. package/typings/generated/src/About/DocumentationCard.d.ts.map +1 -1
  211. package/typings/generated/src/About/DocumentationSection.d.ts.map +1 -1
  212. package/typings/generated/src/About/Feedback.d.ts +1 -2
  213. package/typings/generated/src/About/Feedback.d.ts.map +1 -1
  214. package/typings/generated/src/About/Section.d.ts.map +1 -1
  215. package/typings/generated/src/About/SupportCard.d.ts +1 -2
  216. package/typings/generated/src/About/SupportCard.d.ts.map +1 -1
  217. package/typings/generated/src/About/sendFeedback.d.ts.map +1 -1
  218. package/typings/generated/src/About/shortcutSlice.d.ts +1 -1
  219. package/typings/generated/src/About/shortcutSlice.d.ts.map +1 -1
  220. package/typings/generated/src/App/App.d.ts +1 -1
  221. package/typings/generated/src/App/App.d.ts.map +1 -1
  222. package/typings/generated/src/App/ConnectedToStore.d.ts +1 -1
  223. package/typings/generated/src/App/ConnectedToStore.d.ts.map +1 -1
  224. package/typings/generated/src/App/VisibilityBar.d.ts +0 -1
  225. package/typings/generated/src/App/VisibilityBar.d.ts.map +1 -1
  226. package/typings/generated/src/App/appLayout.d.ts +1 -1
  227. package/typings/generated/src/App/appLayout.d.ts.map +1 -1
  228. package/typings/generated/src/Card/Card.d.ts.map +1 -1
  229. package/typings/generated/src/ConfirmBeforeClose/ConfirmCloseDialog.d.ts +0 -1
  230. package/typings/generated/src/ConfirmBeforeClose/ConfirmCloseDialog.d.ts.map +1 -1
  231. package/typings/generated/src/ConfirmBeforeClose/confirmBeforeCloseSlice.d.ts +2 -3
  232. package/typings/generated/src/ConfirmBeforeClose/confirmBeforeCloseSlice.d.ts.map +1 -1
  233. package/typings/generated/src/Device/BrokenDeviceDialog/BrokenDeviceDialog.d.ts +0 -1
  234. package/typings/generated/src/Device/BrokenDeviceDialog/BrokenDeviceDialog.d.ts.map +1 -1
  235. package/typings/generated/src/Device/BrokenDeviceDialog/brokenDeviceDialogSlice.d.ts +1 -1
  236. package/typings/generated/src/Device/BrokenDeviceDialog/brokenDeviceDialogSlice.d.ts.map +1 -1
  237. package/typings/generated/src/Device/DeviceSelector/BasicDeviceInfo.d.ts.map +1 -1
  238. package/typings/generated/src/Device/DeviceSelector/DeviceList/BrokenDevice.d.ts +0 -1
  239. package/typings/generated/src/Device/DeviceSelector/DeviceList/BrokenDevice.d.ts.map +1 -1
  240. package/typings/generated/src/Device/DeviceSelector/DeviceList/Device.d.ts +0 -1
  241. package/typings/generated/src/Device/DeviceSelector/DeviceList/Device.d.ts.map +1 -1
  242. package/typings/generated/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.d.ts +0 -1
  243. package/typings/generated/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.d.ts.map +1 -1
  244. package/typings/generated/src/Device/DeviceSelector/DeviceList/RenameDevice.d.ts +0 -1
  245. package/typings/generated/src/Device/DeviceSelector/DeviceList/RenameDevice.d.ts.map +1 -1
  246. package/typings/generated/src/Device/DeviceSelector/DeviceList/VirtualDevices.d.ts +0 -1
  247. package/typings/generated/src/Device/DeviceSelector/DeviceList/VirtualDevices.d.ts.map +1 -1
  248. package/typings/generated/src/Device/DeviceSelector/DeviceSelector.d.ts +0 -1
  249. package/typings/generated/src/Device/DeviceSelector/DeviceSelector.d.ts.map +1 -1
  250. package/typings/generated/src/Device/DeviceSelector/DisconnectDevice.d.ts +0 -1
  251. package/typings/generated/src/Device/DeviceSelector/DisconnectDevice.d.ts.map +1 -1
  252. package/typings/generated/src/Device/DeviceSelector/SelectDevice.d.ts +0 -1
  253. package/typings/generated/src/Device/DeviceSelector/SelectDevice.d.ts.map +1 -1
  254. package/typings/generated/src/Device/DeviceSelector/SelectedDevice.d.ts +0 -1
  255. package/typings/generated/src/Device/DeviceSelector/SelectedDevice.d.ts.map +1 -1
  256. package/typings/generated/src/Device/DeviceSelector/SelectedVirtualDevice.d.ts +0 -1
  257. package/typings/generated/src/Device/DeviceSelector/SelectedVirtualDevice.d.ts.map +1 -1
  258. package/typings/generated/src/Device/DeviceSetup/DeviceSetupView.d.ts +0 -1
  259. package/typings/generated/src/Device/DeviceSetup/DeviceSetupView.d.ts.map +1 -1
  260. package/typings/generated/src/Device/deviceAutoSelectSlice.d.ts +1 -1
  261. package/typings/generated/src/Device/deviceAutoSelectSlice.d.ts.map +1 -1
  262. package/typings/generated/src/Device/deviceInfo/deviceInfo.d.ts +0 -1
  263. package/typings/generated/src/Device/deviceInfo/deviceInfo.d.ts.map +1 -1
  264. package/typings/generated/src/Device/deviceLister.d.ts.map +1 -1
  265. package/typings/generated/src/Device/deviceSetup.d.ts +0 -1
  266. package/typings/generated/src/Device/deviceSetup.d.ts.map +1 -1
  267. package/typings/generated/src/Device/deviceSetupSlice.d.ts +3 -3
  268. package/typings/generated/src/Device/deviceSetupSlice.d.ts.map +1 -1
  269. package/typings/generated/src/Device/deviceSlice.d.ts +1 -1
  270. package/typings/generated/src/Device/deviceSlice.d.ts.map +1 -1
  271. package/typings/generated/src/Device/initPacket.d.ts +0 -1
  272. package/typings/generated/src/Device/initPacket.d.ts.map +1 -1
  273. package/typings/generated/src/Device/jprogOperations.d.ts.map +1 -1
  274. package/typings/generated/src/Device/sdfuOperations.d.ts +1 -2
  275. package/typings/generated/src/Device/sdfuOperations.d.ts.map +1 -1
  276. package/typings/generated/src/Dialog/Dialog.d.ts +3 -3
  277. package/typings/generated/src/Dialog/Dialog.d.ts.map +1 -1
  278. package/typings/generated/src/Dropdown/Dropdown.d.ts.map +1 -1
  279. package/typings/generated/src/Dropdown/DropdownHelpers.d.ts.map +1 -1
  280. package/typings/generated/src/ErrorBoundary/ErrorBoundary.d.ts.map +1 -1
  281. package/typings/generated/src/ErrorDialog/ErrorDialog.d.ts +0 -1
  282. package/typings/generated/src/ErrorDialog/ErrorDialog.d.ts.map +1 -1
  283. package/typings/generated/src/ErrorDialog/errorDialogSlice.d.ts +1 -1
  284. package/typings/generated/src/ErrorDialog/errorDialogSlice.d.ts.map +1 -1
  285. package/typings/generated/src/FlashMessage/FlashMessage.d.ts +0 -1
  286. package/typings/generated/src/FlashMessage/FlashMessage.d.ts.map +1 -1
  287. package/typings/generated/src/FlashMessage/FlashMessageSlice.d.ts +1 -1
  288. package/typings/generated/src/FlashMessage/FlashMessageSlice.d.ts.map +1 -1
  289. package/typings/generated/src/Group/Group.d.ts +8 -8
  290. package/typings/generated/src/Group/Group.d.ts.map +1 -1
  291. package/typings/generated/src/InlineInput/InlineInput.d.ts.map +1 -1
  292. package/typings/generated/src/InlineInput/NumberInlineInput.d.ts +0 -1
  293. package/typings/generated/src/InlineInput/NumberInlineInput.d.ts.map +1 -1
  294. package/typings/generated/src/InlineInput/NumberInputWithDropdown.d.ts.map +1 -1
  295. package/typings/generated/src/Link/ExternalLink.d.ts +1 -2
  296. package/typings/generated/src/Link/ExternalLink.d.ts.map +1 -1
  297. package/typings/generated/src/Link/FileLink.d.ts +1 -2
  298. package/typings/generated/src/Link/FileLink.d.ts.map +1 -1
  299. package/typings/generated/src/Log/LogEntry.d.ts +0 -1
  300. package/typings/generated/src/Log/LogEntry.d.ts.map +1 -1
  301. package/typings/generated/src/Log/LogViewer.d.ts +0 -1
  302. package/typings/generated/src/Log/LogViewer.d.ts.map +1 -1
  303. package/typings/generated/src/Log/logSlice.d.ts +1 -1
  304. package/typings/generated/src/Log/logSlice.d.ts.map +1 -1
  305. package/typings/generated/src/Log/syncLogToStore.d.ts.map +1 -1
  306. package/typings/generated/src/Main/Main.d.ts.map +1 -1
  307. package/typings/generated/src/MasonryLayout/MasonryLayout.d.ts.map +1 -1
  308. package/typings/generated/src/NavBar/NavBar.d.ts.map +1 -1
  309. package/typings/generated/src/NavBar/NavMenu.d.ts +0 -1
  310. package/typings/generated/src/NavBar/NavMenu.d.ts.map +1 -1
  311. package/typings/generated/src/NoticeBox/NoticeBox.d.ts.map +1 -1
  312. package/typings/generated/src/NumberInput/NumberInput.d.ts +8 -8
  313. package/typings/generated/src/NumberInput/NumberInput.d.ts.map +1 -1
  314. package/typings/generated/src/Overlay/Overlay.d.ts +2 -2
  315. package/typings/generated/src/Overlay/Overlay.d.ts.map +1 -1
  316. package/typings/generated/src/Parsers/shellParser.d.ts +1 -1
  317. package/typings/generated/src/Parsers/shellParser.d.ts.map +1 -1
  318. package/typings/generated/src/Parsers/shellParser.test.d.ts.map +1 -1
  319. package/typings/generated/src/PseudoButton/PseudoButton.d.ts +4 -4
  320. package/typings/generated/src/PseudoButton/PseudoButton.d.ts.map +1 -1
  321. package/typings/generated/src/SerialPort/ConflictingSettingsDialog.d.ts +0 -1
  322. package/typings/generated/src/SerialPort/ConflictingSettingsDialog.d.ts.map +1 -1
  323. package/typings/generated/src/SerialPort/SerialPort.d.ts +0 -1
  324. package/typings/generated/src/SerialPort/SerialPort.d.ts.map +1 -1
  325. package/typings/generated/src/SidePanel/SidePanel.d.ts +1 -1
  326. package/typings/generated/src/SidePanel/SidePanel.d.ts.map +1 -1
  327. package/typings/generated/src/Slider/factor.d.ts.map +1 -1
  328. package/typings/generated/src/Slider/percentage.d.ts.map +1 -1
  329. package/typings/generated/src/Slider/range.d.ts.map +1 -1
  330. package/typings/generated/src/Spinner/Spinner.d.ts +2 -3
  331. package/typings/generated/src/Spinner/Spinner.d.ts.map +1 -1
  332. package/typings/generated/src/StateSelector/StateSelector.d.ts.map +1 -1
  333. package/typings/generated/src/Stepper/Stepper.d.ts +0 -1
  334. package/typings/generated/src/Stepper/Stepper.d.ts.map +1 -1
  335. package/typings/generated/src/logging/describeError.d.ts.map +1 -1
  336. package/typings/generated/src/logging/index.d.ts.map +1 -1
  337. package/typings/generated/src/logging/logBuffer.d.ts.map +1 -1
  338. package/typings/generated/src/store.d.ts +15 -39
  339. package/typings/generated/src/store.d.ts.map +1 -1
  340. package/typings/generated/src/telemetry/TelemetrySender.d.ts.map +1 -1
  341. package/typings/generated/src/telemetry/TelemetrySenderInMain.d.ts.map +1 -1
  342. package/typings/generated/src/telemetry/TelemetrySenderInRenderer.d.ts.map +1 -1
  343. package/typings/generated/src/telemetry/flatObject.d.ts.map +1 -1
  344. package/typings/generated/src/telemetry/simplifyDevice.d.ts.map +1 -1
  345. package/typings/generated/src/telemetry/telemetry.d.ts +1 -1
  346. package/typings/generated/src/telemetry/telemetry.d.ts.map +1 -1
  347. package/typings/generated/src/utils/appDirs.d.ts.map +1 -1
  348. package/typings/generated/src/utils/classNames.d.ts.map +1 -1
  349. package/typings/generated/src/utils/packageJson.d.ts.map +1 -1
  350. package/typings/generated/src/utils/persistentStore.d.ts +1 -1
  351. package/typings/generated/src/utils/persistentStore.d.ts.map +1 -1
  352. package/typings/generated/src/utils/systemReport.d.ts.map +1 -1
  353. package/typings/generated/src/utils/truncateMiddle.d.ts.map +1 -1
  354. package/typings/generated/src/utils/useFocusedOnVisible.d.ts +0 -1
  355. package/typings/generated/src/utils/useFocusedOnVisible.d.ts.map +1 -1
  356. package/typings/generated/src/utils/useHotKey.d.ts.map +1 -1
  357. package/typings/generated/src/utils/useStopwatch.d.ts.map +1 -1
  358. package/typings/generated/test/dispatchTo.d.ts +1 -1
  359. package/typings/generated/test/dispatchTo.d.ts.map +1 -1
  360. package/typings/generated/test/testrenderer.d.ts +2 -1
  361. package/typings/generated/test/testrenderer.d.ts.map +1 -1
package/README.md CHANGED
@@ -3,10 +3,10 @@
3
3
  This project provides shared commodities for developing nRF Connect for Desktop
4
4
  apps and their launcher:
5
5
 
6
- - React components
7
- - Build scripts
8
- - Configurations
9
- - Test facilities
6
+ - React components
7
+ - Build scripts
8
+ - Configurations
9
+ - Test facilities
10
10
 
11
11
  ## Developing a new feature or fixing an error
12
12
 
@@ -21,10 +21,10 @@ change as a new version right ahead, add a new section with the heading
21
21
 
22
22
  To release, two files must be up-to-date:
23
23
 
24
- - `package.json` contain the correct version number (one more than the last
25
- release).
26
- - `Changelog.md` must contain an entry, with that version number and today's
27
- date.
24
+ - `package.json` contain the correct version number (one more than the last
25
+ release).
26
+ - `Changelog.md` must contain an entry, with that version number and today's
27
+ date.
28
28
 
29
29
  By running `npm run prepare-shared-release` you update the version in
30
30
  `package.json` and in `Changelog.md` a potential `## Unreleased` heading is
package/config/colors.js CHANGED
@@ -37,7 +37,7 @@ paletteColorsKeys.forEach(color => {
37
37
  });
38
38
 
39
39
  const colors = Object.entries(flattenedColors).filter(
40
- ([key]) => !paletteColorsKeys.find(c => key.startsWith(c))
40
+ ([key]) => !paletteColorsKeys.find(c => key.startsWith(c)),
41
41
  );
42
42
 
43
43
  module.exports = {
@@ -17,9 +17,10 @@ module.exports = {
17
17
  extends: [
18
18
  'eslint:recommended',
19
19
  'airbnb',
20
- 'plugin:@typescript-eslint/recommended',
20
+ 'plugin:@typescript-eslint/strict',
21
21
  'plugin:import/recommended',
22
22
  'plugin:import/typescript',
23
+ 'plugin:jsonc/recommended-with-jsonc',
23
24
  'prettier',
24
25
  ],
25
26
  ignorePatterns: [
@@ -35,9 +36,7 @@ module.exports = {
35
36
  'error',
36
37
  { 'ts-expect-error': 'allow-with-description' },
37
38
  ],
38
- '@typescript-eslint/no-empty-function': 'off',
39
39
  '@typescript-eslint/no-shadow': 'error',
40
- '@typescript-eslint/no-var-requires': 'off',
41
40
  'import/default': 'error',
42
41
  'import/extensions': 'off',
43
42
  'import/named': 'error',
@@ -64,10 +63,11 @@ module.exports = {
64
63
  plugins: [
65
64
  'preset-lint-markdown-style-guide',
66
65
  'frontmatter',
67
- ['lint-no-duplicate-headings', false],
68
- ['lint-list-item-indent', false],
69
66
  ['lint-emphasis-marker', false],
67
+ ['lint-list-item-content-indent', false],
68
+ ['lint-list-item-indent', false],
70
69
  ['lint-list-item-spacing', false],
70
+ ['lint-no-duplicate-headings', false],
71
71
  ['lint-no-literal-urls', false],
72
72
  ],
73
73
  },
@@ -125,6 +125,19 @@ module.exports = {
125
125
  },
126
126
  ],
127
127
  'valid-jsdoc': ['error', { prefer: { return: 'returns' } }],
128
+ 'no-empty-function': [
129
+ 'error',
130
+ { allow: ['arrowFunctions', 'constructors'] },
131
+ ],
132
+ 'no-return-await': 'off',
133
+ '@typescript-eslint/no-unused-vars': [
134
+ 'error',
135
+ {
136
+ args: 'all',
137
+ argsIgnorePattern: '^_',
138
+ varsIgnorePattern: '^_',
139
+ },
140
+ ],
128
141
  },
129
142
  overrides: [
130
143
  {
@@ -158,10 +171,17 @@ module.exports = {
158
171
  },
159
172
  {
160
173
  files: ['*.json'],
174
+ parser: 'jsonc-eslint-parser',
161
175
  rules: {
162
176
  'no-template-curly-in-string': 'off',
163
177
  },
164
178
  },
179
+ {
180
+ files: ['*.js'],
181
+ rules: {
182
+ '@typescript-eslint/no-require-imports': 'off',
183
+ },
184
+ },
165
185
  {
166
186
  files: [
167
187
  '**/__tests__/**/*.[jt]s?(x)',
@@ -18,7 +18,7 @@ module.exports = (disabledMocks = []) => ({
18
18
  '^electron-store$': `${mockDir}/electronStoreMock.ts`,
19
19
  '@electron/remote': `${mockDir}/remoteMock.ts`,
20
20
  'react-markdown': require.resolve(
21
- 'react-markdown/react-markdown.min.js'
21
+ 'react-markdown/react-markdown.min.js',
22
22
  ),
23
23
  ...(disabledMocks.includes('packageJson')
24
24
  ? {}
package/ipc/MetaFiles.ts CHANGED
@@ -49,7 +49,7 @@ export interface AppInfo {
49
49
  export const semver = z.string().regex(
50
50
  // From https://semver.org
51
51
  /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/,
52
- 'Is not a valid string for a semantic version'
52
+ 'Is not a valid string for a semantic version',
53
53
  );
54
54
 
55
55
  const nrfutilModuleName = z.string();
@@ -60,7 +60,7 @@ export type NrfutilModuleVersion = z.infer<typeof nrfutilModuleVersion>;
60
60
 
61
61
  export const nrfModules = z.record(
62
62
  nrfutilModuleName,
63
- z.tuple([nrfutilModuleVersion])
63
+ z.tuple([nrfutilModuleVersion]),
64
64
  );
65
65
 
66
66
  export type NrfutilModules = z.infer<typeof nrfModules>;
package/ipc/README.md CHANGED
@@ -16,28 +16,28 @@ launcher will react in the way the apps expect it.
16
16
 
17
17
  There are a few conventions we follow with the code here in `ipc/`:
18
18
 
19
- - In each file there are pairs of functions: One to send a message over an IPC
20
- channel (e.g. `openApp`) and another to register a handler for the messages
21
- on that same channel (e.g. `registerOpenApp`).
19
+ - In each file there are pairs of functions: One to send a message over an IPC
20
+ channel (e.g. `openApp`) and another to register a handler for the messages on
21
+ that same channel (e.g. `registerOpenApp`).
22
22
 
23
23
  Usually these two functions utilize a shared signature which is defined in a
24
24
  type above them. Usually the functions are defined by invoking functions
25
25
  from `infrastructure/mainToRenderer.ts` or
26
26
  `infrastructure/rendererToMain.ts` which also use that type.
27
27
 
28
- - The functions mentioned before are then exported in objects with the names
29
- `inMain`, `forRenderer`, `inRenderer`, and `forMain` to signify how the
30
- functions are supposed to be used. E.g. the mentioned `openApp` is in
31
- `inMain` because it is called by code in the renderer processes to invoke
32
- code in the main process to open an window. `registerOpenApp` is in
33
- `forRenderer` because the handler is registered so that code in the renderer
34
- processes can invoke it.
28
+ - The functions mentioned before are then exported in objects with the names
29
+ `inMain`, `forRenderer`, `inRenderer`, and `forMain` to signify how the
30
+ functions are supposed to be used. E.g. the mentioned `openApp` is in `inMain`
31
+ because it is called by code in the renderer processes to invoke code in the
32
+ main process to open an window. `registerOpenApp` is in `forRenderer` because
33
+ the handler is registered so that code in the renderer processes can invoke
34
+ it.
35
35
 
36
36
  So, `inMain` and `forRenderer` are used when sending messages from the
37
37
  renderer processes to the main process. `inRenderer` and `forMain` are used,
38
38
  when sending messages from the main process to the renderer processes.
39
39
 
40
- - The code here in `ipc/` must neither reference any code in `src/` (which is
41
- for code of the renderer processes) nor in `main/` (which is for code in the
42
- main process). Only the other way around code in those two folders can
43
- reference code in `ipc/`.
40
+ - The code here in `ipc/` must neither reference any code in `src/` (which is
41
+ for code of the renderer processes) nor in `main/` (which is for code in the
42
+ main process). Only the other way around code in those two folders can
43
+ reference code in `ipc/`.
package/ipc/appDetails.ts CHANGED
@@ -30,7 +30,7 @@ type GetAppDetails = () => AppDetailsFromLauncher;
30
30
  const getAppDetails = invoke<GetAppDetails>(channel.request);
31
31
 
32
32
  const registerGetAppDetails = (
33
- onGetAppDetails: (webContents: WebContents) => AppDetailsFromLauncher
33
+ onGetAppDetails: (webContents: WebContents) => AppDetailsFromLauncher,
34
34
  ) => {
35
35
  handleWithSender<GetAppDetails>(channel.request)(onGetAppDetails);
36
36
 
package/ipc/apps.ts CHANGED
@@ -119,23 +119,23 @@ export type GetDownloadableAppsResult = {
119
119
  type GetDownloadableApps = () => GetDownloadableAppsResult;
120
120
 
121
121
  const getDownloadableApps = invoke<GetDownloadableApps>(
122
- channel.getDownloadableApps
122
+ channel.getDownloadableApps,
123
123
  );
124
124
  const registerGetDownloadableApps = handle<GetDownloadableApps>(
125
- channel.getDownloadableApps
125
+ channel.getDownloadableApps,
126
126
  );
127
127
 
128
128
  // installDownloadableApp
129
129
  type InstallDownloadableApp = (
130
130
  app: DownloadableApp,
131
- version?: string
131
+ version?: string,
132
132
  ) => DownloadableApp;
133
133
 
134
134
  const installDownloadableApp = invoke<InstallDownloadableApp>(
135
- channel.installDownloadableApp
135
+ channel.installDownloadableApp,
136
136
  );
137
137
  const registerInstallDownloadableApp = handle<InstallDownloadableApp>(
138
- channel.installDownloadableApp
138
+ channel.installDownloadableApp,
139
139
  );
140
140
 
141
141
  export const forRenderer = {
@@ -25,7 +25,7 @@ export const on =
25
25
  <T extends (...args: never[]) => void>(channel: string) =>
26
26
  (handler: T) =>
27
27
  ipcRenderer.on(channel, (_event, ...args: unknown[]) =>
28
- handler(...(args as Parameters<T>))
28
+ handler(...(args as Parameters<T>)),
29
29
  );
30
30
 
31
31
  // Broadcast with a subchannel
@@ -44,10 +44,10 @@ export const broadcast =
44
44
  export const onBroadcasted =
45
45
  <T extends (...args: never[]) => void>(
46
46
  channel: string,
47
- subChannel: string
47
+ subChannel: string,
48
48
  ) =>
49
49
  (handler: T) =>
50
50
  ipcRenderer.on(
51
51
  `${channel}_${subChannel}`,
52
- (_event, ...args: unknown[]) => handler(...(args as Parameters<T>))
52
+ (_event, ...args: unknown[]) => handler(...(args as Parameters<T>)),
53
53
  );
@@ -16,7 +16,7 @@ export const on =
16
16
  <T extends (...args: never[]) => void>(channel: string) =>
17
17
  (handler: T) =>
18
18
  ipcMain.on(channel, (_event, ...args: unknown[]) =>
19
- handler(...(args as Parameters<T>))
19
+ handler(...(args as Parameters<T>)),
20
20
  );
21
21
 
22
22
  // Invoke
@@ -30,10 +30,10 @@ export const handle =
30
30
  (
31
31
  handler:
32
32
  | ((...args: Parameters<T>) => ReturnType<T>)
33
- | ((...args: Parameters<T>) => Promise<ReturnType<T>>)
33
+ | ((...args: Parameters<T>) => Promise<ReturnType<T>>),
34
34
  ) =>
35
35
  ipcMain.handle(channel, (_event, ...args: unknown[]) =>
36
- handler(...(args as Parameters<T>))
36
+ handler(...(args as Parameters<T>)),
37
37
  );
38
38
 
39
39
  export const handleWithSender =
@@ -44,8 +44,8 @@ export const handleWithSender =
44
44
  | ((
45
45
  sender: WebContents,
46
46
  ...args: Parameters<T>
47
- ) => Promise<ReturnType<T>>)
47
+ ) => Promise<ReturnType<T>>),
48
48
  ) =>
49
49
  ipcMain.handle(channel, ({ sender }, ...args: unknown[]) =>
50
- handler(sender, ...(args as Parameters<T>))
50
+ handler(sender, ...(args as Parameters<T>)),
51
51
  );
package/ipc/open.ts CHANGED
@@ -17,12 +17,12 @@ const channel = {
17
17
 
18
18
  // app
19
19
  export const isOpenAppOptionsDeviceSN = (
20
- device: OpenAppOptionsDevice
20
+ device: OpenAppOptionsDevice,
21
21
  ): device is OpenAppOptionsDeviceSN =>
22
22
  (device as OpenAppOptionsDeviceSN).serialNumber !== undefined;
23
23
 
24
24
  export const isOpenAppOptionsDevicePort = (
25
- device: OpenAppOptionsDevice
25
+ device: OpenAppOptionsDevice,
26
26
  ): device is OpenAppOptionsDevicePort =>
27
27
  (device as OpenAppOptionsDevicePort).serialPortPath !== undefined;
28
28
 
@@ -14,10 +14,10 @@ const channel = {
14
14
 
15
15
  type EncryptionAvailable = () => boolean;
16
16
  const isEncryptionAvailable = invoke<EncryptionAvailable>(
17
- channel.encryptionAvailable
17
+ channel.encryptionAvailable,
18
18
  );
19
19
  const registerEncryptionAvailable = handle<EncryptionAvailable>(
20
- channel.encryptionAvailable
20
+ channel.encryptionAvailable,
21
21
  );
22
22
 
23
23
  type EncryptString = (plainText: string) => Buffer;
@@ -39,7 +39,7 @@ const nrfConnectForDesktop = z.object({
39
39
  const recordOfOptionalStrings = z.record(z.string().optional());
40
40
 
41
41
  const engines = recordOfOptionalStrings.and(
42
- z.object({ nrfconnect: z.string() })
42
+ z.object({ nrfconnect: z.string() }),
43
43
  );
44
44
 
45
45
  const packageJsonApp = packageJson.extend({
package/ipc/serialPort.ts CHANGED
@@ -59,7 +59,7 @@ export type OverwriteOptions = {
59
59
 
60
60
  type Open = (
61
61
  options: SerialPortOpenOptions<AutoDetectTypes>,
62
- overwriteOptions: OverwriteOptions
62
+ overwriteOptions: OverwriteOptions,
63
63
  ) => void;
64
64
  const open = invoke<Open>(channel.open);
65
65
  const registerOpen = handleWithSender<Open>(channel.open);
@@ -89,7 +89,7 @@ const isOpen = invoke<IsOpen>(channel.isOpen);
89
89
  const registerIsOpen = handle<IsOpen>(channel.isOpen);
90
90
 
91
91
  type GetOptions = (
92
- path: string
92
+ path: string,
93
93
  ) => SerialPortOpenOptions<AutoDetectTypes> | undefined;
94
94
  const getOptions = invoke<GetOptions>(channel.getOptions);
95
95
  const registerGetOptions = handle<GetOptions>(channel.getOptions);
package/main/index.ts CHANGED
@@ -56,3 +56,10 @@ export {
56
56
  isOpenAppOptionsDevicePort,
57
57
  isOpenAppOptionsDeviceSN,
58
58
  } from '../ipc/open';
59
+
60
+ export {
61
+ createDisposableTempDir,
62
+ createDisposableTempFile,
63
+ } from '../nrfutil/fs';
64
+
65
+ export { getTriplet } from '../nrfutil/sandbox';
@@ -11,7 +11,7 @@ export default jest.fn(() => {
11
11
  return {
12
12
  get: jest.fn(
13
13
  (key: string, defaultValue?: unknown) =>
14
- cache.get(key) ?? defaultValue
14
+ cache.get(key) ?? defaultValue,
15
15
  ),
16
16
  set: jest.fn(cache.set.bind(cache)),
17
17
  clear: jest.fn(cache.clear.bind(cache)),
@@ -21,12 +21,11 @@ export default class CollectingResultParser<Result> {
21
21
  private readonly info: Result[] = [];
22
22
  private readonly taskEnd: TaskEnd<Result>[] = [];
23
23
 
24
- // eslint-disable-next-line no-useless-constructor
25
24
  constructor(
26
25
  private onLog: OnLog,
27
26
  private onProgress?: OnProgress,
28
27
  private onTaskBegin?: OnTaskBegin,
29
- private onTaskEnd?: OnTaskEnd<Result>
28
+ private onTaskEnd?: OnTaskEnd<Result>,
30
29
  ) {}
31
30
 
32
31
  public handleData = (data: Buffer, pid?: number) => {
@@ -42,7 +41,7 @@ export default class CollectingResultParser<Result> {
42
41
  case 'task_progress':
43
42
  this.onProgress?.(
44
43
  convertNrfutilProgress(item.data.progress),
45
- item.data.task
44
+ item.data.task,
46
45
  );
47
46
  break;
48
47
  case 'task_begin':
@@ -74,7 +73,7 @@ export default class CollectingResultParser<Result> {
74
73
  this.taskEnd
75
74
  .filter(end => end.result === 'fail' && !!end.message)
76
75
  .map(end =>
77
- end.message ? `Message: ${addPunctuation(end.message)}` : ''
76
+ end.message ? `Message: ${addPunctuation(end.message)}` : '',
78
77
  )
79
78
  .join('\n');
80
79
 
@@ -4,9 +4,8 @@
4
4
  * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
5
  */
6
6
 
7
- import fs from 'fs';
8
-
9
7
  import { getModule } from '..';
8
+ import { createDisposableTempFile } from '../fs';
10
9
  import { TaskEnd } from '../sandboxTypes';
11
10
  import { BatchOperationWrapper, Callbacks } from './batchTypes';
12
11
  import {
@@ -21,7 +20,6 @@ import { DeviceCoreInfo } from './getCoreInfo';
21
20
  import { FWInfo } from './getFwInfo';
22
21
  import { GetProtectionStatusResult } from './getProtectionStatus';
23
22
  import {
24
- createTempFile,
25
23
  Firmware,
26
24
  ProgrammingOptions,
27
25
  programmingOptionsToArgs,
@@ -51,7 +49,7 @@ export class Batch {
51
49
  command: string,
52
50
  core: DeviceCore,
53
51
  callbacks?: CallbacksUnknown,
54
- args: string[] = []
52
+ args: string[] = [],
55
53
  ) {
56
54
  const getPromise = async () => {
57
55
  const box = await getModule('device');
@@ -60,7 +58,7 @@ export class Batch {
60
58
  await box.singleInfoOperationOptionalData<object>(
61
59
  command,
62
60
  undefined,
63
- ['--generate', ...coreArg(core), ...args]
61
+ ['--generate', ...coreArg(core), ...args],
64
62
  );
65
63
 
66
64
  return {
@@ -78,7 +76,7 @@ export class Batch {
78
76
  this.enqueueBatchOperationObject(
79
77
  'device-info',
80
78
  core,
81
- callbacks as CallbacksUnknown
79
+ callbacks as CallbacksUnknown,
82
80
  );
83
81
 
84
82
  return this;
@@ -88,7 +86,7 @@ export class Batch {
88
86
  this.enqueueBatchOperationObject(
89
87
  'erase',
90
88
  core,
91
- callbacks as CallbacksUnknown
89
+ callbacks as CallbacksUnknown,
92
90
  );
93
91
 
94
92
  return this;
@@ -111,7 +109,7 @@ export class Batch {
111
109
  },
112
110
  ...callbacks,
113
111
  } as BatchOperationWrapperUnknown);
114
- })
112
+ }),
115
113
  );
116
114
 
117
115
  return this;
@@ -133,7 +131,7 @@ export class Batch {
133
131
  },
134
132
  ...callbacks,
135
133
  } as BatchOperationWrapperUnknown);
136
- })
134
+ }),
137
135
  );
138
136
 
139
137
  return this;
@@ -155,7 +153,7 @@ export class Batch {
155
153
  },
156
154
  ...callbacks,
157
155
  } as BatchOperationWrapperUnknown);
158
- })
156
+ }),
159
157
  );
160
158
 
161
159
  return this;
@@ -164,7 +162,7 @@ export class Batch {
164
162
  public xRead(
165
163
  core: DeviceCore,
166
164
  options: XReadOptions,
167
- callbacks?: Callbacks<ReadResult>
165
+ callbacks?: Callbacks<ReadResult>,
168
166
  ) {
169
167
  this.enqueueBatchOperationObject(
170
168
  'x-read',
@@ -188,7 +186,7 @@ export class Batch {
188
186
  }
189
187
  },
190
188
  } as CallbacksUnknown,
191
- xReadOptionsToArgs(options)
189
+ xReadOptionsToArgs(options),
192
190
  );
193
191
 
194
192
  return this;
@@ -196,12 +194,12 @@ export class Batch {
196
194
 
197
195
  public getCoreInfo(
198
196
  core: DeviceCore,
199
- callbacks?: Callbacks<DeviceCoreInfo>
197
+ callbacks?: Callbacks<DeviceCoreInfo>,
200
198
  ) {
201
199
  this.enqueueBatchOperationObject(
202
200
  'core-info',
203
201
  core,
204
- callbacks as CallbacksUnknown
202
+ callbacks as CallbacksUnknown,
205
203
  );
206
204
 
207
205
  return this;
@@ -211,7 +209,7 @@ export class Batch {
211
209
  this.enqueueBatchOperationObject(
212
210
  'fw-info',
213
211
  core,
214
- callbacks as CallbacksUnknown
212
+ callbacks as CallbacksUnknown,
215
213
  );
216
214
 
217
215
  return this;
@@ -219,12 +217,12 @@ export class Batch {
219
217
 
220
218
  public getProtectionStatus(
221
219
  core: DeviceCore,
222
- callbacks?: Callbacks<GetProtectionStatusResult>
220
+ callbacks?: Callbacks<GetProtectionStatusResult>,
223
221
  ) {
224
222
  this.enqueueBatchOperationObject(
225
223
  'protection-get',
226
224
  core,
227
- callbacks as CallbacksUnknown
225
+ callbacks as CallbacksUnknown,
228
226
  );
229
227
 
230
228
  return this;
@@ -235,7 +233,7 @@ export class Batch {
235
233
  core: DeviceCore,
236
234
  programmingOptions?: ProgrammingOptions,
237
235
  deviceTraits?: DeviceTraits,
238
- callbacks?: CallbacksUnknown
236
+ callbacks?: CallbacksUnknown,
239
237
  ) {
240
238
  const args = [
241
239
  ...(deviceTraits ? deviceTraitsToArgs(deviceTraits) : []),
@@ -246,11 +244,15 @@ export class Batch {
246
244
  if (typeof firmware === 'string') {
247
245
  args.unshift('--firmware', firmware);
248
246
  } else {
249
- const tempFilePath = createTempFile(firmware);
250
- args.unshift('--firmware', tempFilePath);
247
+ const tempFile = createDisposableTempFile(
248
+ firmware.buffer,
249
+ firmware.type,
250
+ );
251
+ args.unshift('--firmware', tempFile.path);
251
252
 
252
253
  newCallbacks.onTaskEnd = (taskEnd: TaskEnd<unknown>) => {
253
- fs.unlinkSync(tempFilePath);
254
+ using _ = tempFile; // Dispose the temp file at the end of this function
255
+
254
256
  callbacks?.onTaskEnd?.(taskEnd);
255
257
  };
256
258
  }
@@ -264,7 +266,7 @@ export class Batch {
264
266
  this.enqueueBatchOperationObject(
265
267
  'recover',
266
268
  core,
267
- callbacks as CallbacksUnknown
269
+ callbacks as CallbacksUnknown,
268
270
  );
269
271
 
270
272
  return this;
@@ -275,7 +277,7 @@ export class Batch {
275
277
  'reset',
276
278
  core,
277
279
  callbacks as CallbacksUnknown,
278
- reset ? ['--reset-kind', reset] : undefined
280
+ reset ? ['--reset-kind', reset] : undefined,
279
281
  );
280
282
 
281
283
  return this;
@@ -283,7 +285,7 @@ export class Batch {
283
285
 
284
286
  public collect(
285
287
  count: number,
286
- callback: (completedTasks: TaskEnd<unknown>[]) => void
288
+ callback: (completedTasks: TaskEnd<unknown>[]) => void,
287
289
  ) {
288
290
  this.collectOperations.push({
289
291
  callback,
@@ -296,11 +298,11 @@ export class Batch {
296
298
 
297
299
  public async run(
298
300
  device: NrfutilDevice,
299
- controller?: AbortController | undefined
301
+ controller?: AbortController | undefined,
300
302
  ): Promise<unknown[]> {
301
303
  if (!device.serialNumber) {
302
304
  throw new Error(
303
- `Device does not have a serial number, no device operation is possible`
305
+ `Device does not have a serial number, no device operation is possible`,
304
306
  );
305
307
  }
306
308
 
@@ -315,7 +317,7 @@ export class Batch {
315
317
 
316
318
  const promiseResults =
317
319
  await Promise.allSettled<BatchOperationWrapperUnknown>(
318
- this.operationBatchGeneration
320
+ this.operationBatchGeneration,
319
321
  );
320
322
  promiseResults.forEach(r => {
321
323
  if (r.status === 'rejected') {
@@ -345,14 +347,14 @@ export class Batch {
345
347
  if (task && currentOperationIndex !== -1) {
346
348
  operations[currentOperationIndex].onProgress?.(
347
349
  progress,
348
- task
350
+ task,
349
351
  );
350
352
  }
351
353
  },
352
354
  onTaskBegin => {
353
355
  currentOperationIndex += 1;
354
356
  operations[currentOperationIndex].onTaskBegin?.(
355
- onTaskBegin
357
+ onTaskBegin,
356
358
  );
357
359
  },
358
360
  taskEnd => {
@@ -363,20 +365,20 @@ export class Batch {
363
365
  this.collectOperations
364
366
  .filter(
365
367
  operation =>
366
- operation.operationId === currentOperationIndex
368
+ operation.operationId === currentOperationIndex,
367
369
  )
368
370
  .forEach(operation => {
369
371
  operation.callback(
370
372
  results.slice(
371
373
  results.length - operation.count,
372
- results.length
373
- )
374
+ results.length,
375
+ ),
374
376
  );
375
377
  });
376
378
 
377
379
  lastCompletedOperationIndex += 1;
378
380
  },
379
- controller
381
+ controller,
380
382
  );
381
383
 
382
384
  const errors = results.filter(result => result.result === 'fail');
@@ -384,7 +386,7 @@ export class Batch {
384
386
  const error = new Error(
385
387
  `Batch failed: ${errors
386
388
  .map(e => `error: ${e.error}, message: ${e.message}`)
387
- .join('\n')}`
389
+ .join('\n')}`,
388
390
  );
389
391
  if (currentOperationIndex !== -1) {
390
392
  operations[currentOperationIndex].onException?.(error);
@@ -394,7 +396,7 @@ export class Batch {
394
396
  } catch (error) {
395
397
  if (currentOperationIndex !== lastCompletedOperationIndex) {
396
398
  operations[currentOperationIndex]?.onException?.(
397
- error as Error
399
+ error as Error,
398
400
  );
399
401
  }
400
402
  throw error;