@nordicsemiconductor/pc-nrfconnect-shared 60.0.0-pre1

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 (367) hide show
  1. package/.github/ISSUE_TEMPLATE/custom.md +10 -0
  2. package/.husky/pre-push +3 -0
  3. package/.renovaterc.json +10 -0
  4. package/Changelog.md +2973 -0
  5. package/LICENSE +35 -0
  6. package/README.md +11 -0
  7. package/azure-pipelines.yml +34 -0
  8. package/config/eslintrc.js +190 -0
  9. package/config/jest.config.js +41 -0
  10. package/config/prettier.config.js +13 -0
  11. package/config/tsconfig.json +15 -0
  12. package/fw/bootloader/graviton_bootloader_v1.0.1-[nRF5_SDK_15.0.1-1.alpha_f76d012].zip +0 -0
  13. package/jest.config.js +7 -0
  14. package/main/index.ts +32 -0
  15. package/mocks/deviceLibMock.ts +21 -0
  16. package/mocks/electronMock.ts +15 -0
  17. package/mocks/electronStoreMock.ts +19 -0
  18. package/mocks/emptyMock.ts +7 -0
  19. package/mocks/fileMock.ts +13 -0
  20. package/mocks/gaMock.ts +9 -0
  21. package/mocks/mockTests.test.ts +15 -0
  22. package/mocks/packageJsonMock.ts +10 -0
  23. package/mocks/remoteMock.ts +17 -0
  24. package/package.json +132 -0
  25. package/scripts/check-app-properties.ts +197 -0
  26. package/scripts/check-for-typescript.ts +41 -0
  27. package/scripts/esbuild-bootstrap.js +15 -0
  28. package/scripts/esbuild-renderer.js +131 -0
  29. package/scripts/esbuild.js +57 -0
  30. package/scripts/installHusky.ts +17 -0
  31. package/scripts/nordic-publish.ts +485 -0
  32. package/scripts/nrfconnect-license.ts +277 -0
  33. package/scripts/prepare-shared-release.ts +122 -0
  34. package/scripts/release-shared.test.ts +132 -0
  35. package/scripts/release-shared.ts +207 -0
  36. package/src/About/About.tsx +25 -0
  37. package/src/About/AboutButton.tsx +28 -0
  38. package/src/About/ApplicationCard.tsx +83 -0
  39. package/src/About/DeviceCard.tsx +74 -0
  40. package/src/About/DocumentationCard.tsx +18 -0
  41. package/src/About/DocumentationSection.tsx +24 -0
  42. package/src/About/Section.tsx +21 -0
  43. package/src/About/ShortcutButton.tsx +41 -0
  44. package/src/About/SupportCard.tsx +97 -0
  45. package/src/About/about.scss +40 -0
  46. package/src/About/documentationSlice.ts +41 -0
  47. package/src/About/section.scss +15 -0
  48. package/src/About/shortcutSlice.ts +52 -0
  49. package/src/Alert/Alert.module.scss +29 -0
  50. package/src/Alert/Alert.tsx +37 -0
  51. package/src/App/App.test.tsx +47 -0
  52. package/src/App/App.tsx +227 -0
  53. package/src/App/ConnectedToStore.tsx +19 -0
  54. package/src/App/VisibilityBar.tsx +103 -0
  55. package/src/App/app.scss +83 -0
  56. package/src/App/appLayout.ts +95 -0
  57. package/src/App/shared.scss +49 -0
  58. package/src/App/visibility-bar.scss +55 -0
  59. package/src/Button/Button.tsx +66 -0
  60. package/src/Button/button.module.scss +154 -0
  61. package/src/Card/Card.tsx +26 -0
  62. package/src/Card/card.module.scss +28 -0
  63. package/src/Device/BrokenDeviceDialog/BrokenDeviceDialog.tsx +58 -0
  64. package/src/Device/BrokenDeviceDialog/broken-device-dialog.scss +18 -0
  65. package/src/Device/BrokenDeviceDialog/brokenDeviceDialogSlice.tsx +48 -0
  66. package/src/Device/DeviceSelector/BasicDeviceInfo.tsx +115 -0
  67. package/src/Device/DeviceSelector/DeviceIcon.tsx +27 -0
  68. package/src/Device/DeviceSelector/DeviceList/AnimatedList.tsx +62 -0
  69. package/src/Device/DeviceSelector/DeviceList/BrokenDevice.tsx +34 -0
  70. package/src/Device/DeviceSelector/DeviceList/Device.tsx +84 -0
  71. package/src/Device/DeviceSelector/DeviceList/DeviceList.tsx +113 -0
  72. package/src/Device/DeviceSelector/DeviceList/EditDeviceButtons.tsx +28 -0
  73. package/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.tsx +65 -0
  74. package/src/Device/DeviceSelector/DeviceList/RenameDevice.tsx +22 -0
  75. package/src/Device/DeviceSelector/DeviceList/broken-device.scss +32 -0
  76. package/src/Device/DeviceSelector/DeviceList/device-list.scss +64 -0
  77. package/src/Device/DeviceSelector/DeviceList/device.scss +28 -0
  78. package/src/Device/DeviceSelector/DeviceList/edit-device-buttons.scss +31 -0
  79. package/src/Device/DeviceSelector/DeviceList/more-device-info.scss +33 -0
  80. package/src/Device/DeviceSelector/DeviceList/rename-device.scss +13 -0
  81. package/src/Device/DeviceSelector/DeviceSelector.test.tsx +342 -0
  82. package/src/Device/DeviceSelector/DeviceSelector.tsx +173 -0
  83. package/src/Device/DeviceSelector/Favorite.tsx +49 -0
  84. package/src/Device/DeviceSelector/SelectDevice.tsx +36 -0
  85. package/src/Device/DeviceSelector/SelectedDevice.tsx +65 -0
  86. package/src/Device/DeviceSelector/arrow-down.svg +1 -0
  87. package/src/Device/DeviceSelector/basic-device-info.scss +62 -0
  88. package/src/Device/DeviceSelector/device-icon.scss +27 -0
  89. package/src/Device/DeviceSelector/favorite.scss +17 -0
  90. package/src/Device/DeviceSelector/select-device.scss +38 -0
  91. package/src/Device/DeviceSelector/selected-device.scss +57 -0
  92. package/src/Device/DeviceSetup/DeviceSetupView.tsx +102 -0
  93. package/src/Device/deviceAutoSelectSlice.ts +144 -0
  94. package/src/Device/deviceInfo/deviceInfo.ts +254 -0
  95. package/src/Device/deviceInfo/nRF51-Series-logo.svg +1 -0
  96. package/src/Device/deviceInfo/nRF52-Series-logo.svg +1 -0
  97. package/src/Device/deviceInfo/nRF53-Series-logo.svg +1 -0
  98. package/src/Device/deviceInfo/nRF70-Series_no-background_RGB.svg +36 -0
  99. package/src/Device/deviceInfo/nRF91-Series-logo.svg +1 -0
  100. package/src/Device/deviceInfo/ppk-logo.svg +1 -0
  101. package/src/Device/deviceInfo/unknown-logo.svg +30 -0
  102. package/src/Device/deviceInfo/unknown-nordic-logo.svg +25 -0
  103. package/src/Device/deviceLibWrapper.test.ts +97 -0
  104. package/src/Device/deviceLibWrapper.ts +133 -0
  105. package/src/Device/deviceLister.test.ts +89 -0
  106. package/src/Device/deviceLister.ts +396 -0
  107. package/src/Device/deviceSetup.ts +264 -0
  108. package/src/Device/deviceSetupSlice.ts +94 -0
  109. package/src/Device/deviceSlice.ts +248 -0
  110. package/src/Device/dfu-cc.ts +162 -0
  111. package/src/Device/initPacket.ts +402 -0
  112. package/src/Device/jprogOperations.ts +206 -0
  113. package/src/Device/sdfuOperations.ts +601 -0
  114. package/src/Dialog/Dialog.test.tsx +134 -0
  115. package/src/Dialog/Dialog.tsx +236 -0
  116. package/src/Dialog/dialog.scss +60 -0
  117. package/src/Dropdown/Dropdown.module.scss +83 -0
  118. package/src/Dropdown/Dropdown.test.tsx +62 -0
  119. package/src/Dropdown/Dropdown.tsx +106 -0
  120. package/src/ErrorBoundary/ErrorBoundary.test.tsx +105 -0
  121. package/src/ErrorBoundary/ErrorBoundary.tsx +186 -0
  122. package/src/ErrorBoundary/bug.svg +1 -0
  123. package/src/ErrorBoundary/error-boundary.scss +102 -0
  124. package/src/ErrorDialog/ErrorDialog.test.tsx +70 -0
  125. package/src/ErrorDialog/ErrorDialog.tsx +94 -0
  126. package/src/ErrorDialog/error.scss +14 -0
  127. package/src/ErrorDialog/errorDialogSlice.test.ts +64 -0
  128. package/src/ErrorDialog/errorDialogSlice.ts +80 -0
  129. package/src/FactoryReset/FactoryResetButton.test.tsx +46 -0
  130. package/src/FactoryReset/FactoryResetButton.tsx +81 -0
  131. package/src/InlineInput/InlineInput.tsx +170 -0
  132. package/src/InlineInput/NumberInlineInput.tsx +107 -0
  133. package/src/InlineInput/inline-input.scss +38 -0
  134. package/src/InlineInput/number-inline-input.scss +15 -0
  135. package/src/Log/LogEntry.tsx +62 -0
  136. package/src/Log/LogViewer.tsx +54 -0
  137. package/src/Log/log-entry.scss +30 -0
  138. package/src/Log/log-viewer.scss +24 -0
  139. package/src/Log/logSlice.ts +73 -0
  140. package/src/Log/syncLogToStore.ts +36 -0
  141. package/src/Logo/Logo.tsx +48 -0
  142. package/src/Logo/logo.scss +11 -0
  143. package/src/Logo/nordic-logo-blue-icon-only.png +0 -0
  144. package/src/Logo/nordic-logo-gray-icon-only.png +0 -0
  145. package/src/Logo/nordic-logo-white-icon-only.png +0 -0
  146. package/src/Main/Main.tsx +13 -0
  147. package/src/Main/main.scss +13 -0
  148. package/src/MasonryLayout/MasonryLayout.tsx +234 -0
  149. package/src/MasonryLayout/masonryLayout.module.scss +46 -0
  150. package/src/NavBar/NavBar.tsx +22 -0
  151. package/src/NavBar/NavMenu.test.tsx +41 -0
  152. package/src/NavBar/NavMenu.tsx +53 -0
  153. package/src/NavBar/NavMenuItem.tsx +41 -0
  154. package/src/NavBar/nav-bar.scss +26 -0
  155. package/src/NavBar/nav-menu-item.scss +34 -0
  156. package/src/OpenApp/openApp.ts +18 -0
  157. package/src/Panes/FeedbackPane.tsx +149 -0
  158. package/src/PseudoButton/PseudoButton.tsx +56 -0
  159. package/src/PseudoButton/pseudo-button.scss +11 -0
  160. package/src/SerialPort/ConflictingSettingsDialog.tsx +242 -0
  161. package/src/SerialPort/SerialPort.test.ts +54 -0
  162. package/src/SerialPort/SerialPort.ts +202 -0
  163. package/src/Shortcuts/Shortcut-item.scss +33 -0
  164. package/src/Shortcuts/Shortcut-modal.scss +20 -0
  165. package/src/Shortcuts/ShortcutItem.tsx +48 -0
  166. package/src/Shortcuts/ShortcutModal.tsx +67 -0
  167. package/src/SidePanel/Group.tsx +106 -0
  168. package/src/SidePanel/SidePanel.tsx +19 -0
  169. package/src/SidePanel/group.scss +42 -0
  170. package/src/SidePanel/sidepanel.scss +20 -0
  171. package/src/Slider/Bar.tsx +24 -0
  172. package/src/Slider/Factor.test.ts +48 -0
  173. package/src/Slider/Handle.tsx +121 -0
  174. package/src/Slider/Slider.test.tsx +25 -0
  175. package/src/Slider/Slider.tsx +91 -0
  176. package/src/Slider/Ticks.tsx +54 -0
  177. package/src/Slider/__snapshots__/Slider.test.tsx.snap +50 -0
  178. package/src/Slider/bar.scss +24 -0
  179. package/src/Slider/factor.ts +24 -0
  180. package/src/Slider/handle.scss +32 -0
  181. package/src/Slider/percentage.ts +67 -0
  182. package/src/Slider/range.ts +92 -0
  183. package/src/Slider/slider.scss +14 -0
  184. package/src/Slider/ticks.scss +28 -0
  185. package/src/Slider/variables.scss +16 -0
  186. package/src/StartStopButton/StartStopButton.tsx +60 -0
  187. package/src/StartStopButton/play-circle.svg +1 -0
  188. package/src/StartStopButton/start-stop-button.scss +47 -0
  189. package/src/StartStopButton/stop-circle.svg +1 -0
  190. package/src/StateSelector/StateSelector.tsx +64 -0
  191. package/src/StateSelector/state-selector.scss +38 -0
  192. package/src/Stepper/Stepper.tsx +139 -0
  193. package/src/Stepper/stepper.scss +127 -0
  194. package/src/Toggle/Toggle.tsx +120 -0
  195. package/src/Toggle/toggle.scss +109 -0
  196. package/src/bootstrap.scss +14 -0
  197. package/src/index.ts +146 -0
  198. package/src/logging/appTransport.test.ts +78 -0
  199. package/src/logging/appTransport.ts +41 -0
  200. package/src/logging/describeError.test.ts +38 -0
  201. package/src/logging/describeError.ts +56 -0
  202. package/src/logging/index.ts +103 -0
  203. package/src/logging/logBuffer.test.ts +41 -0
  204. package/src/logging/logBuffer.ts +24 -0
  205. package/src/logging/sendInitialLogMessages.ts +64 -0
  206. package/src/store.ts +60 -0
  207. package/src/svg.d.ts +15 -0
  208. package/src/utils/AppTypes.ts +60 -0
  209. package/src/utils/appDirs.ts +78 -0
  210. package/src/utils/bleChannels.ts +16 -0
  211. package/src/utils/classNames.test.ts +29 -0
  212. package/src/utils/classNames.ts +25 -0
  213. package/src/utils/colors.scss +46 -0
  214. package/src/utils/colors.ts +38 -0
  215. package/src/utils/describeVersion.ts +21 -0
  216. package/src/utils/environment.ts +6 -0
  217. package/src/utils/logLibVersions.ts +103 -0
  218. package/src/utils/open.ts +46 -0
  219. package/src/utils/packageJson.ts +60 -0
  220. package/src/utils/persistentStore.ts +144 -0
  221. package/src/utils/systemReport.ts +160 -0
  222. package/src/utils/truncateMiddle.test.ts +21 -0
  223. package/src/utils/truncateMiddle.ts +20 -0
  224. package/src/utils/usageData.ts +189 -0
  225. package/src/utils/useHotKey.ts +62 -0
  226. package/src/utils/useStopwatch.test.tsx +311 -0
  227. package/src/utils/useStopwatch.ts +140 -0
  228. package/src/variables.scss +820 -0
  229. package/styles.scss +88 -0
  230. package/test/dispatchTo.ts +23 -0
  231. package/test/index.ts +7 -0
  232. package/test/jestResolver.js +28 -0
  233. package/test/setupTests.ts +27 -0
  234. package/test/testUtil.ts +20 -0
  235. package/test/testrenderer.tsx +39 -0
  236. package/tsconfig.json +9 -0
  237. package/typings/externals.d.ts +31 -0
  238. package/typings/generated/main/index.d.ts +25 -0
  239. package/typings/generated/src/About/About.d.ts +4 -0
  240. package/typings/generated/src/About/AboutButton.d.ts +8 -0
  241. package/typings/generated/src/About/ApplicationCard.d.ts +3 -0
  242. package/typings/generated/src/About/DeviceCard.d.ts +3 -0
  243. package/typings/generated/src/About/DocumentationCard.d.ts +3 -0
  244. package/typings/generated/src/About/DocumentationSection.d.ts +9 -0
  245. package/typings/generated/src/About/Section.d.ts +8 -0
  246. package/typings/generated/src/About/ShortcutButton.d.ts +6 -0
  247. package/typings/generated/src/About/SupportCard.d.ts +3 -0
  248. package/typings/generated/src/About/documentationSlice.d.ts +12 -0
  249. package/typings/generated/src/About/shortcutSlice.d.ts +11 -0
  250. package/typings/generated/src/Alert/Alert.d.ts +10 -0
  251. package/typings/generated/src/App/App.d.ts +27 -0
  252. package/typings/generated/src/App/App.test.d.ts +1 -0
  253. package/typings/generated/src/App/ConnectedToStore.d.ts +7 -0
  254. package/typings/generated/src/App/VisibilityBar.d.ts +6 -0
  255. package/typings/generated/src/App/appLayout.d.ts +17 -0
  256. package/typings/generated/src/Button/Button.d.ts +13 -0
  257. package/typings/generated/src/Card/Card.d.ts +7 -0
  258. package/typings/generated/src/Device/BrokenDeviceDialog/BrokenDeviceDialog.d.ts +4 -0
  259. package/typings/generated/src/Device/BrokenDeviceDialog/brokenDeviceDialogSlice.d.ts +12 -0
  260. package/typings/generated/src/Device/DeviceSelector/BasicDeviceInfo.d.ts +11 -0
  261. package/typings/generated/src/Device/DeviceSelector/DeviceIcon.d.ts +7 -0
  262. package/typings/generated/src/Device/DeviceSelector/DeviceList/AnimatedList.d.ts +10 -0
  263. package/typings/generated/src/Device/DeviceSelector/DeviceList/BrokenDevice.d.ts +7 -0
  264. package/typings/generated/src/Device/DeviceSelector/DeviceList/Device.d.ts +10 -0
  265. package/typings/generated/src/Device/DeviceSelector/DeviceList/DeviceList.d.ts +10 -0
  266. package/typings/generated/src/Device/DeviceSelector/DeviceList/EditDeviceButtons.d.ts +9 -0
  267. package/typings/generated/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.d.ts +7 -0
  268. package/typings/generated/src/Device/DeviceSelector/DeviceList/RenameDevice.d.ts +6 -0
  269. package/typings/generated/src/Device/DeviceSelector/DeviceSelector.d.ts +20 -0
  270. package/typings/generated/src/Device/DeviceSelector/DeviceSelector.test.d.ts +1 -0
  271. package/typings/generated/src/Device/DeviceSelector/Favorite.d.ts +9 -0
  272. package/typings/generated/src/Device/DeviceSelector/SelectDevice.d.ts +8 -0
  273. package/typings/generated/src/Device/DeviceSelector/SelectedDevice.d.ts +7 -0
  274. package/typings/generated/src/Device/DeviceSetup/DeviceSetupView.d.ts +3 -0
  275. package/typings/generated/src/Device/deviceAutoSelectSlice.d.ts +28 -0
  276. package/typings/generated/src/Device/deviceInfo/deviceInfo.d.ts +18 -0
  277. package/typings/generated/src/Device/deviceLibWrapper.d.ts +8 -0
  278. package/typings/generated/src/Device/deviceLibWrapper.test.d.ts +1 -0
  279. package/typings/generated/src/Device/deviceLister.d.ts +25 -0
  280. package/typings/generated/src/Device/deviceLister.test.d.ts +2 -0
  281. package/typings/generated/src/Device/deviceSetup.d.ts +40 -0
  282. package/typings/generated/src/Device/deviceSetupSlice.d.ts +20 -0
  283. package/typings/generated/src/Device/deviceSlice.d.ts +30 -0
  284. package/typings/generated/src/Device/dfu-cc.d.ts +3 -0
  285. package/typings/generated/src/Device/initPacket.d.ts +109 -0
  286. package/typings/generated/src/Device/jprogOperations.d.ts +2 -0
  287. package/typings/generated/src/Device/sdfuOperations.d.ts +14 -0
  288. package/typings/generated/src/Dialog/Dialog.d.ts +64 -0
  289. package/typings/generated/src/Dialog/Dialog.test.d.ts +1 -0
  290. package/typings/generated/src/Dropdown/Dropdown.d.ts +16 -0
  291. package/typings/generated/src/Dropdown/Dropdown.test.d.ts +1 -0
  292. package/typings/generated/src/ErrorBoundary/ErrorBoundary.d.ts +26 -0
  293. package/typings/generated/src/ErrorBoundary/ErrorBoundary.test.d.ts +1 -0
  294. package/typings/generated/src/ErrorDialog/ErrorDialog.d.ts +4 -0
  295. package/typings/generated/src/ErrorDialog/ErrorDialog.test.d.ts +1 -0
  296. package/typings/generated/src/ErrorDialog/errorDialogSlice.d.ts +23 -0
  297. package/typings/generated/src/ErrorDialog/errorDialogSlice.test.d.ts +1 -0
  298. package/typings/generated/src/FactoryReset/FactoryResetButton.d.ts +12 -0
  299. package/typings/generated/src/FactoryReset/FactoryResetButton.test.d.ts +1 -0
  300. package/typings/generated/src/InlineInput/InlineInput.d.ts +14 -0
  301. package/typings/generated/src/InlineInput/NumberInlineInput.d.ts +12 -0
  302. package/typings/generated/src/Log/LogEntry.d.ts +7 -0
  303. package/typings/generated/src/Log/LogViewer.d.ts +5 -0
  304. package/typings/generated/src/Log/logSlice.d.ts +12 -0
  305. package/typings/generated/src/Log/syncLogToStore.d.ts +11 -0
  306. package/typings/generated/src/Logo/Logo.d.ts +6 -0
  307. package/typings/generated/src/Main/Main.d.ts +6 -0
  308. package/typings/generated/src/MasonryLayout/MasonryLayout.d.ts +14 -0
  309. package/typings/generated/src/NavBar/NavBar.d.ts +6 -0
  310. package/typings/generated/src/NavBar/NavMenu.d.ts +3 -0
  311. package/typings/generated/src/NavBar/NavMenu.test.d.ts +1 -0
  312. package/typings/generated/src/NavBar/NavMenuItem.d.ts +10 -0
  313. package/typings/generated/src/OpenApp/openApp.d.ts +7 -0
  314. package/typings/generated/src/Panes/FeedbackPane.d.ts +3 -0
  315. package/typings/generated/src/PseudoButton/PseudoButton.d.ts +10 -0
  316. package/typings/generated/src/SerialPort/ConflictingSettingsDialog.d.ts +13 -0
  317. package/typings/generated/src/SerialPort/SerialPort.d.ts +21 -0
  318. package/typings/generated/src/SerialPort/SerialPort.test.d.ts +1 -0
  319. package/typings/generated/src/Shortcuts/ShortcutItem.d.ts +8 -0
  320. package/typings/generated/src/Shortcuts/ShortcutModal.d.ts +8 -0
  321. package/typings/generated/src/SidePanel/Group.d.ts +16 -0
  322. package/typings/generated/src/SidePanel/SidePanel.d.ts +7 -0
  323. package/typings/generated/src/Slider/Bar.d.ts +7 -0
  324. package/typings/generated/src/Slider/Factor.test.d.ts +1 -0
  325. package/typings/generated/src/Slider/Handle.d.ts +13 -0
  326. package/typings/generated/src/Slider/Slider.d.ts +15 -0
  327. package/typings/generated/src/Slider/Slider.test.d.ts +1 -0
  328. package/typings/generated/src/Slider/Ticks.d.ts +12 -0
  329. package/typings/generated/src/Slider/factor.d.ts +1 -0
  330. package/typings/generated/src/Slider/percentage.d.ts +4 -0
  331. package/typings/generated/src/Slider/range.d.ts +13 -0
  332. package/typings/generated/src/StartStopButton/StartStopButton.d.ts +16 -0
  333. package/typings/generated/src/StateSelector/StateSelector.d.ts +15 -0
  334. package/typings/generated/src/Stepper/Stepper.d.ts +26 -0
  335. package/typings/generated/src/Toggle/Toggle.d.ts +19 -0
  336. package/typings/generated/src/index.d.ts +69 -0
  337. package/typings/generated/src/logging/appTransport.d.ts +12 -0
  338. package/typings/generated/src/logging/appTransport.test.d.ts +1 -0
  339. package/typings/generated/src/logging/describeError.d.ts +2 -0
  340. package/typings/generated/src/logging/describeError.test.d.ts +1 -0
  341. package/typings/generated/src/logging/index.d.ts +9 -0
  342. package/typings/generated/src/logging/logBuffer.d.ts +9 -0
  343. package/typings/generated/src/logging/logBuffer.test.d.ts +1 -0
  344. package/typings/generated/src/logging/sendInitialLogMessages.d.ts +2 -0
  345. package/typings/generated/src/store.d.ts +65 -0
  346. package/typings/generated/src/utils/AppTypes.d.ts +49 -0
  347. package/typings/generated/src/utils/appDirs.d.ts +35 -0
  348. package/typings/generated/src/utils/bleChannels.d.ts +6 -0
  349. package/typings/generated/src/utils/classNames.d.ts +17 -0
  350. package/typings/generated/src/utils/classNames.test.d.ts +1 -0
  351. package/typings/generated/src/utils/colors.d.ts +31 -0
  352. package/typings/generated/src/utils/describeVersion.d.ts +3 -0
  353. package/typings/generated/src/utils/environment.d.ts +1 -0
  354. package/typings/generated/src/utils/logLibVersions.d.ts +2 -0
  355. package/typings/generated/src/utils/open.d.ts +15 -0
  356. package/typings/generated/src/utils/packageJson.d.ts +4 -0
  357. package/typings/generated/src/utils/persistentStore.d.ts +35 -0
  358. package/typings/generated/src/utils/systemReport.d.ts +4 -0
  359. package/typings/generated/src/utils/truncateMiddle.d.ts +2 -0
  360. package/typings/generated/src/utils/truncateMiddle.test.d.ts +1 -0
  361. package/typings/generated/src/utils/usageData.d.ts +63 -0
  362. package/typings/generated/src/utils/useHotKey.d.ts +6 -0
  363. package/typings/generated/src/utils/useStopwatch.d.ts +22 -0
  364. package/typings/generated/src/utils/useStopwatch.test.d.ts +1 -0
  365. package/typings/generated/test/dispatchTo.d.ts +3 -0
  366. package/typings/generated/test/testrenderer.d.ts +5 -0
  367. package/typings/nrf-intel-hex.d.ts +58 -0
