@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,160 @@
1
+ /*
2
+ * Copyright (c) 2105 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import nrfDeviceLib from '@nordicsemiconductor/nrf-device-lib-js';
8
+ import fs from 'fs';
9
+ import { EOL } from 'os';
10
+ import path from 'path';
11
+ import pretty from 'prettysize';
12
+ import type Systeminformation from 'systeminformation';
13
+
14
+ import {
15
+ deviceInfo as getDeviceInfo,
16
+ productPageUrl,
17
+ } from '../Device/deviceInfo/deviceInfo';
18
+ import {
19
+ getDeviceLibContext,
20
+ getModuleVersion,
21
+ } from '../Device/deviceLibWrapper';
22
+ import { Device } from '../Device/deviceSlice';
23
+ import logger from '../logging';
24
+ import { getAppDataDir } from './appDirs';
25
+ import describeVersion from './describeVersion';
26
+ import { openFile } from './open';
27
+
28
+ const generalInfoReport = async () => {
29
+ // eslint-disable-next-line global-require
30
+ const si = require('systeminformation') as typeof Systeminformation;
31
+ const [
32
+ { manufacturer, model },
33
+ { vendor, version },
34
+ { platform, distro, release, arch },
35
+ { kernel, git, node, python, python3 },
36
+ {
37
+ manufacturer: cpuManufacturer,
38
+ brand,
39
+ speed,
40
+ cores,
41
+ physicalCores,
42
+ processors,
43
+ },
44
+ { total, free },
45
+ fsSize,
46
+ ] = await Promise.all([
47
+ si.system(),
48
+ si.bios(),
49
+ si.osInfo(),
50
+ si.versions(),
51
+ si.cpu(),
52
+ si.mem(),
53
+ si.fsSize(),
54
+ ]);
55
+
56
+ const versions = await nrfDeviceLib.getModuleVersions(
57
+ getDeviceLibContext()
58
+ );
59
+
60
+ return [
61
+ `- System: ${manufacturer} ${model}`,
62
+ `- BIOS: ${vendor} ${version}`,
63
+ `- CPU: ${processors} x ${cpuManufacturer} ${brand} ${speed} GHz` +
64
+ ` ${cores} cores (${physicalCores} physical)`,
65
+ `- Memory: ${pretty(free)} free of ${pretty(total)} total`,
66
+ `- Filesystem: ${fsSize[0].fs} (${fsSize[0].type})` +
67
+ ` ${pretty(Number(fsSize[0].size) || 0)}` +
68
+ ` ${fsSize[0].use.toFixed(1)}% used`,
69
+ '',
70
+ `- OS: ${distro} (${release}) ${platform} ${arch}`,
71
+ '',
72
+ '- Versions',
73
+ ` - kernel: ${kernel}`,
74
+ ` - git: ${git}`,
75
+ ` - node: ${node}`,
76
+ ` - python: ${python}`,
77
+ ` - python3: ${python3}`,
78
+ ` - nrf-device-lib-js: ${describeVersion(
79
+ getModuleVersion('nrfdl-js', versions)
80
+ )}`,
81
+ ` - nrf-device-lib: ${describeVersion(
82
+ getModuleVersion('nrfdl', versions)
83
+ )}`,
84
+ ` - nrfjprog DLL: ${describeVersion(
85
+ getModuleVersion('jprog', versions)
86
+ )}`,
87
+ ` - JLink: ${describeVersion(
88
+ getModuleVersion('JlinkARM', versions)
89
+ )}`,
90
+ '',
91
+ ];
92
+ };
93
+
94
+ const allDevicesReport = (allDevices: Device[] = []) => [
95
+ '- Connected devices:',
96
+ ...allDevices.map(
97
+ d =>
98
+ ` - ${d.serialNumber} ${d.boardVersion || ''}: ${d.serialPorts
99
+ ?.map(s => s.comName)
100
+ .join(', ')}`
101
+ ),
102
+ '',
103
+ ];
104
+
105
+ const currentDeviceReport = (device?: Device, currentSerialNumber?: string) => {
106
+ if (device == null) {
107
+ return [];
108
+ }
109
+
110
+ const deviceInfo = getDeviceInfo(device);
111
+
112
+ return [
113
+ '- Current device:',
114
+ ` - name: ${deviceInfo.name}`,
115
+ ` - serialNumber: ${currentSerialNumber}`,
116
+ ` - cores: ${deviceInfo.cores ?? 'Unknown'}`,
117
+ ` - website: ${productPageUrl(device) ?? 'Unknown'}`,
118
+ '',
119
+ ];
120
+ };
121
+
122
+ export const generateSystemReport = async (
123
+ timestamp: string,
124
+ allDevices?: Device[],
125
+ currentDevice?: Device,
126
+ currentSerialNumber?: string
127
+ ) =>
128
+ [
129
+ `# nRFConnect System Report - ${timestamp}`,
130
+ '',
131
+ ...(await generalInfoReport()),
132
+ ...allDevicesReport(allDevices),
133
+ ...currentDeviceReport(currentDevice, currentSerialNumber),
134
+ ].join(EOL);
135
+
136
+ export default async (
137
+ allDevices: Device[],
138
+ currentSerialNumber: string,
139
+ currentDevice: Device | null
140
+ ) => {
141
+ logger.info('Generating system report...');
142
+ const timestamp = new Date().toISOString().replace(/:/g, '-');
143
+ const report = await generateSystemReport(
144
+ timestamp,
145
+ allDevices,
146
+ currentDevice ?? undefined,
147
+ currentSerialNumber
148
+ );
149
+
150
+ const fileName = `nrfconnect-system-report-${timestamp}.txt`;
151
+ const filePath = path.resolve(getAppDataDir(), fileName);
152
+
153
+ try {
154
+ fs.writeFileSync(filePath, report);
155
+ logger.info(`System report: ${filePath}`);
156
+ openFile(filePath);
157
+ } catch (error) {
158
+ logger.logError('Failed to generate system report', error);
159
+ }
160
+ };
@@ -0,0 +1,21 @@
1
+ /*
2
+ * Copyright (c) 2015 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import { truncateMiddle } from './truncateMiddle';
8
+
9
+ test('truncate strings when necessary', () => {
10
+ expect(
11
+ truncateMiddle('some long string with more than 36 characters')
12
+ ).toBe('some long string wit...36 characters');
13
+
14
+ expect(truncateMiddle('short string')).toBe('short string');
15
+
16
+ expect(truncateMiddle('string with 20 chars')).toBe('string with 20 chars');
17
+
18
+ expect(truncateMiddle('abc123def', 3, 3)).toBe('abc123def');
19
+
20
+ expect(truncateMiddle('abc1234efg', 3, 3)).toBe('abc...efg');
21
+ });
@@ -0,0 +1,20 @@
1
+ /*
2
+ * Copyright (c) 2015 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ const truncateMiddle = (str: string, clipStart = 20, clipEnd = 13) => {
8
+ const clipStartWithEllipsis = clipStart + 3;
9
+ if (str.length <= clipStartWithEllipsis + clipEnd) {
10
+ return str;
11
+ }
12
+ const rightHandStartingPoint =
13
+ str.length - Math.min(clipEnd, str.length - clipStartWithEllipsis);
14
+ return `${str.substring(0, clipStart)}...${str.substring(
15
+ rightHandStartingPoint,
16
+ str.length
17
+ )}`;
18
+ };
19
+
20
+ export { truncateMiddle };
@@ -0,0 +1,189 @@
1
+ /*
2
+ * Copyright (c) 2105 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import reactGA from 'react-ga';
8
+ import type Systeminformation from 'systeminformation';
9
+
10
+ import logger from '../logging';
11
+ import { PackageJson } from './AppTypes';
12
+ import { isDevelopment } from './environment';
13
+ import {
14
+ deleteIsSendingUsageData,
15
+ getIsSendingUsageData,
16
+ getUsageDataClientId,
17
+ persistIsSendingUsageData,
18
+ } from './persistentStore';
19
+
20
+ const trackId = 'UA-22498474-5';
21
+ const categoryName = () =>
22
+ isDevelopment ? `${appJson.name}-dev` : appJson.name;
23
+
24
+ interface EventAction {
25
+ action: string;
26
+ label?: string;
27
+ }
28
+
29
+ let initialized = false;
30
+ let appJson: PackageJson;
31
+ let eventQueue: EventAction[] = [];
32
+
33
+ /**
34
+ * Initialize instance to send user data
35
+ * @param {*} packageJson the app's package json
36
+ *
37
+ * @returns {Promise<void>} void
38
+ */
39
+ export const init = (packageJson: PackageJson) => {
40
+ appJson = packageJson;
41
+
42
+ if (!getIsSendingUsageData()) return;
43
+
44
+ setTimeout(async () => {
45
+ const clientId = getUsageDataClientId();
46
+
47
+ logger.debug(`Client Id: ${clientId}`);
48
+
49
+ reactGA.initialize(trackId, {
50
+ debug: false,
51
+ titleCase: false,
52
+ gaOptions: {
53
+ storage: 'none',
54
+ storeGac: false,
55
+ clientId,
56
+ },
57
+ });
58
+
59
+ reactGA.set({
60
+ checkProtocolTask: null,
61
+ // According to Nordic Personal Data Processing Protocol for nRF Connect for Desktop
62
+ // https://projecttools.nordicsemi.no/confluence/display/ISMS/nRF+Connect+for+Desktop
63
+ // we set ip as anonymized in Google Analytics as described on page
64
+ // https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#anonymizeIp
65
+ anonymizeIp: true,
66
+ });
67
+
68
+ reactGA.pageview(appJson.name);
69
+
70
+ // eslint-disable-next-line global-require
71
+ const si = require('systeminformation') as typeof Systeminformation;
72
+ sendUsageData('architecture', (await si.osInfo()).arch);
73
+
74
+ initialized = true;
75
+ logger.debug(
76
+ `Google Analytics for category ${categoryName()} has initialized`
77
+ );
78
+ }, 5000); // Add 5 second delay to prevent inital rendering from beeing frozen.
79
+ };
80
+
81
+ /**
82
+ * Checks if usage report instance is initialized and ready to be sent
83
+ *
84
+ * @returns {Boolean} returns whether the setting is on, off or undefined
85
+ */
86
+ export const isInitialized = () => {
87
+ logger.debug(
88
+ `Usage report instance is${initialized ? '' : ' not'} initialized`
89
+ );
90
+ return initialized;
91
+ };
92
+
93
+ /**
94
+ * Check the status of usage data
95
+ *
96
+ * @returns {Boolean | undefined} returns whether the setting is on, off or undefined
97
+ */
98
+ export const isEnabled = () => {
99
+ const isSendingUsageData = getIsSendingUsageData();
100
+ logger.debug(`Usage data is ${isSendingUsageData}`);
101
+ return isSendingUsageData;
102
+ };
103
+
104
+ /**
105
+ * Enable sending usage data
106
+ *
107
+ * @returns {void}
108
+ */
109
+ export const enable = () => {
110
+ persistIsSendingUsageData(true);
111
+ logger.debug('Usage data has enabled');
112
+ };
113
+
114
+ /**
115
+ * Disable sending usage data
116
+ *
117
+ * @returns {void}
118
+ */
119
+ export const disable = () => {
120
+ persistIsSendingUsageData(false);
121
+ logger.debug('Usage data has disabled');
122
+ };
123
+
124
+ /**
125
+ * Reset settings so that launcher is able to
126
+ * ask the user to enable or disable sending usage data
127
+ *
128
+ * @returns {void}
129
+ */
130
+ export const reset = () => {
131
+ deleteIsSendingUsageData();
132
+ logger.debug('Usage data has reset');
133
+ };
134
+
135
+ /**
136
+ * Send event
137
+ * @param {EventAction} event the event to send
138
+ *
139
+ * @returns {void}
140
+ */
141
+ const sendEvent = ({ action, label }: EventAction) => {
142
+ const isSendingUsageData = getIsSendingUsageData();
143
+ const category = categoryName();
144
+
145
+ if (isSendingUsageData) {
146
+ const data = JSON.stringify({ category, action, label });
147
+ logger.debug(`Sending usage data ${data}`);
148
+ reactGA.event({ category, action, label });
149
+ }
150
+ };
151
+
152
+ /**
153
+ * Send usage data event to Google Analytics
154
+ * @param {string} action The event action
155
+ * @param {string} label The event label
156
+ * @returns {void}
157
+ */
158
+ export const sendUsageData = <T extends string>(action: T, label?: string) => {
159
+ eventQueue.push({ action, label });
160
+ if (!initialized) {
161
+ return;
162
+ }
163
+ eventQueue.forEach(sendEvent);
164
+ eventQueue = [];
165
+ };
166
+
167
+ /**
168
+ * Send error usage data event to Google Analytics and also show it in the logger view
169
+ * @param {string} error The event action
170
+ * @returns {void}
171
+ */
172
+ export const sendErrorReport = (error: string) => {
173
+ logger.error(error);
174
+ sendUsageData(
175
+ 'Report error',
176
+ `${process.platform}; ${process.arch}; v${appJson?.version}; ${error}`
177
+ );
178
+ };
179
+
180
+ export default {
181
+ disable,
182
+ enable,
183
+ init,
184
+ isEnabled,
185
+ isInitialized,
186
+ reset,
187
+ sendErrorReport,
188
+ sendUsageData,
189
+ };
@@ -0,0 +1,62 @@
1
+ /*
2
+ * Copyright (c) 2015 Nordic Semiconductor ASA
3
+ *
4
+ * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
+ */
6
+
7
+ import { DependencyList, useEffect } from 'react';
8
+ import { useDispatch } from 'react-redux';
9
+ import Mousetrap from 'mousetrap';
10
+
11
+ import { addShortcut, removeShortcut, Shortcut } from '../About/shortcutSlice';
12
+ import { sendUsageData } from './usageData';
13
+
14
+ const useNewHotKey = (shortcut: Shortcut, deps: DependencyList = []) => {
15
+ const dispatch = useDispatch();
16
+ useEffect(() => {
17
+ dispatch(addShortcut(shortcut));
18
+
19
+ Mousetrap.bind(shortcut.hotKey, (_e, combo) => {
20
+ shortcut.action();
21
+ sendUsageData('Pressed hotkey', combo);
22
+ });
23
+
24
+ return () => {
25
+ dispatch(removeShortcut(shortcut));
26
+
27
+ Mousetrap.unbind(shortcut.hotKey);
28
+ };
29
+ // eslint-disable-next-line react-hooks/exhaustive-deps
30
+ }, deps);
31
+ };
32
+ const useLegacyHotKey = (hotKey: string | string[], action: () => void) => {
33
+ console.warn(
34
+ `Defining a hot key for '${hotKey}' using a legacy API. ` +
35
+ 'Please update the app (or tell the app author to update it to ' +
36
+ 'the latest API).'
37
+ );
38
+
39
+ useNewHotKey({
40
+ hotKey,
41
+ title: 'Legacy shortcut',
42
+ isGlobal: false,
43
+ action,
44
+ });
45
+ };
46
+
47
+ const isUsingLegacyHotkey = (
48
+ args: unknown[]
49
+ ): args is Parameters<typeof useLegacyHotKey> =>
50
+ args.length === 2 && typeof args[1] === 'function';
51
+
52
+ export default (
53
+ ...args:
54
+ | Parameters<typeof useNewHotKey>
55
+ | Parameters<typeof useLegacyHotKey>
56
+ ) => {
57
+ if (isUsingLegacyHotkey(args)) {
58
+ useLegacyHotKey(...args);
59
+ } else {
60
+ useNewHotKey(...args);
61
+ }
62
+ };