@@ -0,0 +1,89 @@
1
+ /*
2
+ * Copyright (c) 2015 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import { DeviceTraits } from '@nordicsemiconductor/nrf-device-lib-js';
8
+
9
+ import { hasValidDeviceTraits } from './deviceLister';
10
+
11
+ const allFalseDeviceTraits: DeviceTraits = {
12
+ usb: false,
13
+ nordicUsb: false,
14
+ nordicDfu: false,
15
+ seggerUsb: false,
16
+ jlink: false,
17
+ serialPorts: false,
18
+ broken: false,
19
+ mcuBoot: false,
20
+ modem: false,
21
+ };
22
+
23
+ const someTrueDeviceTraits1: DeviceTraits = {
24
+ usb: true,
25
+ nordicUsb: true,
26
+ nordicDfu: true,
27
+ seggerUsb: false,
28
+ jlink: false,
29
+ serialPorts: false,
30
+ broken: false,
31
+ mcuBoot: false,
32
+ modem: false,
33
+ };
34
+
35
+ const someTrueDeviceTraits2: DeviceTraits = {
36
+ usb: false,
37
+ nordicUsb: false,
38
+ nordicDfu: true,
39
+ seggerUsb: true,
40
+ jlink: true,
41
+ serialPorts: false,
42
+ broken: false,
43
+ mcuBoot: false,
44
+ modem: false,
45
+ };
46
+
47
+ const someTrueDeviceTraits3: DeviceTraits = {
48
+ usb: false,
49
+ nordicUsb: false,
50
+ nordicDfu: false,
51
+ seggerUsb: false,
52
+ jlink: false,
53
+ serialPorts: false,
54
+ broken: true,
55
+ mcuBoot: true,
56
+ modem: true,
57
+ };
58
+
59
+ describe('hasValidDeviceTraits Tests', () => {
60
+ test('filter all undefined should be valid', () => {
61
+ expect(hasValidDeviceTraits(allFalseDeviceTraits, {})).toBeTruthy();
62
+ expect(hasValidDeviceTraits(someTrueDeviceTraits1, {})).toBeTruthy();
63
+ });
64
+
65
+ test('filter all false should be valid', () => {
66
+ expect(
67
+ hasValidDeviceTraits(allFalseDeviceTraits, allFalseDeviceTraits)
68
+ ).toBeTruthy();
69
+ expect(
70
+ hasValidDeviceTraits(someTrueDeviceTraits1, allFalseDeviceTraits)
71
+ ).toBeTruthy();
72
+ });
73
+
74
+ test('deviceTraits complete mismatch invalid', () => {
75
+ expect(
76
+ hasValidDeviceTraits(someTrueDeviceTraits1, someTrueDeviceTraits3)
77
+ ).toBeFalsy();
78
+
79
+ expect(hasValidDeviceTraits({}, someTrueDeviceTraits3)).toBeFalsy();
80
+ });
81
+
82
+ test('deviceTraits with at lease one match is valid', () => {
83
+ expect(
84
+ hasValidDeviceTraits(someTrueDeviceTraits1, someTrueDeviceTraits2)
85
+ ).toBeTruthy();
86
+ });
87
+ });
88
+
89
+ export default null;
@@ -0,0 +1,396 @@
1
+ /*
2
+ * Copyright (c) 2015 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import nrfDeviceLib, {
8
+ Device as NrfdlDevice,
9
+ DeviceTraits,
10
+ HotplugEvent,
11
+ } from '@nordicsemiconductor/nrf-device-lib-js';
12
+
13
+ import logger from '../logging';
14
+ import type { AppDispatch, RootState } from '../store';
15
+ import {
16
+ clearWaitForDevice,
17
+ clearWaitForDeviceTimeout,
18
+ setArrivedButWrongWhen,
19
+ setDisconnectedTime,
20
+ setLastArrivedDeviceId,
21
+ setWaitForDeviceTimeout,
22
+ WaitForDevice,
23
+ } from './deviceAutoSelectSlice';
24
+ import { getDeviceLibContext } from './deviceLibWrapper';
25
+ import { closeDeviceSetupDialog } from './deviceSetupSlice';
26
+ import { addDevice, Device, removeDevice, setDevices } from './deviceSlice';
27
+ import { isDeviceInDFUBootloader } from './sdfuOperations';
28
+
29
+ let autoSelectDeviceCLISerialUsed = false;
30
+
31
+ const hasSameDeviceTraits = (
32
+ deviceTraits: DeviceTraits,
33
+ otherDeviceTraits: DeviceTraits
34
+ ) =>
35
+ Object.keys(otherDeviceTraits).every(
36
+ rule =>
37
+ deviceTraits[rule as keyof DeviceTraits] ===
38
+ otherDeviceTraits[rule as keyof DeviceTraits]
39
+ );
40
+
41
+ const shouldAutoReselect = (
42
+ addedDevice: Device,
43
+ globalAutoReselect: boolean,
44
+ autoReselectDevice?: Device,
45
+ disconnectionTime?: number,
46
+ currentSelectedDevice?: Device
47
+ ): boolean => {
48
+ // No device was selected when disconnection occurred
49
+ if (!autoReselectDevice) return false;
50
+
51
+ // device is still connected
52
+ if (disconnectionTime === undefined) return false;
53
+
54
+ // The device that was selected when disconnection occurred is not yet connected
55
+ if (addedDevice.serialNumber !== autoReselectDevice.serialNumber) {
56
+ return false;
57
+ }
58
+
59
+ // The device is already selected
60
+ if (
61
+ currentSelectedDevice?.serialNumber === autoReselectDevice.serialNumber
62
+ ) {
63
+ return false;
64
+ }
65
+
66
+ // Device does not have the same traits
67
+ if (!hasSameDeviceTraits(addedDevice.traits, autoReselectDevice.traits)) {
68
+ return false;
69
+ }
70
+
71
+ return globalAutoReselect;
72
+ };
73
+
74
+ const initAutoReconnectTimeout =
75
+ (onTimeout: () => void, waitForDevice: WaitForDevice) =>
76
+ (dispatch: AppDispatch) => {
77
+ const timeout = waitForDevice.timeout;
78
+
79
+ dispatch(
80
+ setWaitForDeviceTimeout(
81
+ setTimeout(() => {
82
+ dispatch(closeDeviceSetupDialog());
83
+ if (waitForDevice?.onFail)
84
+ waitForDevice?.onFail(
85
+ `Failed to detect device after reboot. Timed out after ${
86
+ timeout / 1000
87
+ } seconds.`
88
+ );
89
+ dispatch(clearWaitForDeviceTimeout());
90
+ onTimeout();
91
+ logger.warn(
92
+ `Failed to detect device after reboot. Timed out after ${
93
+ timeout / 1000
94
+ } seconds.`
95
+ );
96
+ }, timeout)
97
+ )
98
+ );
99
+ };
100
+
101
+ let hotplugTaskId: bigint | null = null;
102
+
103
+ /**
104
+ * Wrap the device form nrf-device-lib to make the Device type consistent
105
+ *
106
+ * @param {Device} device The input device from nrf-device-lib
107
+ * @returns {Device} The updated device
108
+ */
109
+ export const wrapDeviceFromNrfdl = (device: NrfdlDevice): Device => ({
110
+ ...device,
111
+ boardVersion: device.jlink?.boardVersion ?? undefined,
112
+ serialport: device.serialPorts?.[0] ?? undefined,
113
+ serialNumber: device.serialNumber ?? `fallback-serialnumber-${device.id}`,
114
+ });
115
+
116
+ /**
117
+ * Wrap the device form nrf-device-lib to make the Device type consistent
118
+ *
119
+ * @param {Device[]} devices The input devices from nrf-device-lib
120
+ * @returns {Device[]} The updated devices
121
+ */
122
+ export const wrapDevicesFromNrfdl = (devices: NrfdlDevice[]): Device[] =>
123
+ devices.map(wrapDeviceFromNrfdl);
124
+
125
+ export const hasValidDeviceTraits = (
126
+ deviceTraits: DeviceTraits,
127
+ requiredTraits: DeviceTraits
128
+ ) =>
129
+ Object.keys(requiredTraits).some(
130
+ rule =>
131
+ deviceTraits[rule as keyof DeviceTraits] &&
132
+ requiredTraits[rule as keyof DeviceTraits]
133
+ ) ||
134
+ Object.keys(requiredTraits).every(
135
+ rule => requiredTraits[rule as keyof DeviceTraits] === false
136
+ );
137
+
138
+ /*
139
+ * Starts watching for devices with the given traits. See the nrf-device-lib
140
+ * library for available traits. Whenever devices are attached/detached, this
141
+ * will dispatch AddDevice or removeDevice and trigger events.
142
+ */
143
+ export const startWatchingDevices =
144
+ (
145
+ deviceListing: DeviceTraits,
146
+ onDeviceConnected: (device: Device) => void,
147
+ onDeviceDisconnected: (device: Device) => void,
148
+ onDeviceDeselected: () => void,
149
+ doSelectDevice: (device: Device, autoReselected: boolean) => void
150
+ ) =>
151
+ async (dispatch: AppDispatch, getState: () => RootState) => {
152
+ const updateDeviceList = (event: HotplugEvent) => {
153
+ const removeDeviceFromList = (remove: Device) => {
154
+ if (
155
+ remove.serialNumber ===
156
+ getState().device.selectedSerialNumber
157
+ ) {
158
+ onDeviceDeselected();
159
+ }
160
+
161
+ if (
162
+ remove.serialNumber ===
163
+ getState().device.selectedSerialNumber &&
164
+ !getState().deviceAutoSelect.waitForDevice
165
+ ) {
166
+ dispatch(closeDeviceSetupDialog());
167
+ }
168
+
169
+ if (!getState().deviceAutoSelect.arrivedButWrongWhen) {
170
+ dispatch(removeDevice(remove));
171
+ onDeviceDisconnected(remove);
172
+ }
173
+ };
174
+
175
+ switch (event.event_type) {
176
+ case 'NRFDL_DEVICE_EVENT_ARRIVED':
177
+ if (!event.device) {
178
+ return;
179
+ }
180
+ if (
181
+ hasValidDeviceTraits(
182
+ event.device?.traits,
183
+ deviceListing
184
+ )
185
+ ) {
186
+ const device = wrapDeviceFromNrfdl(event.device);
187
+ if (
188
+ !getState().device.devices.has(device.serialNumber)
189
+ ) {
190
+ onDeviceConnected(device);
191
+ }
192
+
193
+ const sn = getState().device.selectedSerialNumber;
194
+ const disconnectionTime =
195
+ getState().deviceAutoSelect.disconnectionTime;
196
+ const autoSelectDevice =
197
+ getState().deviceAutoSelect.device;
198
+ const selectedDevice =
199
+ sn !== null
200
+ ? getState().device.devices.get(sn)
201
+ : undefined;
202
+
203
+ const result = shouldAutoReselect(
204
+ device,
205
+ getState().deviceAutoSelect.autoReselect,
206
+ autoSelectDevice,
207
+ disconnectionTime,
208
+ selectedDevice
209
+ );
210
+
211
+ dispatch(addDevice(device));
212
+ const deviceWithPersistedData =
213
+ getState().device.devices.get(device.serialNumber);
214
+
215
+ if (!deviceWithPersistedData) return;
216
+
217
+ if (result) {
218
+ logger.info(
219
+ `Auto Reconnecting Device SN: ${deviceWithPersistedData.serialNumber}`
220
+ );
221
+ doSelectDevice(deviceWithPersistedData, true);
222
+ } else if (
223
+ deviceWithPersistedData.serialNumber ===
224
+ getState().deviceAutoSelect.device?.serialNumber
225
+ ) {
226
+ const waitForDevice =
227
+ getState().deviceAutoSelect.waitForDevice;
228
+
229
+ // Device lib might fail to advertise that a device has left before it rejoins (Mainly OSx)
230
+ // but we still need to trigger the onSuccess if a device 'reappeared' with a different 'id'
231
+ // and there is an outstanding waitForDevice Request. In this case the disconnectionTime was
232
+ // never set (as NRFDL_DEVICE_EVENT_LEFT was never sent) This created an additional problem as device
233
+ // lib may advertise the the same device with a single connect event. Hance we are keeping track of
234
+ // the device ID which is guaranteed to be change if a is disconnected and reconnected (for the
235
+ // same hotplug event listener) to ensure we only call the onSuccess once for every reconnect event.
236
+ // This is mostly relevant when 'when' is always
237
+
238
+ // Device is to be reconnected as timeout is provided
239
+ if (
240
+ waitForDevice &&
241
+ ((disconnectionTime === undefined &&
242
+ getState().deviceAutoSelect
243
+ .lastArrivedDeviceId !==
244
+ deviceWithPersistedData.id) ||
245
+ (disconnectionTime ?? 0) +
246
+ waitForDevice.timeout >=
247
+ Date.now())
248
+ ) {
249
+ if (
250
+ waitForDevice.when === 'always' ||
251
+ (waitForDevice.when ===
252
+ 'dfuBootLoaderMode' &&
253
+ isDeviceInDFUBootloader(
254
+ deviceWithPersistedData
255
+ )) ||
256
+ (waitForDevice.when === 'applicationMode' &&
257
+ deviceWithPersistedData.dfuTriggerInfo !==
258
+ null) ||
259
+ (selectedDevice &&
260
+ waitForDevice.when === 'sameTraits' &&
261
+ hasSameDeviceTraits(
262
+ device.traits,
263
+ selectedDevice.traits
264
+ )) ||
265
+ (typeof waitForDevice.when === 'function' &&
266
+ waitForDevice.when(device))
267
+ ) {
268
+ dispatch(
269
+ setLastArrivedDeviceId(
270
+ deviceWithPersistedData.id
271
+ )
272
+ );
273
+ dispatch(setDisconnectedTime(undefined));
274
+
275
+ logger.info(
276
+ 'Wait For Device was successfully'
277
+ );
278
+
279
+ if (waitForDevice.once) {
280
+ dispatch(clearWaitForDevice());
281
+ } else {
282
+ dispatch(clearWaitForDeviceTimeout());
283
+ }
284
+
285
+ if (waitForDevice.onSuccess)
286
+ waitForDevice.onSuccess(
287
+ deviceWithPersistedData
288
+ );
289
+ } else {
290
+ dispatch(setArrivedButWrongWhen(true));
291
+ }
292
+ }
293
+ }
294
+ }
295
+ break;
296
+ case 'NRFDL_DEVICE_EVENT_LEFT':
297
+ {
298
+ const devices = getState().device.devices;
299
+
300
+ devices.forEach(device => {
301
+ if (device.id === event.device_id) {
302
+ const waitForDevice =
303
+ getState().deviceAutoSelect.waitForDevice;
304
+ if (
305
+ device.serialNumber ===
306
+ getState().deviceAutoSelect.device
307
+ ?.serialNumber
308
+ ) {
309
+ if (waitForDevice) {
310
+ dispatch(
311
+ setArrivedButWrongWhen(undefined)
312
+ );
313
+
314
+ dispatch(
315
+ initAutoReconnectTimeout(
316
+ () =>
317
+ removeDeviceFromList(
318
+ device
319
+ ),
320
+ waitForDevice
321
+ )
322
+ );
323
+ } else {
324
+ removeDeviceFromList(device);
325
+ }
326
+
327
+ dispatch(setDisconnectedTime(Date.now()));
328
+ } else {
329
+ removeDeviceFromList(device);
330
+ }
331
+ }
332
+ });
333
+ }
334
+ break;
335
+ }
336
+ };
337
+
338
+ try {
339
+ stopWatchingDevices();
340
+ const nrfdlDevices = await nrfDeviceLib.enumerate(
341
+ getDeviceLibContext(),
342
+ deviceListing
343
+ );
344
+
345
+ const currentDevices = wrapDevicesFromNrfdl(nrfdlDevices);
346
+ dispatch(setDevices(currentDevices));
347
+
348
+ if (!autoSelectDeviceCLISerialUsed) {
349
+ const autoSelectSN = getAutoSelectDeviceCLISerial();
350
+
351
+ if (autoSelectSN !== undefined) {
352
+ const autoSelectDevice =
353
+ getState().device.devices.get(autoSelectSN);
354
+
355
+ if (autoSelectDevice)
356
+ doSelectDevice(autoSelectDevice, true);
357
+ }
358
+ autoSelectDeviceCLISerialUsed = true;
359
+ }
360
+
361
+ hotplugTaskId = nrfDeviceLib.startHotplugEvents(
362
+ getDeviceLibContext(),
363
+ () => {},
364
+ updateDeviceList
365
+ );
366
+ } catch (error) {
367
+ logger.logError(
368
+ 'Error while probing devices, more details in the debug log',
369
+ error
370
+ );
371
+ }
372
+ };
373
+
374
+ const getAutoSelectDeviceCLISerial = () => {
375
+ const { argv } = process;
376
+ const serialIndex = argv.findIndex(arg => arg === '--deviceSerial');
377
+ return serialIndex > -1 ? argv[serialIndex + 1] : undefined;
378
+ };
379
+
380
+ /**
381
+ * Stops watching for devices.
382
+ *
383
+ * @returns {undefined}
384
+ */
385
+ export const stopWatchingDevices = () => {
386
+ // Not sure, if this guard clause is really needed
387
+ if (getDeviceLibContext() && hotplugTaskId !== null) {
388
+ try {
389
+ // @ts-expect-error Type will be updated in device-lib-js
390
+ nrfDeviceLib.stopHotplugEvents(hotplugTaskId);
391
+ hotplugTaskId = null;
392
+ } catch (error) {
393
+ logger.logError('Error while stopping to watch devices', error);
394
+ }
395
+ }
396
+ };